Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 31 additions & 85 deletions .github/workflows/bundle-desktop-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ on:
type: string
required: false
default: ''
pull_request:

name: "Bundle Desktop (Linux)"

Expand All @@ -24,15 +25,12 @@ jobs:
runs-on: ubuntu-latest

steps:
# 1) Check out source
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # pin@v4
with:
# Only pass ref if it's explicitly set, otherwise let checkout action use its default behavior
ref: ${{ inputs.ref != '' && inputs.ref || '' }}
ref: ${{ inputs.ref }}
fetch-depth: 0

# 2) Update versions before build
- name: Update versions
if: ${{ inputs.version != '' }}
run: |
Expand All @@ -44,7 +42,6 @@ jobs:
cd ui/desktop
npm version ${{ inputs.version }} --no-git-tag-version --allow-same-version

# 3) Debug information
- name: Debug workflow info
env:
WORKFLOW_NAME: ${{ github.workflow }}
Expand All @@ -63,7 +60,6 @@ jobs:
lsb_release -a || true
df -h

# 4) Install system dependencies for Linux packaging
- name: Install system dependencies
run: |
sudo apt-get update
Expand All @@ -83,7 +79,6 @@ jobs:
dpkg-dev \
protobuf-compiler

# 4a) Pre-build cleanup to ensure enough disk space
- name: Pre-build cleanup
run: |
echo "Performing aggressive pre-build cleanup..."
Expand All @@ -104,119 +99,74 @@ jobs:
# Check disk space after cleanup
df -h

# 5) Set up Rust
- name: Set up Rust
uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # pin@v1
with:
toolchain: stable

# 6) Set up Node.js
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 23
cache: 'npm'
cache-dependency-path: ui/desktop/package-lock.json

# 7) Cache Rust dependencies
- name: Cache Cargo registry
uses: actions/cache@v4
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-registry-
- name: Activate hermit and set CARGO_HOME
run: |
source bin/activate-hermit
echo "CARGO_HOME=$CARGO_HOME" >> $GITHUB_ENV
echo "RUSTUP_HOME=$RUSTUP_HOME" >> $GITHUB_ENV

- name: Cache Cargo index
uses: actions/cache@v4
with:
path: ~/.cargo/index
key: ${{ runner.os }}-cargo-index
restore-keys: |
${{ runner.os }}-cargo-index
- name: Install cross
run: source ./bin/activate-hermit && cargo install cross --git https://github.com/cross-rs/cross

- name: Cache Cargo build
uses: actions/cache@v4
- name: Cache Cargo artifacts
uses: actions/cache@2f8e54208210a422b2efd51efaa6bd6d7ca8920f # pin@v3
with:
path: target
key: ${{ runner.os }}-cargo-build-${{ hashFiles('**/Cargo.lock') }}
path: |
${{ env.CARGO_HOME }}/bin/
${{ env.CARGO_HOME }}/registry/index/
${{ env.CARGO_HOME }}/registry/cache/
${{ env.CARGO_HOME }}/git/db/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-build-
${{ runner.os }}-cargo-

# 8) Set up Go for building temporal-service
- name: Set up Go
uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # pin@v5
with:
go-version: '1.21'

# 9) Build temporal-service using build.sh script
- name: Build temporal-service
run: |
echo "Building temporal-service using build.sh script..."
cd temporal-service
./build.sh
echo "temporal-service built successfully"

# 10) Build the Rust goosed binary
- name: Build goosed binary
env:
CROSS_NO_WARNINGS: 0
RUST_LOG: debug
RUST_BACKTRACE: 1
CROSS_VERBOSE: 1
run: |
echo "Building goosed binary for Linux..."
cargo build --release -p goose-server
ls -la target/release/
file target/release/goosed

# 11) Clean up build artifacts to save space
- name: Clean up build artifacts
run: |
echo "Cleaning up to save disk space..."
# Remove debug artifacts
rm -rf target/debug || true
# Remove incremental build files
rm -rf target/release/incremental || true
rm -rf target/release/deps || true
rm -rf target/release/build || true
# Remove other target directories that aren't needed
find target -name "*.rlib" -delete || true
find target -name "*.rmeta" -delete || true
# Don't run cargo clean as it will remove our binary
# Check disk space
df -h
source ./bin/activate-hermit
export TARGET="x86_64-unknown-linux-gnu"
rustup target add "${TARGET}"
cross build --release --target ${TARGET} -p goose-server

# 12) Copy binaries to Electron folder
- name: Copy binaries into Electron folder
run: |
echo "Copying binaries to ui/desktop/src/bin/"
export TARGET="x86_64-unknown-linux-gnu"
mkdir -p ui/desktop/src/bin
cp target/release/goosed ui/desktop/src/bin/
cp target/$TARGET/release/goosed ui/desktop/src/bin/
cp temporal-service/temporal-service ui/desktop/src/bin/
chmod +x ui/desktop/src/bin/goosed
chmod +x ui/desktop/src/bin/temporal-service
ls -la ui/desktop/src/bin/

