alanbox 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/0boxer/AGENTS.md +3 -2
  2. package/0boxer/src/commands/AGENTS.md +2 -1
  3. package/0boxer/src/commands/install.js +47 -0
  4. package/1swarmer/AGENTS.md +5 -2
  5. package/1swarmer/src/AGENTS.md +4 -3
  6. package/1swarmer/src/args.js +7 -0
  7. package/1swarmer/src/cli.js +26 -0
  8. package/1swarmer/src/commands/AGENTS.md +3 -0
  9. package/1swarmer/src/commands/review-file.js +997 -0
  10. package/1swarmer/src/runner/AGENTS.md +1 -0
  11. package/1swarmer/src/runner/codex-runner.js +23 -3
  12. package/2designer/README.md +3 -0
  13. package/2designer/dist/{cdp-engine-JK2XVDHK.js → cdp-engine-4AIWSWXO.js} +2 -2
  14. package/2designer/dist/{cdp-engine-A5WTMTVF.js → cdp-engine-SG4K2BCX.js} +2 -2
  15. package/2designer/dist/{chunk-NQ3ASZUE.js → chunk-7X7PTLZH.js} +2 -2
  16. package/2designer/dist/{chunk-JVF26NXD.js → chunk-DPOWNFOH.js} +2 -2
  17. package/2designer/dist/{chunk-SKEIVBOU.js → chunk-ISUUIOO7.js} +1 -1
  18. package/2designer/dist/chunk-ISUUIOO7.js.map +1 -0
  19. package/2designer/dist/cli.js +494 -244
  20. package/2designer/dist/cli.js.map +1 -1
  21. package/2designer/dist/index.d.ts +7 -18
  22. package/2designer/dist/index.js +5 -198
  23. package/2designer/dist/index.js.map +1 -1
  24. package/2designer/dist/{playwright-engine-YBRDIUHF.js → playwright-engine-YXBY3KEN.js} +2 -2
  25. package/2designer/dist/{playwright-engine-3YKJOUNU.js → playwright-engine-YXGDTSZ5.js} +2 -2
  26. package/2designer/dist/tint-UD4CJ7S2.js +7 -0
  27. package/2designer/dist/{tint-I3FTT23O.js → tint-YN63MLVN.js} +1 -1
  28. package/2designer/dist/tint-YN63MLVN.js.map +1 -0
  29. package/4reporter/README.md +24 -0
  30. package/4reporter/dist/cli.js +464 -0
  31. package/4reporter/dist/cli.js.map +1 -0
  32. package/4reporter/dist/index.d.ts +108 -0
  33. package/4reporter/dist/index.js +445 -0
  34. package/4reporter/dist/index.js.map +1 -0
  35. package/4reporter/package.json +39 -0
  36. package/README.md +13 -5
  37. package/bin/reporter.js +11 -0
  38. package/cli.js +31 -6
  39. package/mcp/README.md +7 -1
  40. package/mcp/config.toml +4 -0
  41. package/package.json +8 -4
  42. package/skills/AGENTS.md +3 -3
  43. package/skills/aitool/SKILL.md +1 -1
  44. package/skills/desginer/SKILL.md +65 -45
  45. package/skills/swarmer/SKILL.md +37 -0
  46. package/2designer/LICENSE +0 -21
  47. package/2designer/dist/chunk-SKEIVBOU.js.map +0 -1
  48. package/2designer/dist/tint-I3FTT23O.js.map +0 -1
  49. package/2designer/dist/tint-RUSSUAWA.js +0 -7
  50. /package/2designer/dist/{cdp-engine-JK2XVDHK.js.map → cdp-engine-4AIWSWXO.js.map} +0 -0
  51. /package/2designer/dist/{cdp-engine-A5WTMTVF.js.map → cdp-engine-SG4K2BCX.js.map} +0 -0
  52. /package/2designer/dist/{chunk-NQ3ASZUE.js.map → chunk-7X7PTLZH.js.map} +0 -0
  53. /package/2designer/dist/{chunk-JVF26NXD.js.map → chunk-DPOWNFOH.js.map} +0 -0
  54. /package/2designer/dist/{playwright-engine-YBRDIUHF.js.map → playwright-engine-YXBY3KEN.js.map} +0 -0
  55. /package/2designer/dist/{playwright-engine-3YKJOUNU.js.map → playwright-engine-YXGDTSZ5.js.map} +0 -0
  56. /package/2designer/dist/{tint-RUSSUAWA.js.map → tint-UD4CJ7S2.js.map} +0 -0
