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/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/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..d68368da3 100644 --- a/README.md +++ b/README.md @@ -332,7 +332,7 @@ 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 @@ -341,7 +341,7 @@ If an agent fails to install or launch on a cloud: | [**Claude Code**](https://claude.ai) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | [**OpenClaw**](https://github.com/openclaw/openclaw) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | [**Codex CLI**](https://github.com/openai/codex) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| [**OpenCode**](https://github.com/sst/opencode) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | +| [**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/) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | @@ -362,7 +362,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 +400,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 +411,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/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..55fe52c28 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" 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__/cmdrun-happy-path.test.ts b/packages/cli/src/__tests__/cmdrun-happy-path.test.ts index 867ee71ae..0ac4bb432 100644 --- a/packages/cli/src/__tests__/cmdrun-happy-path.test.ts +++ b/packages/cli/src/__tests__/cmdrun-happy-path.test.ts @@ -49,6 +49,23 @@ let fetchCalls: Array<{ url: string; }> = []; +/** + * Filter fetchCalls down to just the spawn-script download URLs. + * + * cmdRun fires background telemetry (PostHog `us.i.posthog.com/batch/`) and + * feature-flag (`/decide/`) requests that flush asynchronously. In a full-suite + * run these can land mid-test and pollute fetchCalls, so we must assert on the + * script-host URLs we actually care about rather than "everything that isn't the + * manifest". See: the cmdrun-happy-path flake fix. + */ +function scriptDownloadFetches() { + // Script URLs always end in `.sh` (primary: openrouter.ai/labs/spawn//.sh, + // fallback: raw.githubusercontent.com/.../sh//.sh). The manifest + // (`manifest.json`) and telemetry/feature-flag calls never do, so this cleanly + // isolates the download requests under test. + return fetchCalls.filter((c) => c.url.endsWith(".sh")); +} + function mockFetchForDownload(opts: { primaryOk?: boolean; fallbackOk?: boolean; @@ -171,7 +188,7 @@ describe("cmdRun happy-path pipeline", () => { await cmdRun("claude", "sprite"); // Should have fetched the manifest + the primary script URL - const scriptFetches = fetchCalls.filter((c) => !c.url.includes("manifest.json")); + const scriptFetches = scriptDownloadFetches(); expect(scriptFetches.length).toBe(1); expect(scriptFetches[0].url).toContain("openrouter.ai"); }); @@ -215,7 +232,7 @@ describe("cmdRun happy-path pipeline", () => { await cmdRun("claude", "sprite"); // Should have fetched manifest + primary (failed) + fallback (success) - const scriptFetches = fetchCalls.filter((c) => !c.url.includes("manifest.json")); + const scriptFetches = scriptDownloadFetches(); expect(scriptFetches.length).toBe(2); expect(scriptFetches[0].url).toContain("openrouter.ai"); expect(scriptFetches[1].url).toContain("raw.githubusercontent.com"); 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__/hetzner-cov.test.ts b/packages/cli/src/__tests__/hetzner-cov.test.ts index ed1c050f1..7c0f25de2 100644 --- a/packages/cli/src/__tests__/hetzner-cov.test.ts +++ b/packages/cli/src/__tests__/hetzner-cov.test.ts @@ -1,4 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, mock, spyOn } from "bun:test"; +import { isString } from "@openrouter/spawn-shared"; import { mockBunSpawn, mockClackPrompts } from "./test-helpers"; mockClackPrompts(); @@ -585,11 +586,21 @@ describe("hetzner/createServer", () => { }, }, }; - let callCount = 0; - global.fetch = mock(() => { - callCount++; - if (callCount <= 1) { - // Token validation + // Route responses by HTTP method + endpoint rather than a fragile global + // call-counter. The previous call-count-keyed mock drifted in full-suite + // runs (the resource-limit 403 landed on the wrong call slot, so cleanup + // never fired and the raw 403 propagated). Routing by request makes the + // mock order-independent and robust to any extra/interleaved fetches. + let createAttempts = 0; + let listIpCalls = 0; + let deleteIpCalls = 0; + global.fetch = mock((input: string | URL | Request, init?: RequestInit) => { + const url = isString(input) ? input : input instanceof URL ? input.href : input.url; + const method = (init?.method ?? (input instanceof Request ? input.method : "GET")).toUpperCase(); + const path = url.replace("https://api.hetzner.cloud/v1", ""); + + // Token validation (GET /servers?per_page=1) and any other server reads + if (method === "GET" && path.startsWith("/servers")) { return Promise.resolve( new Response( JSON.stringify({ @@ -598,8 +609,8 @@ describe("hetzner/createServer", () => { ), ); } - if (callCount <= 2) { - // SSH keys + // SSH keys lookup + if (method === "GET" && path.startsWith("/ssh_keys")) { return Promise.resolve( new Response( JSON.stringify({ @@ -608,24 +619,29 @@ describe("hetzner/createServer", () => { ), ); } - if (callCount <= 3) { - // First create attempt — resource_limit_exceeded (HTTP 403) - return Promise.resolve( - new Response( - JSON.stringify({ - error: { - code: "resource_limit_exceeded", - message: "primary_ip_limit", + // Create server: first attempt fails with resource_limit, retry succeeds + if (method === "POST" && path === "/servers") { + createAttempts++; + if (createAttempts === 1) { + return Promise.resolve( + new Response( + JSON.stringify({ + error: { + code: "resource_limit_exceeded", + message: "primary_ip_limit", + }, + }), + { + status: 403, }, - }), - { - status: 403, - }, - ), - ); + ), + ); + } + return Promise.resolve(new Response(JSON.stringify(serverResp))); } - if (callCount <= 4) { - // List primary IPs for cleanup + // List primary IPs for cleanup — one orphaned (assignee 0), one attached + if (method === "GET" && path.startsWith("/primary_ips")) { + listIpCalls++; return Promise.resolve( new Response( JSON.stringify({ @@ -645,31 +661,40 @@ describe("hetzner/createServer", () => { ), ); } - if (callCount <= 5) { - // Delete orphaned IP 100 + // Delete orphaned primary IP + if (method === "DELETE" && path.startsWith("/primary_ips/")) { + deleteIpCalls++; return Promise.resolve( new Response("", { status: 204, }), ); } - // Retry create — success - return Promise.resolve(new Response(JSON.stringify(serverResp))); + return Promise.resolve( + new Response(JSON.stringify({}), { + status: 404, + }), + ); }); const { ensureHcloudToken, createServer } = await import("../hetzner/hetzner"); await ensureHcloudToken(); const conn = await createServer("test-retry", "cx23", "fsn1"); expect(conn.ip).toBe("10.0.0.5"); - // Should have called: token(1), ssh_keys(2), create-fail(3), list-ips(4), delete-ip(5), create-ok(6) - expect(callCount).toBeGreaterThanOrEqual(6); + // The retry flow must have: failed once, cleaned up an orphaned IP, retried. + expect(createAttempts).toBe(2); + expect(listIpCalls).toBeGreaterThanOrEqual(1); + expect(deleteIpCalls).toBe(1); }); it("throws with guidance when resource limit hit and no orphaned IPs to clean", async () => { process.env.HCLOUD_TOKEN = "test-token"; - let callCount = 0; - global.fetch = mock(() => { - callCount++; - if (callCount <= 1) { + // Route by method + endpoint (order-independent — see the retry test above). + global.fetch = mock((input: string | URL | Request, init?: RequestInit) => { + const url = isString(input) ? input : input instanceof URL ? input.href : input.url; + const method = (init?.method ?? (input instanceof Request ? input.method : "GET")).toUpperCase(); + const path = url.replace("https://api.hetzner.cloud/v1", ""); + + if (method === "GET" && path.startsWith("/servers")) { return Promise.resolve( new Response( JSON.stringify({ @@ -678,7 +703,7 @@ describe("hetzner/createServer", () => { ), ); } - if (callCount <= 2) { + if (method === "GET" && path.startsWith("/ssh_keys")) { return Promise.resolve( new Response( JSON.stringify({ @@ -687,8 +712,8 @@ describe("hetzner/createServer", () => { ), ); } - if (callCount <= 3) { - // Create fails with resource_limit_exceeded + // Create always fails with resource_limit_exceeded + if (method === "POST" && path === "/servers") { return Promise.resolve( new Response( JSON.stringify({ @@ -703,19 +728,26 @@ describe("hetzner/createServer", () => { ), ); } - // List primary IPs — all attached (none orphaned) + // List primary IPs — all attached (none orphaned to clean up) + if (method === "GET" && path.startsWith("/primary_ips")) { + return Promise.resolve( + new Response( + JSON.stringify({ + primary_ips: [ + { + id: 100, + ip: "1.2.3.4", + assignee_id: 42, + }, + ], + }), + ), + ); + } return Promise.resolve( - new Response( - JSON.stringify({ - primary_ips: [ - { - id: 100, - ip: "1.2.3.4", - assignee_id: 42, - }, - ], - }), - ), + new Response(JSON.stringify({}), { + status: 404, + }), ); }); const { ensureHcloudToken, createServer } = await import("../hetzner/hetzner"); diff --git a/packages/cli/src/__tests__/preload.ts b/packages/cli/src/__tests__/preload.ts index 7251c247d..e6bef9693 100644 --- a/packages/cli/src/__tests__/preload.ts +++ b/packages/cli/src/__tests__/preload.ts @@ -37,6 +37,23 @@ import { tryCatch } from "@openrouter/spawn-shared"; // // We clean up before and after every test run to keep the working tree tidy. +// ── Disable telemetry / analytics network calls in tests ──────────────────── +// +// `bun test` does NOT set NODE_ENV or BUN_ENV, so without this the telemetry +// module (shared/telemetry.ts) sees `_enabled = true` and fires real +// fire-and-forget PostHog `fetch` calls (https://us.i.posthog.com/batch/) plus +// feature-flag `/decide/` requests during tests. Because those land on the +// SAME `global.fetch` that tests mock, they: +// - pollute fetch-call tracking arrays (e.g. cmdrun-happy-path counted 10 +// "downloads" instead of 1 when batched PostHog flushes interleaved), and +// - drift sequential `callCount`-keyed mocks (e.g. hetzner-cov's +// resource-limit retry test), and can make real network calls. +// Setting these env vars before any module loads hard-disables telemetry for +// the whole suite, removing the shared root cause of those flakes. +process.env.NODE_ENV = "test"; +process.env.BUN_ENV = "test"; +process.env.SPAWN_TELEMETRY = "0"; + const REAL_HOME = process.env.HOME ?? ""; function cleanupStrayTestFiles(): void { 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/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 "$@"