# 13) Final cleanup before npm build
- name: Final cleanup before npm build
run: |
echo "Final cleanup before npm build..."
# Now we can remove the entire target directory since we copied the binary
rm -rf target || true
# Clean any remaining caches
rm -rf ~/.cargo/registry/cache || true
rm -rf ~/.cargo/git/db || true
# Check final disk space
df -h

# 14) Install npm dependencies
- name: Install npm dependencies
run: |
source ./bin/activate-hermit
cd ui/desktop
npm cache clean --force || true
npm install
# Verify installation
ls -la node_modules/.bin/ | head -5

# 15) Build Electron app with Linux makers (.deb and .rpm)
- name: Build Linux packages
run: |
source ./bin/activate-hermit
cd ui/desktop
echo "Building Linux packages (.deb and .rpm)..."

Expand All @@ -227,7 +177,6 @@ jobs:
ls -la out/
find out/ -name "*.deb" -o -name "*.rpm" | head -10

# 16) List all generated files for debugging
- name: List generated files
run: |
echo "=== All files in out/ directory ==="
Expand All @@ -239,23 +188,20 @@ jobs:
echo "=== File sizes ==="
find ui/desktop/out/ -name "*.deb" -o -name "*.rpm" -exec ls -lh {} \;

# 17) Upload .deb package
- name: Upload .deb package
uses: actions/upload-artifact@v4
with:
name: Goose-linux-x64-deb
path: ui/desktop/out/make/deb/x64/*.deb
if-no-files-found: error

# 18) Upload .rpm package
- name: Upload .rpm package
uses: actions/upload-artifact@v4
with:
name: Goose-linux-x64-rpm
path: ui/desktop/out/make/rpm/x64/*.rpm
if-no-files-found: error

# 19) Create combined artifact with both packages
- name: Upload combined Linux packages
uses: actions/upload-artifact@v4
with:
Expand Down
18 changes: 9 additions & 9 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ resolver = "2"

[workspace.package]
edition = "2021"
version = "1.1.0"
version = "1.3.0"
authors = ["Block <ai-oss-tools@block.xyz>"]
license = "Apache-2.0"
repository = "https://github.com/block/goose"
Expand All @@ -14,7 +14,7 @@ description = "An AI agent"
uninlined_format_args = "allow"

[workspace.dependencies]
rmcp = { version = "0.4.1", features = ["schemars", "auth"] }
rmcp = { version = "0.5.0", features = ["schemars", "auth"] }

# Patch for Windows cross-compilation issue with crunchy
[patch.crates-io]
Expand Down
6 changes: 3 additions & 3 deletions crates/goose-cli/src/session/output.rs
Original file line number Diff line number Diff line change
Expand Up @@ -829,11 +829,11 @@ impl McpSpinners {
spinner.set_message(message.to_string());
}

pub fn update(&mut self, token: &str, value: u32, total: Option<u32>, message: Option<&str>) {
pub fn update(&mut self, token: &str, value: f64, total: Option<f64>, message: Option<&str>) {
let bar = self.bars.entry(token.to_string()).or_insert_with(|| {
if let Some(total) = total {
self.multi_bar.add(
ProgressBar::new((total * 100) as u64).with_style(
ProgressBar::new((total * 100_f64) as u64).with_style(
ProgressStyle::with_template("[{elapsed}] {bar:40} {pos:>3}/{len:3} {msg}")
.unwrap(),
),
Expand All @@ -842,7 +842,7 @@ impl McpSpinners {
self.multi_bar.add(ProgressBar::new_spinner())
}
});
bar.set_position((value * 100) as u64);
bar.set_position((value * 100_f64) as u64);
if let Some(msg) = message {
bar.set_message(msg.to_string());
}
Expand Down
2 changes: 1 addition & 1 deletion crates/goose/src/context_mgmt/auto_compact.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ pub async fn check_compaction_needed(
let threshold = threshold_override.unwrap_or_else(|| {
config
.get_param::<f64>("GOOSE_AUTO_COMPACT_THRESHOLD")
.unwrap_or(0.3) // Default to 30%
.unwrap_or(0.8) // Default to 80%
});

let provider = agent.provider().await?;
Expand Down
1 change: 1 addition & 0 deletions crates/goose/src/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ pub enum ConfigError {
static MODEL_SPECIFIC_LIMITS: Lazy<Vec<(&'static str, usize)>> = Lazy::new(|| {
vec![
// openai
("gpt-5", 272_000),
("gpt-4-turbo", 128_000),
("gpt-4.1", 1_000_000),
("gpt-4-1", 1_000_000),
Expand Down
2 changes: 1 addition & 1 deletion ui/desktop/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"license": {
"name": "Apache-2.0"
},
"version": "1.1.0"
"version": "1.3.0"
},
"paths": {
"/agent/add_sub_recipes": {
Expand Down
4 changes: 2 additions & 2 deletions ui/desktop/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion ui/desktop/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "goose-app",
"productName": "Goose",
"version": "1.2.0",
"version": "1.3.0",
"description": "Goose App",
"engines": {
"node": "^22.17.1"
Expand Down
Loading