package/0boxer/AGENTS.md CHANGED
@@ -2,17 +2,18 @@
2
2
 
3
3
  `C:\Users\lenovo\Desktop\my-project\101my-aitool\aibox\0boxer` 是 `alanbox` 的包级资源命令层,负责 aibox 自身资源安装、初始化和更新。`1swarmer` 负责 worker/swarm 执行和 provider 诊断;不要把 `init`、`update`、`install` 这类 aibox 资源命令写回 `1swarmer`。
4
4
 
5
- **Important:** `install`、`init`、`update` 会真实复制 Codex/Claude skills、hooks、mcp、scripts 和 Codex plugin manifest。修改或验证前确认目标目录,避免误写用户环境。
5
+ **Important:** `install`、`init`、`update` 会真实复制 Codex/Claude skills、hooks、mcp、scripts 和 Codex plugin manifest;Codex 目标还会按需维护 Playwright MCP 配置。修改或验证前确认目标目录,避免误写用户环境。
6
6
 
7
7
  ### Important files
8
8
 
9
9
  - `src/cli.js` — 0boxer 命令分发器;当前只处理 `install`、`init`、`update`。
10
10
  - `../shared/package-args.js` — 包级资源命令参数解析器;只解析安装 target 相关选项,不依赖 `1swarmer/src/args.js`。
11
- - `src/commands/install.js` — 安装或更新 Codex/Claude 资源;Codex 额外维护 plugin manifest 和 marketplace entry。
11
+ - `src/commands/install.js` — 安装或更新 Codex/Claude 资源;Codex 额外维护 plugin manifest、marketplace entry Playwright MCP 配置。
12
12
 
13
13
  ### Implementation notes
14
14
 
15
15
  - `init` 和 `update` 当前是 `install` 的别名,用来安装或刷新 bundled skills/hooks/mcp/scripts。
16
+ - Codex 安装会在缺失 `[mcp_servers.playwright]` 时,把包内 `mcp/config.toml` 的同名表追加到当前 `CODEX_HOME`(或用户 `.codex`)下的 `mcp/config.toml`;已有表不覆盖。
16
17
  - `--target codex|claude|both` 可跳过询问;未传 target 且在交互终端运行时会询问安装到 Codex、Claude 还是两者,非交互模式必须显式传 target。
17
18
  - `0boxer` 不复用 `1swarmer` 的参数解析;新增资源命令选项时维护 `../shared/package-args.js`,避免把 worker/swarm 参数带进包级安装命令。
18
19
  - 重命名或合并 skill 时,同步维护 `install.js` 的废弃 skill 清理名单,避免用户目录残留重复入口。
@@ -6,10 +6,11 @@
6
6
 
7
7
  ### Important files
8
8
 
9
- - `install.js` — 安装或更新 Codex/Claude skills、hooks、mcp、scripts;Codex 额外安装 plugin manifest marketplace entry。
9
+ - `install.js` — 安装或更新 Codex/Claude skills、hooks、mcp、scripts;Codex 额外安装 plugin manifest、marketplace entry,并按需补 Playwright MCP 配置。
10
10
 
11
11
  ### Implementation notes
12
12
 
13
13
  - `init`、`update` 通过 `0boxer/src/cli.js` 进入 `install.js`,语义是安装或刷新 aibox bundled resources。
14
14
  - 安装 target 必须是 `codex`、`claude` 或 `both`;非交互模式必须显式传 target。
15
+ - Codex 安装只在目标 `mcp/config.toml` 缺少 `[mcp_servers.playwright]` 时,从包内 `mcp/config.toml` 追加同名表,不覆盖用户已有 MCP 配置。
15
16
  - 废弃 skill 名清理名单和 `skills/AGENTS.md` 要保持同步。
