## START: Set by rpmautospec ## (rpmautospec version 0.8.4) ## RPMAUTOSPEC: autorelease, autochangelog %define autorelease(e:s:pb:n) %{?-p:0.}%{lua: release_number = 1; base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}")); print(release_number + base_release_number - 1); }%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}} ## END: Set by rpmautospec %bcond check 1 # Goose is being shipped in RHEL 9.x extensions, and in such environment, we # don't have access to `_smp_tasksize_proc` due to it being added a newer # version of rpm, and to allow our package to build in such environment and to # avoid OOM during our builds, we have borrowed a macro from the rust commpiler # package to allow us to set constraints in that environment. # * https://src.fedoraproject.org/rpms/rust/blob/rawhide/f/rust.spec#_820 %if %undefined constrain_build %define constrain_build(m:) %{lua: for l in io.lines('/proc/meminfo') do if l:sub(1, 9) == "MemTotal:" then local opt_m = math.tointeger(rpm.expand("%{-m*}")) local mem_total = math.tointeger(string.match(l, "MemTotal:%s+(%d+)")) local cpu_limit = math.max(1, mem_total // (opt_m * 1024)) if cpu_limit < math.tointeger(rpm.expand("%_smp_build_ncpus")) then rpm.define("_smp_build_ncpus " .. cpu_limit) end break end end } %endif %constrain_build -m 6144 %global rustflags_codegen_units 16 # Features used at build and test time via '%%cargo_build -n -f' and # '%%cargo_test -n -f' (-n = --no-default-features, -f = --features). # Must match the --features argument in generate-vendor-tarball.sh so the vendor # tarball contains exactly the crates needed to build this feature set. %global downstream_features native-tls,otel,telemetry,system-keyring,disable-update %global ring_ver 0.17.14 %global zstd_sys_ver 2.0.16+zstd.1.5.7 %global zstd_safe_ver 7.2.4 %global zstd_ver 0.13.3 # Shared cargo flags for '%%cargo_build'/'%%cargo_test' (see %%build/%%check), # kept in one place so both call sites can't drift out of sync. # # -n -f "%%{downstream_features}": explicitly disable upstream defaults # (includes rustls-tls, aws-providers, tui, code-mode, and other features # incompatible with Fedora packaging guidelines) and activate only the # features needed for downstream packaging. # # -- --package goose-cli: scopes the build/test to the goose-cli package and # its dependency tree only. With resolver = "2", building the whole # workspace in one invocation activates any --features name across *every* # workspace member that defines it, not just the ones goose-cli actually # depends on; that let aws-lc-rs/aws-lc-sys leak into the build via unrelated # crates even though goose-cli never needs it. Scoping via a build flag # (rather than patching default-members into Cargo.toml) keeps this # controllable via build flags, which upstream also suggested and which is # easier to review/maintain across version bumps than a Cargo.toml patch. # '%%cargo_build'/'%%cargo_test's own getopt only recognizes -n/-a/-f, so a # bare '-p' errors ("Unknown option p"); everything after a literal '--' is # instead passed through raw to the underlying 'cargo build'/'cargo test' # invocation. # # --ignore-rust-version: goose 1.45.0 declares rust-version = "1.94.1", but # RHEL 9/10 and EPEL 9/10 currently ship an older Rust toolset (1.92.0) and # won't pick up 1.94 until ~Nov 2026. This skips cargo's pre-flight MSRV # check and attempts the build anyway; it only works if the code doesn't # actually rely on a post-1.92 compiler feature. EXPERIMENTAL — drop this # flag if a real build shows the older rustc genuinely can't compile it. %global goose_cargo_flags -n -f "%{downstream_features}" -- --package goose-cli --ignore-rust-version Name: goose Version: 1.45.0 Release: %autorelease Summary: Extensible AI agent client URL: https://github.com/aaif-goose/goose Source: %{url}/releases/download/v%{version}/%{name}-source-v%{version}.tar.gz # To create the vendor tarball, use the generate-vendor-tarball.sh script: # chmod +x generate-vendor-tarball.sh # ./generate-vendor-tarball.sh Source1: %{name}-%{version}-vendor.tar.zstd # This script is used to generate the vendor tarball for goose, and while it # does not offer any practical/real usage for the application, it helps us to # easily generate the vendored tarball and apply the correct patches while # doing so. Source99: generate-vendor-tarball.sh # This adds the changelog information used during Fedora/EPEL/RHEL builds to # inform what has changed from version to version. It has no practical effect # other than just being here to facilitate `fedpkg/rhpkg import` in the downstream. Source100: changelog ## Dependency patches (1-19) # # 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). # Switch sqlx from bundled 'sqlite' to 'sqlite-unbundled' to use system libsqlite3. # Remove 'nostr', 'aws-providers', and 'rustls-tls' from goose-cli default # features to prevent unwanted crates from leaking into the vendor tarball via # cargo vendor-filterer workspace-level resolution (resolver=2 does not propagate # --no-default-features to individual workspace members). # Feature flags (native-tls, otel, telemetry, system-keyring, disable-update) are # passed explicitly at build time via '%%cargo_build -n -f' and '%%cargo_test -n -f', # into Cargo.toml; see %build and %check. Patch1: 0001-Strip-non-Linux-deps-and-use-system-libraries.patch # Remove aws_lc_rs from the workspace-level rustls default-features so it is # not pulled into the native-tls build path. Activate it explicitly only under # the rustls-tls feature flag in crates/goose/Cargo.toml. Patch2: 0002-aws-lc-rs-feature-flag.patch ## Code patches (20-99) # # Avoid the 'RETURNING' SQL statement (requires SQLite 3.35.0) and the # 'unixepoch()' function (requires SQLite 3.38.0). EPEL 9 is stuck on # SQLite 3.34.1, so we split the INSERT + SELECT into two statements and # replace unixepoch() with CAST(strftime('%s', ...) AS INTEGER). Patch20: 0020-Fix-sql-statement-from-session-manager.patch # code-mode is not in the --features list passed at build time, so we update # the snapshot test so it passes without that feature. That's better than # skipping the test entirely. Patch21: 0021-Update-snapshot-test-without-codemode-instructions.patch ## 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 # libraries. # The patch was taken from: # * https://src.fedoraproject.org/rpms/rust-ring/blob/d6d681ed07c088671cb5accc0102470b059a5e88/f/rust-ring.spec#_24 # # We have it placed in our directory due to the need of modifications depending # on the version bump from ring, otherwise, we should Patch0100: 0100-Downstream-only-never-use-pre-generated-object-files.patch # Enable the `pkg-config` feature in zstd-sys and zstd-safe so they link # against the system libzstd-devel instead of compiling from bundled sources. Patch0101: 0101-Downstream-only-enable-zstd-sys-pkg-config.patch ## 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 Patch800: 0800-Include-legal-message-for-goose-proxy-provider.patch # i686: https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval ExcludeArch: %{ix86} # This package provides a binary called goose and it will conflict with our # package, as both installs the resulting binary to `/usr/bin/goose`, so it's # better that we indicate it has a conflict. Conflicts: golang-github-pressly-goose # The license for the goose project is Apache-2.0, except for: # # MIT (Minified JavaScript libraries): # - crates/goose-mcp/src/autovisualiser/templates/assets/chart.min.js # - crates/goose-mcp/src/autovisualiser/templates/assets/mermaid.min.js # - crates/goose-mcp/src/autovisualiser/templates/assets/leaflet.markercluster.min.js # # ISC (Minified JavaScript library): # - crates/goose-mcp/src/autovisualiser/templates/assets/d3.min.js # # BSD-3-Clause (Minified Javascript library): # - crates/goose-mcp/src/autovisualiser/templates/assets/d3.sankey.min.js # # BSD-2-Clause: (Minified JavaScript library and CSS stylesheet) # - crates/goose-mcp/src/autovisualiser/templates/assets/leaflet.min.js # - crates/goose-mcp/src/autovisualiser/templates/assets/leaflet.min.css # # CC-BY-4.0: # - All documentation (excluding specifications) # # CDLA-Permissive-2.0: # - introduced by the opentelemetry-semantic-conventions crate # # MPL-2.0+: # - introduced by the option-ext crate. # licensecheck will report that set of 6 licenses for the source archive. # # A couple of files present under `crates/goose-mcp` and `crates/goose-cli` # were discussed in the legal ML due to them not having a clear license or # copyright terms in the upstream repository. The discussion of those items can # be seen at: # - 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.45.0/crates/goose-mcp/src/computercontroller/tests/data # - https://github.com/block/goose/tree/v1.45.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 # output of %%{cargo_license_summary}. # # (Apache-2.0 OR MIT) AND BSD-3-Clause # (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 BSL-1.0 OR MIT # Apache-2.0 OR ISC OR MIT # Apache-2.0 OR MIT # Apache-2.0 OR MIT OR Zlib # Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT # BSD-2-Clause # BSD-2-Clause OR Apache-2.0 OR MIT # BSD-3-Clause # BSD-3-Clause AND MIT # BSD-3-Clause OR Apache-2.0 # BSD-3-Clause OR MIT # BSL-1.0 # CC0-1.0 OR Apache-2.0 OR Apache-2.0 WITH LLVM-exception # CC0-1.0 OR MIT-0 OR Apache-2.0 # CDLA-Permissive-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 # MIT OR Apache-2.0 # MIT OR Apache-2.0 OR LGPL-2.1-or-later # MIT OR Apache-2.0 OR Zlib # MIT OR Zlib OR Apache-2.0 # MIT-0 # MPL-2.0 # MPL-2.0+ # Unicode-3.0 # Unlicense OR MIT # Unlicense OR MIT OR Apache-2.0 OR CC0-1.0 # Zlib # Zlib OR Apache-2.0 OR MIT # bzip2-1.0.6 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-2-Clause OR MIT) AND (Apache-2.0 OR BSD-3-Clause) AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR BSL-1.0 OR MIT) AND (Apache-2.0 OR CC0-1.0 OR MIT OR Unlicense) 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) AND BSD-2-Clause AND BSD-3-Clause AND (BSD-3-Clause AND MIT) AND (BSD-3-Clause OR MIT) AND BSL-1.0 AND CDLA-Permissive-2.0 AND ISC AND LGPL-3.0-or-later AND MIT AND (MIT OR Unlicense) AND MIT-0 AND MPL-2.0 AND MPL-2.0+ AND Unicode-3.0 AND Zlib AND bzip2-1.0.6 } # LICENSE.dependencies contains a full license breakdown BuildRequires: cargo-rpm-macros >= 25 # Required by crate libdbus-sys (vendored) BuildRequires: dbus-devel # Required by crate libsqlite3-sys (vendored) BuildRequires: clang-devel BuildRequires: pkgconfig(sqlite3) # Required by crate onig_sys (vendored) BuildRequires: oniguruma-devel # Required by crate openssl-sys (vendored) BuildRequires: openssl-devel # Required by crate ring (vendored) BuildRequires: /usr/bin/perl # Required by crate zstd-sys (vendored) BuildRequires: libzstd-devel # Required in %%prep to zero out .cargo-checksum.json files dict after patching BuildRequires: jq # Sublime Text 3 language definitions for syntax highlighting # from: https://github.com/sublimehq/Packages/tree/fa6b862 # - all except Rust: LicenseRef-Fedora-UltraPermissive # https://gitlab.com/fedora/legal/fedora-license-data/-/issues/516 # - Rust: MIT Provides: bundled(sublime-syntax) = 4075~gitfa6b862 # In RHEL 9, we depend on sqlite3 3.34.1-10 as it contains a necessary fix for # exporting the `sqlite3_deserialize` function for goose builds. # More info on: https://redhat.atlassian.net/browse/RHEL-155950 %if 0%{?rhel} == 9 Requires: sqlite-libs >= 3.34.1-10 %endif # Third-party language definitions for syntax highlighting The `syntect` crate # is bundling all of sublimehq/Packages syntax definitions. To achieve the # below list of langauge definitions syntaxes, use the following command: # * strings %%{name}-%%{version}/vendor/syntect-*/assets/default_newlines.packdump | grep 'Packages/' Provides: bundled(sublime-syntax-ASP) Provides: bundled(sublime-syntax-ActionScript) Provides: bundled(sublime-syntax-AppleScript) Provides: bundled(sublime-syntax-BatchFile) Provides: bundled(sublime-syntax-CSharp) Provides: bundled(sublime-syntax-Cpp) Provides: bundled(sublime-syntax-CSS) Provides: bundled(sublime-syntax-Clojure) Provides: bundled(sublime-syntax-D) Provides: bundled(sublime-syntax-Diff) Provides: bundled(sublime-syntax-Erlang) Provides: bundled(sublime-syntax-Go) Provides: bundled(sublime-syntax-Graphviz) Provides: bundled(sublime-syntax-Groovy) Provides: bundled(sublime-syntax-HTML) Provides: bundled(sublime-syntax-Haskell) Provides: bundled(sublime-syntax-Java) Provides: bundled(sublime-syntax-JavaScript) Provides: bundled(sublime-syntax-LaTeX) Provides: bundled(sublime-syntax-Lisp) Provides: bundled(sublime-syntax-Lua) Provides: bundled(sublime-syntax-Makefile) Provides: bundled(sublime-syntax-Markdown) Provides: bundled(sublime-syntax-Matlab) Provides: bundled(sublime-syntax-OCaml) Provides: bundled(sublime-syntax-Object-C) Provides: bundled(sublime-syntax-PHP) Provides: bundled(sublime-syntax-Pascal) Provides: bundled(sublime-syntax-Perl) Provides: bundled(sublime-syntax-Python) Provides: bundled(sublime-syntax-R) Provides: bundled(sublime-syntax-Rails) Provides: bundled(sublime-syntax-Regular-Expressions) Provides: bundled(sublime-syntax-RestructuredText) Provides: bundled(sublime-syntax-Ruby) Provides: bundled(sublime-syntax-Rust) Provides: bundled(sublime-syntax-SQL) Provides: bundled(sublime-syntax-Scala) Provides: bundled(sublime-syntax-ShellScript) Provides: bundled(sublime-syntax-TCL) Provides: bundled(sublime-syntax-Textile) Provides: bundled(sublime-syntax-XML) Provides: bundled(sublime-syntax-YAML) # Default themes that are shipped with `syntect` crate under the assets folder. # To achieve the below list of themes definitions, see: # * https://github.com/trishume/syntect/blob/v5.3.0/src/dumps.rs#L207-L218. # # InspiredGithub theme: MIT Provides: bundled(syntect-theme-InspiredGithub) # Solarized theme: MIT Provides: bundled(syntect-theme-Solarized) # Spacegray theme: MIT # The specific themes mentioned in the above snippet for syntect#v5.3.0 # (src/dump.rs#L212) is included in the Spacegray theme. Provides: bundled(sublime-theme-Spacegray) # BLAKE3 cryptographic hash function C/assembly implementation bundled in the # `blake3` crate. The upstream build.rs has no pkg-config hook to use the # system blake3-devel package, so the C sources are compiled at build time. # blake3: CC0-1.0 OR Apache-2.0 OR Apache-2.0 WITH LLVM-exception Provides: bundled(blake3) = 1.8.5 # Minified JavaScript libraries and minified CSS stylesheets contained in # `goose-mcp` crate for the autovisualizer tool. # * crates/goose-mcp/src/autovisualizer/templates/assets/ # # Note: Versions where checked under each minified file. # # chart.min.js: MIT Provides: bundled(chart-min-js) = 4.5.0 # d3.min.js: ISC Provides: bundled(d3-min-js) = 7.9.0 # d3-sakey.min.js: BSD-3-Clause Provides: bundled(d3-sankey-min-js) = 0.12.3 # leaflet.min.js: BSD-2-Clause Provides: bundled(leaflet-min-js) = 1.9.4 # leaflet.min.css: BSD-2-Clause Provides: bundled(leaflet-min-css) = 1.9.4 # leaflet-markercluster.min.js: MIT Provides: bundled(leaflet-markercluster-min-js) = 1.5.3 # mermaid.min.js: MIT # Couldn't find a version of the mermaid library inside the minified file. We # assume it is the latest version, as all the others are also in the latest, # but since we were not able to identify it, better to be safe and not provide # any version here. Provides: bundled(mermaid-min-js) # Tree-sitter parsing library and language grammars. The C sources are compiled # at build time from the vendored crates. System packages exist in Fedora for # most of these, but the upstream build.rs scripts have no pkg-config hook to # use them. tree-sitter-kotlin and tree-sitter-swift have no Fedora system # package at all. # tree-sitter: MIT Provides: bundled(tree-sitter) = 0.26.10 # tree-sitter-go: MIT Provides: bundled(tree-sitter-go) = 0.25.0 # tree-sitter-java: MIT Provides: bundled(tree-sitter-java) = 0.23.5 # tree-sitter-javascript: MIT Provides: bundled(tree-sitter-javascript) = 0.25.0 # tree-sitter-kotlin-ng: MIT (no Fedora system package available) Provides: bundled(tree-sitter-kotlin) = 1.1.0 # tree-sitter-python: MIT Provides: bundled(tree-sitter-python) = 0.25.0 # tree-sitter-ruby: MIT Provides: bundled(tree-sitter-ruby) = 0.23.1 # tree-sitter-rust: MIT Provides: bundled(tree-sitter-rust) = 0.24.2 # tree-sitter-swift: MIT (no Fedora system package available) Provides: bundled(tree-sitter-swift) = 0.7.3 # tree-sitter-typescript: MIT Provides: bundled(tree-sitter-typescript) = 0.23.2 %global _description %{expand: Goose is your on-machine AI agent, capable of automating complex development tasks from start to finish. More than just code suggestions, goose can build entire projects from scratch, write and execute code, debug failures, orchestrate workflows, and interact with external APIs - autonomously. Whether you're prototyping an idea, refining existing code, or managing intricate engineering pipelines, goose adapts to your workflow and executes tasks with precision. Designed for maximum flexibility, goose works with any LLM and supports multi-model configuration to optimize performance and cost, seamlessly integrates with MCP servers, and is available as both a desktop app as well as CLI - making it the ultimate AI assistant for developers who want to move faster and focus on innovation.} %description %{_description} %prep # Break the patches into batches since # patches >= 800 are only applied on RHEL systems. # The release artifact extracts to goose-v%%{version}/ (note the 'v' prefix), # unlike the old auto-generated archive which used goose-%%{version}/. %setup -q -n %{name}-v%{version} -a1 %autopatch -p1 -M 799 # Patch 0100 strips ring's pre-generated ASM objects from build.rs but cannot # patch .cargo-checksum.json reliably because its content varies depending on # which cargo-vendor-filterer version/fork generated the vendor tarball. # Zero out the files dict here so Cargo skips per-file verification entirely. jq -c '.files = {}' vendor/ring-%{ring_ver}/.cargo-checksum.json > vendor/ring-%{ring_ver}/.cargo-checksum.json.tmp \ && mv vendor/ring-%{ring_ver}/.cargo-checksum.json.tmp vendor/ring-%{ring_ver}/.cargo-checksum.json jq -c '.files = {}' vendor/zstd-sys-%{zstd_sys_ver}/.cargo-checksum.json > vendor/zstd-sys-%{zstd_sys_ver}/.cargo-checksum.json.tmp \ && mv vendor/zstd-sys-%{zstd_sys_ver}/.cargo-checksum.json.tmp vendor/zstd-sys-%{zstd_sys_ver}/.cargo-checksum.json jq -c '.files = {}' vendor/zstd-safe-%{zstd_safe_ver}/.cargo-checksum.json > vendor/zstd-safe-%{zstd_safe_ver}/.cargo-checksum.json.tmp \ && mv vendor/zstd-safe-%{zstd_safe_ver}/.cargo-checksum.json.tmp vendor/zstd-safe-%{zstd_safe_ver}/.cargo-checksum.json jq -c '.files = {}' vendor/zstd-%{zstd_ver}/.cargo-checksum.json > vendor/zstd-%{zstd_ver}/.cargo-checksum.json.tmp \ && mv vendor/zstd-%{zstd_ver}/.cargo-checksum.json.tmp vendor/zstd-%{zstd_ver}/.cargo-checksum.json %if 0%{?rhel} %autopatch -p1 -m 800 -M 899 %endif # Remove the documentation folder but leave `static/img/logo_{dark,light}.png` # in it, as they are used in goose-cli crate. All the other markdown, audio, # images and etc are not necessary to be present here. find documentation \ -depth \( -type f ! -path "documentation/static/img/logo_dark.png" ! -path "documentation/static/img/logo_light.png" -delete \) \ -o \( -type d -empty -delete \) # The following folders are being deleted here so they are not present in the # rebuilt srpm. # * Delete the `ui` folder as it contains the electron desktop app for Goose, # which should not be packaged here. # # * Remove the `bin` folder as it is managed by hermit # (https://github.com/cashapp/hermit) to bootstrap development tools used # by goose. # # * Remove evals folder as they are used in upstream CI for evaluation, but # serve no purpose on downstream # # * Remove the `services` and `oidc-proxy folder as it contains an # `ask-ai-bot` that is used mainly for the discord community, which, does # not provide any benefit to keep it here as it is not being used by the # goose source in any way or form. # # * Remove the in-tree vendor/v8 shim crate (used by upstream for code-mode # feature which we disable). Already removed from workspace members by # patch. rm -rf ui bin .claude .codex .cursor evals services oidc-proxy vendor/v8 # Remove the `test_image.jpg` as we are not sure if this was LLM generated or # made by a human. Since there is no copyright data anywhere in the repository # mentioning this and the PR that introduced it # (https://github.com/block/goose/pull/3688) does not mention anything about # the source of the image, it's better that we remove this anyway. rm crates/goose-cli/src/scenario_tests/test_data/test_image.jpg # Sometimes Rust sources start with #![...] attributes, and "smart" editors # think it's a shebang and make them executable. Then brp-mangle-shebangs gets # upset... find -name '*.rs' -type f -perm /111 -exec chmod -v -x '{}' '+' %cargo_prep -v vendor %build # The oniguruma-sys crate does not have a feature to enable using system lib # (pkg-config), so we have to set `RUSTONIG_SYSTEM_LIBONIG` in order for it to # use pkg-config. export RUSTONIG_SYSTEM_LIBONIG=1 # See the goose_cargo_flags definition above for what these flags do and why. %cargo_build %{goose_cargo_flags} # Generate man pages from clap CLI definitions export CARGO_MANIFEST_DIR="target/rpm" target/rpm/generate_manpages %cargo_vendor_manifest %{cargo_license_summary} %{cargo_license} > LICENSE.dependencies %install install -Dpm 0755 target/rpm/goose -t %{buildroot}%{_bindir} # Install man pages install -d %{buildroot}%{_mandir}/man1 install -pm 0644 target/man/*.1 -t %{buildroot}%{_mandir}/man1 %if %{with check} %check # The oniguruma-sys crate does not have a feature to enable using system lib # (pkg-config), so we have to set `RUSTONIG_SYSTEM_LIBONIG` in order for it to # use pkg-config. export RUSTONIG_SYSTEM_LIBONIG=1 # The following tests are skipped for reasons of: # # * Network / DNS resolution failures: skip="${skip-} --skip providers::gcpauth::tests::test_token_refresh_race_condition" # * Potential copyrightable content (see %%prep for a longer explanation): skip="${skip-} --skip scenario_tests::scenarios::tests::test_image_analysis" # * Flaky test failing, better to skip for now. skip="${skip-} --skip model::tests::with_canonical_limits::skips_canonical_output_limit_when_it_equals_context_limit" skip="${skip-} --skip plugins::tests::auto_update_plugins_skips_recently_checked_plugins" skip="${skip-} --skip plugins::tests::auto_update_plugins_updates_enabled_plugins" skip="${skip-} --skip plugins::tests::updates_git_backed_plugin" # * Timing-sensitive test: races against run completion in slow build environments. skip="${skip-} --skip test_steer_session_adds_input_to_active_prompt" # See the goose_cargo_flags definition above for what these flags do and why. # The trailing `-- ${skip-}` here is cargo test's own separator for the # test-harness skip args (goose_cargo_flags already has its own `--` to get # --package/--ignore-rust-version past %%cargo_test's getopt parsing). %cargo_test %{goose_cargo_flags} -- ${skip-} %endif %files %doc README.md %doc SECURITY.md %doc GOVERNANCE.md %license LICENSE %license LICENSE.dependencies %license crates/goose-mcp/licenses/chart-js.license %license crates/goose-mcp/licenses/d3-js.license %license crates/goose-mcp/licenses/d3-sankey.license %license crates/goose-mcp/licenses/leaflet.license %license crates/goose-mcp/licenses/leaflet-markercluster.license %license crates/goose-mcp/licenses/mermaid.license %license cargo-vendor.txt %{_bindir}/goose %{_mandir}/man1/goose*.1* %changelog ## START: Generated by rpmautospec * Thu Aug 20 2026 thepetk - 1.45.0-1 - Update to version 1.45.0 - Security fix: arbitrary command execution in goose CLI via `goose review` (GHSA-r5pp-p5r8-466r) - /status slash command in CLI for session inspection - /model slash command for session model switching, with tab completion and provider switching - goose review local code review command - tui command on goose-cli with diff viewer - Hooks system for extensibility (PreToolUse denial, Stop hook context) - Global hints loading from ~/.agents/AGENTS.md - Structured summary output with template rendering for compaction - Configurable GOOSE_DOCS_ROOT for air-gapped docs access - Allow disabling built-in skills - Option to disable automatic update downloads - Track cache tokens and per-message usage/cost stats - Unified thinking effort control across providers; Opus 5 adaptive thinking support - Upgrade to rmcp 2.0 - New providers: Together AI, EmpirioLabs, OrcaRouter, NEAR AI Cloud, Perplexity, Alibaba (Qwen via DashScope), Databricks AI Gateway, Scaleway, Vercel AI Gateway, xAI SuperGrok, iFlytek Spark/Astron MaaS, Fireworks AI, OllamaCloudProvider, Sakana AI - MLX support for local inference provider - Nushell terminal and completion support - Azure Entra ID bearer token auth via AZURE_OPENAI_AD_TOKEN - Accept string values for GOOSE_CONTEXT_LIMIT - Quarterly option for scheduler - Worktree-aware directory switcher - Restore dynamic model discovery and current Grok support - Update DeepSeek model names to v4 API - Gate rcgen aws_lc_rs feature behind rustls-tls - Fail closed on unverifiable update provenance - Bump nostr to 0.44.6 to clear RUSTSEC-2026-0216 - Numerous provider, ACP, local-inference, and session-handling bug fixes * Thu Jun 25 2026 thepetk - 1.39.0-1 - Update to version 1.39.0 - /status slash command in CLI for session inspection - ACP method for managing recipes and session extensions - Typed request/response for add/get session extensions in ACP - Load session using ACP - Elicitation method for ACP with improvements - Elicitation decline and cancel actions propagation - Recipe handling in new_session - Use ACP to manage global config and session extensions - Change working directory using ACP - ACP cancel race condition fix - Load global hints from ~/.agents/AGENTS.md - Azure Entra ID bearer token auth via AZURE_OPENAI_AD_TOKEN - Track cache tokens for accurate cost reporting - Quarterly option for scheduler - Option to disable automatic update downloads - Accept string values for GOOSE_CONTEXT_LIMIT - EmpirioLabs as a declarative OpenAI-compatible provider - OrcaRouter as a declarative OpenAI-compatible provider - Together AI declarative provider - Add option for overriding API URL for Moonshot provider - MCP extensions support in open plugins - Peek mode for async background tasks in summon - Context, working_dir, and metadata parameters for summon delegate tasks - Move OpenAI provider and API client into goose-providers crate - Delete embeddings support (unused) - Accept JSON-encoded string for autovisualiser data parameter - Send User-Agent on URL image fetches in developer/read_image - Allow unlisted models in search - Do not pass temperature to ChatGPT Codex provider - Sanitize extension environment maps - Refresh provider when session working directory changes - Use refreshed gcloud token after reauth (retry Vertex AI on 401/403) - Start a turn when /goal or /grind is set - Dedupe duplicate tool-call ids within a turn - Resolve bundled extensions from discovery - Custom OpenAI provider dropping port when URL scheme is omitted - Clear rejected OAuth credentials after refresh - Keep extended thinking within the Anthropic output cap - Preserve custom API path in OpenAI base_url derivation - Repair PATH for plugin hook commands - Fall back to default provider when resuming session with unavailable provider - Read meta.n_ctx from /v1/models to fix context limit for local OpenAI servers - Show resolved skill supporting file paths - Record OpenAI-native cached_tokens in usage metering - Detect image paths with spaces - Ensure tool request timestamp precedes tool response timestamp - Inherit login-shell PATH in spawned subagents - Skip non-recipe project config files in summon - Evict stale completed tasks to prevent unbounded memory growth in summon - Warn on unmatched extension names in summon delegate - Make context exceeded checker more precise - Include agentInfo in ACP initialize response - Check for responses API support in Databricks * 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 - /goal command for agent self-evaluation before finishing - Hooks system for PreToolUse denial and extensibility - Slash commands (built-in, skill, recipe) in ACP server - Open-plugins generalization and skills - Summon subagent instructions - Unified thinking effort control across all providers - NEAR AI Cloud provider - Scaleway provider - Vercel AI Gateway provider - Atomic Chat declarative OpenAI-compatible provider - Routstr declarative provider - FuturMix provider - oMLX declarative provider - Harbor eval runner - MAX_CODE_BLOCK_LINES configurable via env vars - Honor GOOSE_FAST_MODEL env var in ModelConfig - GPT-5.5 in known models - Paginate ACP session list - Pass session cwd param to ACP providers - Opt-in to Vercel AI gateway leaderboard - GOOSE_OAUTH_CALLBACK_PORT for stable OAuth redirect_uri - Proactive OAuth token refresh to avoid re-auth on every session - Strip chain-of-thought markers from custom provider output - Nushell terminal and completion support - Optional --parameters flag for scheduled recipes - Quarterly option for scheduler - GitHub Copilot /responses API support - Projects as backend sources with system prompt injection - Linux musl CLI builds - GOOSE_DISABLE_TOOL_CALL_SUMMARY env var - Tolerate missing responses output - Serialize per-session agent creation to stop duplicate MCP init - Respect GOOSE_MAX_TURNS in gateway sessions - Send empty object instead of null for Anthropic tool_use input - Preserve thinking content for provider context - Mention configurable timeout env vars in Ollama stream stall error - Include full recipe parameter details in load/discovery output - Use context limit from /model/info for LiteLLM custom models - Plain > prompt instead of goose emoji in CLI - Emit trace_output as span attribute instead of event - Check file fallback when keyring has no entry - Use current_exe() instead of PATH lookup when spawning goose - Set TCP_USER_TIMEOUT on streamable HTTP clients - Activate custom provider after adding via configure - Flush OTLP traces reliably on exit with configurable timeout - Reduce excessive MISSING_TRANSLATION warnings for fallback locales - Improve Telegram gateway error reporting and connection reliability - Zero out cost for local providers (ollama, local) - Persist accumulated cost in session DB to survive reload - Prevent tool-use marker leakage in toolshim output - Re-apply canonical limits when delegate overrides model - Report cumulative total_tokens in stream-json/json output - Refresh GCP metadata server token on expiration - Apply request_params to outgoing OpenAI API payload - Gemini 3.x known_location Global routing entries - Coalesce streaming Thinking deltas and list available tools on not-found - Honor Retry-After on 429 responses - Preserve user-set session name for recipe-based chats - Enforce exp independently of MAX_TOKEN_AGE_SECONDS in OIDC proxy - Omit max_tokens for OpenAI-compatible requests when unset - Set correct MCP-app host capabilities - Normalize nullable schemas for Vertex Gemini compatibility - Isolate GitHub recipe temp paths - Set X-Initiator header on GitHub Copilot requests - Honor dynamic_models: false in declarative provider configs - Cache trailing message for stable prefix across Bedrock agent turns - Case-insensitive model name lookup for context_limit - Handle Bedrock ReasoningContent blocks gracefully - Ensure parallel tool image responses don't interleave on Databricks - Insert tool pair summaries at chronological position in conversation - Enable SQLite foreign key enforcement in session pool - Accept null tool_call arguments in OpenAI streaming chunks - Synchronously reap ACP child to avoid SIGCHLD race - Elicitation fixes - Return 400 instead of panicking on invalid CSP header value - Keep SSE reconnect loop alive on long disconnects - Convert quoted numeric config values to numbers if needed - Use appInfo instead of clientInfo in MCP Apps init handshake - Use mkdir -p for self-test workspace initialization - Exclude preprompt from session title generation - Prevent login-shell PATH probe from suspending goose on startup - Handle non-interactive terminal in goose configure - Use python3 in developer extension instructions - Build summon instructions per turn - Protocol cleanup - Dependency hygiene - Prompt injection mitigation: update pattern-based detection to reduce FPs - Surface resolved Databricks model metadata - Include request URL in provider error messages - Flag for login shell PATH - Structured per-provider config block, non-destructive provider switching - Preserve thinking content for providers that require it - Dynamically refresh skill instructions each turn - Show tool name in approval prompt - Location column in CLI skills table - Consolidate logging setup into shared helper - Support optional api_key configuration for declarative openai-engine providers - Recipe discovery and execution in ACP server - Group consecutive tool calls into one summarized chain card - Replace artifact heuristics and regexes with protocol messages - Improvements to LM Studio declarative provider - Parallelize provider resolution and eagerly init SQLite pool - ACP streamable HTTP spec compliance - Refresh onboarding when provider catalog loads - Redesign extensions configuration - Redesign skills library backend - Mergeable configs cleanup ## END: Generated by rpmautospec