mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-10-04 22:49:41 +02:00
Two consumers of the registry cannot import TypeScript: `install.sh`, which runs via `curl | bash` before any checkout exists, and `scripts/build-agent-image.mjs`. Both currently hand-maintain their own CLI lists, and both have already drifted. `scripts/generate-cli-catalog.mts` (`npm run generate:cli-catalog`, plus a `--check` mode) emits from `STOCK_CLIS`: - `config/clis.stock.json` for the `.mjs` and the tests. It carries `enabled` — the field the earlier attempt omitted, which is how a disabled CLI's npm package still got baked into every agent image. - a marker-delimited block inside `install.sh`, embedded rather than fetched. The embedded copy is the FULL catalogue on purpose: the earlier design fetched it and fell back to a hardcoded two-CLI list, degrading silently on an empty response. There is no degraded mode to fall into now. The block is bash 3.2 safe: parallel indexed arrays, no associative arrays, no namerefs, no mapfile. Variable-length lists use OFFSET/LENGTH windows into one flat array rather than a delimiter, so a $HOME containing a space needs no IFS handling and `shell` (no binaries) gets length 0 and is never iterated. Search paths are emitted dir-major, matching the probe order the hand-written arrays use and `test/install-sh-detection-parity.test.ts` pins. Only fields the two consumers need are exported. `launch`/`env`/`capabilities`/ `overlays` are spawn-time concerns the server alone interprets, and a test asserts they never leak into the artifact. `main()` sits behind an `isMainModule()` guard so the sync test can import the renderers. Without it, importing the module would rewrite the artifacts as a side effect of checking them — passing always, guarding never. This commit adds the block; it does not yet delete the hand-written arrays, so the detection pin keeps measuring both against each other. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015EMxQreQUZX5ZyybxAGh12
274 lines
6.0 KiB
JSON
274 lines
6.0 KiB
JSON
[
|
|
{
|
|
"id": "claude",
|
|
"label": "Claude",
|
|
"shortBadge": "CC",
|
|
"enabled": true,
|
|
"order": 0,
|
|
"kind": "agent",
|
|
"discovery": {
|
|
"binaries": [
|
|
"claude"
|
|
],
|
|
"searchDirs": [
|
|
"~/.local/bin",
|
|
"~/.claude/local",
|
|
"/usr/local/bin",
|
|
"~/.npm-global/bin",
|
|
"~/bin"
|
|
],
|
|
"install": {
|
|
"command": {
|
|
"linux": "curl -fsSL https://claude.ai/install.sh | bash",
|
|
"darwin": "curl -fsSL https://claude.ai/install.sh | bash",
|
|
"wsl": "curl -fsSL https://claude.ai/install.sh | bash"
|
|
},
|
|
"npmPackage": "@anthropic-ai/claude-code",
|
|
"docsUrl": "https://docs.claude.com/claude-code"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "shell",
|
|
"label": "Shell",
|
|
"shortBadge": "SH",
|
|
"enabled": true,
|
|
"order": 1,
|
|
"kind": "shell",
|
|
"discovery": {
|
|
"binaries": [],
|
|
"searchDirs": [],
|
|
"install": {
|
|
"command": {}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "opencode",
|
|
"label": "OpenCode",
|
|
"shortBadge": "OC",
|
|
"enabled": true,
|
|
"order": 10,
|
|
"kind": "agent",
|
|
"discovery": {
|
|
"binaries": [
|
|
"opencode"
|
|
],
|
|
"searchDirs": [
|
|
"~/.opencode/bin",
|
|
"~/.local/bin",
|
|
"/usr/local/bin",
|
|
"~/go/bin",
|
|
"~/.bun/bin",
|
|
"~/.npm-global/bin",
|
|
"~/bin"
|
|
],
|
|
"install": {
|
|
"command": {
|
|
"linux": "curl -fsSL https://opencode.ai/install | bash",
|
|
"darwin": "curl -fsSL https://opencode.ai/install | bash"
|
|
},
|
|
"npmPackage": "opencode-ai",
|
|
"docsUrl": "https://opencode.ai/docs"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "codex",
|
|
"label": "Codex",
|
|
"shortBadge": "CX",
|
|
"enabled": true,
|
|
"order": 20,
|
|
"kind": "agent",
|
|
"discovery": {
|
|
"binaries": [
|
|
"codex"
|
|
],
|
|
"searchDirs": [
|
|
"~/.codex/bin",
|
|
"~/.local/bin",
|
|
"/usr/local/bin",
|
|
"~/.bun/bin",
|
|
"~/.npm-global/bin",
|
|
"~/bin"
|
|
],
|
|
"install": {
|
|
"command": {
|
|
"linux": "npm install -g @openai/codex",
|
|
"darwin": "npm install -g @openai/codex"
|
|
},
|
|
"npmPackage": "@openai/codex",
|
|
"docsUrl": "https://developers.openai.com/codex/cli"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "gemini",
|
|
"label": "Gemini",
|
|
"shortBadge": "GM",
|
|
"enabled": true,
|
|
"order": 30,
|
|
"kind": "agent",
|
|
"discovery": {
|
|
"binaries": [
|
|
"gemini"
|
|
],
|
|
"searchDirs": [
|
|
"~/.gemini/bin",
|
|
"~/.local/bin",
|
|
"/usr/local/bin",
|
|
"~/.bun/bin",
|
|
"~/.npm-global/bin",
|
|
"~/bin"
|
|
],
|
|
"install": {
|
|
"command": {
|
|
"linux": "npm install -g @google/gemini-cli",
|
|
"darwin": "npm install -g @google/gemini-cli"
|
|
},
|
|
"npmPackage": "@google/gemini-cli",
|
|
"docsUrl": "https://github.com/google-gemini/gemini-cli"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "antigravity",
|
|
"label": "Antigravity",
|
|
"shortBadge": "AG",
|
|
"enabled": true,
|
|
"order": 40,
|
|
"kind": "agent",
|
|
"discovery": {
|
|
"binaries": [
|
|
"agy"
|
|
],
|
|
"searchDirs": [
|
|
"~/.local/bin",
|
|
"~/.antigravity/bin",
|
|
"/usr/local/bin",
|
|
"~/bin"
|
|
],
|
|
"install": {
|
|
"command": {
|
|
"linux": "curl -fsSL https://antigravity.google/cli/install.sh | bash",
|
|
"darwin": "curl -fsSL https://antigravity.google/cli/install.sh | bash"
|
|
},
|
|
"docsUrl": "https://antigravity.google/cli"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "pi",
|
|
"label": "Pi",
|
|
"shortBadge": "PI",
|
|
"enabled": true,
|
|
"order": 50,
|
|
"kind": "agent",
|
|
"discovery": {
|
|
"binaries": [
|
|
"pi"
|
|
],
|
|
"searchDirs": [
|
|
"~/.local/bin",
|
|
"/usr/local/bin",
|
|
"~/.bun/bin",
|
|
"~/.npm-global/bin",
|
|
"~/bin"
|
|
],
|
|
"install": {
|
|
"command": {
|
|
"linux": "npm install -g --ignore-scripts @earendil-works/pi-coding-agent",
|
|
"darwin": "npm install -g --ignore-scripts @earendil-works/pi-coding-agent"
|
|
},
|
|
"npmPackage": "@earendil-works/pi-coding-agent",
|
|
"docsUrl": "https://pi.dev"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "grok",
|
|
"label": "Grok",
|
|
"shortBadge": "GK",
|
|
"enabled": true,
|
|
"order": 70,
|
|
"kind": "agent",
|
|
"discovery": {
|
|
"binaries": [
|
|
"grok"
|
|
],
|
|
"searchDirs": [
|
|
"~/.grok/bin",
|
|
"~/.local/bin",
|
|
"/usr/local/bin",
|
|
"~/bin"
|
|
],
|
|
"install": {
|
|
"command": {
|
|
"linux": "curl -fsSL https://x.ai/cli/install.sh | bash",
|
|
"darwin": "curl -fsSL https://x.ai/cli/install.sh | bash"
|
|
},
|
|
"docsUrl": "https://github.com/xai-org/grok-build"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "deepseek",
|
|
"label": "DeepSeek",
|
|
"shortBadge": "DS",
|
|
"enabled": true,
|
|
"order": 80,
|
|
"kind": "agent",
|
|
"discovery": {
|
|
"binaries": [
|
|
"dsh"
|
|
],
|
|
"searchDirs": [
|
|
"~/.local/bin",
|
|
"/usr/local/bin",
|
|
"~/.npm-global/bin",
|
|
"~/bin"
|
|
],
|
|
"identity": {
|
|
"arg": "--help",
|
|
"regex": "DeepSeek\\s+Harness"
|
|
},
|
|
"install": {
|
|
"command": {
|
|
"linux": "npm install -g @deepseek-ai/dsh",
|
|
"darwin": "npm install -g @deepseek-ai/dsh"
|
|
},
|
|
"npmPackage": "@deepseek-ai/dsh",
|
|
"docsUrl": "https://github.com/deepseek-ai/deepseek-harness"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "omp",
|
|
"label": "OMP",
|
|
"shortBadge": "OM",
|
|
"enabled": true,
|
|
"order": 90,
|
|
"kind": "agent",
|
|
"discovery": {
|
|
"binaries": [
|
|
"omp"
|
|
],
|
|
"searchDirs": [
|
|
"~/.local/bin",
|
|
"~/.omp/bin",
|
|
"/usr/local/bin",
|
|
"~/.bun/bin",
|
|
"~/.npm-global/bin",
|
|
"~/bin"
|
|
],
|
|
"install": {
|
|
"command": {
|
|
"linux": "curl -fsSL https://omp.sh/install | sh",
|
|
"darwin": "brew install can1357/tap/omp"
|
|
},
|
|
"docsUrl": "https://omp.sh"
|
|
}
|
|
}
|
|
}
|
|
]
|