@@ -56,6 +56,7 @@ function installCodex({ home, packageRoot }) {
56
56
  installSkills(packageSkillsRoot, codexSkillsRoot);
57
57
  installResourceDir(packageHooksRoot, path.join(codexHome, 'hooks', pluginName));
58
58
  installResourceDir(packageMcpRoot, path.join(codexHome, 'mcp', pluginName));
59
+ const playwrightMcp = ensureCodexPlaywrightMcp({ codexHome, packageMcpRoot });
59
60
  ensureMarketplace({ marketplaceRoot, marketplacePath, pluginName });
60
61
 
61
62
  return {
@@ -65,6 +66,7 @@ function installCodex({ home, packageRoot }) {
65
66
  `skills: ${codexSkillsRoot}`,
66
67
  `hooks: ${path.join(codexHome, 'hooks', pluginName)}`,
67
68
  `mcp: ${path.join(codexHome, 'mcp', pluginName)}`,
69
+ `playwright mcp: ${playwrightMcp.status} (${playwrightMcp.configPath})`,
68
70
  `marketplace: ${marketplacePath}`,
69
71
  ],
70
72
  };
@@ -171,6 +173,51 @@ function installResourceDir(src, dst) {
171
173
  return copyDir(src, dst);
172
174
  }
173
175
 
176
+ function ensureCodexPlaywrightMcp({ codexHome, packageMcpRoot }) {
177
+ const configDir = path.join(codexHome, 'mcp');
178
+ const configPath = path.join(configDir, 'config.toml');
179
+ const sourceConfigPath = path.join(packageMcpRoot, 'config.toml');
180
+ fs.mkdirSync(configDir, { recursive: true });
181
+
182
+ const current = fs.existsSync(configPath) ? fs.readFileSync(configPath, 'utf8') : '';
183
+ if (hasTomlTable(current, 'mcp_servers.playwright')) {
184
+ return { status: 'already configured', configPath };
185
+ }
186
+
187
+ const source = fs.existsSync(sourceConfigPath) ? fs.readFileSync(sourceConfigPath, 'utf8') : '';
188
+ const block = extractTomlTable(source, 'mcp_servers.playwright');
189
+ if (!block) {
190
+ return { status: `missing source table (${sourceConfigPath})`, configPath };
191
+ }
192
+
193
+ const prefix = current && !current.endsWith('\n') ? '\n\n' : current ? '\n' : '';
194
+ fs.writeFileSync(configPath, current + prefix + block.trimEnd() + '\n', 'utf8');
195
+ return { status: 'added', configPath };
196
+ }
197
+
198
+ function hasTomlTable(content, tableName) {
199
+ const escaped = tableName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
200
+ return new RegExp(`^\\s*\\[${escaped}\\]\\s*$`, 'm').test(content);
201
+ }
202
+
203
+ function extractTomlTable(content, tableName) {
204
+ const lines = content.split(/\r?\n/);
205
+ const tableHeader = `[${tableName}]`;
206
+ const result = [];
207
+ let capturing = false;
208
+
209
+ for (const line of lines) {
210
+ const trimmed = line.trim();
211
+ if (trimmed.startsWith('[') && trimmed.endsWith(']')) {
212
+ if (capturing) break;
213
+ capturing = trimmed === tableHeader;
214
+ }
215
+ if (capturing) result.push(line);
216
+ }
217
+
218
+ return result.length ? result.join('\n') : '';
219
+ }
220
+
174
221
  function copyFile(src, dst) {
175
222
  fs.mkdirSync(path.dirname(dst), { recursive: true });
176
223
  fs.copyFileSync(src, dst);
@@ -1,6 +1,6 @@
1
1
  ## 1swarmer
2
2
 
3
- `C:\Users\lenovo\Desktop\my-project\101my-aitool\aibox\1swarmer` 是 `alanbox` 的 worker flow 实现层,承接 `swarmer` / `swarm`、`doctor`、`info`、参数解析、Codex/Claude 子进程 runner、worker 编排、handoff、用户级 `.multirunagent` 存储和 prompt 构造。包根 `cli.js` 负责流程级路由,`bin/alanbox.js` 和 `bin/swarmer.js` 转发到包根 `cli.js`,再由包根转入本目录。
3
+ `C:\Users\lenovo\Desktop\my-project\101my-aitool\aibox\1swarmer` 是 `alanbox` 的 worker flow 实现层,承接 `swarmer` / `swarm`、`review-file`、`doctor`、`info`、参数解析、Codex/Claude 子进程 runner、worker 编排、handoff、用户级 `.multirunagent` 存储和 prompt 构造。包根 `cli.js` 负责流程级路由,`bin/alanbox.js` 和 `bin/swarmer.js` 转发到包根 `cli.js`,再由包根转入本目录。
4
4
 
5
5
  **Important:** `1swarmer` 是 worker 编排和 provider 诊断稳定入口,不是包级资源安装入口。`install`、`init`、`update` 归 `0boxer`;新增 `2designer` / `3apiflower` 这类流程时挂到包根 `cli.js`,不要把非 worker flow 的参数解析塞进这里。
6
6
 
@@ -8,8 +8,9 @@
8
8
 
9
9
  ### Important files
10
10
 
11
- - `src/cli.js` — 1swarmer worker 命令分发器;加载配置、解析运行上下文,并路由到 `doctor`、`info`、`swarm`;`swarmer` 是 `swarm` 的兼容别名,也作为 npm 独立 bin 暴露。
11
+ - `src/cli.js` — 1swarmer worker 命令分发器;加载配置、解析运行上下文,并路由到 `doctor`、`info`、`swarm`、`review-file`;`swarmer` 是 `swarm` 的兼容别名,也作为 npm 独立 bin 暴露。
12
12
  - `src/args.js` — CLI 参数解析器;新增 flag 或命令参数时优先在这里统一处理。
13
+ - `src/commands/review-file.js` — 双 provider 文件/目录审查命令;Codex 与 Claude 第一阶段并行审查并各自生成 `*.codex.initial.md` / `*.claude.initial.md`,随后合并为 `[codex√]`、`[claude√]`、`[codex√claude❌codex√]` 这类共识链条目,默认输出到 `all-project\.tmp\swarm\<yyyy-mm-dd-HHmmss>-<hash>.md`。
13
14
  - `src/commands/swarm/index.js` — `swarm` 命令入口与路由;`cli.js` 通过 `require('./commands/swarm')` 解析到此,`--auto` / `--resume` 委托 `swarm/auto.js`,否则走 `swarm/custom.js`。
14
15
  - `src/commands/swarm/custom.js` — 多 worker 编排主流程;负责 worker spec 执行。
15
16
  - `src/commands/swarm/auto.js` — auto workflow 状态机;负责 GOAP 推荐、确认门、pending/resume、执行、失败重规划。
@@ -29,6 +30,7 @@
29
30
  ### Implementation notes
30
31
 
31
32
  - `swarmer`/`swarm` 是 worker 执行的唯一业务入口;单 worker 使用一个 `--worker`,需要全并行时使用 `swarm --parallel-workers`,需要混合串行/并行时用 `--worker "[spec1,spec2]"` 表示同一阶段并行。不要恢复独立 `exec` 或 `parallel` 命令。
33
+ - `review-file` 是专用文件/目录审查入口,不替代普通 `swarm`。它用 `--phase initial|cross-check|all` 支持长任务分阶段恢复;用 `--review-kind defects|improvements` 区分阻塞缺陷审查和可落地改进审查,未传时可从 `--context` 中的“改进/优化/性能/可维护”等词自动推断。流程应保持三层:provider 先各自产出初审 md,主报告合并为 `[provider√]` 条目,再让对方 provider 检查这些条目;认同追加 `√`,不认同追加 `❌`,出现 `❌` 后继续复核直到最终为 `√`。为避免 Claude 非交互读取文件时卡在权限确认、加载本机 hooks/plugins 或高 effort 长时间不返回,`review-file` 的 Claude 调用默认使用 `--safe-mode --effort low --permission-mode bypassPermissions`,可用 `--no-claude-safe-mode`、`--claude-effort` 和 `--claude-permission-mode` 覆盖。
32
34
  - `1swarmer/src/cli.js` 只维护 worker/common 命令;包级命令组、`designer`、未来 `3apiflower` 入口应维护在 `aibox/cli.js` 和专用 `bin/*.js`。
33
35
  - CLI 的 `--worker` 输入和未来 workflow JSON 最终都应转换为统一 task 数组,再交给同一个执行器处理。
34
36
  - 调整参数解析时,同步检查 `src/cli.js` 的 usage 文案、README 命令示例和相关 skills。
@@ -46,5 +48,6 @@
46
48
  - 从包根目录运行烟雾检查:`npm test`
47
49
  - 从包根目录运行轻量验证:`npm run validate`
48
50
  - 直接查看信息:`node bin/swarmer.js info`
51
+ - 双 provider 文件审查:`node bin/swarmer.js review-file <file-or-dir>`
49
52
  - 直接检查 provider 环境:`node bin/alanbox.js doctor` 或 `node bin/swarmer.js doctor`
50
53
  - 注意:`--dry-run` 已移除,swarm/auto 不再有离线预览,运行即调用真实 provider;确认参数与命令构造请用 `info`。
@@ -1,14 +1,14 @@
1
1
  ## 1swarmer src
2
2
 
3
- `1swarmer/src` 是 `alanbox` 的 worker flow 源码目录,负责 `swarmer` / `swarm`、`doctor`、`info`、worker 编排、runner 执行、handoff、存储和 prompt 构造。入口由包根 `cli.js` 做流程级路由后进入这里,npm 发布后暴露 `alanbox`、裸 `swarmer` 和裸 `designer`。
3
+ `1swarmer/src` 是 `alanbox` 的 worker flow 源码目录,负责 `swarmer` / `swarm`、`review-file`、`doctor`、`info`、worker 编排、runner 执行、handoff、存储和 prompt 构造。入口由包根 `cli.js` 做流程级路由后进入这里,npm 发布后暴露 `alanbox`、裸 `swarmer` 和裸 `designer`。
4
4
 
5
5
  **Important:** 这里是 1swarmer 的稳定实现层。新增命令、flag、provider、worker 协议或存储行为时,要同步检查 `1swarmer/AGENTS.md`、README、skills 说明和 `swarmer info` / `--help` 输出;本地源码验证使用 `node bin/alanbox.js ...` 或 `node bin/swarmer.js ...`。
6
6
 
7
7
  ### Important files
8
8
 
9
- - `cli.js` — 1swarmer worker CLI 分发器;`swarm`、`doctor`、`info` 的入口和 usage 文案在这里维护。aibox 包级 `install/init/update` 归 `0boxer`。
9
+ - `cli.js` — 1swarmer worker CLI 分发器;`swarm`、`review-file`、`doctor`、`info` 的入口和 usage 文案在这里维护。aibox 包级 `install/init/update` 归 `0boxer`。
10
10
  - `args.js` — 通用参数解析;新增 flag 时优先在这里统一处理。
11
- - `commands/` — 具体 CLI 命令实现;`swarm` 拆分为 `commands/swarm/`(`index.js` 路由、`custom.js` 手动 worker、`auto.js` 推荐/确认/恢复流程),修改前先读 `commands/AGENTS.md`。
11
+ - `commands/` — 具体 CLI 命令实现;`swarm` 拆分为 `commands/swarm/`(`index.js` 路由、`custom.js` 手动 worker、`auto.js` 推荐/确认/恢复流程),`review-file.js` 负责双 provider 文件/目录 review 和共识链报告,修改前先读 `commands/AGENTS.md`。
12
12
  - `core/` — worker、handoff、storage、prompt 构造等核心协议;修改前先读 `core/AGENTS.md`。
13
13
  - `prompt/` — 可复用 Markdown 提示词模板;修改前先读 `prompt/AGENTS.md`。
14
14
  - `runner/` — Codex / Claude CLI 子进程执行与配置解析;修改前先读 `runner/AGENTS.md`。
@@ -19,6 +19,7 @@
19
19
  - 包级流程路由不在本目录维护;`install/init/update` 归 `0boxer`,`designer` 和未来其他 flow 入口应挂在 `aibox/cli.js`,避免本文件重新变成所有流程混杂的总入口。
20
20
  - 默认使用原生 CLI 登录态;只有显式配置隔离 home 时才设置 `CODEX_HOME` 或 `CLAUDE_CONFIG_DIR`。
21
21
  - 多 worker 输出默认写入 `%USERPROFILE%\.multirunagent\<namespace>`,不要重新写回项目内 `.sub-codex`。
22
+ - `review-file` 报告默认写入单个 `C:\Users\lenovo\Desktop\all-project\.tmp\swarm\<yyyy-mm-dd-HHmmss>-<hash>.md`,这是用户指定的审查报告位置,不属于普通 swarm 的 `.multirunagent` 存储;provider 初审会先写 `*.codex.initial.md` / `*.claude.initial.md` sidecar,主报告再从 sidecar 合并 `[codex√]`、`[claude√]`、`[codex√claude❌codex√]` 这类共识链条目,不再写 raw stdout 段落。
22
23
  - Windows 兼容是长期约束;路径拼接使用 Node `path`,命令文案和示例要考虑 PowerShell。
23
24
 
24
25
  ### Verification
@@ -50,6 +50,12 @@ function parseArgs(argv, command = 'swarm') {
50
50
  continue;
51
51
  }
52
52
 
53
+ if (key === 'claude-arg') {
54
+ result[key] = result[key] || [];
55
+ result[key].push(value);
56
+ continue;
57
+ }
58
+
53
59
  result[key] = value;
54
60
  }
55
61
 
@@ -64,6 +70,7 @@ const BOOLEAN_FLAGS = [
64
70
  'codex',
65
71
  'claude',
66
72
  'both',
73
+ 'no-claude-safe-mode',
67
74
  ];
68
75
 
69
76
  function hasFlag(argv, name) {
@@ -7,6 +7,7 @@ const { loadConfig } = require('./runner/codex-runner');
7
7
  const { parseArgs } = require('./args');
8
8
  const { runDoctor } = require('./commands/doctor');
9
9
  const { runInfo } = require('./commands/info');
10
+ const { runReviewFile } = require('./commands/review-file');
10
11
  const { runSwarm } = require('./commands/swarm');
11
12
 
12
13
  async function main(argv = process.argv.slice(2)) {
@@ -45,6 +46,11 @@ async function main(argv = process.argv.slice(2)) {
45
46
  return;
46
47
  }
47
48
 
49
+ if (command === 'review-file') {
50
+ await runReviewFile(context);
51
+ return;
52
+ }
53
+
48
54
  if (command === 'swarm') {
49
55
  await runSwarm(context);
50
56
  return;
@@ -60,6 +66,7 @@ alanbox CLI runner
60
66
  Usage:
61
67
  node index.js doctor [--account 30428]
62
68
  node index.js info [--account 30428]
69
+ node index.js review-file <file-or-dir> [--report-root C:\\Users\\lenovo\\Desktop\\all-project\\.tmp\\swarm]
63
70
  node index.js swarm [options] --worker "codex:<role>:<prompt>" --worker "claude:<role>:<prompt>"
64
71
  node index.js swarmer [options] --worker "codex:<role>:<prompt>"
65
72
  node index.js swarm --worker "codex:a:先做 A" --worker "[codex:c:并行 C,codex:d:并行 D]" --worker "codex:e:最后汇总"
@@ -87,6 +94,25 @@ Options:
87
94
  --task <spec> Backward-compatible alias for --worker in swarm mode
88
95
  --parallel-workers Run swarm workers in parallel instead of dependency order
89
96
 
97
+ Review-file options:
98
+ --target, --file, -f <path> File or directory to review. Positional target is also supported.
99
+ --providers <list> Comma list: codex,claude. Default: codex,claude
100
+ --codex | --claude Limit review-file to one provider
101
+ --review-kind <name> defects | improvements. Auto-detected from --context when omitted
102
+ --phase <name> all | initial | cross-check. Default: all
103
+ --peer-providers <list> Extra existing initial reports to load during cross-check
104
+ --report-root <path> Root output directory. Default: %USERPROFILE%\\Desktop\\all-project\\.tmp\\swarm if present
105
+ --report-file <path> Exact single Markdown report file for this run
106
+ --report-dir <path> Directory for a generated single Markdown report file
107
+ --max-consensus-rounds <n> Keep reviewing ❌ items until final √. Default: 4, then force final √
108
+ --codex-account <name> Account override for Codex review worker
109
+ --claude-account <name> Account override for Claude review worker
110
+ --claude-permission-mode <mode>
111
+ Claude permission mode for review-file. Default: bypassPermissions
112
+ --claude-effort <level> Claude effort for review-file. Default: low. Use default to omit
113
+ --no-claude-safe-mode Do not pass --safe-mode to Claude in review-file
114
+ --claude-arg <arg> Extra Claude CLI arg for review-file. Repeatable
115
+
90
116
  Auto workflow options:
91
117
  --auto Let GOAP planner recommend workflow before execution
92
118
  --agent, -a <spec> Repeatable auto agent spec. Example: codex:reviewer:复核 src 代码
@@ -7,6 +7,7 @@
7
7
  ### Important files
8
8
 
9
9
  - `swarm/index.js` — `swarm` 命令入口与路由;`--auto` / `--resume` 委托 `swarm/auto.js`,否则走 `swarm/custom.js`。`cli.js` 通过 `require('./commands/swarm')` 解析到此目录。
10
+ - `review-file.js` — 双 provider 文件/目录 review 命令;第一阶段 Codex/Claude 并行审查并各自生成初审 md,第二阶段把 finding 合并成 `[codex√]`、`[claude√]`、`[codex√claude❌codex√]` 这类共识链条目,默认输出到 `all-project\.tmp\swarm` 的日期时间 hash `.md` 文件。
10
11
  - `swarm/custom.js` — 多 worker 串行/依赖层编排;解析 worker specs 后复用共享 executor。
11
12
  - `swarm/auto.js` — `swarm --auto` 状态机;负责 GOAP workflow 推荐、确认门、pending/resume、执行和失败重规划。
12
13
  - `info.js` — 输出当前配置和运行信息;应避免泄露 secret 或本机敏感路径之外的无关细节。
@@ -17,6 +18,7 @@
17
18
  - `swarm` 的 runDir 应来自 `core/storage.js`,默认在 `%USERPROFILE%\.multirunagent\<namespace>`;auto workflow run 使用 `%USERPROFILE%\.multirunagent\<namespace>\runs\<runId>`。
18
19
  - `swarm --auto` 中 `-a` 表示 repeatable agent spec、`-p` 表示 plan hint;非 auto 命令仍保持旧 account/profile 语义,文档和 usage 必须同步说明。
19
20
  - worker 执行统一通过 `swarmer`/`swarm` 开启;单 worker 使用一个 `--worker`,全并行多 worker 使用 `swarm --parallel-workers`,混合串行/并行用 `--worker "[spec1,spec2]"` 表达同一阶段并行。不要恢复独立 `exec` / `parallel` 命令或复制执行链路。
21
+ - `review-file` 是面向文件/目录代码审查的专用命令;可用 `--phase initial|cross-check|all`、`--report-file`、`--report-dir`、`--providers` 和 `--review-kind defects|improvements` 分阶段恢复或切换审查目标。报告主体应只追加共识链条目和条目字段:初审 sidecar md 先生成 `[codex√]` / `[claude√]`,主报告合并后让对方 provider 检查,复核认同追加 `√`,不认同追加 `❌`,有 `❌` 时继续复核直到最终为 `√`。如果 provider 明确无法读取目标文件或本地命令被环境错误阻断,sidecar 必须写 `[provider❌] 初审无效`,不要把空 findings 写成 `[provider√] 未发现`。Claude review-file 默认传 `--safe-mode --effort low --permission-mode bypassPermissions`,因为非交互读取文件时默认权限模式、本机 hooks/plugins 或高 effort 可能卡住直到超时。
20
22
  - `install`、`init`、`update` 归 `0boxer/src/commands`;不要在本目录新增或恢复这些包级资源命令。
21
23
  - `swarmer info` 输出解析后的 provider、command、env 和 worker 配置,是用户排查的重要依据;改动 provider、env、args 解析时要实际运行 `info` 检查(本地源码可用 `node bin/swarmer.js info`,`--dry-run` 预览已移除)。
22
24
 
@@ -25,4 +27,5 @@
25
27
  - 从包根目录运行:`npm run validate`
26
28
  - 修改命令参数或 provider/env 展示后:`node bin/swarmer.js info`
27
29
  - 修改 provider 诊断后:`node bin/swarmer.js doctor`
30
+ - 修改 `review-file` 后:至少运行 `node bin/swarmer.js --help`,并用一个真实文件或目录执行 `node bin/swarmer.js review-file <target> --phase initial --providers codex` 或等效分阶段命令验证报告写入。
28
31
  - 修改 auto workflow、planner 或模板后,需实际运行一次 `swarm --auto`(已无 dry-run/JSON 离线预览)验证。