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
197 changes: 191 additions & 6 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,12 @@ jobs:
- name: Checkout code
uses: actions/checkout@v4

- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: build-output
path: .

- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
Expand All @@ -156,9 +162,6 @@ jobs:
- name: Install dependencies
run: npm ci

- name: Build TypeScript
run: npm run build

- name: Build standalone binary
run: |
mkdir -p release-binaries
Expand Down Expand Up @@ -199,6 +202,90 @@ jobs:
path: release-binaries/${{ matrix.binary_name }}
retention-days: 1

# Build relay-acp standalone binary for Zed editor integration
build-acp-standalone:
name: Build relay-acp (${{ matrix.target }})
needs: build
runs-on: ${{ matrix.os }}
if: github.event.inputs.package == 'all' || github.event.inputs.package == 'main'
strategy:
fail-fast: false
matrix:
include:
- os: macos-latest
target: bun-darwin-arm64
binary_name: relay-acp-darwin-arm64
- os: macos-latest
target: bun-darwin-x64
binary_name: relay-acp-darwin-x64
- os: ubuntu-latest
target: bun-linux-x64
binary_name: relay-acp-linux-x64
- os: ubuntu-latest
target: bun-linux-arm64
binary_name: relay-acp-linux-arm64

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: build-output
path: .

- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "npm"

- name: Install dependencies
run: npm ci

- name: Build relay-acp standalone binary
run: |
mkdir -p release-binaries
bun build \
--compile \
--minify \
--target=${{ matrix.target }} \
--define="process.env.AGENT_RELAY_VERSION=\"${{ needs.build.outputs.new_version }}\"" \
./packages/acp-bridge/dist/cli.js \
--outfile release-binaries/${{ matrix.binary_name }}

- name: Verify binary
if: matrix.target == 'bun-linux-x64' || (matrix.target == 'bun-darwin-arm64' && runner.arch == 'ARM64')
run: |
chmod +x release-binaries/${{ matrix.binary_name }}
./release-binaries/${{ matrix.binary_name }} --version || echo "Binary created (cross-compiled)"

- name: Compress binary with gzip
run: |
gzip -9 -k release-binaries/${{ matrix.binary_name }}
echo "Uncompressed: $(du -h release-binaries/${{ matrix.binary_name }} | cut -f1)"
echo "Compressed: $(du -h release-binaries/${{ matrix.binary_name }}.gz | cut -f1)"

- name: Upload compressed binary
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.binary_name }}.gz
path: release-binaries/${{ matrix.binary_name }}.gz
retention-days: 1

- name: Upload uncompressed binary
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.binary_name }}
path: release-binaries/${{ matrix.binary_name }}
retention-days: 1

# Build all packages once, version them, and upload
build:
name: Build & Version
Expand Down Expand Up @@ -646,10 +733,80 @@ jobs:
/tmp/agent-relay-test --version
echo "✓ Compressed binary decompresses and works"

# Verify relay-acp binaries on Linux
verify-acp-linux:
name: Verify relay-acp (Linux)
needs: [build-acp-standalone]
runs-on: ubuntu-latest
if: github.event.inputs.package == 'all' || github.event.inputs.package == 'main'

steps:
- name: Download Linux binary
uses: actions/download-artifact@v4
with:
name: relay-acp-linux-x64
path: bin/

- name: Download compressed binary
uses: actions/download-artifact@v4
with:
name: relay-acp-linux-x64.gz
path: bin/

- name: Verify uncompressed binary
run: |
chmod +x bin/relay-acp-linux-x64
echo "Testing uncompressed binary..."
./bin/relay-acp-linux-x64 --help
echo "✓ Uncompressed relay-acp binary works"

- name: Verify compressed binary
run: |
echo "Testing compressed binary decompression..."
gunzip -c bin/relay-acp-linux-x64.gz > /tmp/relay-acp-test
chmod +x /tmp/relay-acp-test
/tmp/relay-acp-test --help
echo "✓ Compressed relay-acp binary decompresses and works"

# Verify relay-acp binaries on macOS
verify-acp-macos:
name: Verify relay-acp (macOS)
needs: [build-acp-standalone]
runs-on: macos-latest
if: github.event.inputs.package == 'all' || github.event.inputs.package == 'main'

steps:
- name: Download macOS binary
uses: actions/download-artifact@v4
with:
name: relay-acp-darwin-arm64
path: bin/

- name: Download compressed binary
uses: actions/download-artifact@v4
with:
name: relay-acp-darwin-arm64.gz
path: bin/

- name: Verify uncompressed binary
run: |
chmod +x bin/relay-acp-darwin-arm64
echo "Testing uncompressed binary..."
./bin/relay-acp-darwin-arm64 --help
echo "✓ Uncompressed relay-acp binary works"

