diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 39b9ee987..4bd389171 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -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:
@@ -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
@@ -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
@@ -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:
@@ -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:
@@ -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() &&
@@ -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)
@@ -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!"
@@ -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
@@ -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()
@@ -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
diff --git a/.github/workflows/test-install.yml b/.github/workflows/test-install.yml
index 9c8e01ac2..42e51c7af 100644
--- a/.github/workflows/test-install.yml
+++ b/.github/workflows/test-install.yml
@@ -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
@@ -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)
@@ -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
@@ -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
@@ -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
diff --git a/docs/quickstart.mdx b/docs/quickstart.mdx
index cd14ef647..8e69e34e2 100644
--- a/docs/quickstart.mdx
+++ b/docs/quickstart.mdx
@@ -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.
-Prefer to watch? Check out the [video demo](/videos/agent-relay-cli.mp4).
+Prefer to watch? See the demo below.
+
+
+
+
## Prerequisites
diff --git a/install.sh b/install.sh
index 0c3b9a675..1642c605b 100755
--- a/install.sh
+++ b/install.sh
@@ -122,7 +122,13 @@ detect_platform() {
# Get latest version from GitHub
get_latest_version() {
if [ "$VERSION" = "latest" ]; then
- VERSION=$(curl -fsSL "https://api.github.com/repos/$REPO_RELAY/releases/latest" | sed -n 's/.*"tag_name"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p')
+ # Use GitHub token if available (avoids rate limiting)
+ local auth_header=""
+ if [ -n "${GITHUB_TOKEN:-}" ]; then
+ auth_header="-H \"Authorization: token $GITHUB_TOKEN\""
+ fi
+
+ VERSION=$(eval curl -fsSL $auth_header "https://api.github.com/repos/$REPO_RELAY/releases/latest" | sed -n 's/.*"tag_name"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p')
if [ -z "$VERSION" ]; then
error "Failed to fetch latest version"
fi
@@ -319,6 +325,98 @@ has_command() {
command -v "$1" &> /dev/null
}
+# Download relay-acp binary for Zed editor integration
+download_relay_acp() {
+ step "Downloading relay-acp binary (Zed editor integration)..."
+
+ local binary_name="relay-acp-${PLATFORM}"
+ local compressed_url="https://github.com/$REPO_RELAY/releases/download/v${VERSION}/${binary_name}.gz"
+ local uncompressed_url="https://github.com/$REPO_RELAY/releases/download/v${VERSION}/${binary_name}"
+ local target_path="$BIN_DIR/relay-acp"
+ local temp_file="/tmp/relay-acp-download-$$"
+
+ mkdir -p "$BIN_DIR"
+
+ # Setup cleanup trap for temp files
+ trap 'rm -f "${temp_file}.gz" "${temp_file}"' EXIT
+
+ # Try compressed binary first
+ if has_command gunzip; then
+ if curl -fsSL "$compressed_url" -o "${temp_file}.gz" 2>/dev/null; then
+ local is_gzip=false
+ if has_command file; then
+ file "${temp_file}.gz" 2>/dev/null | grep -q "gzip" && is_gzip=true
+ else
+ head -c 2 "${temp_file}.gz" 2>/dev/null | od -An -tx1 | grep -q "1f 8b" && is_gzip=true
+ fi
+
+ if [ "$is_gzip" = true ]; then
+ if gunzip -c "${temp_file}.gz" > "$target_path" 2>/dev/null; then
+ rm -f "${temp_file}.gz"
+ chmod +x "$target_path"
+
+ if "$target_path" --help &>/dev/null; then
+ success "Downloaded relay-acp binary (Zed ACP bridge)"
+ trap - EXIT
+ return 0
+ else
+ warn "relay-acp binary failed verification, trying uncompressed..."
+ rm -f "$target_path"
+ fi
+ else
+ rm -f "${temp_file}.gz" "$target_path"
+ fi
+ else
+ rm -f "${temp_file}.gz"
+ fi
+ fi
+ fi
+
+ # Fall back to uncompressed binary
+ if curl -fsSL "$uncompressed_url" -o "$target_path" 2>/dev/null; then
+ local file_size
+ file_size=$(stat -f%z "$target_path" 2>/dev/null || stat -c%s "$target_path" 2>/dev/null || echo "0")
+
+ if [ "$file_size" -gt 1000000 ]; then
+ chmod +x "$target_path"
+
+ if "$target_path" --help &>/dev/null; then
+ success "Downloaded relay-acp binary (Zed ACP bridge)"
+ trap - EXIT
+ return 0
+ else
+ rm -f "$target_path"
+ fi
+ else
+ rm -f "$target_path"
+ fi
+ fi
+
+ trap - EXIT
+ info "No relay-acp binary available for $PLATFORM"
+ return 1
+}
+
+# Install ACP bridge for Zed editor integration (fallback to npm if binary not available)
+install_acp_bridge() {
+ # Try binary first
+ if download_relay_acp; then
+ return 0
+ fi
+
+ # Fall back to npm if Node.js is available
+ if check_node; then
+ info "Installing ACP bridge via npm..."
+ if npm install -g @agent-relay/acp-bridge@"$VERSION" 2>/dev/null || npm install -g @agent-relay/acp-bridge 2>/dev/null; then
+ success "Installed relay-acp via npm (Zed ACP bridge)"
+ return 0
+ fi
+ fi
+
+ warn "relay-acp not available (Zed editor integration won't work)"
+ return 1
+}
+
# Download with progress indicator
download_with_progress() {
local url="$1"
@@ -501,6 +599,9 @@ Or use nvm: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/instal
fi
fi
+ # Install ACP bridge for Zed editor integration
+ install_acp_bridge || true
+
success "Installed via npm"
}
@@ -641,6 +742,8 @@ main() {
download_dashboard_binary || true
# Download dashboard UI files (required for standalone binary to serve the UI)
download_dashboard_ui || true
+ # Install ACP bridge for Zed editor (requires Node.js)
+ install_acp_bridge || true
verify_installation && print_usage && track_event "install_completed" && exit 0
fi
diff --git a/package-lock.json b/package-lock.json
index 949edd9b2..86848dc25 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -131,6 +131,10 @@
"resolved": "packages/continuity",
"link": true
},
+ "node_modules/@agent-relay/daemon": {
+ "resolved": "packages/daemon",
+ "link": true
+ },
"node_modules/@agent-relay/hooks": {
"resolved": "packages/hooks",
"link": true
@@ -350,6 +354,7 @@
},
"node_modules/@clack/prompts/node_modules/is-unicode-supported": {
"version": "1.3.0",
+ "extraneous": true,
"inBundle": true,
"license": "MIT",
"engines": {
@@ -1955,7 +1960,7 @@
"version": "8.16.0",
"resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.16.0.tgz",
"integrity": "sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==",
- "extraneous": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*",
@@ -10995,6 +11000,285 @@
}
}
},
+ "packages/daemon": {
+ "name": "@agent-relay/daemon",
+ "version": "2.1.15",
+ "dependencies": {
+ "@agent-relay/bridge": "2.1.15",
+ "@agent-relay/config": "2.1.15",
+ "@agent-relay/memory": "2.1.15",
+ "@agent-relay/policy": "2.1.15",
+ "@agent-relay/protocol": "2.1.15",
+ "@agent-relay/resiliency": "2.1.15",
+ "@agent-relay/storage": "2.1.15",
+ "@agent-relay/telemetry": "2.1.15",
+ "@agent-relay/user-directory": "2.1.15",
+ "@agent-relay/utils": "2.1.15",
+ "@agent-relay/wrapper": "2.1.15",
+ "pg": "^8.16.3",
+ "uuid": "^10.0.0",
+ "ws": "^8.18.3"
+ },
+ "devDependencies": {
+ "@types/node": "^22.19.3",
+ "@types/pg": "^8.16.0",
+ "@types/uuid": "^10.0.0",
+ "@types/ws": "^8.18.1",
+ "typescript": "^5.9.3",
+ "vitest": "^3.2.4"
+ }
+ },
+ "packages/daemon/node_modules/@vitest/expect": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz",
+ "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/chai": "^5.2.2",
+ "@vitest/spy": "3.2.4",
+ "@vitest/utils": "3.2.4",
+ "chai": "^5.2.0",
+ "tinyrainbow": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "packages/daemon/node_modules/@vitest/pretty-format": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz",
+ "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tinyrainbow": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "packages/daemon/node_modules/@vitest/runner": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz",
+ "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/utils": "3.2.4",
+ "pathe": "^2.0.3",
+ "strip-literal": "^3.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "packages/daemon/node_modules/@vitest/snapshot": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz",
+ "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/pretty-format": "3.2.4",
+ "magic-string": "^0.30.17",
+ "pathe": "^2.0.3"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "packages/daemon/node_modules/@vitest/spy": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz",
+ "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tinyspy": "^4.0.3"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "packages/daemon/node_modules/@vitest/utils": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz",
+ "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/pretty-format": "3.2.4",
+ "loupe": "^3.1.4",
+ "tinyrainbow": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "packages/daemon/node_modules/pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "packages/daemon/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "packages/daemon/node_modules/tinyrainbow": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz",
+ "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "packages/daemon/node_modules/tinyspy": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz",
+ "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "packages/daemon/node_modules/vite-node": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz",
+ "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cac": "^6.7.14",
+ "debug": "^4.4.1",
+ "es-module-lexer": "^1.7.0",
+ "pathe": "^2.0.3",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
+ },
+ "bin": {
+ "vite-node": "vite-node.mjs"
+ },
+ "engines": {
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "packages/daemon/node_modules/vitest": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz",
+ "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/chai": "^5.2.2",
+ "@vitest/expect": "3.2.4",
+ "@vitest/mocker": "3.2.4",
+ "@vitest/pretty-format": "^3.2.4",
+ "@vitest/runner": "3.2.4",
+ "@vitest/snapshot": "3.2.4",
+ "@vitest/spy": "3.2.4",
+ "@vitest/utils": "3.2.4",
+ "chai": "^5.2.0",
+ "debug": "^4.4.1",
+ "expect-type": "^1.2.1",
+ "magic-string": "^0.30.17",
+ "pathe": "^2.0.3",
+ "picomatch": "^4.0.2",
+ "std-env": "^3.9.0",
+ "tinybench": "^2.9.0",
+ "tinyexec": "^0.3.2",
+ "tinyglobby": "^0.2.14",
+ "tinypool": "^1.1.1",
+ "tinyrainbow": "^2.0.0",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0",
+ "vite-node": "3.2.4",
+ "why-is-node-running": "^2.3.0"
+ },
+ "bin": {
+ "vitest": "vitest.mjs"
+ },
+ "engines": {
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "@edge-runtime/vm": "*",
+ "@types/debug": "^4.1.12",
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+ "@vitest/browser": "3.2.4",
+ "@vitest/ui": "3.2.4",
+ "happy-dom": "*",
+ "jsdom": "*"
+ },
+ "peerDependenciesMeta": {
+ "@edge-runtime/vm": {
+ "optional": true
+ },
+ "@types/debug": {
+ "optional": true
+ },
+ "@types/node": {
+ "optional": true
+ },
+ "@vitest/browser": {
+ "optional": true
+ },
+ "@vitest/ui": {
+ "optional": true
+ },
+ "happy-dom": {
+ "optional": true
+ },
+ "jsdom": {
+ "optional": true
+ }
+ }
+ },
+ "packages/daemon/node_modules/vitest/node_modules/@vitest/mocker": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz",
+ "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/spy": "3.2.4",
+ "estree-walker": "^3.0.3",
+ "magic-string": "^0.30.17"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "msw": "^2.4.9",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "msw": {
+ "optional": true
+ },
+ "vite": {
+ "optional": true
+ }
+ }
+ },
"packages/hooks": {
"name": "@agent-relay/hooks",
"version": "2.1.15",