alanbox 0.1.1

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 (41) hide show
  1. package/0commondflowv1/AGENTS.md +51 -0
  2. package/0commondflowv1/res/three-lens-review.js +124 -0
  3. package/0commondflowv1/src/AGENTS.md +26 -0
  4. package/0commondflowv1/src/args.js +75 -0
  5. package/0commondflowv1/src/cli.js +121 -0
  6. package/0commondflowv1/src/commands/AGENTS.md +29 -0
  7. package/0commondflowv1/src/commands/doctor.js +17 -0
  8. package/0commondflowv1/src/commands/info.js +33 -0
  9. package/0commondflowv1/src/commands/install.js +247 -0
  10. package/0commondflowv1/src/commands/swarm/auto.js +270 -0
  11. package/0commondflowv1/src/commands/swarm/custom.js +60 -0
  12. package/0commondflowv1/src/commands/swarm/index.js +20 -0
  13. package/0commondflowv1/src/core/AGENTS.md +31 -0
  14. package/0commondflowv1/src/core/handoff.js +100 -0
  15. package/0commondflowv1/src/core/prompt-builder.js +93 -0
  16. package/0commondflowv1/src/core/prompt-templates.js +92 -0
  17. package/0commondflowv1/src/core/storage.js +98 -0
  18. package/0commondflowv1/src/core/swarm-executor.js +167 -0
  19. package/0commondflowv1/src/core/workers.js +172 -0
  20. package/0commondflowv1/src/core/workflow-planner.js +366 -0
  21. package/0commondflowv1/src/core/workflow-storage.js +123 -0
  22. package/0commondflowv1/src/prompt/AGENTS.md +16 -0
  23. package/0commondflowv1/src/prompt/default.md +30 -0
  24. package/0commondflowv1/src/prompt/reviewer.md +59 -0
  25. package/0commondflowv1/src/prompt/synthesizer.md +31 -0
  26. package/0commondflowv1/src/prompt/verifier.md +31 -0
  27. package/0commondflowv1/src/runner/AGENTS.md +24 -0
  28. package/0commondflowv1/src/runner/codex-runner.js +519 -0
  29. package/0commondflowv1/src/runner/config.json +16 -0
  30. package/README.md +31 -0
  31. package/bin/multirunagent.js +15 -0
  32. package/hooks/hooks.json +18 -0
  33. package/mcp/README.md +5 -0
  34. package/package.json +45 -0
  35. package/plugin/AGENTS.md +14 -0
  36. package/plugin/plugin.json +36 -0
  37. package/scripts/sub-codex-hook.ps1 +15 -0
  38. package/skills/AGENTS.md +17 -0
  39. package/skills/aibox-swam/SKILL.md +77 -0
  40. package/skills/sub-codex-doctor/SKILL.md +27 -0
  41. package/skills/sub-codex-swarm/SKILL.md +56 -0