- name: Verify compressed binary
run: |
echo "Testing compressed binary decompression..."
gunzip -c bin/relay-acp-darwin-arm64.gz > /tmp/relay-acp-test
chmod +x /tmp/relay-acp-test
/tmp/relay-acp-test --help
echo "✓ Compressed relay-acp binary decompresses and works"

# Gate job that requires both Linux and macOS verification to pass
verify-binaries:
name: All Binaries Verified
needs: [verify-binaries-linux, verify-binaries-macos, verify-standalone-linux, verify-standalone-macos]
needs: [verify-binaries-linux, verify-binaries-macos, verify-standalone-linux, verify-standalone-macos, verify-acp-linux, verify-acp-macos]
runs-on: ubuntu-latest
if: github.event.inputs.package == 'all' || github.event.inputs.package == 'main'
steps:
Expand All @@ -663,6 +820,7 @@ jobs:
echo "### Verified Binaries" >> $GITHUB_STEP_SUMMARY
echo "- relay-pty: Linux x64, Linux ARM64, macOS x64, macOS ARM64" >> $GITHUB_STEP_SUMMARY
echo "- agent-relay: Linux x64, macOS ARM64 (both compressed and uncompressed)" >> $GITHUB_STEP_SUMMARY
echo "- relay-acp: Linux x64, macOS ARM64 (both compressed and uncompressed)" >> $GITHUB_STEP_SUMMARY

# Publish main package
publish-main:
Expand Down Expand Up @@ -718,7 +876,7 @@ jobs:
# Create git tag and release
create-release:
name: Create Release
needs: [build, build-binaries, build-standalone, verify-binaries, publish-main]
needs: [build, build-binaries, build-standalone, build-acp-standalone, verify-binaries, publish-main]
runs-on: ubuntu-latest
if: |
always() &&
Expand Down Expand Up @@ -752,6 +910,13 @@ jobs:
path: release-binaries/
merge-multiple: true

- name: Download relay-acp binaries
uses: actions/download-artifact@v4
with:
pattern: relay-acp-*
path: release-binaries/
merge-multiple: true

- name: Make binaries executable
run: |
# Make uncompressed binaries executable (skip .gz files)
Expand Down Expand Up @@ -797,6 +962,16 @@ jobs:
fi
done

# Check relay-acp binaries (for Zed editor)
for BINARY in relay-acp-darwin-arm64 relay-acp-darwin-x64 relay-acp-linux-x64 relay-acp-linux-arm64; do
if [ -f "release-binaries/$BINARY" ]; then
echo "✓ $BINARY"
else
echo "⚠ MISSING: $BINARY (Zed ACP bridge)"
# Don't fail on missing - acp-bridge is optional
fi
done

if [ $MISSING -eq 1 ]; then
echo ""
echo "ERROR: Some required binaries are missing!"
Expand Down Expand Up @@ -858,6 +1033,13 @@ jobs:
- `relay-pty-linux-arm64` - Linux ARM64
- `relay-pty-darwin-x64` - macOS Intel
- `relay-pty-darwin-arm64` - macOS Apple Silicon

