From 02b6804ce02b9f795f40be9f99933325c3aec528 Mon Sep 17 00:00:00 2001 From: Ahmed Abushagur Date: Tue, 2 Jun 2026 18:31:30 -0700 Subject: [PATCH] chore: de-rot stale org/repo refs, manifest data, and version drift Repo was renamed OpenRouterTeam/spawn -> OpenRouterLabs/spawn but nothing was updated; the old org only resolves via GitHub's redirect (fragile, and a hijack risk if the old org name is ever re-registered). Critical: - Rename all 141 OpenRouterTeam/spawn refs -> OpenRouterLabs/spawn across code, shell scripts, manifest, docs, tests, and fixtures (109 files). Includes hardcoded REPO consts (manifest.ts, agent-tarball.ts), release download URLs in every sh/{cloud}/{agent}.sh, gh/raw URLs, and asset URLs. - Update git remote origin to the canonical OpenRouterLabs/spawn. High (stale data): - README headline 9/7/63 -> 10/8/79; add Local Sandbox column + T3 Code row to the matrix table (t3code unavailable on sandbox per manifest). - packer/agents.json: add missing pi and t3code (node tier). - agent-default-models.md: add T3 Code row; refresh "Last verified" date. Medium (link/version drift): - OpenCode repo moved sst/opencode -> anomalyco/opencode (301); update manifest, README, agent-setup.ts and Dockerfile download URLs. - Bump @clack/prompts 1.0.0 -> 1.5.0. - Align valibot in .claude/scripts (^1.0.0 -> 1.2.0) with the rest of the repo. - Align CI bun-version (agent-tarballs.yml) 1.3.11 -> 1.3.9 to match the SHA-pinned install.sh and all agent scripts. @daytonaio/sdk bump (0.160 -> 0.183) reverted: 0.183 has breaking API changes (.list() is now an async iterator, signature changes) that need a tested migration; daytona can't be verified end-to-end here. Tracked separately. Verified: biome clean (205 files), tsc clean for all non-test src, bun test 2202 pass (the 3 failures are pre-existing flakes on origin/main, each passing in isolation). CLI version bumped 1.1.0 -> 1.1.1. Co-Authored-By: Claude Opus 4.8 (1M context) --- .claude/rules/agent-default-models.md | 3 +- .claude/rules/discovery.md | 2 +- .claude/rules/git-workflow.md | 2 +- .claude/rules/shell-scripts.md | 4 +- .claude/scripts/collaborator-gate.sh | 2 +- .claude/scripts/package.json | 2 +- .claude/skills/pcl/SKILL.md | 2 +- .claude/skills/setup-spa/SKILL.md | 4 +- .claude/skills/setup-spa/main.ts | 2 +- .claude/skills/setup-spa/spa.test.ts | 4 +- .claude/skills/update-metadata/update.ts | 2 +- .github/workflows/agent-tarballs.yml | 2 +- CLAUDE.md | 2 +- README.md | 37 ++++++++-------- bun.lock | 44 ++++++++++++++----- fixtures/claude-code/stream-events.json | 2 +- manifest.json | 40 ++++++++--------- packages/cli/README.md | 2 +- packages/cli/package.json | 4 +- .../cli/src/__tests__/agent-tarball.test.ts | 10 ++--- .../src/__tests__/commands-display.test.ts | 2 +- .../cli/src/__tests__/star-prompt.test.ts | 2 +- packages/cli/src/commands/export.ts | 2 +- packages/cli/src/guidance-data.ts | 4 +- packages/cli/src/index.ts | 2 +- packages/cli/src/manifest.ts | 2 +- packages/cli/src/security.ts | 4 +- packages/cli/src/shared/agent-setup.ts | 2 +- packages/cli/src/shared/agent-tarball.ts | 2 +- packages/cli/src/shared/star-prompt.ts | 2 +- packer/agents.json | 12 +++++ sh/aws/claude.sh | 2 +- sh/aws/codex.sh | 2 +- sh/aws/cursor.sh | 2 +- sh/aws/hermes.sh | 2 +- sh/aws/junie.sh | 2 +- sh/aws/kilocode.sh | 2 +- sh/aws/openclaw.sh | 2 +- sh/aws/opencode.sh | 2 +- sh/aws/pi.sh | 2 +- sh/aws/t3code.sh | 2 +- sh/cli/install.ps1 | 2 +- sh/cli/install.sh | 2 +- sh/daytona/claude.sh | 2 +- sh/daytona/codex.sh | 2 +- sh/daytona/cursor.sh | 2 +- sh/daytona/hermes.sh | 2 +- sh/daytona/junie.sh | 2 +- sh/daytona/kilocode.sh | 2 +- sh/daytona/openclaw.sh | 2 +- sh/daytona/opencode.sh | 2 +- sh/daytona/pi.sh | 2 +- sh/daytona/t3code.sh | 2 +- sh/digitalocean/claude.sh | 2 +- sh/digitalocean/codex.sh | 2 +- sh/digitalocean/cursor.sh | 2 +- sh/digitalocean/hermes.sh | 2 +- sh/digitalocean/junie.sh | 2 +- sh/digitalocean/kilocode.sh | 2 +- sh/digitalocean/openclaw.sh | 2 +- sh/digitalocean/opencode.sh | 2 +- sh/digitalocean/pi.sh | 2 +- sh/digitalocean/t3code.sh | 2 +- sh/docker/opencode.Dockerfile | 2 +- sh/e2e/lib/interactive.sh | 4 +- sh/gcp/claude.sh | 2 +- sh/gcp/codex.sh | 2 +- sh/gcp/cursor.sh | 2 +- sh/gcp/hermes.sh | 2 +- sh/gcp/junie.sh | 2 +- sh/gcp/kilocode.sh | 2 +- sh/gcp/openclaw.sh | 2 +- sh/gcp/opencode.sh | 2 +- sh/gcp/pi.sh | 2 +- sh/gcp/t3code.sh | 2 +- sh/hetzner/claude.sh | 2 +- sh/hetzner/codex.sh | 2 +- sh/hetzner/cursor.sh | 2 +- sh/hetzner/hermes.sh | 2 +- sh/hetzner/junie.sh | 2 +- sh/hetzner/kilocode.sh | 2 +- sh/hetzner/openclaw.sh | 2 +- sh/hetzner/opencode.sh | 2 +- sh/hetzner/pi.sh | 2 +- sh/hetzner/t3code.sh | 2 +- sh/local/README.md | 2 +- sh/local/claude.sh | 2 +- sh/local/codex.sh | 2 +- sh/local/cursor.sh | 2 +- sh/local/hermes.sh | 2 +- sh/local/junie.sh | 2 +- sh/local/kilocode.sh | 2 +- sh/local/openclaw.sh | 2 +- sh/local/opencode.sh | 2 +- sh/local/pi.sh | 2 +- sh/local/t3code.sh | 2 +- sh/sandbox/README.md | 2 +- sh/sandbox/claude.sh | 2 +- sh/sandbox/codex.sh | 2 +- sh/sandbox/cursor.sh | 2 +- sh/sandbox/hermes.sh | 2 +- sh/sandbox/junie.sh | 2 +- sh/sandbox/kilocode.sh | 2 +- sh/sandbox/openclaw.sh | 2 +- sh/sandbox/opencode.sh | 2 +- sh/sandbox/pi.sh | 2 +- sh/shared/github-auth.sh | 2 +- sh/sprite/claude.sh | 2 +- sh/sprite/codex.sh | 2 +- sh/sprite/cursor.sh | 2 +- sh/sprite/hermes.sh | 2 +- sh/sprite/junie.sh | 2 +- sh/sprite/kilocode.sh | 2 +- sh/sprite/openclaw.sh | 2 +- sh/sprite/opencode.sh | 2 +- sh/sprite/pi.sh | 2 +- sh/sprite/t3code.sh | 2 +- 117 files changed, 209 insertions(+), 173 deletions(-) diff --git a/.claude/rules/agent-default-models.md b/.claude/rules/agent-default-models.md index 9e9b46fe1..1c0ef77da 100644 --- a/.claude/rules/agent-default-models.md +++ b/.claude/rules/agent-default-models.md @@ -3,7 +3,7 @@ **Source of truth for the default LLM each agent uses via OpenRouter.** When updating an agent's default model, update BOTH the code and this file. This prevents regressions from stale model IDs. -Last verified: 2026-03-13 +Last verified: 2026-06-02 | Agent | Default Model | How It's Set | |---|---|---| @@ -16,6 +16,7 @@ Last verified: 2026-03-13 | Junie | _(provider default)_ | `JUNIE_OPENROUTER_API_KEY` — model selection handled by Junie natively | | Cursor CLI | _(provider default)_ | `--endpoint https://openrouter.ai/api/v1` + `CURSOR_API_KEY` — model selection via `--model` flag or `/model` in-session | | Pi | _(provider default)_ | `OPENROUTER_API_KEY` — model selection via `/model` in-session | +| T3 Code | _(inherited by child agents)_ | Wraps Claude Code + Codex as subprocesses; OpenRouter via inherited `ANTHROPIC_BASE_URL` / `OPENAI_BASE_URL` env vars on the children | ## When to update diff --git a/.claude/rules/discovery.md b/.claude/rules/discovery.md index 071adb2cf..5620142aa 100644 --- a/.claude/rules/discovery.md +++ b/.claude/rules/discovery.md @@ -68,7 +68,7 @@ To add: same steps as before (manifest.json entry, matrix entries, implement on ## 4. Respond to GitHub issues -Check `gh issue list --repo OpenRouterTeam/spawn --state open` for user requests: +Check `gh issue list --repo OpenRouterLabs/spawn --state open` for user requests: - If someone requests an agent or cloud, implement it and comment with the PR link - If something is already implemented, close the issue with a note - If a bug is reported, fix it diff --git a/.claude/rules/git-workflow.md b/.claude/rules/git-workflow.md index 20daf6487..21f5f117e 100644 --- a/.claude/rules/git-workflow.md +++ b/.claude/rules/git-workflow.md @@ -35,7 +35,7 @@ Before editing ANY files: ``` 5. **Open a draft PR, then merge when done:** ```bash - gh pr create --draft --repo OpenRouterTeam/spawn + gh pr create --draft --repo OpenRouterLabs/spawn gh pr ready NUMBER && gh pr merge --squash NUMBER ``` 6. **Clean up** the worktree: diff --git a/.claude/rules/shell-scripts.md b/.claude/rules/shell-scripts.md index 82124a508..010b90660 100644 --- a/.claude/rules/shell-scripts.md +++ b/.claude/rules/shell-scripts.md @@ -19,8 +19,8 @@ macOS ships bash 3.2. All scripts MUST work on it: - `#!/bin/bash` + `set -eo pipefail` (no `u` flag) - Use `${VAR:-}` for all optional env var checks (`OPENROUTER_API_KEY`, cloud tokens, etc.) - Primary script URL: `https://openrouter.ai/labs/spawn/{path}` (CDN proxy, maps to repo `sh/`, e.g., `{cloud}/{agent}.sh`) -- Fallback script URL: `https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/sh/{path}` -- Version check URL: `https://github.com/OpenRouterTeam/spawn/releases/download/cli-latest/version` (GitHub release artifact) +- Fallback script URL: `https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/sh/{path}` +- Version check URL: `https://github.com/OpenRouterLabs/spawn/releases/download/cli-latest/version` (GitHub release artifact) - All env vars documented in the cloud's `sh/{cloud}/README.md` ## Use Bun + TypeScript for Inline Scripting — NEVER python/python3 diff --git a/.claude/scripts/collaborator-gate.sh b/.claude/scripts/collaborator-gate.sh index 6785c0834..9259fe6a8 100644 --- a/.claude/scripts/collaborator-gate.sh +++ b/.claude/scripts/collaborator-gate.sh @@ -16,7 +16,7 @@ set -eo pipefail _COLLAB_CACHE_FILE="/tmp/spawn-collaborators-cache" _COLLAB_CACHE_TTL=600 # 10 minutes -_COLLAB_REPO="OpenRouterTeam/spawn" +_COLLAB_REPO="OpenRouterLabs/spawn" # Refresh the collaborator cache if stale or missing _refresh_collaborator_cache() { diff --git a/.claude/scripts/package.json b/.claude/scripts/package.json index b5ba6d21a..e9c3c51bb 100644 --- a/.claude/scripts/package.json +++ b/.claude/scripts/package.json @@ -4,6 +4,6 @@ "type": "module", "version": "0.0.1", "dependencies": { - "valibot": "^1.0.0" + "valibot": "1.2.0" } } diff --git a/.claude/skills/pcl/SKILL.md b/.claude/skills/pcl/SKILL.md index 473dde801..7631751bb 100644 --- a/.claude/skills/pcl/SKILL.md +++ b/.claude/skills/pcl/SKILL.md @@ -45,7 +45,7 @@ git branch -r --format='%(refname:short) %(committerdate:relative)' | grep -v 'o ### Step 4: Get branches with open PRs (protected) ```bash -gh pr list --repo OpenRouterTeam/spawn --state open --json headRefName --jq '.[].headRefName' +gh pr list --repo OpenRouterLabs/spawn --state open --json headRefName --jq '.[].headRefName' ``` Any branch with an open PR MUST be skipped. Never delete a branch that has an open PR. diff --git a/.claude/skills/setup-spa/SKILL.md b/.claude/skills/setup-spa/SKILL.md index a583517b0..067f5054f 100644 --- a/.claude/skills/setup-spa/SKILL.md +++ b/.claude/skills/setup-spa/SKILL.md @@ -41,7 +41,7 @@ Subsequent thread replies in tracked threads auto-trigger new Claude Code runs. | `SLACK_BOT_TOKEN` | Bot User OAuth Token (`xoxb-...`) | | `SLACK_APP_TOKEN` | App-Level Token for Socket Mode (`xapp-...`) | | `SLACK_CHANNEL_ID` | Channel ID to listen in (e.g. `C0123456789`) | -| `GITHUB_REPO` | Target repo context (default: `OpenRouterTeam/spawn`) | +| `GITHUB_REPO` | Target repo context (default: `OpenRouterLabs/spawn`) | | `REPO_ROOT` | Working directory for Claude Code (default: cwd) | GitHub auth uses the `gh` CLI — run `gh auth login` before starting. @@ -59,7 +59,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" export SLACK_BOT_TOKEN="xoxb-YOUR-BOT-TOKEN" export SLACK_APP_TOKEN="xapp-YOUR-APP-TOKEN" export SLACK_CHANNEL_ID="C0000000000" -export GITHUB_REPO="OpenRouterTeam/spawn" +export GITHUB_REPO="OpenRouterLabs/spawn" export REPO_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)" exec bun run "${SCRIPT_DIR}/main.ts" diff --git a/.claude/skills/setup-spa/main.ts b/.claude/skills/setup-spa/main.ts index 1f4edf76b..ace6e44e9 100644 --- a/.claude/skills/setup-spa/main.ts +++ b/.claude/skills/setup-spa/main.ts @@ -40,7 +40,7 @@ type SlackClient = InstanceType["client"]; const SLACK_BOT_TOKEN = process.env.SLACK_BOT_TOKEN ?? ""; const SLACK_APP_TOKEN = process.env.SLACK_APP_TOKEN ?? ""; -const GITHUB_REPO = process.env.GITHUB_REPO ?? "OpenRouterTeam/spawn"; +const GITHUB_REPO = process.env.GITHUB_REPO ?? "OpenRouterLabs/spawn"; const TRIGGER_SECRET = process.env.TRIGGER_SECRET ?? ""; const GROWTH_TRIGGER_URL = process.env.GROWTH_TRIGGER_URL ?? ""; const GROWTH_REPLY_SECRET = process.env.GROWTH_REPLY_SECRET ?? ""; diff --git a/.claude/skills/setup-spa/spa.test.ts b/.claude/skills/setup-spa/spa.test.ts index 5d68e5de4..4978eca4f 100644 --- a/.claude/skills/setup-spa/spa.test.ts +++ b/.claude/skills/setup-spa/spa.test.ts @@ -332,10 +332,10 @@ describe("extractToolHint", () => { it("extracts command from input", () => { const block: Record = { input: { - command: "gh issue list --repo OpenRouterTeam/spawn", + command: "gh issue list --repo OpenRouterLabs/spawn", }, }; - expect(extractToolHint(block)).toBe("gh issue list --repo OpenRouterTeam/spawn"); + expect(extractToolHint(block)).toBe("gh issue list --repo OpenRouterLabs/spawn"); }); it("extracts pattern from input", () => { diff --git a/.claude/skills/update-metadata/update.ts b/.claude/skills/update-metadata/update.ts index 7329d3f64..159f8a0ba 100644 --- a/.claude/skills/update-metadata/update.ts +++ b/.claude/skills/update-metadata/update.ts @@ -183,7 +183,7 @@ async function refreshIconsFor( const contentType = res.headers.get("content-type")?.split(";")[0] ?? ""; const ext = EXT_MAP[contentType] ?? src.ext; const outPath = resolve(ROOT, `${assetDir}/${id}.${ext}`); - const rawUrl = `https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/${assetDir}/${id}.${ext}`; + const rawUrl = `https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/${assetDir}/${id}.${ext}`; if (dryRun) { console.log(` [dry-run] ${id}: would download ${src.url} → ${outPath}`); diff --git a/.github/workflows/agent-tarballs.yml b/.github/workflows/agent-tarballs.yml index 319df0b63..bbac90cd8 100644 --- a/.github/workflows/agent-tarballs.yml +++ b/.github/workflows/agent-tarballs.yml @@ -63,7 +63,7 @@ jobs: - name: Install Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2 with: - bun-version: "1.3.11" + bun-version: "1.3.9" - name: Install agent under /root env: diff --git a/CLAUDE.md b/CLAUDE.md index 25dc3fd1c..d24b09915 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -72,7 +72,7 @@ All cloud provisioning and agent setup logic lives in TypeScript under `packages When you encounter bugs, stale references, broken functionality, or architectural issues that are **outside the scope of your current task**, file a GitHub issue immediately rather than ignoring them or trying to fix everything at once: ```bash -gh issue create --repo OpenRouterTeam/spawn --title "bug: " --body "
" +gh issue create --repo OpenRouterLabs/spawn --title "bug: " --body "
" ``` Examples of when to file: diff --git a/README.md b/README.md index 616a3eae7..15d8156da 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Launch any AI agent on any cloud with a single command. Coding agents, research agents, self-hosted AI tools — Spawn deploys them all. All models powered by [OpenRouter](https://openrouter.ai). (ALPHA software, use at your own risk!) -**9 agents. 7 clouds. 63 working combinations. Zero config.** +**10 agents. 8 clouds. 79 working combinations. Zero config.** ## Install @@ -332,21 +332,22 @@ If an agent fails to install or launch on a cloud: - **Rerun last session**: `spawn last` or `spawn rerun` - **Check version**: `spawn version` shows CLI version and cache status - **Update spawn**: `spawn update` checks for the latest version -- **Report bugs**: Open an issue at https://github.com/OpenRouterTeam/spawn/issues +- **Report bugs**: Open an issue at https://github.com/OpenRouterLabs/spawn/issues ## Matrix -| | [Local Machine](sh/local/) | [Hetzner Cloud](sh/hetzner/) | [AWS Lightsail](sh/aws/) | [DigitalOcean](sh/digitalocean/) | [GCP Compute Engine](sh/gcp/) | [Daytona](sh/daytona/) | [Sprite](sh/sprite/) | -|---|---|---|---|---|---|---|---| -| [**Claude Code**](https://claude.ai) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| [**OpenClaw**](https://github.com/openclaw/openclaw) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| [**Codex CLI**](https://github.com/openai/codex) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| [**OpenCode**](https://github.com/sst/opencode) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| [**Kilo Code**](https://github.com/Kilo-Org/kilocode) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| [**Hermes Agent**](https://github.com/NousResearch/hermes-agent) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| [**Junie**](https://www.jetbrains.com/junie/) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| [**Cursor CLI**](https://cursor.com/cli) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| [**Pi**](https://pi.dev) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| | [Local Machine](sh/local/) | [Local Sandbox](sh/sandbox/) | [Hetzner Cloud](sh/hetzner/) | [AWS Lightsail](sh/aws/) | [DigitalOcean](sh/digitalocean/) | [GCP Compute Engine](sh/gcp/) | [Daytona](sh/daytona/) | [Sprite](sh/sprite/) | +|---|---|---|---|---|---|---|---|---| +| [**Claude Code**](https://claude.ai) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| [**OpenClaw**](https://github.com/openclaw/openclaw) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| [**Codex CLI**](https://github.com/openai/codex) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| [**OpenCode**](https://github.com/anomalyco/opencode) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| [**Kilo Code**](https://github.com/Kilo-Org/kilocode) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| [**Hermes Agent**](https://github.com/NousResearch/hermes-agent) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| [**Junie**](https://www.jetbrains.com/junie/) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| [**Cursor CLI**](https://cursor.com/cli) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| [**Pi**](https://pi.dev) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| [**T3 Code**](https://github.com/pingdotgg/t3code) | ✓ | — | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ### How it works @@ -362,7 +363,7 @@ Scripts work standalone (`bash <(curl ...)`) or through the CLI. ## Development ```bash -git clone https://github.com/OpenRouterTeam/spawn.git +git clone https://github.com/OpenRouterLabs/spawn.git cd spawn git config core.hooksPath .githooks ``` @@ -400,7 +401,7 @@ Pick any agent + cloud combination from the matrix and try it out: spawn claude hetzner # or any combination ``` -If something breaks, hangs, or behaves unexpectedly, open an issue using the [bug report template](https://github.com/OpenRouterTeam/spawn/issues/new?template=bug_report.yml). Include: +If something breaks, hangs, or behaves unexpectedly, open an issue using the [bug report template](https://github.com/OpenRouterLabs/spawn/issues/new?template=bug_report.yml). Include: - The exact command you ran - The cloud provider and agent @@ -411,9 +412,9 @@ If something breaks, hangs, or behaves unexpectedly, open an issue using the [bu Want to see a specific cloud provider or agent supported? Use the dedicated templates: -- [Request a cloud provider](https://github.com/OpenRouterTeam/spawn/issues/new?template=cloud_request.yml) -- [Request an agent](https://github.com/OpenRouterTeam/spawn/issues/new?template=agent_request.yml) -- [Request a CLI feature](https://github.com/OpenRouterTeam/spawn/issues/new?template=cli_feature_request.yml) +- [Request a cloud provider](https://github.com/OpenRouterLabs/spawn/issues/new?template=cloud_request.yml) +- [Request an agent](https://github.com/OpenRouterLabs/spawn/issues/new?template=agent_request.yml) +- [Request a CLI feature](https://github.com/OpenRouterLabs/spawn/issues/new?template=cli_feature_request.yml) Requests with real-world use cases get prioritized. diff --git a/bun.lock b/bun.lock index 6d877f5d2..97619b73e 100644 --- a/bun.lock +++ b/bun.lock @@ -13,7 +13,7 @@ "name": "@spawn/hooks", "version": "0.0.1", "dependencies": { - "valibot": "^1.0.0", + "valibot": "1.2.0", }, }, ".claude/skills/setup-spa": { @@ -29,12 +29,12 @@ }, "packages/cli": { "name": "@openrouter/spawn", - "version": "0.31.0", + "version": "1.1.1", "bin": { "spawn": "cli.js", }, "dependencies": { - "@clack/prompts": "1.0.0", + "@clack/prompts": "1.5.0", "@daytonaio/sdk": "0.160.0", "@openrouter/spawn-shared": "workspace:*", "picocolors": "1.1.1", @@ -158,9 +158,9 @@ "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.3", "", { "os": "win32", "cpu": "x64" }, "sha512-vSm/vOJe06pf14aGHfHl3Ar91Nlx4YYmohElDJ+17UbRwe99n987S/MhAlQOkONqf1utJor04ChkCPmKb8SWdw=="], - "@clack/core": ["@clack/core@1.0.0", "", { "dependencies": { "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-Orf9Ltr5NeiEuVJS8Rk2XTw3IxNC2Bic3ash7GgYeA8LJ/zmSNpSQ/m5UAhe03lA6KFgklzZ5KTHs4OAMA/SAQ=="], + "@clack/core": ["@clack/core@1.4.0", "", { "dependencies": { "fast-wrap-ansi": "^0.2.0", "sisteransi": "^1.0.5" } }, "sha512-7Wctjq6f7c1CPz8sPpkwUnz8yRgVANkpNupb81q432FjcJg4l+Sw7XANdNSdWfAKq0IHI0JTcUeK5dxs/HrGPw=="], - "@clack/prompts": ["@clack/prompts@1.0.0", "", { "dependencies": { "@clack/core": "1.0.0", "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-rWPXg9UaCFqErJVQ+MecOaWsozjaxol4yjnmYcGNipAWzdaWa2x+VJmKfGq7L0APwBohQOYdHC+9RO4qRXej+A=="], + "@clack/prompts": ["@clack/prompts@1.5.0", "", { "dependencies": { "@clack/core": "1.4.0", "fast-string-width": "^3.0.2", "fast-wrap-ansi": "^0.2.0", "sisteransi": "^1.0.5" } }, "sha512-wKh+wTjmrUoUdkZg8KpJO5X+p9PWV+KE9mePseq9UYWkukgTKsGS47RRL2HstwVcvDQH+PenrPJWII8+MfiiyA=="], "@commitlint/cli": ["@commitlint/cli@20.4.3", "", { "dependencies": { "@commitlint/format": "^20.4.3", "@commitlint/lint": "^20.4.3", "@commitlint/load": "^20.4.3", "@commitlint/read": "^20.4.3", "@commitlint/types": "^20.4.3", "tinyexec": "^1.0.0", "yargs": "^17.0.0" }, "bin": { "commitlint": "./cli.js" } }, "sha512-Z37EMoDT7+Upg500vlr/vZrgRsb6Xc5JAA3Tv7BYbobnN/ZpqUeZnSLggBg2+1O+NptRDtyujr2DD1CPV2qwhA=="], @@ -274,7 +274,7 @@ "@opentelemetry/sdk-node": ["@opentelemetry/sdk-node@0.207.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.207.0", "@opentelemetry/core": "2.2.0", "@opentelemetry/exporter-logs-otlp-grpc": "0.207.0", "@opentelemetry/exporter-logs-otlp-http": "0.207.0", "@opentelemetry/exporter-logs-otlp-proto": "0.207.0", "@opentelemetry/exporter-metrics-otlp-grpc": "0.207.0", "@opentelemetry/exporter-metrics-otlp-http": "0.207.0", "@opentelemetry/exporter-metrics-otlp-proto": "0.207.0", "@opentelemetry/exporter-prometheus": "0.207.0", "@opentelemetry/exporter-trace-otlp-grpc": "0.207.0", "@opentelemetry/exporter-trace-otlp-http": "0.207.0", "@opentelemetry/exporter-trace-otlp-proto": "0.207.0", "@opentelemetry/exporter-zipkin": "2.2.0", "@opentelemetry/instrumentation": "0.207.0", "@opentelemetry/propagator-b3": "2.2.0", "@opentelemetry/propagator-jaeger": "2.2.0", "@opentelemetry/resources": "2.2.0", "@opentelemetry/sdk-logs": "0.207.0", "@opentelemetry/sdk-metrics": "2.2.0", "@opentelemetry/sdk-trace-base": "2.2.0", "@opentelemetry/sdk-trace-node": "2.2.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-hnRsX/M8uj0WaXOBvFenQ8XsE8FLVh2uSnn1rkWu4mx+qu7EKGUZvZng6y/95cyzsqOfiaDDr08Ek4jppkIDNg=="], - "@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.6.1", "", { "dependencies": { "@opentelemetry/core": "2.6.1", "@opentelemetry/resources": "2.6.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-r86ut4T1e8vNwB35CqCcKd45yzqH6/6Wzvpk2/cZB8PsPLlZFTvrh8yfOS3CYZYcUmAx4hHTZJ8AO8Dj8nrdhw=="], + "@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.7.1", "", { "dependencies": { "@opentelemetry/core": "2.7.1", "@opentelemetry/resources": "2.7.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-NAYIlsF8MPUsKqJMiDQJTMPOmlbawC1Iz/omMLygZ1C9am8fTKYjTaI+OZM+WTY3t3Glo0wnOg/6/pac6RGPPw=="], "@opentelemetry/sdk-trace-node": ["@opentelemetry/sdk-trace-node@2.2.0", "", { "dependencies": { "@opentelemetry/context-async-hooks": "2.2.0", "@opentelemetry/core": "2.2.0", "@opentelemetry/sdk-trace-base": "2.2.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-+OaRja3f0IqGG2kptVeYsrZQK9nKRSpfFrKtRBq4uh6nIB8bTBgaGvYQrQoRrQWQMA5dK5yLhDMDc0dvYvCOIQ=="], @@ -458,6 +458,8 @@ "acorn-import-attributes": ["acorn-import-attributes@1.9.5", "", { "peerDependencies": { "acorn": "^8" } }, "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ=="], + "agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], + "ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], @@ -470,7 +472,7 @@ "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], - "axios": ["axios@1.13.5", "", { "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q=="], + "axios": ["axios@1.16.1", "", { "dependencies": { "follow-redirects": "^1.16.0", "form-data": "^4.0.5", "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, "sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A=="], "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], @@ -596,8 +598,14 @@ "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + "fast-string-truncated-width": ["fast-string-truncated-width@3.0.3", "", {}, "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g=="], + + "fast-string-width": ["fast-string-width@3.0.2", "", { "dependencies": { "fast-string-truncated-width": "^3.0.2" } }, "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg=="], + "fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="], + "fast-wrap-ansi": ["fast-wrap-ansi@0.2.2", "", { "dependencies": { "fast-string-width": "^3.0.2" } }, "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q=="], + "fast-xml-builder": ["fast-xml-builder@1.1.4", "", { "dependencies": { "path-expression-matcher": "^1.1.3" } }, "sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg=="], "fast-xml-parser": ["fast-xml-parser@5.5.8", "", { "dependencies": { "fast-xml-builder": "^1.1.4", "path-expression-matcher": "^1.2.0", "strnum": "^2.2.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ=="], @@ -608,7 +616,7 @@ "finalhandler": ["finalhandler@2.1.1", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="], - "follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], + "follow-redirects": ["follow-redirects@1.16.0", "", {}, "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="], "form-data": ["form-data@4.0.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="], @@ -644,6 +652,8 @@ "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], + "https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], + "husky": ["husky@9.1.7", "", { "bin": { "husky": "bin.js" } }, "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA=="], "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], @@ -876,7 +886,7 @@ "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], - "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + "proxy-from-env": ["proxy-from-env@2.1.0", "", {}, "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="], "qs": ["qs@6.15.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ=="], @@ -1034,12 +1044,16 @@ "@opentelemetry/sdk-node/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.2.0", "", { "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw=="], - "@opentelemetry/sdk-trace-base/@opentelemetry/core": ["@opentelemetry/core@2.6.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-8xHSGWpJP9wBxgBpnqGL0R3PbdWQndL1Qp50qrg71+B28zK5OQmUgcDKLJgzyAAV38t4tOyLMGDD60LneR5W8g=="], + "@opentelemetry/sdk-trace-base/@opentelemetry/core": ["@opentelemetry/core@2.7.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-QAqIj32AtK6+pEVNG7EOVxHdE06RP+FM5qpiEJ4RtDcFIqKUZHYhl7/7UY5efhwmwNAg7j8QbJVBLxMerc0+gw=="], - "@opentelemetry/sdk-trace-base/@opentelemetry/resources": ["@opentelemetry/resources@2.6.1", "", { "dependencies": { "@opentelemetry/core": "2.6.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-lID/vxSuKWXM55XhAKNoYXu9Cutoq5hFdkbTdI/zDKQktXzcWBVhNsOkiZFTMU9UtEWuGRNe0HUgmsFldIdxVA=="], + "@opentelemetry/sdk-trace-base/@opentelemetry/resources": ["@opentelemetry/resources@2.7.1", "", { "dependencies": { "@opentelemetry/core": "2.7.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-DeT6KKolmC4e/dRQvMQ/RwlnzhaqeiFOXY5ngoOPJ07GgVVKxZOg9EcrNZb5aTzUn+iCrJldAgOfQm1O/QfPAQ=="], "@opentelemetry/sdk-trace-node/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.2.0", "", { "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw=="], + "@slack/bolt/axios": ["axios@1.13.5", "", { "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q=="], + + "@slack/web-api/axios": ["axios@1.13.5", "", { "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q=="], + "accepts/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], "conventional-commits-parser/meow": ["meow@13.2.0", "", {}, "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA=="], @@ -1060,6 +1074,14 @@ "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], + "@slack/bolt/axios/follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], + + "@slack/bolt/axios/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + + "@slack/web-api/axios/follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], + + "@slack/web-api/axios/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + "accepts/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], "express/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], diff --git a/fixtures/claude-code/stream-events.json b/fixtures/claude-code/stream-events.json index 93a166508..66c481156 100644 --- a/fixtures/claude-code/stream-events.json +++ b/fixtures/claude-code/stream-events.json @@ -21,7 +21,7 @@ "type": "tool_use", "id": "toolu_01ABC", "name": "Bash", - "input": { "command": "gh issue list --repo OpenRouterTeam/spawn --state open --limit 5" } + "input": { "command": "gh issue list --repo OpenRouterLabs/spawn --state open --limit 5" } } ], "model": "claude-sonnet-4-20250514", diff --git a/manifest.json b/manifest.json index 3284608e0..0ee59b4f4 100644 --- a/manifest.json +++ b/manifest.json @@ -27,7 +27,7 @@ "bypassPermissionsModeAccepted": true } }, - "icon": "https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/assets/agents/claude.png", + "icon": "https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/assets/agents/claude.png", "featured_cloud": [ "digitalocean", "sprite" @@ -67,7 +67,7 @@ "default": "openrouter/auto" } }, - "icon": "https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/assets/agents/openclaw.png", + "icon": "https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/assets/agents/openclaw.png", "featured_cloud": [ "digitalocean", "sprite" @@ -101,7 +101,7 @@ "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}" }, "notes": "Works with OpenRouter via OPENAI_BASE_URL override pointing to openrouter.ai/api/v1", - "icon": "https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/assets/agents/codex.png", + "icon": "https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/assets/agents/codex.png", "featured_cloud": [ "digitalocean", "sprite" @@ -126,20 +126,20 @@ "opencode": { "name": "OpenCode", "description": "AI coding agent built for the terminal with TUI", - "url": "https://github.com/sst/opencode", + "url": "https://github.com/anomalyco/opencode", "install": "curl -fsSL https://opencode.ai/install | bash", "launch": "opencode", "env": { "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}" }, "notes": "Natively supports OpenRouter via OPENROUTER_API_KEY env var. Go-based TUI using Bubble Tea.", - "icon": "https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/assets/agents/opencode.png", + "icon": "https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/assets/agents/opencode.png", "featured_cloud": [ "digitalocean", "sprite" ], "creator": "SST", - "repo": "sst/opencode", + "repo": "anomalyco/opencode", "license": "MIT", "created": "2025-04", "added": "2025-08", @@ -167,7 +167,7 @@ "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}" }, "notes": "Natively supports OpenRouter as a provider via KILO_PROVIDER_TYPE=openrouter. CLI installable via npm as @kilocode/cli, invocable as 'kilocode' or 'kilo'.", - "icon": "https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/assets/agents/kilocode.png", + "icon": "https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/assets/agents/kilocode.png", "featured_cloud": [ "digitalocean", "sprite" @@ -202,7 +202,7 @@ "OPENAI_API_KEY": "${OPENROUTER_API_KEY}" }, "notes": "Natively supports OpenRouter via OPENROUTER_API_KEY. Also works via OPENAI_BASE_URL + OPENAI_API_KEY for OpenAI-compatible mode. Installs Python 3.11 via uv. Ships a local web dashboard (port 9119) for configuration, session monitoring, skill browsing, and gateway management — auto-exposed via SSH tunnel when run through spawn.", - "icon": "https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/assets/agents/hermes.png", + "icon": "https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/assets/agents/hermes.png", "featured_cloud": [ "digitalocean", "sprite" @@ -236,7 +236,7 @@ "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}" }, "notes": "Natively supports OpenRouter via JUNIE_OPENROUTER_API_KEY. Subagent tasks may require GPT-4.1 Mini, GPT-4.1, or GPT-5 models to be enabled on your OpenRouter account.", - "icon": "https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/assets/agents/junie.png", + "icon": "https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/assets/agents/junie.png", "featured_cloud": [ "digitalocean", "sprite" @@ -269,7 +269,7 @@ "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}" }, "notes": "Natively supports OpenRouter as a provider via OPENROUTER_API_KEY. The CLI command is 'pi'. Config lives in ~/.pi/agent/. Also known as shittycodingagent.ai.", - "icon": "https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/assets/agents/pi.png", + "icon": "https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/assets/agents/pi.png", "featured_cloud": [ "digitalocean", "sprite" @@ -318,7 +318,7 @@ } }, "notes": "Routes through OpenRouter via a local ConnectRPC-to-REST translation proxy (Caddy + Node.js). The proxy intercepts Cursor's proprietary protobuf protocol, translates to OpenAI-compatible API calls, and streams responses back. Binary installs to ~/.local/bin/agent.", - "icon": "https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/assets/agents/cursor.png", + "icon": "https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/assets/agents/cursor.png", "featured_cloud": [ "digitalocean", "sprite" @@ -355,7 +355,7 @@ "OPENAI_BASE_URL": "https://openrouter.ai/api/v1" }, "notes": "Web GUI that spawns Claude Code and Codex as subprocesses via node-pty. OpenRouter integration works through inherited env vars on the child agent processes. Requires Node.js 22+. Default port 3773.", - "icon": "https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/assets/agents/t3code.png", + "icon": "https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/assets/agents/t3code.png", "featured_cloud": [ "digitalocean", "sprite" @@ -384,7 +384,7 @@ "name": "Local Machine", "price": "Free", "description": "Your computer — no account or payment needed", - "url": "https://github.com/OpenRouterTeam/spawn", + "url": "https://github.com/OpenRouterLabs/spawn", "type": "local", "auth": "none", "provision_method": "none (local execution)", @@ -396,7 +396,7 @@ "name": "Local Sandbox", "price": "Free", "description": "Your computer, in a throwaway Docker container — no account or payment needed", - "url": "https://github.com/OpenRouterTeam/spawn", + "url": "https://github.com/OpenRouterLabs/spawn", "type": "local", "auth": "none", "provision_method": "docker run (local container)", @@ -419,7 +419,7 @@ "location": "nbg1", "image": "ubuntu-24.04" }, - "icon": "https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/assets/clouds/hetzner.png" + "icon": "https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/assets/clouds/hetzner.png" }, "aws": { "name": "AWS Lightsail", @@ -437,7 +437,7 @@ "blueprint": "ubuntu_24_04" }, "notes": "Uses 'ubuntu' user instead of 'root'. Requires AWS CLI installed and configured.", - "icon": "https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/assets/clouds/aws.png" + "icon": "https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/assets/clouds/aws.png" }, "digitalocean": { "name": "DigitalOcean", @@ -454,7 +454,7 @@ "region": "nyc3", "image": "ubuntu-24-04-x64" }, - "icon": "https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/assets/clouds/digitalocean.png" + "icon": "https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/assets/clouds/digitalocean.png" }, "gcp": { "name": "GCP Compute Engine", @@ -472,7 +472,7 @@ "image_family": "ubuntu-2404-lts-amd64" }, "notes": "Uses current username for SSH. Requires gcloud CLI installed and configured.", - "icon": "https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/assets/clouds/gcp.png" + "icon": "https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/assets/clouds/gcp.png" }, "daytona": { "name": "Daytona", @@ -489,7 +489,7 @@ "size": "small" }, "notes": "Uses the Daytona SDK for sandbox lifecycle, file transfer, and signed preview URLs. SSH access tokens are minted on demand and never persisted.", - "icon": "https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/assets/clouds/daytona.png" + "icon": "https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/assets/clouds/daytona.png" }, "sprite": { "name": "Sprite", @@ -501,7 +501,7 @@ "provision_method": "sprite create", "exec_method": "sprite exec", "interactive_method": "sprite exec -tty", - "icon": "https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/assets/clouds/sprite.png" + "icon": "https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/assets/clouds/sprite.png" } }, "matrix": { diff --git a/packages/cli/README.md b/packages/cli/README.md index c74abcd70..85a95ad18 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -57,7 +57,7 @@ The TypeScript CLI (`src/*.ts`) provides: ### Quick Install ```bash -curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/sh/cli/install.sh | bash +curl -fsSL https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/sh/cli/install.sh | bash ``` The installer will: diff --git a/packages/cli/package.json b/packages/cli/package.json index 95af7202e..ad2bd2cd6 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@openrouter/spawn", - "version": "1.1.0", + "version": "1.1.1", "type": "module", "bin": { "spawn": "cli.js" @@ -14,7 +14,7 @@ "test:watch": "bun test --watch" }, "dependencies": { - "@clack/prompts": "1.0.0", + "@clack/prompts": "1.5.0", "@daytonaio/sdk": "0.160.0", "@openrouter/spawn-shared": "workspace:*", "picocolors": "1.1.1", diff --git a/packages/cli/src/__tests__/agent-tarball.test.ts b/packages/cli/src/__tests__/agent-tarball.test.ts index e8cf96c0a..09fa3fd91 100644 --- a/packages/cli/src/__tests__/agent-tarball.test.ts +++ b/packages/cli/src/__tests__/agent-tarball.test.ts @@ -30,7 +30,7 @@ const RELEASE_PAYLOAD = { { name: "spawn-agent-openclaw-x86_64-20260305.tar.gz", browser_download_url: - "https://github.com/OpenRouterTeam/spawn/releases/download/agent-openclaw-latest/spawn-agent-openclaw-x86_64-20260305.tar.gz", + "https://github.com/OpenRouterLabs/spawn/releases/download/agent-openclaw-latest/spawn-agent-openclaw-x86_64-20260305.tar.gz", }, ], }; @@ -178,7 +178,7 @@ describe("tryTarballInstall", () => { { name: "spawn-agent-claude-x86_64-20260305.tar.gz", browser_download_url: - "https://github.com/OpenRouterTeam/spawn/releases/download/agent-claude-latest/spawn-agent-claude-x86_64-20260305.tar.gz", + "https://github.com/OpenRouterLabs/spawn/releases/download/agent-claude-latest/spawn-agent-claude-x86_64-20260305.tar.gz", }, ], }; @@ -199,7 +199,7 @@ describe("tryTarballInstall", () => { { name: "spawn-agent-claude-arm64-20260305.tar.gz", browser_download_url: - "https://github.com/OpenRouterTeam/spawn/releases/download/agent-claude-latest/spawn-agent-claude-arm64-20260305.tar.gz", + "https://github.com/OpenRouterLabs/spawn/releases/download/agent-claude-latest/spawn-agent-claude-arm64-20260305.tar.gz", }, ], }; @@ -220,12 +220,12 @@ describe("tryTarballInstall", () => { { name: "spawn-agent-claude-x86_64-20260305.tar.gz", browser_download_url: - "https://github.com/OpenRouterTeam/spawn/releases/download/agent-claude-latest/spawn-agent-claude-x86_64-20260305.tar.gz", + "https://github.com/OpenRouterLabs/spawn/releases/download/agent-claude-latest/spawn-agent-claude-x86_64-20260305.tar.gz", }, { name: "spawn-agent-claude-arm64-20260305.tar.gz", browser_download_url: - "https://github.com/OpenRouterTeam/spawn/releases/download/agent-claude-latest/spawn-agent-claude-arm64-20260305.tar.gz", + "https://github.com/OpenRouterLabs/spawn/releases/download/agent-claude-latest/spawn-agent-claude-arm64-20260305.tar.gz", }, ], }; diff --git a/packages/cli/src/__tests__/commands-display.test.ts b/packages/cli/src/__tests__/commands-display.test.ts index 3fec8d732..cb95d4eaa 100644 --- a/packages/cli/src/__tests__/commands-display.test.ts +++ b/packages/cli/src/__tests__/commands-display.test.ts @@ -241,7 +241,7 @@ describe("Commands Display Output", () => { it("should show repository URL", () => { cmdHelp(); const output = consoleMocks.log.mock.calls.map((c: unknown[]) => c.join(" ")).join("\n"); - expect(output).toContain("OpenRouterTeam/spawn"); + expect(output).toContain("OpenRouterLabs/spawn"); }); }); diff --git a/packages/cli/src/__tests__/star-prompt.test.ts b/packages/cli/src/__tests__/star-prompt.test.ts index 6719b59c4..4560fd9b0 100644 --- a/packages/cli/src/__tests__/star-prompt.test.ts +++ b/packages/cli/src/__tests__/star-prompt.test.ts @@ -126,7 +126,7 @@ describe("maybeShowStarPrompt", () => { expect(logMessageSpy).toHaveBeenCalledTimes(1); const msg = logMessageSpy.mock.calls[0]?.[0]; - expect(isString(msg) && msg.includes("github.com/OpenRouterTeam/spawn")).toBe(true); + expect(isString(msg) && msg.includes("github.com/OpenRouterLabs/spawn")).toBe(true); }); it("saves starPromptShownAt to preferences after showing", () => { diff --git a/packages/cli/src/commands/export.ts b/packages/cli/src/commands/export.ts index 76ef6f55c..36c51fdfd 100644 --- a/packages/cli/src/commands/export.ts +++ b/packages/cli/src/commands/export.ts @@ -180,7 +180,7 @@ export function buildReadmeTemplate(): string { return [ "# __NAME__", "", - "Exported from a [spawn](https://github.com/OpenRouterTeam/spawn) session on `__CLOUD__`.", + "Exported from a [spawn](https://github.com/OpenRouterLabs/spawn) session on `__CLOUD__`.", "", "## Quickstart", "", diff --git a/packages/cli/src/guidance-data.ts b/packages/cli/src/guidance-data.ts index 1947a0185..fbee2ab22 100644 --- a/packages/cli/src/guidance-data.ts +++ b/packages/cli/src/guidance-data.ts @@ -65,14 +65,14 @@ export const EXIT_CODE_GUIDANCE: Record = { lines: [ " - A downloaded binary may lack execute permissions", " - The script may require root/sudo access", - ` - Report it if this persists: ${pc.cyan("https://github.com/OpenRouterTeam/spawn/issues")}`, + ` - Report it if this persists: ${pc.cyan("https://github.com/OpenRouterLabs/spawn/issues")}`, ], includeDashboard: false, }, 2: { header: "Shell syntax or argument error. This is likely a bug in the script.", lines: [ - ` Report it at: ${pc.cyan("https://github.com/OpenRouterTeam/spawn/issues")}`, + ` Report it at: ${pc.cyan("https://github.com/OpenRouterLabs/spawn/issues")}`, ], includeDashboard: false, }, diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 8b9a7413c..04256cd04 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -497,7 +497,7 @@ function showVersion(): void { ); const age = getCacheAge(); console.log(pc.dim(` manifest cache: ${formatCacheAge(age)}`)); - console.log(pc.dim(" https://github.com/OpenRouterTeam/spawn")); + console.log(pc.dim(" https://github.com/OpenRouterLabs/spawn")); console.log(pc.dim(` Run ${pc.cyan("spawn feedback")} to tell us what to improve.`)); } diff --git a/packages/cli/src/manifest.ts b/packages/cli/src/manifest.ts index 74c28b4d8..00d4823ef 100644 --- a/packages/cli/src/manifest.ts +++ b/packages/cli/src/manifest.ts @@ -111,7 +111,7 @@ export interface Manifest { // ── Constants ────────────────────────────────────────────────────────────────── -const REPO = "OpenRouterTeam/spawn"; +const REPO = "OpenRouterLabs/spawn"; const RAW_BASE = `https://raw.githubusercontent.com/${REPO}/main` as const; /** Primary CDN for shell scripts — maps openrouter.ai/labs/spawn/* → repo sh/* */ const SPAWN_CDN = "https://openrouter.ai/labs/spawn" as const; diff --git a/packages/cli/src/security.ts b/packages/cli/src/security.ts index 596040395..aac284f96 100644 --- a/packages/cli/src/security.ts +++ b/packages/cli/src/security.ts @@ -142,7 +142,7 @@ export function validateScriptContent(script: string): void { "Security check failed: the downloaded script contains a dangerous pattern.\n\n" + `Pattern detected: ${description}\n\n` + "This is unexpected and may indicate the file was tampered with or corrupted.\n" + - "Please report this at: https://github.com/OpenRouterTeam/spawn/issues", + "Please report this at: https://github.com/OpenRouterLabs/spawn/issues", ); } } @@ -159,7 +159,7 @@ export function validateScriptContent(script: string): void { " 1. Check your internet connection and try again\n" + " 2. Run 'spawn matrix' to verify the combination is marked as implemented\n" + " 3. Wait a few moments (the script may be deploying) and retry\n" + - " 4. If the issue persists, report it: https://github.com/OpenRouterTeam/spawn/issues", + " 4. If the issue persists, report it: https://github.com/OpenRouterLabs/spawn/issues", ); } } diff --git a/packages/cli/src/shared/agent-setup.ts b/packages/cli/src/shared/agent-setup.ts index 50eb8d8da..0cefef01e 100644 --- a/packages/cli/src/shared/agent-setup.ts +++ b/packages/cli/src/shared/agent-setup.ts @@ -756,7 +756,7 @@ export async function startHermesDashboard(runner: CloudRunner): Promise { // ─── OpenCode Install Command ──────────────────────────────────────────────── function openCodeInstallCmd(): string { - return 'OC_ARCH=$(uname -m); case "$OC_ARCH" in aarch64) OC_ARCH=arm64;; x86_64) OC_ARCH=x64;; esac; OC_OS=$(uname -s | tr A-Z a-z); mkdir -p /tmp/opencode-install "$HOME/.opencode/bin" && curl --proto \'=https\' -fsSL -o /tmp/opencode-install/oc.tar.gz "https://github.com/sst/opencode/releases/latest/download/opencode-${OC_OS}-${OC_ARCH}.tar.gz" && if tar -tzf /tmp/opencode-install/oc.tar.gz | grep -qE \'(^/|\\.\\.)\'; then echo "Tarball contains unsafe paths" >&2; exit 1; fi && tar xzf /tmp/opencode-install/oc.tar.gz -C /tmp/opencode-install && mv /tmp/opencode-install/opencode "$HOME/.opencode/bin/" && rm -rf /tmp/opencode-install && for _rc in "$HOME/.bashrc" "$HOME/.profile" "$HOME/.bash_profile"; do grep -q ".opencode/bin" "$_rc" 2>/dev/null || echo \'export PATH="$HOME/.opencode/bin:$PATH"\' >> "$_rc"; done; { [ ! -f "$HOME/.zshrc" ] || grep -q ".opencode/bin" "$HOME/.zshrc" 2>/dev/null || echo \'export PATH="$HOME/.opencode/bin:$PATH"\' >> "$HOME/.zshrc"; }; export PATH="$HOME/.opencode/bin:$PATH"'; + return 'OC_ARCH=$(uname -m); case "$OC_ARCH" in aarch64) OC_ARCH=arm64;; x86_64) OC_ARCH=x64;; esac; OC_OS=$(uname -s | tr A-Z a-z); mkdir -p /tmp/opencode-install "$HOME/.opencode/bin" && curl --proto \'=https\' -fsSL -o /tmp/opencode-install/oc.tar.gz "https://github.com/anomalyco/opencode/releases/latest/download/opencode-${OC_OS}-${OC_ARCH}.tar.gz" && if tar -tzf /tmp/opencode-install/oc.tar.gz | grep -qE \'(^/|\\.\\.)\'; then echo "Tarball contains unsafe paths" >&2; exit 1; fi && tar xzf /tmp/opencode-install/oc.tar.gz -C /tmp/opencode-install && mv /tmp/opencode-install/opencode "$HOME/.opencode/bin/" && rm -rf /tmp/opencode-install && for _rc in "$HOME/.bashrc" "$HOME/.profile" "$HOME/.bash_profile"; do grep -q ".opencode/bin" "$_rc" 2>/dev/null || echo \'export PATH="$HOME/.opencode/bin:$PATH"\' >> "$_rc"; done; { [ ! -f "$HOME/.zshrc" ] || grep -q ".opencode/bin" "$HOME/.zshrc" 2>/dev/null || echo \'export PATH="$HOME/.opencode/bin:$PATH"\' >> "$HOME/.zshrc"; }; export PATH="$HOME/.opencode/bin:$PATH"'; } // ─── npm prefix helper ──────────────────────────────────────────────────────── diff --git a/packages/cli/src/shared/agent-tarball.ts b/packages/cli/src/shared/agent-tarball.ts index d559f29f0..ece2099ff 100644 --- a/packages/cli/src/shared/agent-tarball.ts +++ b/packages/cli/src/shared/agent-tarball.ts @@ -9,7 +9,7 @@ import * as v from "valibot"; import { asyncTryCatch } from "./result.js"; import { logDebug, logInfo, logStep, logWarn } from "./ui.js"; -const REPO = "OpenRouterTeam/spawn"; +const REPO = "OpenRouterLabs/spawn"; /** Schema for a single GitHub Release asset. */ const AssetSchema = v.object({ diff --git a/packages/cli/src/shared/star-prompt.ts b/packages/cli/src/shared/star-prompt.ts index b06c00cda..34514e260 100644 --- a/packages/cli/src/shared/star-prompt.ts +++ b/packages/cli/src/shared/star-prompt.ts @@ -42,7 +42,7 @@ export function maybeShowStarPrompt(): void { } // 3. Print the star message - p.log.message("⭐ Enjoying Spawn? Star us on GitHub!\n https://github.com/OpenRouterTeam/spawn"); + p.log.message("⭐ Enjoying Spawn? Star us on GitHub!\n https://github.com/OpenRouterLabs/spawn"); // 4. Save the updated timestamp const merged = { diff --git a/packer/agents.json b/packer/agents.json index 08211546b..c8f646a24 100644 --- a/packer/agents.json +++ b/packer/agents.json @@ -47,5 +47,17 @@ "install": [ "curl -fsSL https://cursor.com/install | bash || [ -f /root/.local/bin/cursor ]" ] + }, + "pi": { + "tier": "node", + "install": [ + "mkdir -p ~/.npm-global/bin && npm install -g --prefix ~/.npm-global @mariozechner/pi-coding-agent" + ] + }, + "t3code": { + "tier": "node", + "install": [ + "mkdir -p ~/.npm-global/bin && npm install -g --prefix ~/.npm-global t3" + ] } } diff --git a/sh/aws/claude.sh b/sh/aws/claude.sh index 65b961cc1..38b62f6f9 100755 --- a/sh/aws/claude.sh +++ b/sh/aws/claude.sh @@ -21,6 +21,6 @@ fi # Remote — download and run compiled TypeScript bundle AWS_JS=$(mktemp) trap 'rm -f "$AWS_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ || { printf '\033[0;31mFailed to download aws.js\033[0m\n' >&2; exit 1; } exec bun run "$AWS_JS" claude "$@" diff --git a/sh/aws/codex.sh b/sh/aws/codex.sh index a2aa15f88..823d70989 100755 --- a/sh/aws/codex.sh +++ b/sh/aws/codex.sh @@ -21,6 +21,6 @@ fi # Remote — download and run compiled TypeScript bundle AWS_JS=$(mktemp) trap 'rm -f "$AWS_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ || { printf '\033[0;31mFailed to download aws.js\033[0m\n' >&2; exit 1; } exec bun run "$AWS_JS" codex "$@" diff --git a/sh/aws/cursor.sh b/sh/aws/cursor.sh index f0bdbc0e7..192bea652 100644 --- a/sh/aws/cursor.sh +++ b/sh/aws/cursor.sh @@ -21,6 +21,6 @@ fi # Remote — download and run compiled TypeScript bundle AWS_JS=$(mktemp) trap 'rm -f "$AWS_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ || { printf '\033[0;31mFailed to download aws.js\033[0m\n' >&2; exit 1; } exec bun run "$AWS_JS" cursor "$@" diff --git a/sh/aws/hermes.sh b/sh/aws/hermes.sh index f1f2c48a5..fa9b3b16d 100644 --- a/sh/aws/hermes.sh +++ b/sh/aws/hermes.sh @@ -21,6 +21,6 @@ fi # Remote — download and run compiled TypeScript bundle AWS_JS=$(mktemp) trap 'rm -f "$AWS_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ || { printf '\033[0;31mFailed to download aws.js\033[0m\n' >&2; exit 1; } exec bun run "$AWS_JS" hermes "$@" diff --git a/sh/aws/junie.sh b/sh/aws/junie.sh index f1e96f3af..ed403b354 100644 --- a/sh/aws/junie.sh +++ b/sh/aws/junie.sh @@ -21,6 +21,6 @@ fi # Remote — download and run compiled TypeScript bundle AWS_JS=$(mktemp) trap 'rm -f "$AWS_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ || { printf '\033[0;31mFailed to download aws.js\033[0m\n' >&2; exit 1; } exec bun run "$AWS_JS" junie "$@" diff --git a/sh/aws/kilocode.sh b/sh/aws/kilocode.sh index 7c884a078..c2f99458d 100755 --- a/sh/aws/kilocode.sh +++ b/sh/aws/kilocode.sh @@ -21,6 +21,6 @@ fi # Remote — download and run compiled TypeScript bundle AWS_JS=$(mktemp) trap 'rm -f "$AWS_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ || { printf '\033[0;31mFailed to download aws.js\033[0m\n' >&2; exit 1; } exec bun run "$AWS_JS" kilocode "$@" diff --git a/sh/aws/openclaw.sh b/sh/aws/openclaw.sh index 798191f06..97bad6bbe 100755 --- a/sh/aws/openclaw.sh +++ b/sh/aws/openclaw.sh @@ -21,6 +21,6 @@ fi # Remote — download and run compiled TypeScript bundle AWS_JS=$(mktemp) trap 'rm -f "$AWS_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ || { printf '\033[0;31mFailed to download aws.js\033[0m\n' >&2; exit 1; } exec bun run "$AWS_JS" openclaw "$@" diff --git a/sh/aws/opencode.sh b/sh/aws/opencode.sh index b69d2ff00..1b07a4944 100755 --- a/sh/aws/opencode.sh +++ b/sh/aws/opencode.sh @@ -21,6 +21,6 @@ fi # Remote — download and run compiled TypeScript bundle AWS_JS=$(mktemp) trap 'rm -f "$AWS_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ || { printf '\033[0;31mFailed to download aws.js\033[0m\n' >&2; exit 1; } exec bun run "$AWS_JS" opencode "$@" diff --git a/sh/aws/pi.sh b/sh/aws/pi.sh index e7fecf8b3..6324636f3 100644 --- a/sh/aws/pi.sh +++ b/sh/aws/pi.sh @@ -21,6 +21,6 @@ fi # Remote — download and run compiled TypeScript bundle AWS_JS=$(mktemp) trap 'rm -f "$AWS_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ || { printf '\033[0;31mFailed to download aws.js\033[0m\n' >&2; exit 1; } exec bun run "$AWS_JS" pi "$@" diff --git a/sh/aws/t3code.sh b/sh/aws/t3code.sh index 7b7555e98..f68e253af 100644 --- a/sh/aws/t3code.sh +++ b/sh/aws/t3code.sh @@ -21,6 +21,6 @@ fi # Remote — download and run compiled TypeScript bundle AWS_JS=$(mktemp) trap 'rm -f "$AWS_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/aws-latest/aws.js" -o "$AWS_JS" \ || { printf '\033[0;31mFailed to download aws.js\033[0m\n' >&2; exit 1; } exec bun run "$AWS_JS" t3code "$@" diff --git a/sh/cli/install.ps1 b/sh/cli/install.ps1 index be71f4f6a..c34a37280 100644 --- a/sh/cli/install.ps1 +++ b/sh/cli/install.ps1 @@ -12,7 +12,7 @@ $ErrorActionPreference = "Stop" -$SPAWN_REPO = "OpenRouterTeam/spawn" +$SPAWN_REPO = "OpenRouterLabs/spawn" $SPAWN_RAW_BASE = "https://raw.githubusercontent.com/$SPAWN_REPO/main" $MIN_BUN_VERSION = [version]"1.2.0" diff --git a/sh/cli/install.sh b/sh/cli/install.sh index 0bb0f62f2..cf8a791e7 100755 --- a/sh/cli/install.sh +++ b/sh/cli/install.sh @@ -11,7 +11,7 @@ set -eo pipefail -SPAWN_REPO="OpenRouterTeam/spawn" +SPAWN_REPO="OpenRouterLabs/spawn" SPAWN_CDN="https://openrouter.ai/labs/spawn" SPAWN_RAW_BASE="https://raw.githubusercontent.com/${SPAWN_REPO}/main" MIN_BUN_VERSION="1.2.0" diff --git a/sh/daytona/claude.sh b/sh/daytona/claude.sh index 3b3a4df1f..ade0a6394 100755 --- a/sh/daytona/claude.sh +++ b/sh/daytona/claude.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled daytona.js from GitHub release DAYTONA_JS=$(mktemp) trap 'rm -f "$DAYTONA_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ || { printf '\033[0;31mFailed to download daytona.js\033[0m\n' >&2; exit 1; } exec bun run "$DAYTONA_JS" claude "$@" diff --git a/sh/daytona/codex.sh b/sh/daytona/codex.sh index 53193deec..f3a491f6b 100755 --- a/sh/daytona/codex.sh +++ b/sh/daytona/codex.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled daytona.js from GitHub release DAYTONA_JS=$(mktemp) trap 'rm -f "$DAYTONA_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ || { printf '\033[0;31mFailed to download daytona.js\033[0m\n' >&2; exit 1; } exec bun run "$DAYTONA_JS" codex "$@" diff --git a/sh/daytona/cursor.sh b/sh/daytona/cursor.sh index 38af4d9f8..2f5f76940 100755 --- a/sh/daytona/cursor.sh +++ b/sh/daytona/cursor.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled daytona.js from GitHub release DAYTONA_JS=$(mktemp) trap 'rm -f "$DAYTONA_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ || { printf '\033[0;31mFailed to download daytona.js\033[0m\n' >&2; exit 1; } exec bun run "$DAYTONA_JS" cursor "$@" diff --git a/sh/daytona/hermes.sh b/sh/daytona/hermes.sh index 99b8f4c50..55cd7a460 100755 --- a/sh/daytona/hermes.sh +++ b/sh/daytona/hermes.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled daytona.js from GitHub release DAYTONA_JS=$(mktemp) trap 'rm -f "$DAYTONA_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ || { printf '\033[0;31mFailed to download daytona.js\033[0m\n' >&2; exit 1; } exec bun run "$DAYTONA_JS" hermes "$@" diff --git a/sh/daytona/junie.sh b/sh/daytona/junie.sh index de36f2d83..43f85c25b 100755 --- a/sh/daytona/junie.sh +++ b/sh/daytona/junie.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled daytona.js from GitHub release DAYTONA_JS=$(mktemp) trap 'rm -f "$DAYTONA_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ || { printf '\033[0;31mFailed to download daytona.js\033[0m\n' >&2; exit 1; } exec bun run "$DAYTONA_JS" junie "$@" diff --git a/sh/daytona/kilocode.sh b/sh/daytona/kilocode.sh index a1f515d5e..a5a0913b0 100755 --- a/sh/daytona/kilocode.sh +++ b/sh/daytona/kilocode.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled daytona.js from GitHub release DAYTONA_JS=$(mktemp) trap 'rm -f "$DAYTONA_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ || { printf '\033[0;31mFailed to download daytona.js\033[0m\n' >&2; exit 1; } exec bun run "$DAYTONA_JS" kilocode "$@" diff --git a/sh/daytona/openclaw.sh b/sh/daytona/openclaw.sh index 140e33ab1..96e02e17d 100755 --- a/sh/daytona/openclaw.sh +++ b/sh/daytona/openclaw.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled daytona.js from GitHub release DAYTONA_JS=$(mktemp) trap 'rm -f "$DAYTONA_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ || { printf '\033[0;31mFailed to download daytona.js\033[0m\n' >&2; exit 1; } exec bun run "$DAYTONA_JS" openclaw "$@" diff --git a/sh/daytona/opencode.sh b/sh/daytona/opencode.sh index ec1dac877..fd1620ff0 100755 --- a/sh/daytona/opencode.sh +++ b/sh/daytona/opencode.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled daytona.js from GitHub release DAYTONA_JS=$(mktemp) trap 'rm -f "$DAYTONA_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ || { printf '\033[0;31mFailed to download daytona.js\033[0m\n' >&2; exit 1; } exec bun run "$DAYTONA_JS" opencode "$@" diff --git a/sh/daytona/pi.sh b/sh/daytona/pi.sh index 044aff392..53e338c80 100755 --- a/sh/daytona/pi.sh +++ b/sh/daytona/pi.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled daytona.js from GitHub release DAYTONA_JS=$(mktemp) trap 'rm -f "$DAYTONA_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ || { printf '\033[0;31mFailed to download daytona.js\033[0m\n' >&2; exit 1; } exec bun run "$DAYTONA_JS" pi "$@" diff --git a/sh/daytona/t3code.sh b/sh/daytona/t3code.sh index 1c635a91a..3c94ab8c4 100644 --- a/sh/daytona/t3code.sh +++ b/sh/daytona/t3code.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled daytona.js from GitHub release DAYTONA_JS=$(mktemp) trap 'rm -f "$DAYTONA_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/daytona-latest/daytona.js" -o "$DAYTONA_JS" \ || { printf '\033[0;31mFailed to download daytona.js\033[0m\n' >&2; exit 1; } exec bun run "$DAYTONA_JS" t3code "$@" diff --git a/sh/digitalocean/claude.sh b/sh/digitalocean/claude.sh index dcfbc7f29..ff9945fd6 100755 --- a/sh/digitalocean/claude.sh +++ b/sh/digitalocean/claude.sh @@ -77,7 +77,7 @@ fi # Remote — download bundled digitalocean.js from GitHub release DO_JS=$(mktemp) trap 'rm -f "$DO_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ || { printf '\033[0;31mFailed to download digitalocean.js\033[0m\n' >&2; exit 1; } _run_with_restart bun run "$DO_JS" "$_AGENT_NAME" "$@" diff --git a/sh/digitalocean/codex.sh b/sh/digitalocean/codex.sh index 3e674ed7f..91bc7ca4f 100755 --- a/sh/digitalocean/codex.sh +++ b/sh/digitalocean/codex.sh @@ -77,7 +77,7 @@ fi # Remote — download bundled digitalocean.js from GitHub release DO_JS=$(mktemp) trap 'rm -f "$DO_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ || { printf '\033[0;31mFailed to download digitalocean.js\033[0m\n' >&2; exit 1; } _run_with_restart bun run "$DO_JS" "$_AGENT_NAME" "$@" diff --git a/sh/digitalocean/cursor.sh b/sh/digitalocean/cursor.sh index d17594beb..0448b097b 100644 --- a/sh/digitalocean/cursor.sh +++ b/sh/digitalocean/cursor.sh @@ -77,7 +77,7 @@ fi # Remote — download bundled digitalocean.js from GitHub release DO_JS=$(mktemp) trap 'rm -f "$DO_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ || { printf '\033[0;31mFailed to download digitalocean.js\033[0m\n' >&2; exit 1; } _run_with_restart bun run "$DO_JS" "$_AGENT_NAME" "$@" diff --git a/sh/digitalocean/hermes.sh b/sh/digitalocean/hermes.sh index 12b3222a1..f11eb19dd 100755 --- a/sh/digitalocean/hermes.sh +++ b/sh/digitalocean/hermes.sh @@ -77,7 +77,7 @@ fi # Remote — download bundled digitalocean.js from GitHub release DO_JS=$(mktemp) trap 'rm -f "$DO_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ || { printf '\033[0;31mFailed to download digitalocean.js\033[0m\n' >&2; exit 1; } _run_with_restart bun run "$DO_JS" "$_AGENT_NAME" "$@" diff --git a/sh/digitalocean/junie.sh b/sh/digitalocean/junie.sh index 90612f628..738497b0f 100644 --- a/sh/digitalocean/junie.sh +++ b/sh/digitalocean/junie.sh @@ -77,7 +77,7 @@ fi # Remote — download bundled digitalocean.js from GitHub release DO_JS=$(mktemp) trap 'rm -f "$DO_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ || { printf '\033[0;31mFailed to download digitalocean.js\033[0m\n' >&2; exit 1; } _run_with_restart bun run "$DO_JS" "$_AGENT_NAME" "$@" diff --git a/sh/digitalocean/kilocode.sh b/sh/digitalocean/kilocode.sh index 3e6df9e2a..4d3ec5e08 100755 --- a/sh/digitalocean/kilocode.sh +++ b/sh/digitalocean/kilocode.sh @@ -77,7 +77,7 @@ fi # Remote — download bundled digitalocean.js from GitHub release DO_JS=$(mktemp) trap 'rm -f "$DO_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ || { printf '\033[0;31mFailed to download digitalocean.js\033[0m\n' >&2; exit 1; } _run_with_restart bun run "$DO_JS" "$_AGENT_NAME" "$@" diff --git a/sh/digitalocean/openclaw.sh b/sh/digitalocean/openclaw.sh index a624f0077..04944b2ab 100755 --- a/sh/digitalocean/openclaw.sh +++ b/sh/digitalocean/openclaw.sh @@ -77,7 +77,7 @@ fi # Remote — download bundled digitalocean.js from GitHub release DO_JS=$(mktemp) trap 'rm -f "$DO_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ || { printf '\033[0;31mFailed to download digitalocean.js\033[0m\n' >&2; exit 1; } _run_with_restart bun run "$DO_JS" "$_AGENT_NAME" "$@" diff --git a/sh/digitalocean/opencode.sh b/sh/digitalocean/opencode.sh index 20696bd61..332a5a782 100755 --- a/sh/digitalocean/opencode.sh +++ b/sh/digitalocean/opencode.sh @@ -77,7 +77,7 @@ fi # Remote — download bundled digitalocean.js from GitHub release DO_JS=$(mktemp) trap 'rm -f "$DO_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ || { printf '\033[0;31mFailed to download digitalocean.js\033[0m\n' >&2; exit 1; } _run_with_restart bun run "$DO_JS" "$_AGENT_NAME" "$@" diff --git a/sh/digitalocean/pi.sh b/sh/digitalocean/pi.sh index 0b76c8798..351457837 100644 --- a/sh/digitalocean/pi.sh +++ b/sh/digitalocean/pi.sh @@ -77,7 +77,7 @@ fi # Remote — download bundled digitalocean.js from GitHub release DO_JS=$(mktemp) trap 'rm -f "$DO_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ || { printf '\033[0;31mFailed to download digitalocean.js\033[0m\n' >&2; exit 1; } _run_with_restart bun run "$DO_JS" "$_AGENT_NAME" "$@" diff --git a/sh/digitalocean/t3code.sh b/sh/digitalocean/t3code.sh index 98daa0640..ba0fd6be8 100644 --- a/sh/digitalocean/t3code.sh +++ b/sh/digitalocean/t3code.sh @@ -21,6 +21,6 @@ fi # Remote — download and run compiled TypeScript bundle DO_JS=$(mktemp) trap 'rm -f "$DO_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/digitalocean-latest/digitalocean.js" -o "$DO_JS" \ || { printf '\033[0;31mFailed to download digitalocean.js\033[0m\n' >&2; exit 1; } exec bun run "$DO_JS" t3code "$@" diff --git a/sh/docker/opencode.Dockerfile b/sh/docker/opencode.Dockerfile index 5994b4be2..da7d0aaeb 100644 --- a/sh/docker/opencode.Dockerfile +++ b/sh/docker/opencode.Dockerfile @@ -14,7 +14,7 @@ RUN OC_ARCH=$(uname -m) && \ OC_OS=$(uname -s | tr A-Z a-z) && \ mkdir -p /tmp/opencode-install /root/.opencode/bin && \ curl --proto '=https' -fsSL -o /tmp/opencode-install/oc.tar.gz \ - "https://github.com/sst/opencode/releases/latest/download/opencode-${OC_OS}-${OC_ARCH}.tar.gz" && \ + "https://github.com/anomalyco/opencode/releases/latest/download/opencode-${OC_OS}-${OC_ARCH}.tar.gz" && \ tar xzf /tmp/opencode-install/oc.tar.gz -C /tmp/opencode-install && \ mv /tmp/opencode-install/opencode /root/.opencode/bin/ && \ rm -rf /tmp/opencode-install diff --git a/sh/e2e/lib/interactive.sh b/sh/e2e/lib/interactive.sh index 416efa272..247039745 100644 --- a/sh/e2e/lib/interactive.sh +++ b/sh/e2e/lib/interactive.sh @@ -72,7 +72,7 @@ ${example} local issue_url if issue_url=$(gh issue create \ - --repo OpenRouterTeam/spawn \ + --repo OpenRouterLabs/spawn \ --title "${title}" \ --label "ux" \ --body "${body}" 2>/dev/null); then @@ -80,7 +80,7 @@ ${example} else # Label may not exist — retry without it if issue_url=$(gh issue create \ - --repo OpenRouterTeam/spawn \ + --repo OpenRouterLabs/spawn \ --title "${title}" \ --body "${body}" 2>/dev/null); then log_ok "UX issue filed: ${issue_url}" diff --git a/sh/gcp/claude.sh b/sh/gcp/claude.sh index 3b7e3089b..8e7ad9ead 100755 --- a/sh/gcp/claude.sh +++ b/sh/gcp/claude.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled gcp.js from GitHub release GCP_JS=$(mktemp) trap 'rm -f "$GCP_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ || { printf '\033[0;31mFailed to download gcp.js\033[0m\n' >&2; exit 1; } exec bun run "$GCP_JS" claude "$@" diff --git a/sh/gcp/codex.sh b/sh/gcp/codex.sh index 956519e02..42dc863c9 100755 --- a/sh/gcp/codex.sh +++ b/sh/gcp/codex.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled gcp.js from GitHub release GCP_JS=$(mktemp) trap 'rm -f "$GCP_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ || { printf '\033[0;31mFailed to download gcp.js\033[0m\n' >&2; exit 1; } exec bun run "$GCP_JS" codex "$@" diff --git a/sh/gcp/cursor.sh b/sh/gcp/cursor.sh index f1cd13f9c..0a9d610e3 100644 --- a/sh/gcp/cursor.sh +++ b/sh/gcp/cursor.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled gcp.js from GitHub release GCP_JS=$(mktemp) trap 'rm -f "$GCP_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ || { printf '\033[0;31mFailed to download gcp.js\033[0m\n' >&2; exit 1; } exec bun run "$GCP_JS" cursor "$@" diff --git a/sh/gcp/hermes.sh b/sh/gcp/hermes.sh index 59b49a7e9..fadb9cacb 100755 --- a/sh/gcp/hermes.sh +++ b/sh/gcp/hermes.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled gcp.js from GitHub release GCP_JS=$(mktemp) trap 'rm -f "$GCP_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ || { printf '\033[0;31mFailed to download gcp.js\033[0m\n' >&2; exit 1; } exec bun run "$GCP_JS" hermes "$@" diff --git a/sh/gcp/junie.sh b/sh/gcp/junie.sh index d7bb9a72f..081d749bb 100644 --- a/sh/gcp/junie.sh +++ b/sh/gcp/junie.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled gcp.js from GitHub release GCP_JS=$(mktemp) trap 'rm -f "$GCP_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ || { printf '\033[0;31mFailed to download gcp.js\033[0m\n' >&2; exit 1; } exec bun run "$GCP_JS" junie "$@" diff --git a/sh/gcp/kilocode.sh b/sh/gcp/kilocode.sh index 7042dd341..e92b4bb33 100755 --- a/sh/gcp/kilocode.sh +++ b/sh/gcp/kilocode.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled gcp.js from GitHub release GCP_JS=$(mktemp) trap 'rm -f "$GCP_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ || { printf '\033[0;31mFailed to download gcp.js\033[0m\n' >&2; exit 1; } exec bun run "$GCP_JS" kilocode "$@" diff --git a/sh/gcp/openclaw.sh b/sh/gcp/openclaw.sh index eac6e1322..693bfddbe 100755 --- a/sh/gcp/openclaw.sh +++ b/sh/gcp/openclaw.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled gcp.js from GitHub release GCP_JS=$(mktemp) trap 'rm -f "$GCP_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ || { printf '\033[0;31mFailed to download gcp.js\033[0m\n' >&2; exit 1; } exec bun run "$GCP_JS" openclaw "$@" diff --git a/sh/gcp/opencode.sh b/sh/gcp/opencode.sh index fb824789e..705469e8c 100755 --- a/sh/gcp/opencode.sh +++ b/sh/gcp/opencode.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled gcp.js from GitHub release GCP_JS=$(mktemp) trap 'rm -f "$GCP_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ || { printf '\033[0;31mFailed to download gcp.js\033[0m\n' >&2; exit 1; } exec bun run "$GCP_JS" opencode "$@" diff --git a/sh/gcp/pi.sh b/sh/gcp/pi.sh index 07c9c2484..d2a18e1d6 100644 --- a/sh/gcp/pi.sh +++ b/sh/gcp/pi.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled gcp.js from GitHub release GCP_JS=$(mktemp) trap 'rm -f "$GCP_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ || { printf '\033[0;31mFailed to download gcp.js\033[0m\n' >&2; exit 1; } exec bun run "$GCP_JS" pi "$@" diff --git a/sh/gcp/t3code.sh b/sh/gcp/t3code.sh index 2ace3ceac..5744dd722 100644 --- a/sh/gcp/t3code.sh +++ b/sh/gcp/t3code.sh @@ -21,6 +21,6 @@ fi # Remote — download and run compiled TypeScript bundle GCP_JS=$(mktemp) trap 'rm -f "$GCP_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/gcp-latest/gcp.js" -o "$GCP_JS" \ || { printf '\033[0;31mFailed to download gcp.js\033[0m\n' >&2; exit 1; } exec bun run "$GCP_JS" t3code "$@" diff --git a/sh/hetzner/claude.sh b/sh/hetzner/claude.sh index 58a6a8f88..8d55f7104 100755 --- a/sh/hetzner/claude.sh +++ b/sh/hetzner/claude.sh @@ -17,6 +17,6 @@ fi HETZNER_JS=$(mktemp) trap 'rm -f "$HETZNER_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ || { printf '\033[0;31mFailed to download hetzner.js\033[0m\n' >&2; exit 1; } exec bun run "$HETZNER_JS" claude "$@" diff --git a/sh/hetzner/codex.sh b/sh/hetzner/codex.sh index 768dcb7ab..bf6e903a1 100755 --- a/sh/hetzner/codex.sh +++ b/sh/hetzner/codex.sh @@ -17,6 +17,6 @@ fi HETZNER_JS=$(mktemp) trap 'rm -f "$HETZNER_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ || { printf '\033[0;31mFailed to download hetzner.js\033[0m\n' >&2; exit 1; } exec bun run "$HETZNER_JS" codex "$@" diff --git a/sh/hetzner/cursor.sh b/sh/hetzner/cursor.sh index 47474454f..31eeabe44 100644 --- a/sh/hetzner/cursor.sh +++ b/sh/hetzner/cursor.sh @@ -21,6 +21,6 @@ fi # Remote — download and run compiled TypeScript bundle HETZNER_JS=$(mktemp) trap 'rm -f "$HETZNER_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ || { printf '\033[0;31mFailed to download hetzner.js\033[0m\n' >&2; exit 1; } exec bun run "$HETZNER_JS" cursor "$@" diff --git a/sh/hetzner/hermes.sh b/sh/hetzner/hermes.sh index d73e38ebe..3447131f0 100755 --- a/sh/hetzner/hermes.sh +++ b/sh/hetzner/hermes.sh @@ -21,6 +21,6 @@ fi # Remote — download and run compiled TypeScript bundle HETZNER_JS=$(mktemp) trap 'rm -f "$HETZNER_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ || { printf '\033[0;31mFailed to download hetzner.js\033[0m\n' >&2; exit 1; } exec bun run "$HETZNER_JS" hermes "$@" diff --git a/sh/hetzner/junie.sh b/sh/hetzner/junie.sh index 42de96f80..51e3f30c3 100644 --- a/sh/hetzner/junie.sh +++ b/sh/hetzner/junie.sh @@ -21,6 +21,6 @@ fi # Remote — download and run compiled TypeScript bundle HETZNER_JS=$(mktemp) trap 'rm -f "$HETZNER_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ || { printf '\033[0;31mFailed to download hetzner.js\033[0m\n' >&2; exit 1; } exec bun run "$HETZNER_JS" junie "$@" diff --git a/sh/hetzner/kilocode.sh b/sh/hetzner/kilocode.sh index 726d32d11..01f083fe3 100644 --- a/sh/hetzner/kilocode.sh +++ b/sh/hetzner/kilocode.sh @@ -17,6 +17,6 @@ fi HETZNER_JS=$(mktemp) trap 'rm -f "$HETZNER_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ || { printf '\033[0;31mFailed to download hetzner.js\033[0m\n' >&2; exit 1; } exec bun run "$HETZNER_JS" kilocode "$@" diff --git a/sh/hetzner/openclaw.sh b/sh/hetzner/openclaw.sh index 290b1135b..d13761c46 100755 --- a/sh/hetzner/openclaw.sh +++ b/sh/hetzner/openclaw.sh @@ -17,6 +17,6 @@ fi HETZNER_JS=$(mktemp) trap 'rm -f "$HETZNER_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ || { printf '\033[0;31mFailed to download hetzner.js\033[0m\n' >&2; exit 1; } exec bun run "$HETZNER_JS" openclaw "$@" diff --git a/sh/hetzner/opencode.sh b/sh/hetzner/opencode.sh index c030da84f..aaa94876d 100755 --- a/sh/hetzner/opencode.sh +++ b/sh/hetzner/opencode.sh @@ -17,6 +17,6 @@ fi HETZNER_JS=$(mktemp) trap 'rm -f "$HETZNER_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ || { printf '\033[0;31mFailed to download hetzner.js\033[0m\n' >&2; exit 1; } exec bun run "$HETZNER_JS" opencode "$@" diff --git a/sh/hetzner/pi.sh b/sh/hetzner/pi.sh index 2e333597c..a3b5f0816 100644 --- a/sh/hetzner/pi.sh +++ b/sh/hetzner/pi.sh @@ -17,6 +17,6 @@ fi HETZNER_JS=$(mktemp) trap 'rm -f "$HETZNER_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ || { printf '\033[0;31mFailed to download hetzner.js\033[0m\n' >&2; exit 1; } exec bun run "$HETZNER_JS" pi "$@" diff --git a/sh/hetzner/t3code.sh b/sh/hetzner/t3code.sh index 8642f958e..e021fe4e9 100644 --- a/sh/hetzner/t3code.sh +++ b/sh/hetzner/t3code.sh @@ -21,6 +21,6 @@ fi # Remote — download and run compiled TypeScript bundle HETZNER_JS=$(mktemp) trap 'rm -f "$HETZNER_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/hetzner-latest/hetzner.js" -o "$HETZNER_JS" \ || { printf '\033[0;31mFailed to download hetzner.js\033[0m\n' >&2; exit 1; } exec bun run "$HETZNER_JS" t3code "$@" diff --git a/sh/local/README.md b/sh/local/README.md index e731ffab4..bce93f08c 100644 --- a/sh/local/README.md +++ b/sh/local/README.md @@ -6,7 +6,7 @@ Run agents directly on your local machine without any cloud provisioning. ## Quick Start -If you have the [spawn CLI](https://github.com/OpenRouterTeam/spawn) installed: +If you have the [spawn CLI](https://github.com/OpenRouterLabs/spawn) installed: ```bash spawn claude local diff --git a/sh/local/claude.sh b/sh/local/claude.sh index a946e725b..1bca3064c 100644 --- a/sh/local/claude.sh +++ b/sh/local/claude.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled local.js from GitHub release LOCAL_JS=$(mktemp) trap 'rm -f "$LOCAL_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ || { printf '\033[0;31mFailed to download local.js\033[0m\n' >&2; exit 1; } exec bun run "$LOCAL_JS" claude "$@" diff --git a/sh/local/codex.sh b/sh/local/codex.sh index da0df399a..ed500551c 100644 --- a/sh/local/codex.sh +++ b/sh/local/codex.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled local.js from GitHub release LOCAL_JS=$(mktemp) trap 'rm -f "$LOCAL_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ || { printf '\033[0;31mFailed to download local.js\033[0m\n' >&2; exit 1; } exec bun run "$LOCAL_JS" codex "$@" diff --git a/sh/local/cursor.sh b/sh/local/cursor.sh index 18be4ea8a..6a74d50aa 100644 --- a/sh/local/cursor.sh +++ b/sh/local/cursor.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled local.js from GitHub release LOCAL_JS=$(mktemp) trap 'rm -f "$LOCAL_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ || { printf '\033[0;31mFailed to download local.js\033[0m\n' >&2; exit 1; } exec bun run "$LOCAL_JS" cursor "$@" diff --git a/sh/local/hermes.sh b/sh/local/hermes.sh index c1d71fa71..05a6638ed 100755 --- a/sh/local/hermes.sh +++ b/sh/local/hermes.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled local.js from GitHub release LOCAL_JS=$(mktemp) trap 'rm -f "$LOCAL_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ || { printf '\033[0;31mFailed to download local.js\033[0m\n' >&2; exit 1; } exec bun run "$LOCAL_JS" hermes "$@" diff --git a/sh/local/junie.sh b/sh/local/junie.sh index 69f88975d..b878c6b43 100644 --- a/sh/local/junie.sh +++ b/sh/local/junie.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled local.js from GitHub release LOCAL_JS=$(mktemp) trap 'rm -f "$LOCAL_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ || { printf '\033[0;31mFailed to download local.js\033[0m\n' >&2; exit 1; } exec bun run "$LOCAL_JS" junie "$@" diff --git a/sh/local/kilocode.sh b/sh/local/kilocode.sh index 25d974a5f..b9ecbe248 100644 --- a/sh/local/kilocode.sh +++ b/sh/local/kilocode.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled local.js from GitHub release LOCAL_JS=$(mktemp) trap 'rm -f "$LOCAL_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ || { printf '\033[0;31mFailed to download local.js\033[0m\n' >&2; exit 1; } exec bun run "$LOCAL_JS" kilocode "$@" diff --git a/sh/local/openclaw.sh b/sh/local/openclaw.sh index 008ba5931..f94d14cdd 100644 --- a/sh/local/openclaw.sh +++ b/sh/local/openclaw.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled local.js from GitHub release LOCAL_JS=$(mktemp) trap 'rm -f "$LOCAL_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ || { printf '\033[0;31mFailed to download local.js\033[0m\n' >&2; exit 1; } exec bun run "$LOCAL_JS" openclaw "$@" diff --git a/sh/local/opencode.sh b/sh/local/opencode.sh index 079a28472..12a1d8a70 100644 --- a/sh/local/opencode.sh +++ b/sh/local/opencode.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled local.js from GitHub release LOCAL_JS=$(mktemp) trap 'rm -f "$LOCAL_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ || { printf '\033[0;31mFailed to download local.js\033[0m\n' >&2; exit 1; } exec bun run "$LOCAL_JS" opencode "$@" diff --git a/sh/local/pi.sh b/sh/local/pi.sh index 2fffbb2ed..6b8917c7c 100644 --- a/sh/local/pi.sh +++ b/sh/local/pi.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled local.js from GitHub release LOCAL_JS=$(mktemp) trap 'rm -f "$LOCAL_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ || { printf '\033[0;31mFailed to download local.js\033[0m\n' >&2; exit 1; } exec bun run "$LOCAL_JS" pi "$@" diff --git a/sh/local/t3code.sh b/sh/local/t3code.sh index f6e554644..4926954d7 100644 --- a/sh/local/t3code.sh +++ b/sh/local/t3code.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled local.js from GitHub release LOCAL_JS=$(mktemp) trap 'rm -f "$LOCAL_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/local-latest/local.js" -o "$LOCAL_JS" \ || { printf '\033[0;31mFailed to download local.js\033[0m\n' >&2; exit 1; } exec bun run "$LOCAL_JS" t3code "$@" diff --git a/sh/sandbox/README.md b/sh/sandbox/README.md index 1ab16efe0..24d0bbcb2 100644 --- a/sh/sandbox/README.md +++ b/sh/sandbox/README.md @@ -8,7 +8,7 @@ This was previously the `--beta sandbox` flag on the `local` cloud. It is now a ## Quick Start -If you have the [spawn CLI](https://github.com/OpenRouterTeam/spawn) installed: +If you have the [spawn CLI](https://github.com/OpenRouterLabs/spawn) installed: ```bash spawn claude sandbox diff --git a/sh/sandbox/claude.sh b/sh/sandbox/claude.sh index 08f120b2e..689f6f7e3 100755 --- a/sh/sandbox/claude.sh +++ b/sh/sandbox/claude.sh @@ -23,7 +23,7 @@ fi # Remote — download bundled sandbox.js from GitHub release SANDBOX_JS=$(mktemp) trap 'rm -f "$SANDBOX_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sandbox-latest/sandbox.js" -o "$SANDBOX_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sandbox-latest/sandbox.js" -o "$SANDBOX_JS" \ || { printf '\033[0;31mFailed to download sandbox.js\033[0m\n' >&2; exit 1; } exec bun run "$SANDBOX_JS" claude "$@" diff --git a/sh/sandbox/codex.sh b/sh/sandbox/codex.sh index d3631a00f..165578e19 100755 --- a/sh/sandbox/codex.sh +++ b/sh/sandbox/codex.sh @@ -23,7 +23,7 @@ fi # Remote — download bundled sandbox.js from GitHub release SANDBOX_JS=$(mktemp) trap 'rm -f "$SANDBOX_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sandbox-latest/sandbox.js" -o "$SANDBOX_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sandbox-latest/sandbox.js" -o "$SANDBOX_JS" \ || { printf '\033[0;31mFailed to download sandbox.js\033[0m\n' >&2; exit 1; } exec bun run "$SANDBOX_JS" codex "$@" diff --git a/sh/sandbox/cursor.sh b/sh/sandbox/cursor.sh index 56f46f22d..4483662ac 100755 --- a/sh/sandbox/cursor.sh +++ b/sh/sandbox/cursor.sh @@ -23,7 +23,7 @@ fi # Remote — download bundled sandbox.js from GitHub release SANDBOX_JS=$(mktemp) trap 'rm -f "$SANDBOX_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sandbox-latest/sandbox.js" -o "$SANDBOX_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sandbox-latest/sandbox.js" -o "$SANDBOX_JS" \ || { printf '\033[0;31mFailed to download sandbox.js\033[0m\n' >&2; exit 1; } exec bun run "$SANDBOX_JS" cursor "$@" diff --git a/sh/sandbox/hermes.sh b/sh/sandbox/hermes.sh index 96bfb1378..94b9553e3 100755 --- a/sh/sandbox/hermes.sh +++ b/sh/sandbox/hermes.sh @@ -23,7 +23,7 @@ fi # Remote — download bundled sandbox.js from GitHub release SANDBOX_JS=$(mktemp) trap 'rm -f "$SANDBOX_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sandbox-latest/sandbox.js" -o "$SANDBOX_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sandbox-latest/sandbox.js" -o "$SANDBOX_JS" \ || { printf '\033[0;31mFailed to download sandbox.js\033[0m\n' >&2; exit 1; } exec bun run "$SANDBOX_JS" hermes "$@" diff --git a/sh/sandbox/junie.sh b/sh/sandbox/junie.sh index 4ed4c89fe..13bf5a53f 100755 --- a/sh/sandbox/junie.sh +++ b/sh/sandbox/junie.sh @@ -23,7 +23,7 @@ fi # Remote — download bundled sandbox.js from GitHub release SANDBOX_JS=$(mktemp) trap 'rm -f "$SANDBOX_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sandbox-latest/sandbox.js" -o "$SANDBOX_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sandbox-latest/sandbox.js" -o "$SANDBOX_JS" \ || { printf '\033[0;31mFailed to download sandbox.js\033[0m\n' >&2; exit 1; } exec bun run "$SANDBOX_JS" junie "$@" diff --git a/sh/sandbox/kilocode.sh b/sh/sandbox/kilocode.sh index a23c2ea3b..5e04e50db 100755 --- a/sh/sandbox/kilocode.sh +++ b/sh/sandbox/kilocode.sh @@ -23,7 +23,7 @@ fi # Remote — download bundled sandbox.js from GitHub release SANDBOX_JS=$(mktemp) trap 'rm -f "$SANDBOX_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sandbox-latest/sandbox.js" -o "$SANDBOX_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sandbox-latest/sandbox.js" -o "$SANDBOX_JS" \ || { printf '\033[0;31mFailed to download sandbox.js\033[0m\n' >&2; exit 1; } exec bun run "$SANDBOX_JS" kilocode "$@" diff --git a/sh/sandbox/openclaw.sh b/sh/sandbox/openclaw.sh index 41dc2effc..bfbbed1cb 100755 --- a/sh/sandbox/openclaw.sh +++ b/sh/sandbox/openclaw.sh @@ -23,7 +23,7 @@ fi # Remote — download bundled sandbox.js from GitHub release SANDBOX_JS=$(mktemp) trap 'rm -f "$SANDBOX_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sandbox-latest/sandbox.js" -o "$SANDBOX_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sandbox-latest/sandbox.js" -o "$SANDBOX_JS" \ || { printf '\033[0;31mFailed to download sandbox.js\033[0m\n' >&2; exit 1; } exec bun run "$SANDBOX_JS" openclaw "$@" diff --git a/sh/sandbox/opencode.sh b/sh/sandbox/opencode.sh index 73843b381..f9b5184ee 100755 --- a/sh/sandbox/opencode.sh +++ b/sh/sandbox/opencode.sh @@ -23,7 +23,7 @@ fi # Remote — download bundled sandbox.js from GitHub release SANDBOX_JS=$(mktemp) trap 'rm -f "$SANDBOX_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sandbox-latest/sandbox.js" -o "$SANDBOX_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sandbox-latest/sandbox.js" -o "$SANDBOX_JS" \ || { printf '\033[0;31mFailed to download sandbox.js\033[0m\n' >&2; exit 1; } exec bun run "$SANDBOX_JS" opencode "$@" diff --git a/sh/sandbox/pi.sh b/sh/sandbox/pi.sh index 6096597a8..a9c536fc8 100755 --- a/sh/sandbox/pi.sh +++ b/sh/sandbox/pi.sh @@ -23,7 +23,7 @@ fi # Remote — download bundled sandbox.js from GitHub release SANDBOX_JS=$(mktemp) trap 'rm -f "$SANDBOX_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sandbox-latest/sandbox.js" -o "$SANDBOX_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sandbox-latest/sandbox.js" -o "$SANDBOX_JS" \ || { printf '\033[0;31mFailed to download sandbox.js\033[0m\n' >&2; exit 1; } exec bun run "$SANDBOX_JS" pi "$@" diff --git a/sh/shared/github-auth.sh b/sh/shared/github-auth.sh index dc1f261fe..86fdf57a0 100755 --- a/sh/shared/github-auth.sh +++ b/sh/shared/github-auth.sh @@ -4,7 +4,7 @@ # # Usage (via curl|bash — recommended): # curl -fsSL --proto '=https' https://openrouter.ai/labs/spawn/shared/github-auth.sh | bash -# curl -fsSL --proto '=https' https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/sh/shared/github-auth.sh | bash +# curl -fsSL --proto '=https' https://raw.githubusercontent.com/OpenRouterLabs/spawn/main/sh/shared/github-auth.sh | bash # # Usage (sourced using absolute path or CDN URL): # eval "$(curl -fsSL --proto '=https' https://openrouter.ai/labs/spawn/shared/github-auth.sh)" diff --git a/sh/sprite/claude.sh b/sh/sprite/claude.sh index b0421c76f..63a016ab6 100755 --- a/sh/sprite/claude.sh +++ b/sh/sprite/claude.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled sprite.js from GitHub release SPRITE_JS=$(mktemp) trap 'rm -f "$SPRITE_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ || { printf '\033[0;31mFailed to download sprite.js\033[0m\n' >&2; exit 1; } exec bun run "$SPRITE_JS" claude "$@" diff --git a/sh/sprite/codex.sh b/sh/sprite/codex.sh index 892cdd886..f81a4c333 100755 --- a/sh/sprite/codex.sh +++ b/sh/sprite/codex.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled sprite.js from GitHub release SPRITE_JS=$(mktemp) trap 'rm -f "$SPRITE_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ || { printf '\033[0;31mFailed to download sprite.js\033[0m\n' >&2; exit 1; } exec bun run "$SPRITE_JS" codex "$@" diff --git a/sh/sprite/cursor.sh b/sh/sprite/cursor.sh index 45b6bea6d..d2e4e54e7 100644 --- a/sh/sprite/cursor.sh +++ b/sh/sprite/cursor.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled sprite.js from GitHub release SPRITE_JS=$(mktemp) trap 'rm -f "$SPRITE_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ || { printf '\033[0;31mFailed to download sprite.js\033[0m\n' >&2; exit 1; } exec bun run "$SPRITE_JS" cursor "$@" diff --git a/sh/sprite/hermes.sh b/sh/sprite/hermes.sh index 5940bb6f9..739a7b986 100644 --- a/sh/sprite/hermes.sh +++ b/sh/sprite/hermes.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled sprite.js from GitHub release SPRITE_JS=$(mktemp) trap 'rm -f "$SPRITE_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ || { printf '\033[0;31mFailed to download sprite.js\033[0m\n' >&2; exit 1; } exec bun run "$SPRITE_JS" hermes "$@" diff --git a/sh/sprite/junie.sh b/sh/sprite/junie.sh index 82c97b612..a33ce3e58 100644 --- a/sh/sprite/junie.sh +++ b/sh/sprite/junie.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled sprite.js from GitHub release SPRITE_JS=$(mktemp) trap 'rm -f "$SPRITE_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ || { printf '\033[0;31mFailed to download sprite.js\033[0m\n' >&2; exit 1; } exec bun run "$SPRITE_JS" junie "$@" diff --git a/sh/sprite/kilocode.sh b/sh/sprite/kilocode.sh index 0216adca2..3c0c87572 100755 --- a/sh/sprite/kilocode.sh +++ b/sh/sprite/kilocode.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled sprite.js from GitHub release SPRITE_JS=$(mktemp) trap 'rm -f "$SPRITE_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ || { printf '\033[0;31mFailed to download sprite.js\033[0m\n' >&2; exit 1; } exec bun run "$SPRITE_JS" kilocode "$@" diff --git a/sh/sprite/openclaw.sh b/sh/sprite/openclaw.sh index de0c41ff8..6e9d270b8 100755 --- a/sh/sprite/openclaw.sh +++ b/sh/sprite/openclaw.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled sprite.js from GitHub release SPRITE_JS=$(mktemp) trap 'rm -f "$SPRITE_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ || { printf '\033[0;31mFailed to download sprite.js\033[0m\n' >&2; exit 1; } exec bun run "$SPRITE_JS" openclaw "$@" diff --git a/sh/sprite/opencode.sh b/sh/sprite/opencode.sh index f672e964d..c3552647e 100755 --- a/sh/sprite/opencode.sh +++ b/sh/sprite/opencode.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled sprite.js from GitHub release SPRITE_JS=$(mktemp) trap 'rm -f "$SPRITE_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ || { printf '\033[0;31mFailed to download sprite.js\033[0m\n' >&2; exit 1; } exec bun run "$SPRITE_JS" opencode "$@" diff --git a/sh/sprite/pi.sh b/sh/sprite/pi.sh index 300a60d6e..79fead210 100644 --- a/sh/sprite/pi.sh +++ b/sh/sprite/pi.sh @@ -21,7 +21,7 @@ fi # Remote — download bundled sprite.js from GitHub release SPRITE_JS=$(mktemp) trap 'rm -f "$SPRITE_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ || { printf '\033[0;31mFailed to download sprite.js\033[0m\n' >&2; exit 1; } exec bun run "$SPRITE_JS" pi "$@" diff --git a/sh/sprite/t3code.sh b/sh/sprite/t3code.sh index 21b69a997..433884227 100644 --- a/sh/sprite/t3code.sh +++ b/sh/sprite/t3code.sh @@ -21,6 +21,6 @@ fi # Remote — download and run compiled TypeScript bundle SPRITE_JS=$(mktemp) trap 'rm -f "$SPRITE_JS"' EXIT -curl -fsSL --proto '=https' "https://github.com/OpenRouterTeam/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ +curl -fsSL --proto '=https' "https://github.com/OpenRouterLabs/spawn/releases/download/sprite-latest/sprite.js" -o "$SPRITE_JS" \ || { printf '\033[0;31mFailed to download sprite.js\033[0m\n' >&2; exit 1; } exec bun run "$SPRITE_JS" t3code "$@"