diff --git a/.claude/commands/normalize-license-field.md b/.claude/commands/normalize-license-field.md new file mode 100644 index 0000000..9f2c51c --- /dev/null +++ b/.claude/commands/normalize-license-field.md @@ -0,0 +1,106 @@ +# Normalize the License Field + +Rebuild the `License:` field in the spec file from the `%{cargo_license_summary}` +comment block so both are in sync and the SPDX expression is canonically ordered. + +Run this any time the comment block has been updated with fresh `cargo license +--summary` output, or when the License field and comment block have drifted apart. + +--- + +## Step 1: Extract the Comment Block + +Read every `# ` line from the comment block above the `License:` field +(the block between the `# output of %%{cargo_license_summary}.` line and the +`License:` field). + +## Step 2: Normalize Each Entry + +For each entry, sort all license identifiers within every OR or AND expression +alphabetically to produce its canonical form: + +| Raw (cargo output) | Canonical | +|------------------------------------------------------------|------------------------------------------------------------| +| `MIT OR Apache-2.0` | `Apache-2.0 OR MIT` | +| `0BSD OR MIT OR Apache-2.0` | `0BSD OR Apache-2.0 OR MIT` | +| `MIT OR Zlib OR Apache-2.0` | `Apache-2.0 OR MIT OR Zlib` | +| `MIT AND BSD-3-Clause` | `BSD-3-Clause AND MIT` | +| `Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT` | `Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT` | +| `CC0-1.0 OR Apache-2.0 OR Apache-2.0 WITH LLVM-exception` | `Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR CC0-1.0` | + +## Step 3: Deduplicate + +After canonicalizing, discard any entry whose canonical form has already been +seen. Common sources of duplicates in cargo output: + +- `Apache-2.0 OR MIT` and `MIT OR Apache-2.0` → keep one +- `BSD-3-Clause AND MIT` and `MIT AND BSD-3-Clause` → keep one +- Multiple word-order variants of the same triple (e.g. `Apache-2.0 OR MIT OR + Zlib`, `MIT OR Zlib OR Apache-2.0`, `Zlib OR Apache-2.0 OR MIT`) → keep one + +## Step 4: Classify Each Unique Entry + +**Simple OR** — two or more licenses joined by OR; will be wrapped in parens: +- `Apache-2.0 OR MIT` → `(Apache-2.0 OR MIT)` + +**Simple AND** — two licenses both required (cargo uses AND when there is no +choice); will be wrapped in parens: +- `BSD-3-Clause AND MIT` → `(BSD-3-Clause AND MIT)` +- `Apache-2.0 AND ISC` → `(Apache-2.0 AND ISC)` + +> **Critical:** if cargo says AND, the License field must say AND. Never convert +> AND to OR — they carry different legal obligations. + +**Standalone** — a single license identifier; no parens needed: +- `Apache-2.0`, `ISC`, `bzip2-1.0.6` + +**Compound AND with OR sub-expression** — entries like +`(Apache-2.0 OR MIT) AND BSD-3-Clause`. Do **not** add these as compound terms; +their component licenses are already covered as separate entries. Discard after +confirming all components are present in the list. + +## Step 5: Sort + +Sort all entries by their inner expression text (strip outer parens for the sort +key) using strict ASCII byte order: + +``` +( < 0-9 < A-Z < a-z +``` + +Practical consequences: +- Entries starting with a digit (`0BSD`) sort before uppercase letters +- Entries starting with a lowercase letter (`bzip2-1.0.6`) sort **after** all + uppercase entries — `bzip2-1.0.6` comes after `Zlib`, not between `BSL-1.0` + and `CC0-1.0` +- Among entries sharing the same prefix, the shorter one sorts first: + `Apache-2.0` → `Apache-2.0 AND ISC` → `Apache-2.0 OR ...` +- AND sorts before OR at the same prefix level (`A` < `O`) + +## Step 6: Write the License Field + +Replace the existing `License:` block with the sorted entries using the spec's +`%{shrink:}` pattern. The first entry has no `AND ` prefix; every subsequent +entry is prefixed with `AND `: + +``` +License: %{shrink: + (0BSD OR Apache-2.0 OR MIT) + AND Apache-2.0 + AND (Apache-2.0 AND ISC) + AND (Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR CC0-1.0) + ... + AND Zlib + AND bzip2-1.0.6 + } +``` + +## Step 7: Verify + +Compare the new field against the old one and account for every difference: + +- **Entry removed** — confirm no matching comment block entry exists (stale from + a prior version) +- **Entry added** — confirm it maps to a comment block entry +- **AND ↔ OR change** — always a substantive correction; note it explicitly +- **Reordered only** — cosmetic, no action needed diff --git a/0000-Add-tui-feature-flag-for-tui-command.patch b/0000-Add-tui-feature-flag-for-tui-command.patch deleted file mode 100644 index 1afe021..0000000 --- a/0000-Add-tui-feature-flag-for-tui-command.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 456e4d96d5f9822bdfb0a14e67feef6fcda964cb Mon Sep 17 00:00:00 2001 -From: Rodolfo Olivieri -Date: Tue, 26 May 2026 16:12:25 -0300 -Subject: [PATCH] feat: add `tui` feature flag to gate the tui command - -Allow downstream builds to exclude the `tui` CLI subcommand by -disabling the `tui` feature flag. The feature is enabled by default -and in `portable-default`. - -Signed-off-by: Rodolfo Olivieri ---- - crates/goose-cli/Cargo.toml | 4 +++- - crates/goose-cli/src/cli.rs | 3 +++ - crates/goose-cli/src/commands/mod.rs | 1 + - 3 files changed, 7 insertions(+), 1 deletion(-) - -diff --git a/crates/goose-cli/Cargo.toml b/crates/goose-cli/Cargo.toml -index 0a93aa2191fc..e6c704e7aaa8 100644 ---- a/crates/goose-cli/Cargo.toml -+++ b/crates/goose-cli/Cargo.toml -@@ -73,6 +73,7 @@ winapi = { workspace = true } - default = [ - "code-mode", - "local-inference", -+ "tui", - "aws-providers", - "telemetry", - "nostr", -@@ -90,8 +91,9 @@ telemetry = ["goose/telemetry"] - nostr = ["goose/nostr"] - otel = ["goose/otel"] - system-keyring = ["goose/system-keyring"] -+tui = [] - update = ["dep:sigstore-verify"] --portable-default = ["rustls-tls", "aws-providers", "telemetry", "otel"] -+portable-default = ["rustls-tls", "aws-providers", "telemetry", "otel", "tui"] - # disables the update command - disable-update = [] - rustls-tls = [ -diff --git a/crates/goose-cli/src/cli.rs b/crates/goose-cli/src/cli.rs -index 0615d8ac3806..351618f62a4b 100644 ---- a/crates/goose-cli/src/cli.rs -+++ b/crates/goose-cli/src/cli.rs -@@ -971,6 +971,7 @@ enum Command { - }, - - /// Launch the goose terminal UI (TUI) -+ #[cfg(feature = "tui")] - #[command( - about = "Launch the goose terminal UI", - long_about = "Launch the goose terminal UI (the @aaif/goose npm package).\n\ -@@ -1275,6 +1276,7 @@ fn get_command_name(command: &Option) -> &'static str { - Some(Command::Recipe { .. }) => "recipe", - Some(Command::Plugin { .. }) => "plugin", - Some(Command::Term { .. }) => "term", -+ #[cfg(feature = "tui")] - Some(Command::Tui { .. }) => "tui", - #[cfg(feature = "local-inference")] - Some(Command::LocalModels { .. }) => "local-models", -@@ -2112,6 +2114,7 @@ pub async fn cli() -> anyhow::Result<()> { - Some(Command::Recipe { command }) => handle_recipe_subcommand(command), - Some(Command::Plugin { command }) => handle_plugin_subcommand(command), - Some(Command::Term { command }) => handle_term_subcommand(command).await, -+ #[cfg(feature = "tui")] - Some(Command::Tui { args }) => crate::commands::tui::handle_tui(args), - #[cfg(feature = "local-inference")] - Some(Command::LocalModels { command }) => handle_local_models_command(command).await, -diff --git a/crates/goose-cli/src/commands/mod.rs b/crates/goose-cli/src/commands/mod.rs -index 09102bc72c1f..ee6f8e8be7de 100644 ---- a/crates/goose-cli/src/commands/mod.rs -+++ b/crates/goose-cli/src/commands/mod.rs -@@ -9,6 +9,7 @@ pub mod review; - pub mod schedule; - pub mod session; - pub mod term; -+#[cfg(feature = "tui")] - pub mod tui; - #[cfg(feature = "update")] - pub mod update; diff --git a/0001-Strip-non-Linux-deps-and-use-system-libraries.patch b/0001-Strip-non-Linux-deps-and-use-system-libraries.patch index c429fad..94c6d9f 100644 --- a/0001-Strip-non-Linux-deps-and-use-system-libraries.patch +++ b/0001-Strip-non-Linux-deps-and-use-system-libraries.patch @@ -1,17 +1,17 @@ -From 52a210785751e703397f42554b5d653c7f85dab2 Mon Sep 17 00:00:00 2001 -From: Rodolfo Olivieri -Date: Thu, 28 May 2026 09:00:28 -0300 -Subject: [PATCH] strip non-linux +From 50bf2e0a81cf7aa02f5bb4e2a5a1fc7a3521a8e4 Mon Sep 17 00:00:00 2001 +From: Sam Doran +Date: Tue, 23 Jun 2026 10:42:47 -0400 +Subject: [PATCH] Strip non-Linux deps and use system libraries --- - Cargo.toml | 10 ++-------- + Cargo.toml | 9 ++------- crates/goose-cli/Cargo.toml | 4 ---- crates/goose-server/Cargo.toml | 3 --- crates/goose/Cargo.toml | 11 ----------- - 4 files changed, 2 insertions(+), 26 deletions(-) + 4 files changed, 2 insertions(+), 25 deletions(-) diff --git a/Cargo.toml b/Cargo.toml -index 27e8432..bb1bd7e 100644 +index e69de25..f5d7fb1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,8 +1,6 @@ @@ -29,11 +29,11 @@ index 27e8432..bb1bd7e 100644 indoc = { version = "2", default-features = false } -keyring = { version = "3.6.3", default-features = false, features = ["vendored"] } +keyring = { version = "3.6.3", default-features = false } - lru = { version = "0.16", default-features = false } + lru = { version = "0.18", default-features = false } once_cell = { version = "1.21.3", default-features = false, features = ["std"] } rand = { version = "0.8.5", default-features = false, features = ["std"] } @@ -72,7 +70,7 @@ utoipa = { version = "4.2", default-features = false } - uuid = { version = "1.18", default-features = false, features = ["v4", "std"] } + uuid = { version = "1.23", default-features = false, features = ["v4", "std"] } webbrowser = { version = "1", default-features = false } which = { version = "8", default-features = false, features = ["real-sys"] } -winapi = { version = "0.3.9", default-features = false, features = ["wincred", "std"] } @@ -41,19 +41,18 @@ index 27e8432..bb1bd7e 100644 wiremock = { version = "0.6", default-features = false } zip = { version = "8", default-features = false, features = ["deflate"] } serial_test = { version = "3", default-features = false } -@@ -109,7 +107,3 @@ llama-cpp-sys-2 = { version = "=0.1.146", default-features = false } - # They are just here to pin the version, and can be removed if PCTX updates temporal_rs +@@ -110,6 +108,3 @@ llama-cpp-sys-2 = { version = "=0.1.146", default-features = false } icu_calendar = { version = "=2.1.1", default-features = false } icu_locale = { version = "=2.1.1", default-features = false } -- + -[patch.crates-io] -v8 = { path = "vendor/v8" } -cudaforge = { git = "https://github.com/jbg/cudaforge", rev = "e7c1967340e40673db98dc9e17da0f04834a456f" } diff --git a/crates/goose-cli/Cargo.toml b/crates/goose-cli/Cargo.toml -index e6c704e..0de4e1f 100644 +index 2f33e21..9290c5c 100644 --- a/crates/goose-cli/Cargo.toml +++ b/crates/goose-cli/Cargo.toml -@@ -65,10 +65,6 @@ sigstore-verify = { version = "0.8", default-features = false, optional = true } +@@ -66,10 +66,6 @@ sigstore-verify = { version = "0.8", default-features = false, optional = true } axum.workspace = true clap_complete_nushell = { version = "4", default-features = false } @@ -65,7 +64,7 @@ index e6c704e..0de4e1f 100644 default = [ "code-mode", diff --git a/crates/goose-server/Cargo.toml b/crates/goose-server/Cargo.toml -index c1f04fc..30bd3cd 100644 +index add298a..0fe99a5 100644 --- a/crates/goose-server/Cargo.toml +++ b/crates/goose-server/Cargo.toml @@ -91,9 +91,6 @@ aws-lc-rs = { version = "1.17", default-features = false, optional = true } @@ -79,12 +78,12 @@ index c1f04fc..30bd3cd 100644 name = "goosed" path = "src/main.rs" diff --git a/crates/goose/Cargo.toml b/crates/goose/Cargo.toml -index fccd7db..e0528d1 100644 +index 47f172b..1ceee51 100644 --- a/crates/goose/Cargo.toml +++ b/crates/goose/Cargo.toml -@@ -216,17 +216,6 @@ icu_calendar = { version = "=2.1.1", default-features = false } - icu_locale = { version = "=2.1.1", default-features = false } - llama-cpp-sys-2 = { workspace = true, optional = true } +@@ -218,17 +218,6 @@ image = { version = "0.24.9", default-features = false, features = ["png", "jpeg + subtle = { version = "2.5", default-features = false, features = ["std"] } + gethostname = "1.1.0" -[target.'cfg(target_os = "windows")'.dependencies] -winapi = { workspace = true } diff --git a/0002-Set-downstream-feature-flags.patch b/0002-Set-downstream-feature-flags.patch index 3931f60..eab0928 100644 --- a/0002-Set-downstream-feature-flags.patch +++ b/0002-Set-downstream-feature-flags.patch @@ -1,6 +1,6 @@ -From 06529a6c6c9918dcd72c3445e3e644e828a84004 Mon Sep 17 00:00:00 2001 -From: Rodolfo Olivieri -Date: Thu, 28 May 2026 09:02:19 -0300 +From d9a0356b5f8cb3cfc3bd8555d6471e41fdcc1783 Mon Sep 17 00:00:00 2001 +From: Sam Doran +Date: Tue, 23 Jun 2026 10:45:09 -0400 Subject: [PATCH] Set downstream feature flags --- @@ -10,10 +10,10 @@ Subject: [PATCH] Set downstream feature flags 3 files changed, 4 insertions(+), 13 deletions(-) diff --git a/crates/goose-cli/Cargo.toml b/crates/goose-cli/Cargo.toml -index 0de4e1f..8644578 100644 +index 9290c5c..54d9542 100644 --- a/crates/goose-cli/Cargo.toml +++ b/crates/goose-cli/Cargo.toml -@@ -67,16 +67,11 @@ clap_complete_nushell = { version = "4", default-features = false } +@@ -68,16 +68,11 @@ clap_complete_nushell = { version = "4", default-features = false } [features] default = [ @@ -33,7 +33,7 @@ index 0de4e1f..8644578 100644 code-mode = ["goose/code-mode"] local-inference = ["goose/local-inference"] diff --git a/crates/goose-server/Cargo.toml b/crates/goose-server/Cargo.toml -index 30bd3cd..1d61efb 100644 +index 0fe99a5..1236141 100644 --- a/crates/goose-server/Cargo.toml +++ b/crates/goose-server/Cargo.toml @@ -13,13 +13,9 @@ workspace = true @@ -52,10 +52,10 @@ index 30bd3cd..1d61efb 100644 ] code-mode = ["goose/code-mode"] diff --git a/crates/goose/Cargo.toml b/crates/goose/Cargo.toml -index e0528d1..be0e805 100644 +index 1ceee51..8b8bdcd 100644 --- a/crates/goose/Cargo.toml +++ b/crates/goose/Cargo.toml -@@ -129,7 +129,7 @@ tokio-cron-scheduler = { version = "0.15", default-features = false } +@@ -130,7 +130,7 @@ tokio-cron-scheduler = { version = "0.15", default-features = false } urlencoding = { workspace = true } v_htmlescape = { version = "0.17", default-features = false, features = ["std"] } sqlx = { version = "0.8.5", default-features = false, features = [ @@ -64,6 +64,6 @@ index e0528d1..be0e805 100644 "chrono", "json", "macros", --- +-- 2.54.0 diff --git a/0003-Downgrade-pkcs8-to-0.10.2-for-native-tls-compat.patch b/0003-Downgrade-pkcs8-to-0.10.2-for-native-tls-compat.patch new file mode 100644 index 0000000..8e6068f --- /dev/null +++ b/0003-Downgrade-pkcs8-to-0.10.2-for-native-tls-compat.patch @@ -0,0 +1,25 @@ +From 73f80f1b0bcac2bf94db0126f3115ad8b8e8c2b9 Mon Sep 17 00:00:00 2001 +From: Sam Doran +Date: Wed, 24 Jun 2026 15:17:32 -0400 +Subject: [PATCH] Downgrade pkcs8 to 0.10.2 for native-tls compatibility + +--- + crates/goose/Cargo.toml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/crates/goose/Cargo.toml b/crates/goose/Cargo.toml +index 47f172b..04da822 100644 +--- a/crates/goose/Cargo.toml ++++ b/crates/goose/Cargo.toml +@@ -195,7 +195,7 @@ pastey = { version = "0.2", default-features = false } + shell-words = { workspace = true } + pem = { version = "3.0.2", default-features = false, features = ["std"], optional = true } + pkcs1 = { version = "0.7.5", default-features = false, features = ["pkcs8", "std"], optional = true } +-pkcs8 = { version = "0.11.0", default-features = false, features = ["alloc", "std"], optional = true } ++pkcs8 = { version = "0.10.2", default-features = false, features = ["alloc", "std"], optional = true } + sec1 = { version = "0.7", default-features = false, features = ["der", "pkcs8", "std"], optional = true } + goose-acp-macros = { path = "../goose-acp-macros", default-features = false } + tower-http = { workspace = true, features = ["cors"] } +-- +2.54.0 + diff --git a/0004-aws-lc-rs-feature-flag.patch b/0004-aws-lc-rs-feature-flag.patch new file mode 100644 index 0000000..179e4fd --- /dev/null +++ b/0004-aws-lc-rs-feature-flag.patch @@ -0,0 +1,51 @@ +diff --git a/Cargo.lock b/Cargo.lock +index bb1d3e7108..6f7d4c59ea 100644 +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -8156,6 +8156,7 @@ checksum = "57f6d249aad744e274e682777a50283a225a32705394ee6d5fcc01efa25e4055" + dependencies = [ + "aws-lc-rs", + "pem", ++ "ring", + "rustls-pki-types", + "time", + "x509-parser", +@@ -12938,6 +12939,7 @@ dependencies = [ + "lazy_static", + "nom 7.1.3", + "oid-registry", ++ "ring", + "rusticata-macros", + "thiserror 2.0.18", + "time", +diff --git a/crates/goose-server/Cargo.toml b/crates/goose-server/Cargo.toml +index add298a07d..3de662a50e 100644 +--- a/crates/goose-server/Cargo.toml ++++ b/crates/goose-server/Cargo.toml +@@ -38,6 +38,7 @@ rustls-tls = [ + "axum-server/tls-rustls", + "dep:rustls", + "dep:aws-lc-rs", ++ "rcgen/aws_lc_rs", + "goose/rustls-tls", + "goose-mcp/rustls-tls", + ] +@@ -45,6 +46,9 @@ native-tls = [ + "reqwest/native-tls", + "tokio-tungstenite/native-tls", + "axum-server/tls-openssl", ++ # rcgen requires a crypto backend; ring is used here because aws-lc-rs is ++ # reserved for the rustls-tls path and openssl does not provide this interface. ++ "rcgen/ring", + "dep:openssl", + "goose/native-tls", + "goose-mcp/native-tls", +@@ -85,7 +89,7 @@ socket2 = { version = "0.6", default-features = false } + fs2 = { workspace = true } + rustls = { workspace = true, optional = true } + uuid = { workspace = true } +-rcgen = { version = "0.14", default-features = false, features = ["aws_lc_rs", "crypto", "pem"] } ++rcgen = { version = "0.14", default-features = false, features = ["crypto", "pem"] } + axum-server = { version = "0.8", default-features = false } + aws-lc-rs = { version = "1.17", default-features = false, optional = true } + openssl = { version = "0.10.66", default-features = false, optional = true } diff --git a/0003-Fix-sql-statement-from-session-manager.patch b/0020-Fix-sql-statement-from-session-manager.patch similarity index 100% rename from 0003-Fix-sql-statement-from-session-manager.patch rename to 0020-Fix-sql-statement-from-session-manager.patch diff --git a/0004-Update-snapshot-test-without-codemode-instructions.patch b/0021-Update-snapshot-test-without-codemode-instructions.patch similarity index 100% rename from 0004-Update-snapshot-test-without-codemode-instructions.patch rename to 0021-Update-snapshot-test-without-codemode-instructions.patch diff --git a/changelog b/changelog index 0c71a8d..04db43b 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,66 @@ +* Wed Jun 17 2026 Sam Doran - 1.38.0-1 +- Update to version 1.38.0 +- Canonical thinking modes across providers +- Surface Anthropic stream refusals as visible errors +- ACP secret key support at goose serve endpoint +- Unified OTLP logging schema for cross-tool detection +- Opt-in ACP last message snippets for sessions +- Custom ACP method to get session info +- Steering messages with ACP +- ACP list sessions with keyword and type filter +- ACP thinking effort config option +- Image read tool +- ACP methods for config extensions +- Custom notifications only when ACP client specifies capability +- Session import functionality +- Replay ACP images on session load +- Raw provider supported models over ACP +- ACP session system prompt setter +- Perplexity as declarative OpenAI-compatible provider +- Alibaba (Qwen via DashScope) declarative provider +- Configurable tool output size limit via GOOSE_MAX_TOOL_RESPONSE_SIZE +- /model slash command in CLI for session model switching +- Databricks AI Gateway provider +- Expose built-in skills through sources list ACP calls +- Replace raw config and secret methods in ACP +- Support Google model inventory refresh +- Correctly map ollama_cloud to canonical provider and update max tokens +- Incorrect max tokens values for Groq provider +- Classify Bedrock ValidationException as ExecutionError +- Page through all Databricks AI Gateway v2 endpoints when listing models +- Preserve unparseable extension entries during config refresh +- Forward ACP server context window size to clients +- Skip OTLP signals when protocol=grpc to avoid background-thread panic +- Make Azure api-version query param optional +- Stricter GGUF requirements, auto detection of tool calling support, fixed thinking output parsing +- Remove unused fetch-metadata IPC handler (SSRF) +- Replace Venice custom provider with declarative config +- Coalesce streaming chunks under one message id in ACP +- Require extension_name on read_resource +- Seed provider handoff history in ACP +- Handle ACP requests concurrently +- Mark stream decode errors retryable +- Create goose-providers crate with canonical models and types +- ACP session setup refactor +- LRU cache for token counting +- Replace review subprocess timeout with turn limits +- Honor blocking Stop hook decisions +- Forward custom headers through OAuth connect path +- Prefer goose aliases for Databricks v2 inventory +- Mount ACP in goosed server for iterative migration +- Remove threads layer, use sessions directly for ACP +- Install plugins to ~/.agents/plugins +- Switch to official new rust-sdk for ACP +- Install plugins support +- Deduplicate _goose/providers/list RPC call at startup +- Translate ACP host capabilities into MCP initialization +- Prompt injection mitigation enabled by default for internal users +- Re-adjust pattern-based detection confidence scores +- Add directionality to egress logging +- Scheduled recipe session params +- Unscheduling a recipe should not delete them +- Read prompted file parameters in recipes + * Thu May 22 2025 Rodolfo Olivieri - 1.36.0-1 - Update to version 1.36.0 - goose review local code review command diff --git a/generate-vendor-tarball.sh b/generate-vendor-tarball.sh index 828421c..2ded460 100755 --- a/generate-vendor-tarball.sh +++ b/generate-vendor-tarball.sh @@ -3,9 +3,10 @@ set -euo pipefail # List of patches to be applied in the vendored folder PATCHES=( - "0000-Add-tui-feature-flag-for-tui-command.patch" "0001-Strip-non-Linux-deps-and-use-system-libraries.patch" "0002-Set-downstream-feature-flags.patch" + "0003-Downgrade-pkcs8-to-0.10.2-for-native-tls-compat.patch" + "0004-aws-lc-rs-feature-flag.patch" ) check_required_tools() { diff --git a/goose.spec b/goose.spec index 93a1c6b..2844b60 100644 --- a/goose.spec +++ b/goose.spec @@ -27,7 +27,7 @@ %global rustflags_codegen_units 16 Name: goose -Version: 1.36.0 +Version: 1.38.0 Release: %autorelease Summary: Extensible AI agent client URL: https://github.com/block/goose @@ -43,13 +43,8 @@ Source1: %{name}-%{version}-vendor.tar.xz # doing so. Source99: generate-vendor-tarball.sh -## Dependency patches (0000-0002) +## Dependency patches (1-19) # -# Add a `tui` feature flag to gate the TUI command behind a Cargo feature. -# This patch can be dropped once it is merged upstream and goose released a new -# version. -# * https://github.com/aaif-goose/goose/pull/9428 -Patch: 0000-Add-tui-feature-flag-for-tui-command.patch # Strip non-Linux platform deps (Windows winapi/winreg, macOS metal/apple-native # keyring), remove the vendor/v8 workspace member and all [patch.crates-io] # entries (v8, cudaforge). Remove keyring 'vendored' feature (use system dbus). @@ -59,18 +54,27 @@ Patch1: 0001-Strip-non-Linux-deps-and-use-system-libraries.patch # Switch sqlx from bundled 'sqlite' to 'sqlite-unbundled' to link against system # sqlite. Patch2: 0002-Set-downstream-feature-flags.patch - -## Code patches (0003-0099) +# Downgrade pkcs8 from 0.11.0 to 0.10.2 so that pkcs1 (0.7.5), pkcs8, and sec1 +# (0.7) all resolve against the same spki/der/const-oid generation. Upstream +# defaults to rustls-tls and never activates these optional deps together; +# native-tls activates all three, exposing a type mismatch between spki 0.7 and +# 0.8. +Patch3: 0003-Downgrade-pkcs8-to-0.10.2-for-native-tls-compat.patch +# aws-lc-rs on rcgen is enabled, which pulls in aws-lc-rs even when rust-tls is +# disabled. Put it in the feature list with rust-tls so it is properly disabled. +Patch4: 0004-aws-lc-rs-feature-flag.patch + +## Code patches (20-99) # # Avoid the 'RETURNING' SQL statement which requires SQLite 3.35.0. EPEL 9 is # stuck on 3.34.1, so we split the INSERT + SELECT into two statements. -Patch3: 0003-Fix-sql-statement-from-session-manager.patch +Patch20: 0020-Fix-sql-statement-from-session-manager.patch # Since we are disabling codemode feature, we need to update the snapshot of a # test so it passes when running `cargo test`. That's better than skipping the # test entirely. -Patch4: 0004-Update-snapshot-test-without-codemode-instructions.patch +Patch21: 0021-Update-snapshot-test-without-codemode-instructions.patch -## Downstream only patches +## Downstream only patches (100-799) # # Patch the `build.rs` for `ring` crate to avoid using the pre-generated object # files that comes with the vendored crate, and instead, build from system @@ -82,7 +86,7 @@ Patch4: 0004-Update-snapshot-test-without-codemode-instructions.patch # on the version bump from ring, otherwise, we should Patch0100: 0100-Downstream-only-never-use-pre-generated-object-files.patch -## RHEL only patches +## RHEL only patches (800-899) # Patches in the 800-899 range are applied only to RHEL. # # Add disclaimer as required by legal only on RHEL @@ -131,8 +135,8 @@ Conflicts: golang-github-pressly-goose # - https://lists.fedoraproject.org/archives/list/legal@lists.fedoraproject.org/thread/JDE6YNL42ZKVA5ZF4PEUGI5SV2PCSHIR/ # # For convenience, the items discussed in the legal ML thread are namely: -# - https://github.com/block/goose/tree/v1.36.0/crates/goose-mcp/src/computercontroller/tests/data -# - https://github.com/block/goose/tree/v1.36.0/crates/goose-cli/src/scenario_tests/recordings +# - https://github.com/block/goose/tree/v1.38.0/crates/goose-mcp/src/computercontroller/tests/data +# - https://github.com/block/goose/tree/v1.38.0/crates/goose-cli/src/scenario_tests/recordings # # Rust crates compiled into the executable contribute additional license terms. # To obtain the following list of licenses, build the package and note the @@ -143,6 +147,7 @@ Conflicts: golang-github-pressly-goose # (MIT OR Apache-2.0) AND Unicode-3.0 # 0BSD OR MIT OR Apache-2.0 # Apache-2.0 +# Apache-2.0 AND ISC # Apache-2.0 OR BSL-1.0 # Apache-2.0 OR MIT # Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT @@ -156,8 +161,6 @@ Conflicts: golang-github-pressly-goose # CC0-1.0 OR Apache-2.0 OR Apache-2.0 WITH LLVM-exception # CC0-1.0 OR MIT-0 OR Apache-2.0 # ISC -# ISC AND (Apache-2.0 OR ISC) -# ISC AND (Apache-2.0 OR ISC) AND Apache-2.0 AND MIT AND BSD-3-Clause AND (Apache-2.0 OR ISC OR MIT) AND (Apache-2.0 OR ISC OR MIT-0) # LGPL-3.0-or-later # MIT # MIT AND BSD-3-Clause @@ -176,6 +179,7 @@ Conflicts: golang-github-pressly-goose License: %{shrink: (0BSD OR Apache-2.0 OR MIT) AND Apache-2.0 + AND (Apache-2.0 AND ISC) AND (Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR CC0-1.0) AND (Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT) AND (Apache-2.0 OR BSD-1-Clause OR MIT) @@ -183,9 +187,6 @@ License: %{shrink: AND (Apache-2.0 OR BSD-3-Clause) AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR CC0-1.0 OR MIT-0) - AND (Apache-2.0 OR ISC) - AND (Apache-2.0 OR ISC OR MIT) - AND (Apache-2.0 OR ISC OR MIT-0) AND (Apache-2.0 OR LGPL-2.1-or-later OR MIT) AND (Apache-2.0 OR MIT) AND (Apache-2.0 OR MIT OR Zlib) @@ -194,8 +195,6 @@ License: %{shrink: AND (BSD-3-Clause AND MIT) AND (BSD-3-Clause OR MIT) AND BSL-1.0 - AND bzip2-1.0.6 - AND CC0-1.0 AND ISC AND LGPL-3.0-or-later AND MIT @@ -204,6 +203,7 @@ License: %{shrink: AND MPL-2.0 AND Unicode-3.0 AND Zlib + AND bzip2-1.0.6 } # LICENSE.dependencies contains a full license breakdown