### relay-acp binaries (Zed editor integration)
ACP bridge for Zed editor:
- `relay-acp-linux-x64` - Linux x86_64
- `relay-acp-linux-arm64` - Linux ARM64
- `relay-acp-darwin-x64` - macOS Intel
- `relay-acp-darwin-arm64` - macOS Apple Silicon
files: |
release-binaries/*
generate_release_notes: true
Expand All @@ -878,7 +1060,7 @@ jobs:

summary:
name: Summary
needs: [build, build-binaries, build-standalone, verify-binaries, verify-standalone-linux, verify-standalone-macos, publish-packages, publish-main, verify-publish]
needs: [build, build-binaries, build-standalone, build-acp-standalone, verify-binaries, verify-standalone-linux, verify-standalone-macos, verify-acp-linux, verify-acp-macos, publish-packages, publish-main, verify-publish]
runs-on: ubuntu-latest
if: always()

Expand All @@ -897,9 +1079,12 @@ jobs:
echo "| Build | ${{ needs.build.result == 'success' && '✅' || '❌' }} ${{ needs.build.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Build Binaries (Rust) | ${{ needs.build-binaries.result == 'success' && '✅' || (needs.build-binaries.result == 'skipped' && '⏭️' || '❌') }} ${{ needs.build-binaries.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Build Standalone (Bun) | ${{ needs.build-standalone.result == 'success' && '✅' || (needs.build-standalone.result == 'skipped' && '⏭️' || '❌') }} ${{ needs.build-standalone.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Build relay-acp (Bun) | ${{ needs.build-acp-standalone.result == 'success' && '✅' || (needs.build-acp-standalone.result == 'skipped' && '⏭️' || '❌') }} ${{ needs.build-acp-standalone.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Verify relay-pty | ${{ needs.verify-binaries.result == 'success' && '✅' || (needs.verify-binaries.result == 'skipped' && '⏭️' || '❌') }} ${{ needs.verify-binaries.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Verify Standalone (Linux) | ${{ needs.verify-standalone-linux.result == 'success' && '✅' || (needs.verify-standalone-linux.result == 'skipped' && '⏭️' || '❌') }} ${{ needs.verify-standalone-linux.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Verify Standalone (macOS) | ${{ needs.verify-standalone-macos.result == 'success' && '✅' || (needs.verify-standalone-macos.result == 'skipped' && '⏭️' || '❌') }} ${{ needs.verify-standalone-macos.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Verify relay-acp (Linux) | ${{ needs.verify-acp-linux.result == 'success' && '✅' || (needs.verify-acp-linux.result == 'skipped' && '⏭️' || '❌') }} ${{ needs.verify-acp-linux.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Verify relay-acp (macOS) | ${{ needs.verify-acp-macos.result == 'success' && '✅' || (needs.verify-acp-macos.result == 'skipped' && '⏭️' || '❌') }} ${{ needs.verify-acp-macos.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Publish Packages | ${{ needs.publish-packages.result == 'success' && '✅' || (needs.publish-packages.result == 'skipped' && '⏭️' || '❌') }} ${{ needs.publish-packages.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Publish Main | ${{ needs.publish-main.result == 'success' && '✅' || (needs.publish-main.result == 'skipped' && '⏭️' || '❌') }} ${{ needs.publish-main.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Post-Publish Verify | ${{ needs.verify-publish.result == 'success' && '✅' || (needs.verify-publish.result == 'skipped' && '⏭️' || '❌') }} ${{ needs.verify-publish.result }} |" >> $GITHUB_STEP_SUMMARY
16 changes: 13 additions & 3 deletions .github/workflows/test-install.yml
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,8 @@ jobs:

- name: Test install script with Node.js
if: matrix.node == 'with-node'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# Run the actual install
bash install.sh
Expand All @@ -122,6 +124,8 @@ jobs:

- name: Test install script without Node.js
if: matrix.node == 'no-node'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# This should either:
# 1. Download standalone binary (if available)
Expand Down Expand Up @@ -175,8 +179,10 @@ jobs:
uses: actions/checkout@v4

- name: Test install without gunzip (Docker)
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
docker run --rm -v "$PWD:/workspace" -w /workspace debian:bookworm-slim bash -c '
docker run --rm -e GITHUB_TOKEN="$GITHUB_TOKEN" -v "$PWD:/workspace" -w /workspace debian:bookworm-slim bash -c '
echo "=== Testing without gunzip ==="
apt-get update && apt-get install -y curl

Expand Down Expand Up @@ -217,8 +223,10 @@ jobs:
uses: actions/checkout@v4

- name: Test install on Alpine (Docker)
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
docker run --rm -v "$PWD:/workspace" -w /workspace alpine:latest sh -c '
docker run --rm -e GITHUB_TOKEN="$GITHUB_TOKEN" -v "$PWD:/workspace" -w /workspace alpine:latest sh -c '
echo "=== Testing on Alpine Linux ==="
apk add --no-cache bash curl gzip

Expand Down Expand Up @@ -254,8 +262,10 @@ jobs:
uses: actions/checkout@v4

- name: Test install on Fedora (Docker)
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
docker run --rm -v "$PWD:/workspace" -w /workspace fedora:latest bash -c '
docker run --rm -e GITHUB_TOKEN="$GITHUB_TOKEN" -v "$PWD:/workspace" -w /workspace fedora:latest bash -c '
echo "=== Testing on Fedora ==="
dnf install -y curl

Expand Down
12 changes: 11 additions & 1 deletion docs/quickstart.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,17 @@ description: "Get up and running with Agent Relay in 5 minutes"

This guide will have you running your first multi-agent network in under 5 minutes.

<Tip>Prefer to watch? Check out the [video demo](/videos/agent-relay-cli.mp4).</Tip>
<Tip>Prefer to watch? See the demo below.</Tip>

<Frame>
<video
controls
className="w-full aspect-video rounded-xl"
src="/videos/agent-relay-cli.mp4"
>
Your browser does not support the video tag.
</video>
</Frame>

## Prerequisites

Expand Down
Loading
Loading