@@ -0,0 +1,51 @@
1
+ ## 0commondflowv1
2
+
3
+ `C:\Users\lenovo\Desktop\my-project\101my-aitool\aibox\0commondflowv1` 是 `alanbox` 当前主实现层,承接 CLI 命令、参数解析、Codex/Claude 子进程 runner、worker 编排、handoff、用户级 `.multirunagent` 存储、prompt 构造和 Codex/Claude 资源安装。根目录 `bin/multirunagent.js` 和 `index.js` 只负责转发到 `0commondflowv1/src/cli.js`。
4
+
5
+ **Important:** `0commondflowv1` 是当前稳定入口;npm 包名是 `alanbox`,CLI bin 同时暴露 `alanbox` 和兼容名 `multirunagent`。不要在没有迁移计划的情况下重命名用户级 `.multirunagent` 存储目录。
6
+
7
+ **Important:** `src/runner/config.json` 默认 provider 是系统 `codex` CLI;Claude CLI 只能作为可选 provider/worker 配置启用。不要把个人 Antigravity cockpit 路径、全局 npm 安装路径或私有 home 写成通用默认配置。
8
+
9
+ ### Important files
10
+
11
+ - `src/cli.js` — 0commondflowv1 主命令分发器;加载配置、解析运行上下文,并路由到 `doctor`、`info`、`install/init`、`swarm`;`swam` 是 `swarm` 的兼容别名。
12
+ - `src/args.js` — CLI 参数解析器;新增 flag 或命令参数时优先在这里统一处理。
13
+ - `src/commands/swarm/index.js` — `swarm` 命令入口与路由;`cli.js` 通过 `require('./commands/swarm')` 解析到此,`--auto` / `--resume` 委托 `swarm/auto.js`,否则走 `swarm/custom.js`。
14
+ - `src/commands/swarm/custom.js` — 多 worker 编排主流程;负责 worker spec 执行。
15
+ - `src/commands/swarm/auto.js` — auto workflow 状态机;负责 GOAP 推荐、确认门、pending/resume、执行、失败重规划。
16
+ - `src/commands/doctor.js` — 子 Codex 环境和账号健康检查。
17
+ - `src/commands/info.js` — 输出当前配置、worker 和命令信息。
18
+ - `src/commands/install.js` — 显式安装 Codex/Claude skills、hooks、mcp、scripts;Codex 额外安装 plugin manifest 和 marketplace entry。
19
+ - `src/runner/codex-runner.js` — Codex 子进程执行层;负责读取配置、设置 `CODEX_HOME`、spawn `codex exec/login/doctor`。
20
+ - `src/runner/config.json` — 当前内置最小配置来源;默认只声明 `providers.codex`、可选 `providers.claude` 和 `timeoutMs`,不预设 worker/account,默认使用各 CLI 的原生 home 和登录态。
21
+ - `src/core/workers.js` — worker spec 解析、分组并行阶段解析、worker 名称归一化和依赖层构建。
22
+ - `src/core/swarm-executor.js` — 普通 swarm 和 auto workflow 共用的 task graph 执行器;`swarm --parallel-workers` 通过同一执行器并行调度。
23
+ - `src/core/workflow-planner.js` — 本地最小 GOAP planner;把目标、agent specs 和 plan hint 转成 workflow phases/actions。
24
+ - `src/core/workflow-storage.js` — auto workflow 的 AgentDB-lite 文件存储;写 run/plan/state/steps JSON。
25
+ - `src/core/prompt-templates.js` — auto workflow role 模板查找、渲染和 fallback。
26
+ - `src/core/handoff.js` — prior results context 与 `HANDOFF_JSON` 提取/构造逻辑。
27
+ - `src/core/storage.js` — 用户级 `.multirunagent` 结果与 memory 写入;查询、resume、logs 能力应优先扩展这里。
28
+ - `src/core/prompt-builder.js` — 注入 role、context、skill-file、handoff 协议的 prompt 构造逻辑。
29
+
30
+ ### Implementation notes
31
+
32
+ - `swam`/`swarm` 是 worker 执行的唯一业务入口;单 worker 使用一个 `--worker`,需要全并行时使用 `swarm --parallel-workers`,需要混合串行/并行时用 `--worker "[spec1,spec2]"` 表示同一阶段并行。不要恢复独立 `exec` 或 `parallel` 命令。
33
+ - CLI 的 `--worker` 输入和未来 workflow JSON 最终都应转换为统一 task 数组,再交给同一个执行器处理。
34
+ - 调整参数解析时,同步检查 `src/cli.js` 的 usage 文案、README 命令示例和相关 skills。
35
+ - 调整 worker/handoff/storage 协议时,同步检查根目录 `skills/aibox-swam` 和 `skills/sub-codex-*` 的说明,避免 skill 仍指导旧参数或旧输出格式。
36
+ - `install --target codex|claude|both` 是安装入口;未传 target 时只在交互终端询问,非交互模式必须显式传 target,避免误写用户目录。
37
+ - `%USERPROFILE%\.multirunagent\<namespace>` 是运行结果和 handoff 的持久化位置;改写存储格式前要考虑旧 run 的读取兼容。项目内 `.sub-codex` 是旧位置,不应再作为默认输出目录。
38
+ - scheduler、retry、resume、workflow JSON 等能力如果新增,应先复用现有 `swarm` 执行链路,再扩展状态机;当前 `swarm --auto` 已通过 `swarm/auto.js` + `swarm-executor.js` 复用普通 swarm 执行链路。
39
+ - 默认不隔离 CLI home:不设置 `CODEX_HOME` / `CLAUDE_CONFIG_DIR`,让 Codex/Claude 使用原生登录态;只有显式配置 `accountsDir`、worker account 或 home 时才启用隔离。
40
+ - 不要限制 worker 数量;`--worker "codex:role:prompt"` 会按任务序号生成 `worker-1`、`worker-2`、`worker-3` 等动态 worker,默认配置不需要提前列出这些 worker。
41
+ - Claude CLI 非交互模式使用 `claude -p <prompt>`;`claude:role:prompt` 或 `provider: "claude"` 的 worker 应走 Claude provider,不要复用 Codex 专属的 `codex exec` 参数。
42
+ - Windows 兼容是硬约束:路径拼接、`.cmd`、PowerShell、绝对路径和 `CODEX_HOME` 隔离都要实际验证。
43
+
44
+ ### Verification
45
+
46
+ - 从包根目录运行烟雾检查:`npm test`
47
+ - 从包根目录运行轻量验证:`npm run validate`
48
+ - 直接查看信息:`node bin/multirunagent.js info`
49
+ - 直接检查环境:`node bin/multirunagent.js doctor`
50
+ - 检查安装参数解析:`node bin/multirunagent.js install --target codex` 或 `--target claude`(会真实复制资源,确认目标目录后再运行)
51
+ - 注意:`--dry-run` 已移除,swarm/auto 不再有离线预览,运行即调用真实 provider;确认参数与命令构造请用 `info`。
@@ -0,0 +1,124 @@
1
+ //下面是workflow的示例,参考的不要固定,可以根据需要修改,但要保证整体的结构和逻辑清晰.
2
+
3
+ export const meta = {
4
+ // 当前工作流/命令的唯一名称,外部列表或运行器通常用它识别这个 review 流程。
5
+ name: 'three-lens-review',
6
+ // 给用户或命令面板看的简短说明,不参与审查逻辑。
7
+ description: 'Review a project from correctness, security, and maintainability lenses',
8
+ // 声明流程会展示的阶段;phase('...') 需要和这里的 title 对应,便于 UI/日志分段显示。
9
+ phases: [
10
+ // Review 阶段:并行启动多个 reviewer agent,分别从不同视角检查项目。
11
+ { title: 'Review', detail: 'Run independent review agents' },
12
+ // Synthesize 阶段:把多个 reviewer 的结构化结果合并成最终中文报告。
13
+ { title: 'Synthesize', detail: 'Merge review results' }
14
+ ]
15
+ }
16
+
17
+ // FINDINGS_SCHEMA 约束 reviewer agent 必须返回的 JSON 结构。
18
+ // 它的作用是把自由文本审查结果变成稳定字段,方便后续 flatMap 合并和 summary agent 汇总。
19
+ const FINDINGS_SCHEMA = {
20
+ // 顶层返回值必须是对象,例如:{ findings: [...] }。
21
+ type: 'object',
22
+ // properties 定义顶层对象允许出现哪些字段。
23
+ properties: {
24
+ // findings 是审查发现列表;每个 reviewer 都把自己发现的问题放在这个数组里。
25
+ findings: {
26
+ // items 定义 findings 数组中每一项问题对象的结构。
27
+ items: {
28
+ // 单条问题必须是对象,不能是字符串或其他类型。
29
+ type: 'object',
30
+ // properties 定义单条问题对象允许出现的字段。
31
+ properties: {
32
+ // title:问题标题,用来快速说明发现了什么,后续汇总时也常用它判断重复问题。
33
+ title: { type: 'string' },
34
+ // severity:严重程度,例如 high/medium/low;summary agent 会据此排序。
35
+ severity: { type: 'string' },
36
+ // file:问题所在文件路径;让用户能定位到具体文件,汇总报告也依赖它保留上下文。
37
+ file: { type: 'string' },
38
+ // explanation:问题解释,说明为什么这是问题、可能造成什么影响。
39
+ explanation: { type: 'string' }
40
+ },
41
+ // required 表示每条 finding 必须包含这些字段,缺少任一字段都不算合格输出。
42
+ required: ['title', 'severity', 'file', 'explanation'],
43
+ // 禁止 reviewer 返回 schema 之外的字段,避免不同 agent 输出不一致导致后续处理变复杂。
44
+ additionalProperties: false
45
+ }
46
+ }
47
+ },
48
+ // 顶层必须有 findings 字段;即使没有发现问题,也应该返回 findings: []。
49
+ required: ['findings'],
50
+ // 顶层同样禁止额外字段,让 reviews.flatMap(r => r.findings) 的输入保持稳定。
51
+ additionalProperties: false
52
+ }
53
+
54
+ // lenses 定义本流程要启动哪些审查视角;数组中每一项都会变成一个独立 reviewer agent。
55
+ const lenses = [
56
+ {
57
+ // key 是审查视角的短标识,用在 label: review:<key> 中,方便日志定位来源。
58
+ key: 'correctness',
59
+ // prompt 是交给该 reviewer agent 的具体任务说明;这里要求只报告高置信正确性 bug。
60
+ prompt: '检查当前项目是否有明显的正确性 bug。只报告真实、高置信的问题。'
61
+ },
62
+ {
63
+ // security 视角只看安全风险,避免和正确性/维护性审查混在一起。
64
+ key: 'security',
65
+ // 这个 prompt 控制 agent 把注意力放在安全问题上,并限制只报告真实、高置信风险。
66
+ prompt: '检查当前项目是否有安全风险。只报告真实、高置信的问题。'
67
+ },
68
+ {
69
+ // maintainability 视角关注后续维护成本,不一定是立即会触发的 bug。
70
+ key: 'maintainability',
71
+ // 这个 prompt 让 agent 查找可维护性、复用和简化问题。
72
+ prompt: '检查当前项目是否有可维护性、复用、简化方面的问题。'
73
+ }
74
+ ]
75
+
76
+ // 切换到 Review 阶段;通常用于运行器 UI 或日志显示当前进度。
77
+ phase('Review')
78
+
79
+ // reviews 保存三个 reviewer agent 的返回结果,顺序对应 lenses 数组。
80
+ const reviews = await parallel(
81
+ // parallel 接收一组任务函数;这里每个 lens 映射成一个可并发执行的 agent 调用。
82
+ lenses.map(lens => () =>
83
+ agent(lens.prompt, {
84
+ // label 是本次 agent 调用的日志名,例如 review:correctness。
85
+ label: `review:${lens.key}`,
86
+ // phase 告诉运行器这个 agent 属于 Review 阶段。
87
+ phase: 'Review',
88
+ // agentType 指定使用代码审查类型的 agent,而不是通用写作/汇总 agent。
89
+ agentType: 'code-reviewer',
90
+ // schema 要求 reviewer 按 FINDINGS_SCHEMA 返回结构化 JSON。
91
+ schema: FINDINGS_SCHEMA
92
+ })
93
+ )
94
+ )
95
+
96
+ // 切换到 Synthesize 阶段;从这里开始不再审查代码,而是整理审查结果。
97
+ phase('Synthesize')
98
+
99
+ // findings 是所有 reviewer 原始发现的合并列表。
100
+ const findings = reviews
101
+ // 某个 reviewer 如果失败或没有返回结果,这里会先跳过,避免访问空值报错。
102
+ .filter(Boolean)
103
+ // 每个 reviewer 返回 { findings: [...] };flatMap 把多个 findings 数组合并成一个数组。
104
+ .flatMap(r => r.findings ?? [])
105
+
106
+ // summary 是最终给用户看的中文整理报告。
107
+ // JSON.stringify 把结构化 findings 嵌入提示词,让汇总 agent 基于原始审查发现工作。
108
+ const summary = await agent(`
109
+ 请用中文整理这些审查结果,去重,并按严重程度排序:
110
+
111
+ ${JSON.stringify(findings, null, 2)}
112
+ `, {
113
+ // label 是汇总 agent 的日志名。
114
+ label: 'synthesize',
115
+ // phase 告诉运行器这个 agent 属于 Synthesize 阶段。
116
+ phase: 'Synthesize'
117
+ })
118
+
119
+ return {
120
+ // findings:机器可处理的原始结构化审查结果,保留每个 reviewer 的具体发现。
121
+ findings,
122
+ // summary:面向用户阅读的中文汇总,已去重并按严重程度排序。
123
+ summary
124
+ }
@@ -0,0 +1,26 @@
1
+ ## 0commondflowv1 src
2
+
3
+ `0commondflowv1/src` 是 `alanbox` 的当前主源码目录,负责 CLI 参数解析、命令分发、worker 编排、runner 执行、handoff、存储和 prompt 构造。入口由包根 `bin/multirunagent.js` / `index.js` 转发到 `cli.js`,npm 发布后同时暴露 `alanbox` 和兼容 bin `multirunagent`。
4
+
5
+ **Important:** 这里是 0commondflowv1 的稳定实现层。新增命令、flag、provider、worker 协议或存储行为时,要同步检查 `0commondflowv1/AGENTS.md`、README、skills 说明和 `alanbox info` / `--help` 输出;本地源码验证仍可用 `node bin/multirunagent.js ...`。
6
+
7
+ ### Important files
8
+
9
+ - `cli.js` — CLI 主分发器;命令入口和 usage 文案在这里维护。
10
+ - `args.js` — 通用参数解析;新增 flag 时优先在这里统一处理。
11
+ - `commands/` — 具体 CLI 命令实现;`swarm` 拆分为 `commands/swarm/`(`index.js` 路由、`custom.js` 手动 worker、`auto.js` 推荐/确认/恢复流程),修改前先读 `commands/AGENTS.md`。
12
+ - `core/` — worker、handoff、storage、prompt 构造等核心协议;修改前先读 `core/AGENTS.md`。
13
+ - `prompt/` — 可复用 Markdown 提示词模板;修改前先读 `prompt/AGENTS.md`。
14
+ - `runner/` — Codex / Claude CLI 子进程执行与配置解析;修改前先读 `runner/AGENTS.md`。
15
+
16
+ ### Implementation notes
17
+
18
+ - `swarm` 是 worker 执行的唯一业务入口;单 worker 使用一个 `--worker`,全并行多 worker 走 `swarm --parallel-workers`,混合串行/并行用 `--worker "[spec1,spec2]"` 表达同一阶段并行,不要复制出独立 `exec` 或 `parallel` 命令。
19
+ - 默认使用原生 CLI 登录态;只有显式配置隔离 home 时才设置 `CODEX_HOME` 或 `CLAUDE_CONFIG_DIR`。
20
+ - 多 worker 输出默认写入 `%USERPROFILE%\.multirunagent\<namespace>`,不要重新写回项目内 `.sub-codex`。
21
+ - Windows 兼容是长期约束;路径拼接使用 Node `path`,命令文案和示例要考虑 PowerShell。
22
+
23
+ ### Verification
24
+
25
+ - 从包根目录运行:`npm run validate`
26
+ - 直接检查配置与参数解析:`node bin/multirunagent.js info`
@@ -0,0 +1,75 @@
1
+ /**
2
+ * multirunagent 的 CLI 参数解析器。
3
+ * 统一处理 flag、位置 prompt 和多 worker 任务规格。
4
+ */
5
+
6
+ function parseArgs(argv, command = 'swarm') {
7
+ const result = { _: [] };
8
+ const autoSwarm = command === 'swarm' && hasFlag(argv, 'auto');
9
+
10
+ for (let i = 0; i < argv.length; i += 1) {
11
+ const arg = argv[i];
12
+ if (arg === '--') {
13
+ result._.push(...argv.slice(i + 1));
14
+ break;
15
+ }
16
+ if (!arg.startsWith('-')) {
17
+ result._.push(arg);
18
+ continue;
19
+ }
20
+
21
+ const [keyPart, inlineValue] = arg.split('=', 2);
22
+ const key = keyPart.replace(/^--?/, '');
23
+
24
+ if (BOOLEAN_FLAGS.includes(key)) {
25
+ result[key] = true;
26
+ continue;
27
+ }
28
+
29
+ const value = inlineValue !== undefined ? inlineValue : argv[i + 1];
30
+ if (inlineValue === undefined) i += 1;
31
+
32
+ if (value === undefined) {
33
+ throw new Error(`missing value for ${arg}`);
34
+ }
35
+
36
+ if (['task', 't'].includes(key) || (command === 'swarm' && ['worker', 'w'].includes(key))) {
37
+ result.task = result.task || [];
38
+ result.task.push(value);
39
+ continue;
40
+ }
41
+
42
+ if (autoSwarm && ['agent', 'a'].includes(key)) {
43
+ result.agent = result.agent || [];
44
+ result.agent.push(value);
45
+ continue;
46
+ }
47
+
48
+ if (autoSwarm && ['plan-hint', 'hint', 'p'].includes(key)) {
49
+ result.planHint = [result.planHint, value].filter(Boolean).join('\n');
50
+ continue;
51
+ }
52
+
53
+ result[key] = value;
54
+ }
55
+
56
+ return result;
57
+ }
58
+
59
+ const BOOLEAN_FLAGS = [
60
+ 'parallel',
61
+ 'parallel-workers',
62
+ 'auto',
63
+ 'y',
64
+ 'codex',
65
+ 'claude',
66
+ 'both',
67
+ ];
68
+
69
+ function hasFlag(argv, name) {
70
+ return argv.some((arg) => arg === `--${name}` || arg.startsWith(`--${name}=`));
71
+ }
72
+
73
+ module.exports = {
74
+ parseArgs,
75
+ };
@@ -0,0 +1,121 @@
1
+ /**
2
+ * 主命令分发器。
3
+ * 负责加载配置、解析运行上下文,并路由到具体命令处理器。
4
+ */
5
+
6
+ const { loadConfig } = require('./runner/codex-runner');
7
+ const { parseArgs } = require('./args');
8
+ const { runDoctor } = require('./commands/doctor');
9
+ const { runInfo } = require('./commands/info');
10
+ const { runInstall } = require('./commands/install');
11
+ const { runSwarm } = require('./commands/swarm');
12
+
13
+ async function main(argv = process.argv.slice(2)) {
14
+ if (argv.includes('-h') || argv.includes('--help') || argv[0] === 'help') {
15
+ printUsage();
16
+ return;
17
+ }
18
+
19
+ let command = argv[0] && !argv[0].startsWith('-') ? argv.shift() : 'swarm';
20
+ if (command === 'swam') {
21
+ command = 'swarm';
22
+ console.error('[alanbox] `swam` 已按 `swarm` 兼容处理。');
23
+ }
24
+
25
+ if (command === 'help') {
26
+ printUsage();
27
+ return;
28
+ }
29
+
30
+ const args = parseArgs(argv, command);
31
+ const config = loadConfig();
32
+ const worker = args.worker || args.w || config.defaultWorker;
33
+ const workerConfig = config.workers?.[worker] || null;
34
+ const account = args.account || (!args.auto ? args.a : '') || workerConfig?.account || config.defaultAccount;
35
+ const cwd = args.cwd || args.C || workerConfig?.cwd || config.defaultProjectPath;
36
+ const timeoutMs = args.timeout ? Number(args.timeout) : config.timeoutMs;
37
+ const context = { args, config, account, worker, workerConfig, cwd, timeoutMs };
38
+
39
+ if (command === 'doctor') {
40
+ await runDoctor(context);
41
+ return;
42
+ }
43
+
44
+ if (command === 'info') {
45
+ await runInfo(context);
46
+ return;
47
+ }
48
+
49
+ if (command === 'install' || command === 'init') {
50
+ await runInstall(context);
51
+ return;
52
+ }
53
+
54
+ if (command === 'swarm') {
55
+ await runSwarm(context);
56
+ return;
57
+ }
58
+
59
+ throw new Error(`unknown command: ${command}`);
60
+ }
61
+
62
+ function printUsage() {
63
+ console.log(`
64
+ alanbox CLI runner
65
+
66
+ Usage:
67
+ node index.js info [--account 30428]
68
+ node index.js doctor [--account 30428]
69
+ node index.js install [--target codex|claude|both]
70
+ node index.js swarm [options] --worker "codex:<role>:<prompt>" --worker "claude:<role>:<prompt>"
71
+ node index.js swam [options] --worker "codex:<role>:<prompt>"
72
+ node index.js swarm --worker "codex:a:先做 A" --worker "[codex:c:并行 C,codex:d:并行 D]" --worker "codex:e:最后汇总"
73
+ node index.js swarm --auto "<goal>" -a "codex:reviewer:复核代码" -p "最好每个子文件夹一个子agent并行"
74
+ node index.js swam --auto "<goal>" -a "codex:reviewer:复核代码"
75
+ node index.js swarm --resume <runId> --namespace <name> -y
76
+
77
+ Options:
78
+ --account, -a <name> Isolated Codex account home. Default: codex-1
79
+ In swarm --auto, -a means repeatable agent spec; use --account for account.
80
+ --cwd, -C <path> Project working directory
81
+ --model, -m <model> Model passed to codex exec / claude -p
82
+ --profile, -p <profile> Codex profile under CODEX_HOME
83
+ In swarm --auto, -p means planning hint; use --profile for profile.
84
+ --sandbox, -s <mode> read-only | workspace-write | danger-full-access
85
+ --output, -o <file> Write last Codex message to a file
86
+ --timeout <ms> Process timeout
87
+ --context <text> Shared background prompt injected into workers
88
+ --context-file <path> Read shared background prompt from file
89
+ --skill-file <path> Inject a skill/instruction file into the prompt
90
+ --namespace <name> Shared namespace label for multi-agent runs
91
+ --worker, -w <spec> Swarm worker spec: codex:role:prompt, claude:role:prompt, or worker-9:role:prompt.
92
+ Use "[spec1,spec2]" as one parallel stage in the default dependency order.
93
+ Escape literal commas inside a grouped prompt as "\\,".
94
+ --task <spec> Backward-compatible alias for --worker in swarm mode
95
+ --parallel-workers Run swarm workers in parallel instead of dependency order
96
+
97
+ Install options:
98
+ --target <target> codex | claude | both. If omitted, install asks interactively.
99
+ --codex Install only Codex resources
100
+ --claude Install only Claude resources
101
+ --both Install Codex and Claude resources
102
+
103
+ Auto workflow options:
104
+ --auto Let GOAP planner recommend workflow before execution
105
+ --agent, -a <spec> Repeatable auto agent spec. Example: codex:reviewer:复核 src 代码
106
+ --plan-hint, -p <text> Extra planning hint. Example: 最好每个子文件夹一个子agent并行
107
+ --y, -y Execute without interactive confirmation
108
+ --resume <runId> Resume a pending auto workflow run
109
+ --max-replans <n> Replan up to n times after failures
110
+
111
+ Account isolation:
112
+ By default this runner uses the provider CLI native home and login state.
113
+ Configure accountsDir/account home only when you explicitly need isolation.
114
+ OPENAI_API_KEY is only removed automatically when an isolated home is active.
115
+ `);
116
+ }
117
+
118
+ module.exports = {
119
+ main,
120
+ printUsage,
121
+ };
@@ -0,0 +1,29 @@
1
+ ## commands
2
+
3
+ `0commondflowv1/src/commands` 存放 `alanbox` 的具体 CLI 命令处理器。每个文件只负责一个命令的行为编排,底层 worker 解析、runner 执行、handoff 和 storage 应复用 `core/`、`runner/`、`prompt/`。
4
+
5
+ **Important:** 新增或修改命令参数时,必须同步检查 `src/args.js`、`src/cli.js` usage 文案、README 和相关 skills,避免 CLI 行为和说明不一致。
6
+
7
+ ### Important files
8
+
9
+ - `swarm/index.js` — `swarm` 命令入口与路由;`--auto` / `--resume` 委托 `swarm/auto.js`,否则走 `swarm/custom.js`。`cli.js` 通过 `require('./commands/swarm')` 解析到此目录。
10
+ - `swarm/custom.js` — 多 worker 串行/依赖层编排;解析 worker specs 后复用共享 executor。
11
+ - `swarm/auto.js` — `swarm --auto` 状态机;负责 GOAP workflow 推荐、确认门、pending/resume、执行和失败重规划。
12
+ - `doctor.js` — 环境和 provider 健康检查;用于诊断 CLI 命令、home、认证和 dry-run。
13
+ - `info.js` — 输出当前配置和运行信息;应避免泄露 secret 或本机敏感路径之外的无关细节。
14
+ - `install.js` — 显式安装 Codex/Claude skills、hooks、mcp 和 scripts;Codex 额外维护 plugin manifest 与 marketplace。不要让普通包加载隐式安装资源。
15
+
16
+ ### Implementation notes
17
+
18
+ - `swarm` 的 runDir 应来自 `core/storage.js`,默认在 `%USERPROFILE%\.multirunagent\<namespace>`;auto workflow run 使用 `%USERPROFILE%\.multirunagent\<namespace>\runs\<runId>`。
19
+ - `swarm --auto` 中 `-a` 表示 repeatable agent spec、`-p` 表示 plan hint;非 auto 命令仍保持旧 account/profile 语义,文档和 usage 必须同步说明。
20
+ - worker 执行统一通过 `swam`/`swarm` 开启;单 worker 使用一个 `--worker`,全并行多 worker 使用 `swarm --parallel-workers`,混合串行/并行用 `--worker "[spec1,spec2]"` 表达同一阶段并行。不要恢复独立 `exec` / `parallel` 命令或复制执行链路。
21
+ - `install` 支持 `--target codex|claude|both`、`--codex`、`--claude`、`--both`;未传目标时只在交互终端询问,脚本/CI 中必须显式传目标。
22
+ - `alanbox info` 输出解析后的 provider、command、env 和 worker 配置,是用户排查的重要依据;改动 provider、env、args 解析时要实际运行 `info` 检查(本地源码可用 `node bin/multirunagent.js info`,`--dry-run` 预览已移除)。
23
+
24
+ ### Verification
25
+
26
+ - 从包根目录运行:`npm run validate`
27
+ - 修改命令参数或 provider/env 展示后:`node bin/multirunagent.js info`
28
+ - 修改 auto workflow、planner 或模板后,需实际运行一次 `swarm --auto`(已无 dry-run/JSON 离线预览)验证。
29
+ - 修改安装命令后额外检查:`node bin/multirunagent.js install --target codex`、`--target claude` 或 `--target both`(会真实复制资源,确认目标目录后再运行)。
@@ -0,0 +1,17 @@
1
+ /**
2
+ * doctor 命令处理器。
3
+ * 把环境和 Codex CLI 诊断委托给 0commondflowv1/src/runner/codex-runner。
4
+ */
5
+
6
+ const { doctor } = require('../runner/codex-runner');
7
+
8
+ async function runDoctor({ config, account, cwd, timeoutMs }) {
9
+ const result = await doctor({ config, account, cwd, timeoutMs });
10
+ process.exitCode = result.code || 0;
11
+ }
12
+
13
+ module.exports = {
14
+ runDoctor,
15
+ };
16
+
17
+
@@ -0,0 +1,33 @@
1
+ /**
2
+ * info 命令处理器。
3
+ * 输出解析后的账号、worker、命令、sandbox 和 worker 配置。
4
+ */
5
+
6
+ const {
7
+ resolveAccountHome,
8
+ resolveProvider,
9
+ resolveCommandArgs,
10
+ } = require('../runner/codex-runner');
11
+
12
+ async function runInfo({ config, account, worker, workerConfig, cwd }) {
13
+ const provider = resolveProvider(config, workerConfig);
14
+ console.log(JSON.stringify({
15
+ account,
16
+ worker,
17
+ provider: provider.name,
18
+ accountHome: resolveAccountHome(config, account),
19
+ cwd,
20
+ command: workerConfig?.command || provider.command || config.codexNodeCommand || config.codexCommandPath || config.codexCommand,
21
+ commandArgs: resolveCommandArgs(config, workerConfig, provider),
22
+ sandbox: config.sandbox,
23
+ skipGitRepoCheck: config.skipGitRepoCheck,
24
+ inheritOpenAIKey: config.inheritOpenAIKey,
25
+ workers: config.workers,
26
+ }, null, 2));
27
+ }
28
+
29
+ module.exports = {
30
+ runInfo,
31
+ };
32
+
33
+