# 唤醒通道(transports) 每个成员在被 `aig wake` 调用时,用的都是**它自己的 CLI 的无头模式**。本机实测过的路径如下(2026-09-18)。 ## dsh — DeepSeek Harness ```bash node "%APPDATA%\npm\node_modules\@deepseek-ai\dsh\lib\bin.js" --profile headless "" ``` - 走 `lib/bin.js` 而不是 `dsh.cmd`:**直接 node + argv,绕开 cmd 的引号地狱**(提示词里有中文、引号、换行)。 - `--profile headless` 需要存在;本机 `dsh --help` 明确写了 `dsh --profile headless "run the tests"` 会「答一次、打印、退出」。 - 覆盖入口:`AIGROUP_DSH_BIN`(指向别处的 bin.js);`AIGROUP_DSH_NODE`(换 node)。 - 注意:headless 启动会写 `$DSH_HOME`(profile 目录、日志),在受限沙箱里会 `EPERM`。 ## opencode ```bash "%APPDATA%\npm\node_modules\opencode-ai\bin\opencode.exe" run -m [-c] [--dir ] "" ``` - 直接调 `bin/opencode.exe`(真 EXE,不需要 shell)。 - `-c/--continue` 会接上该项目目录下**最近一次会话**。默认**不加**:免得和用户自己开着的 TUI 会话串味。要连续对话再 `aig join opencode --note "..."` 后手工加 `continue: true`。 - 模型(**全免费档**):默认 `opencode/big-pickle`,备选 `opencode/nemotron-3.5-lightning-free` (`members.json` 里的 `fallback_model`:主模型不可用时自动换备选再试一次,并把换模型的事实写进消息 `meta`)。 其它可用免费档(`opencode models` 实测):`ling-3.0-flash-fin-free`、`mimo-v2.5-free`、`nemotron-3-ultra-free`、 `muse-spark-1.2/1.3-contributor-free`(后两个**本机地域封锁**,报 `This model is not available in your country.`)。 ### 免费档排名(同题实测,2026-09-18) 第一轮基础题(5 题,`tools/model-shootout.mjs`,判分修正后):五个可用免费档**全部满分**, 耗时差得很明显——`big-pickle` 6.3s · `ling-3.0-flash` 6.6s · `nemotron-3.5-lightning` 16.5s · `mimo-v2.5` 19.6s · `nemotron-3-ultra` 57.7s。muse-spark 两个地域封锁直接出局。 决赛轮难题(7 分制,`tools/model-shootout2.mjs`,含一题**真的把模型输出的函数跑断言**): | 模型 | 得分 | 耗时 | 备注 | |---|---|---|---| | `big-pickle` | **6/7** | **16.5s** | 与两个 nemotron 同分,但快 5–6 倍 | | `nemotron-3-ultra-free` | 6/7 | 94.4s | 上下文 1M,长上下文场景的备选 | | `nemotron-3.5-lightning-free` | 6/7 | 103.2s | 开源权重,262k | | `ling-3.0-flash-fin-free` | 5/7 | 19.1s | 快,但「1..100 里数字 1 出现几次」答 20(正确 21) | | `mimo-v2.5-free` | 5/7 | 26.8s | 同上 | - **H5(改 bug 后跑断言)五个模型全部 0 分**:都用了 `arr.slice(-n)`,而 JS 里 `slice(-0)` 等于 `slice(0)`, n=0 的边界全错。这是所有免费档共同的坑,不是哪一家的问题。 - 结论:选 `big-pickle` 作默认(同分最快);它是 Zen 的**隐身模型**,可能某天下线—— 所以配了 `fallback_model`。要换回来一条命令:`aig join opencode --model opencode/nemotron-3.5-lightning-free`。 - **免费档不需要 API key**:实测 `opencode run -m opencode/nemotron-3-ultra-free "…"` 直接返回内容。 这条很关键——意味着群聊里 opencode 这一侧零成本。 - 覆盖入口:`AIGROUP_OPENCODE_BIN`。 ## workbuddy — WorkBuddy 桌面端(走它随附的 CodeBuddy CLI) ```bash "<~>\.workbuddy\binaries\node\versions\22.22.2-3\node.exe" "H:\workbuddy\resources\app.asar.unpacked\cli\bin\codebuddy" -p "" --model ``` - WorkBuddy 桌面端本体(`H:\workbuddy\WorkBuddy.exe`)没有命令行入口,但它的安装目录里**带了一套 CodeBuddy CLI**(`@genie/agent-cli`,`codebuddy` / `cbc`),支持 `-p/--print` 无头输出,直接可用。 - 用 WorkBuddy **自带的 node**(`~/.workbuddy/binaries/node/versions/*/node.exe`),避免宿主 node 版本差异。 - 模型:`hy4-preview-f`(Hy4 preview 免费档)。WorkBuddy 的模型分档在 `~/.workbuddy/cache/*acc-product-config-v3.json` 里写着:`Hy4 preview` → 免费 `hy4-preview-f` / 付费 `hy4-preview`; `Hy3` → 免费 `hy3` / 付费 `hy3-x`。桌面端两个现存会话本来就在用 `hy4-preview-f`。 - 登录态:CLI 复用桌面端的凭据(实测 `-p` 直接有回答,无需额外登录)。它会写 `~/.codebuddy/`, 受限沙箱里会 `EPERM: mkdir '~/.codebuddy/local_storage'`。 - 覆盖入口:`AIGROUP_CODEBUDDY_BIN`、`AIGROUP_CODEBUDDY_NODE`。 ## 免费档怎么挑的(有实测,不是感觉) `tools/model-shootout.mjs` + `tools/model-shootout2.mjs` 用同一套题跑遍 opencode 的免费档, 题是**客观可判分**的(数值、枚举、以及真的把模型输出的函数跑断言)。结论与原始数据见同目录 `shootout-result.json` / `shootout2-result.json`,切换模型: ```bash node aig.mjs join opencode --model opencode/ling-3.0-flash-fin-free # 单个成员改 node aig.mjs wake opencode --model opencode/big-pickle --dry-run # 只这一次改 ``` ## 加一个新成员 ```bash node aig.mjs join reviewer --kind custom --model whatever ``` 然后在 `rooms//members.json` 里给它加通道画像(`transport` 必须是 `aig.mjs` 里 `resolveTransport` 认识的类型,或者你自己在 `resolveTransport` 加一个分支): ```json { "reviewer": { "kind": "custom", "transport": "opencode", "model": "opencode/big-pickle", "dir": "E:/proj", "note": "只做代码审查" } } ``` ## 身份识别顺序 `aig` 判断「我是谁」的顺序: 1. `--as `(最优先) 2. `AIGROUP_MEMBER` 环境变量 3. 宿主环境变量:`DSH_SESSION_ID`/`DSH_HOME` → dsh;`OPENCODE_*` → opencode;`CODEBUDDY_*`/`CBC_*` → workbuddy 4. 安装目录里的 `.aig-host.json`(由 `install.mjs` 写入) 5. 父进程链(向上找 `opencode.exe` / `WorkBuddy.exe` / `dsh`,需要 `detect` 或深度识别时才算) 6. 兜底 `anon` `aig detect` 会把这三类证据全打出来,认错身份时先看它。