alanbox 0.1.2 → 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.
- package/0boxer/AGENTS.md +26 -0
- package/0boxer/src/AGENTS.md +16 -0
- package/0boxer/src/cli.js +53 -0
- package/0boxer/src/commands/AGENTS.md +16 -0
- package/{0commondflowv1 → 0boxer}/src/commands/install.js +56 -0
- package/{0commondflowv1 → 1swarmer}/AGENTS.md +14 -12
- package/1swarmer/src/AGENTS.md +28 -0
- package/{0commondflowv1 → 1swarmer}/src/args.js +8 -1
- package/{0commondflowv1 → 1swarmer}/src/cli.js +27 -17
- package/1swarmer/src/commands/AGENTS.md +31 -0
- package/{0commondflowv1 → 1swarmer}/src/commands/doctor.js +2 -2
- package/1swarmer/src/commands/review-file.js +997 -0
- package/{0commondflowv1 → 1swarmer}/src/core/AGENTS.md +2 -2
- package/{0commondflowv1 → 1swarmer}/src/core/prompt-templates.js +1 -1
- package/{0commondflowv1 → 1swarmer}/src/core/storage.js +1 -1
- package/{0commondflowv1 → 1swarmer}/src/prompt/AGENTS.md +1 -1
- package/{0commondflowv1 → 1swarmer}/src/prompt/default.md +1 -1
- package/{0commondflowv1 → 1swarmer}/src/prompt/synthesizer.md +1 -1
- package/{0commondflowv1 → 1swarmer}/src/prompt/verifier.md +1 -1
- package/{0commondflowv1 → 1swarmer}/src/runner/AGENTS.md +4 -3
- package/{0commondflowv1 → 1swarmer}/src/runner/codex-runner.js +23 -3
- package/2designer/README.md +42 -0
- package/2designer/dist/cdp-engine-4AIWSWXO.js +314 -0
- package/2designer/dist/cdp-engine-4AIWSWXO.js.map +1 -0
- package/2designer/dist/cdp-engine-SG4K2BCX.js +10 -0
- package/2designer/dist/cdp-engine-SG4K2BCX.js.map +1 -0
- package/2designer/dist/chunk-7X7PTLZH.js +185 -0
- package/2designer/dist/chunk-7X7PTLZH.js.map +1 -0
- package/2designer/dist/chunk-DPOWNFOH.js +313 -0
- package/2designer/dist/chunk-DPOWNFOH.js.map +1 -0
- package/2designer/dist/chunk-ISUUIOO7.js +58 -0
- package/2designer/dist/chunk-ISUUIOO7.js.map +1 -0
- package/2designer/dist/chunk-NLYFLQ3C.js +74 -0
- package/2designer/dist/chunk-NLYFLQ3C.js.map +1 -0
- package/2designer/dist/chunk-UVKSRKXR.js +71 -0
- package/2designer/dist/chunk-UVKSRKXR.js.map +1 -0
- package/2designer/dist/cli.js +748 -0
- package/2designer/dist/cli.js.map +1 -0
- package/2designer/dist/index.d.ts +118 -0
- package/2designer/dist/index.js +37 -0
- package/2designer/dist/index.js.map +1 -0
- package/2designer/dist/playwright-engine-YXBY3KEN.js +186 -0
- package/2designer/dist/playwright-engine-YXBY3KEN.js.map +1 -0
- package/2designer/dist/playwright-engine-YXGDTSZ5.js +8 -0
- package/2designer/dist/playwright-engine-YXGDTSZ5.js.map +1 -0
- package/2designer/dist/tint-UD4CJ7S2.js +7 -0
- package/2designer/dist/tint-UD4CJ7S2.js.map +1 -0
- package/2designer/dist/tint-YN63MLVN.js +60 -0
- package/2designer/dist/tint-YN63MLVN.js.map +1 -0
- package/2designer/package.json +56 -0
- package/4reporter/README.md +24 -0
- package/4reporter/dist/cli.js +464 -0
- package/4reporter/dist/cli.js.map +1 -0
- package/4reporter/dist/index.d.ts +108 -0
- package/4reporter/dist/index.js +445 -0
- package/4reporter/dist/index.js.map +1 -0
- package/4reporter/package.json +39 -0
- package/README.md +20 -9
- package/bin/alanbox.js +11 -0
- package/bin/designer.js +10 -0
- package/bin/reporter.js +11 -0
- package/bin/swarmer.js +11 -0
- package/cli.js +178 -0
- package/hooks/hooks.json +1 -1
- package/mcp/README.md +7 -1
- package/mcp/config.toml +4 -0
- package/package.json +28 -11
- package/plugin/AGENTS.md +2 -2
- package/plugin/plugin.json +7 -7
- package/shared/AGENTS.md +15 -0
- package/shared/package-args.js +68 -0
- package/skills/AGENTS.md +9 -5
- package/skills/aitool/SKILL.md +36 -0
- package/skills/desginer/SKILL.md +142 -0
- package/skills/swarmer/SKILL.md +146 -0
- package/0commondflowv1/src/AGENTS.md +0 -26
- package/0commondflowv1/src/commands/AGENTS.md +0 -29
- package/bin/multirunagent.js +0 -15
- package/skills/aibox-swam/SKILL.md +0 -77
- package/skills/sub-codex-doctor/SKILL.md +0 -27
- package/skills/sub-codex-swarm/SKILL.md +0 -56
- /package/{0commondflowv1 → 1swarmer}/res/three-lens-review.js +0 -0
- /package/{0commondflowv1 → 1swarmer}/src/commands/info.js +0 -0
- /package/{0commondflowv1 → 1swarmer}/src/commands/swarm/auto.js +0 -0
- /package/{0commondflowv1 → 1swarmer}/src/commands/swarm/custom.js +0 -0
- /package/{0commondflowv1 → 1swarmer}/src/commands/swarm/index.js +0 -0
- /package/{0commondflowv1 → 1swarmer}/src/core/handoff.js +0 -0
- /package/{0commondflowv1 → 1swarmer}/src/core/prompt-builder.js +0 -0
- /package/{0commondflowv1 → 1swarmer}/src/core/swarm-executor.js +0 -0
- /package/{0commondflowv1 → 1swarmer}/src/core/workers.js +0 -0
- /package/{0commondflowv1 → 1swarmer}/src/core/workflow-planner.js +0 -0
- /package/{0commondflowv1 → 1swarmer}/src/core/workflow-storage.js +0 -0
- /package/{0commondflowv1 → 1swarmer}/src/prompt/reviewer.md +0 -0
- /package/{0commondflowv1 → 1swarmer}/src/runner/config.json +0 -0
package/0boxer/AGENTS.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
## 0boxer
|
|
2
|
+
|
|
3
|
+
`C:\Users\lenovo\Desktop\my-project\101my-aitool\aibox\0boxer` 是 `alanbox` 的包级资源命令层,负责 aibox 自身资源安装、初始化和更新。`1swarmer` 负责 worker/swarm 执行和 provider 诊断;不要把 `init`、`update`、`install` 这类 aibox 资源命令写回 `1swarmer`。
|
|
4
|
+
|
|
5
|
+
**Important:** `install`、`init`、`update` 会真实复制 Codex/Claude skills、hooks、mcp、scripts 和 Codex plugin manifest;Codex 目标还会按需维护 Playwright MCP 配置。修改或验证前确认目标目录,避免误写用户环境。
|
|
6
|
+
|
|
7
|
+
### Important files
|
|
8
|
+
|
|
9
|
+
- `src/cli.js` — 0boxer 命令分发器;当前只处理 `install`、`init`、`update`。
|
|
10
|
+
- `../shared/package-args.js` — 包级资源命令参数解析器;只解析安装 target 相关选项,不依赖 `1swarmer/src/args.js`。
|
|
11
|
+
- `src/commands/install.js` — 安装或更新 Codex/Claude 资源;Codex 额外维护 plugin manifest、marketplace entry 和 Playwright MCP 配置。
|
|
12
|
+
|
|
13
|
+
### Implementation notes
|
|
14
|
+
|
|
15
|
+
- `init` 和 `update` 当前是 `install` 的别名,用来安装或刷新 bundled skills/hooks/mcp/scripts。
|
|
16
|
+
- Codex 安装会在缺失 `[mcp_servers.playwright]` 时,把包内 `mcp/config.toml` 的同名表追加到当前 `CODEX_HOME`(或用户 `.codex`)下的 `mcp/config.toml`;已有表不覆盖。
|
|
17
|
+
- `--target codex|claude|both` 可跳过询问;未传 target 且在交互终端运行时会询问安装到 Codex、Claude 还是两者,非交互模式必须显式传 target。
|
|
18
|
+
- `0boxer` 不复用 `1swarmer` 的参数解析;新增资源命令选项时维护 `../shared/package-args.js`,避免把 worker/swarm 参数带进包级安装命令。
|
|
19
|
+
- 重命名或合并 skill 时,同步维护 `install.js` 的废弃 skill 清理名单,避免用户目录残留重复入口。
|
|
20
|
+
- aibox 资源命令优先挂在 `0boxer/src/cli.js` 和根 `cli.js`;worker/provider 命令归 `1swarmer`。
|
|
21
|
+
|
|
22
|
+
### Verification
|
|
23
|
+
|
|
24
|
+
- 从包根目录运行:`npm test`
|
|
25
|
+
- 轻量检查包级帮助:`node bin/alanbox.js init --help`
|
|
26
|
+
- 安装命令需要真实复制资源:`node bin/alanbox.js install --target codex`、`--target claude` 或 `--target both`
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
## 0boxer src
|
|
2
|
+
|
|
3
|
+
`0boxer/src` 是 `alanbox` 包级资源命令源码目录。这里维护 aibox 自身的资源安装、初始化和更新;worker 执行、provider 诊断、handoff、storage、runner 配置仍归 `1swarmer/src`。
|
|
4
|
+
|
|
5
|
+
**Important:** 这里通过 `../../shared/package-args.js` 使用包级资源命令参数解析,不要依赖 `1swarmer` 的参数解析或 runner;provider 诊断命令归 `1swarmer`。
|
|
6
|
+
|
|
7
|
+
### Important files
|
|
8
|
+
|
|
9
|
+
- `cli.js` — 包级资源命令分发器;只处理 `install`、`init`、`update`。
|
|
10
|
+
- `commands/install.js` — 复制 bundled resources 到 Codex/Claude 用户目录。
|
|
11
|
+
|
|
12
|
+
### Implementation notes
|
|
13
|
+
|
|
14
|
+
- 安装命令必须显式触发;不要让 `npm install`、`npx` 或普通 require 隐式写用户目录。
|
|
15
|
+
- 不要从 `1swarmer/src/args.js` 引入 worker 参数解析;`0boxer` 只使用 `shared/package-args.js` 的包级资源命令选项集。
|
|
16
|
+
- 新增 aibox 包级资源命令时,同步更新根 `cli.js`、README、skills 和 `0boxer/AGENTS.md`。
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* aibox 包级命令分发器。
|
|
3
|
+
* 负责 install/init/update 资源安装更新。
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const { parsePackageArgs } = require('../../shared/package-args');
|
|
7
|
+
const { runInstall } = require('./commands/install');
|
|
8
|
+
|
|
9
|
+
async function main(argv = process.argv.slice(2)) {
|
|
10
|
+
if (argv.includes('-h') || argv.includes('--help') || argv[0] === 'help') {
|
|
11
|
+
printUsage();
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const command = argv[0] && !argv[0].startsWith('-') ? argv.shift() : '';
|
|
16
|
+
if (!command) {
|
|
17
|
+
printUsage();
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const args = parsePackageArgs(argv, command);
|
|
22
|
+
const context = { args };
|
|
23
|
+
|
|
24
|
+
if (command === 'install' || command === 'init' || command === 'update') {
|
|
25
|
+
await runInstall(context);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
throw new Error(`unknown aibox command: ${command}`);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function printUsage() {
|
|
33
|
+
console.log(`
|
|
34
|
+
aibox package commands
|
|
35
|
+
|
|
36
|
+
Usage:
|
|
37
|
+
alanbox install --target codex|claude|both
|
|
38
|
+
alanbox init
|
|
39
|
+
alanbox update
|
|
40
|
+
|
|
41
|
+
Install options:
|
|
42
|
+
--target <target> codex | claude | both. If omitted, install asks interactively.
|
|
43
|
+
--codex Install only Codex resources
|
|
44
|
+
--claude Install only Claude resources
|
|
45
|
+
--both Install Codex and Claude resources
|
|
46
|
+
init/update Aliases of install; use them when you want an interactive target choice.
|
|
47
|
+
`);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
module.exports = {
|
|
51
|
+
main,
|
|
52
|
+
printUsage,
|
|
53
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
## 0boxer commands
|
|
2
|
+
|
|
3
|
+
`0boxer/src/commands` 存放 `alanbox` 包级资源命令处理器。这里的命令面向 aibox 自身资源安装和更新,不直接执行 swarm worker,也不做 provider 诊断。
|
|
4
|
+
|
|
5
|
+
**Important:** `install` 会写入用户 Codex/Claude 目录;新增验证命令时不要默认运行真实安装,除非用户明确要求或已确认目标。
|
|
6
|
+
|
|
7
|
+
### Important files
|
|
8
|
+
|
|
9
|
+
- `install.js` — 安装或更新 Codex/Claude skills、hooks、mcp、scripts;Codex 额外安装 plugin manifest、marketplace entry,并按需补 Playwright MCP 配置。
|
|
10
|
+
|
|
11
|
+
### Implementation notes
|
|
12
|
+
|
|
13
|
+
- `init`、`update` 通过 `0boxer/src/cli.js` 进入 `install.js`,语义是安装或刷新 aibox bundled resources。
|
|
14
|
+
- 安装 target 必须是 `codex`、`claude` 或 `both`;非交互模式必须显式传 target。
|
|
15
|
+
- Codex 安装只在目标 `mcp/config.toml` 缺少 `[mcp_servers.playwright]` 时,从包内 `mcp/config.toml` 追加同名表,不覆盖用户已有 MCP 配置。
|
|
16
|
+
- 废弃 skill 名清理名单和 `skills/AGENTS.md` 要保持同步。
|
|
@@ -3,6 +3,7 @@ const path = require('path');
|
|
|
3
3
|
const readline = require('readline');
|
|
4
4
|
|
|
5
5
|
const INSTALL_TARGETS = new Set(['codex', 'claude', 'both']);
|
|
6
|
+
const DEPRECATED_SKILL_NAMES = ['aibox-swarmer', 'sub-codex-doctor', 'sub-codex-swarmer'];
|
|
6
7
|
|
|
7
8
|
async function runInstall(context = {}) {
|
|
8
9
|
const packageRoot = path.resolve(__dirname, '..', '..', '..');
|
|
@@ -51,9 +52,11 @@ function installCodex({ home, packageRoot }) {
|
|
|
51
52
|
replaceDir(packageScriptsRoot, path.join(pluginRoot, 'scripts'));
|
|
52
53
|
replaceDir(packageMcpRoot, path.join(pluginRoot, 'mcp'));
|
|
53
54
|
copyOptionalFile(path.join(packageRoot, 'README.md'), path.join(pluginRoot, 'README.md'));
|
|
55
|
+
pruneDeprecatedSkills(codexSkillsRoot);
|
|
54
56
|
installSkills(packageSkillsRoot, codexSkillsRoot);
|
|
55
57
|
installResourceDir(packageHooksRoot, path.join(codexHome, 'hooks', pluginName));
|
|
56
58
|
installResourceDir(packageMcpRoot, path.join(codexHome, 'mcp', pluginName));
|
|
59
|
+
const playwrightMcp = ensureCodexPlaywrightMcp({ codexHome, packageMcpRoot });
|
|
57
60
|
ensureMarketplace({ marketplaceRoot, marketplacePath, pluginName });
|
|
58
61
|
|
|
59
62
|
return {
|
|
@@ -63,6 +66,7 @@ function installCodex({ home, packageRoot }) {
|
|
|
63
66
|
`skills: ${codexSkillsRoot}`,
|
|
64
67
|
`hooks: ${path.join(codexHome, 'hooks', pluginName)}`,
|
|
65
68
|
`mcp: ${path.join(codexHome, 'mcp', pluginName)}`,
|
|
69
|
+
`playwright mcp: ${playwrightMcp.status} (${playwrightMcp.configPath})`,
|
|
66
70
|
`marketplace: ${marketplacePath}`,
|
|
67
71
|
],
|
|
68
72
|
};
|
|
@@ -83,6 +87,7 @@ function installClaude({ home, packageRoot }) {
|
|
|
83
87
|
replaceDir(packageScriptsRoot, path.join(pluginRoot, 'scripts'));
|
|
84
88
|
replaceDir(packageMcpRoot, path.join(pluginRoot, 'mcp'));
|
|
85
89
|
copyOptionalFile(path.join(packageRoot, 'README.md'), path.join(pluginRoot, 'README.md'));
|
|
90
|
+
pruneDeprecatedSkills(claudeSkillsRoot);
|
|
86
91
|
installSkills(packageSkillsRoot, claudeSkillsRoot);
|
|
87
92
|
installResourceDir(packageHooksRoot, path.join(claudeHome, 'hooks', pluginName));
|
|
88
93
|
installResourceDir(packageMcpRoot, path.join(claudeHome, 'mcp', pluginName));
|
|
@@ -168,6 +173,51 @@ function installResourceDir(src, dst) {
|
|
|
168
173
|
return copyDir(src, dst);
|
|
169
174
|
}
|
|
170
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
|
+
|
|
171
221
|
function copyFile(src, dst) {
|
|
172
222
|
fs.mkdirSync(path.dirname(dst), { recursive: true });
|
|
173
223
|
fs.copyFileSync(src, dst);
|
|
@@ -196,6 +246,12 @@ function installSkills(srcRoot, dstRoot) {
|
|
|
196
246
|
}
|
|
197
247
|
}
|
|
198
248
|
|
|
249
|
+
function pruneDeprecatedSkills(dstRoot) {
|
|
250
|
+
for (const name of DEPRECATED_SKILL_NAMES) {
|
|
251
|
+
removeDir(path.join(dstRoot, name));
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
199
255
|
function removeDir(target) {
|
|
200
256
|
if (!fs.existsSync(target)) return;
|
|
201
257
|
fs.rmSync(target, { recursive: true, force: true });
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
##
|
|
1
|
+
## 1swarmer
|
|
2
2
|
|
|
3
|
-
`C:\Users\lenovo\Desktop\my-project\101my-aitool\aibox\
|
|
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
|
-
**Important:** `
|
|
5
|
+
**Important:** `1swarmer` 是 worker 编排和 provider 诊断稳定入口,不是包级资源安装入口。`install`、`init`、`update` 归 `0boxer`;新增 `2designer` / `3apiflower` 这类流程时挂到包根 `cli.js`,不要把非 worker flow 的参数解析塞进这里。
|
|
6
6
|
|
|
7
7
|
**Important:** `src/runner/config.json` 默认 provider 是系统 `codex` CLI;Claude CLI 只能作为可选 provider/worker 配置启用。不要把个人 Antigravity cockpit 路径、全局 npm 安装路径或私有 home 写成通用默认配置。
|
|
8
8
|
|
|
9
9
|
### Important files
|
|
10
10
|
|
|
11
|
-
- `src/cli.js` —
|
|
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、执行、失败重规划。
|
|
16
|
-
- `src/commands/doctor.js` — 子 Codex 环境和账号健康检查。
|
|
17
17
|
- `src/commands/info.js` — 输出当前配置、worker 和命令信息。
|
|
18
|
-
- `src/commands/
|
|
18
|
+
- `src/commands/doctor.js` — swarm/provider 健康检查。
|
|
19
19
|
- `src/runner/codex-runner.js` — Codex 子进程执行层;负责读取配置、设置 `CODEX_HOME`、spawn `codex exec/login/doctor`。
|
|
20
20
|
- `src/runner/config.json` — 当前内置最小配置来源;默认只声明 `providers.codex`、可选 `providers.claude` 和 `timeoutMs`,不预设 worker/account,默认使用各 CLI 的原生 home 和登录态。
|
|
21
21
|
- `src/core/workers.js` — worker spec 解析、分组并行阶段解析、worker 名称归一化和依赖层构建。
|
|
@@ -29,11 +29,13 @@
|
|
|
29
29
|
|
|
30
30
|
### Implementation notes
|
|
31
31
|
|
|
32
|
-
- `
|
|
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` 覆盖。
|
|
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。
|
|
35
|
-
- 调整 worker/handoff/storage 协议时,同步检查根目录 `skills/
|
|
36
|
-
- `install`、`init`、`update`
|
|
37
|
+
- 调整 worker/handoff/storage 协议时,同步检查根目录 `skills/swarmer` 的说明,避免 skill 仍指导旧参数或旧输出格式。
|
|
38
|
+
- `install`、`init`、`update` 都是 aibox 包级资源命令,归 `0boxer` 维护;不要在本目录重新接回这些命令。`doctor` 是 provider 诊断命令,归本目录。
|
|
37
39
|
- `%USERPROFILE%\.multirunagent\<namespace>` 是运行结果和 handoff 的持久化位置;改写存储格式前要考虑旧 run 的读取兼容。项目内 `.sub-codex` 是旧位置,不应再作为默认输出目录。
|
|
38
40
|
- scheduler、retry、resume、workflow JSON 等能力如果新增,应先复用现有 `swarm` 执行链路,再扩展状态机;当前 `swarm --auto` 已通过 `swarm/auto.js` + `swarm-executor.js` 复用普通 swarm 执行链路。
|
|
39
41
|
- 默认不隔离 CLI home:不设置 `CODEX_HOME` / `CLAUDE_CONFIG_DIR`,让 Codex/Claude 使用原生登录态;只有显式配置 `accountsDir`、worker account 或 home 时才启用隔离。
|
|
@@ -45,7 +47,7 @@
|
|
|
45
47
|
|
|
46
48
|
- 从包根目录运行烟雾检查:`npm test`
|
|
47
49
|
- 从包根目录运行轻量验证:`npm run validate`
|
|
48
|
-
- 直接查看信息:`node bin/
|
|
49
|
-
-
|
|
50
|
-
-
|
|
50
|
+
- 直接查看信息:`node bin/swarmer.js info`
|
|
51
|
+
- 双 provider 文件审查:`node bin/swarmer.js review-file <file-or-dir>`
|
|
52
|
+
- 直接检查 provider 环境:`node bin/alanbox.js doctor` 或 `node bin/swarmer.js doctor`
|
|
51
53
|
- 注意:`--dry-run` 已移除,swarm/auto 不再有离线预览,运行即调用真实 provider;确认参数与命令构造请用 `info`。
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
## 1swarmer src
|
|
2
|
+
|
|
3
|
+
`1swarmer/src` 是 `alanbox` 的 worker flow 源码目录,负责 `swarmer` / `swarm`、`review-file`、`doctor`、`info`、worker 编排、runner 执行、handoff、存储和 prompt 构造。入口由包根 `cli.js` 做流程级路由后进入这里,npm 发布后暴露 `alanbox`、裸 `swarmer` 和裸 `designer`。
|
|
4
|
+
|
|
5
|
+
**Important:** 这里是 1swarmer 的稳定实现层。新增命令、flag、provider、worker 协议或存储行为时,要同步检查 `1swarmer/AGENTS.md`、README、skills 说明和 `swarmer info` / `--help` 输出;本地源码验证使用 `node bin/alanbox.js ...` 或 `node bin/swarmer.js ...`。
|
|
6
|
+
|
|
7
|
+
### Important files
|
|
8
|
+
|
|
9
|
+
- `cli.js` — 1swarmer worker CLI 分发器;`swarm`、`review-file`、`doctor`、`info` 的入口和 usage 文案在这里维护。aibox 包级 `install/init/update` 归 `0boxer`。
|
|
10
|
+
- `args.js` — 通用参数解析;新增 flag 时优先在这里统一处理。
|
|
11
|
+
- `commands/` — 具体 CLI 命令实现;`swarm` 拆分为 `commands/swarm/`(`index.js` 路由、`custom.js` 手动 worker、`auto.js` 推荐/确认/恢复流程),`review-file.js` 负责双 provider 文件/目录 review 和共识链报告,修改前先读 `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
|
+
- 包级流程路由不在本目录维护;`install/init/update` 归 `0boxer`,`designer` 和未来其他 flow 入口应挂在 `aibox/cli.js`,避免本文件重新变成所有流程混杂的总入口。
|
|
20
|
+
- 默认使用原生 CLI 登录态;只有显式配置隔离 home 时才设置 `CODEX_HOME` 或 `CLAUDE_CONFIG_DIR`。
|
|
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 段落。
|
|
23
|
+
- Windows 兼容是长期约束;路径拼接使用 Node `path`,命令文案和示例要考虑 PowerShell。
|
|
24
|
+
|
|
25
|
+
### Verification
|
|
26
|
+
|
|
27
|
+
- 从包根目录运行:`npm run validate`
|
|
28
|
+
- 直接检查配置与参数解析:`node bin/swarmer.js info`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* alanbox common flow 的 CLI 参数解析器。
|
|
3
3
|
* 统一处理 flag、位置 prompt 和多 worker 任务规格。
|
|
4
4
|
*/
|
|
5
5
|
|
|
@@ -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,7 +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 {
|
|
10
|
+
const { runReviewFile } = require('./commands/review-file');
|
|
11
11
|
const { runSwarm } = require('./commands/swarm');
|
|
12
12
|
|
|
13
13
|
async function main(argv = process.argv.slice(2)) {
|
|
@@ -17,9 +17,9 @@ async function main(argv = process.argv.slice(2)) {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
let command = argv[0] && !argv[0].startsWith('-') ? argv.shift() : 'swarm';
|
|
20
|
-
if (command === '
|
|
20
|
+
if (command === 'swarmer') {
|
|
21
21
|
command = 'swarm';
|
|
22
|
-
console.error('[alanbox] `
|
|
22
|
+
console.error('[alanbox] `swarmer` 已按 `swarm` 兼容处理。');
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
if (command === 'help') {
|
|
@@ -46,8 +46,8 @@ async function main(argv = process.argv.slice(2)) {
|
|
|
46
46
|
return;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
if (command === '
|
|
50
|
-
await
|
|
49
|
+
if (command === 'review-file') {
|
|
50
|
+
await runReviewFile(context);
|
|
51
51
|
return;
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -64,16 +64,14 @@ function printUsage() {
|
|
|
64
64
|
alanbox CLI runner
|
|
65
65
|
|
|
66
66
|
Usage:
|
|
67
|
-
node index.js info [--account 30428]
|
|
68
67
|
node index.js doctor [--account 30428]
|
|
69
|
-
node index.js
|
|
70
|
-
node index.js
|
|
71
|
-
node index.js update
|
|
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]
|
|
72
70
|
node index.js swarm [options] --worker "codex:<role>:<prompt>" --worker "claude:<role>:<prompt>"
|
|
73
|
-
node index.js
|
|
71
|
+
node index.js swarmer [options] --worker "codex:<role>:<prompt>"
|
|
74
72
|
node index.js swarm --worker "codex:a:先做 A" --worker "[codex:c:并行 C,codex:d:并行 D]" --worker "codex:e:最后汇总"
|
|
75
73
|
node index.js swarm --auto "<goal>" -a "codex:reviewer:复核代码" -p "最好每个子文件夹一个子agent并行"
|
|
76
|
-
node index.js
|
|
74
|
+
node index.js swarmer --auto "<goal>" -a "codex:reviewer:复核代码"
|
|
77
75
|
node index.js swarm --resume <runId> --namespace <name> -y
|
|
78
76
|
|
|
79
77
|
Options:
|
|
@@ -96,12 +94,24 @@ Options:
|
|
|
96
94
|
--task <spec> Backward-compatible alias for --worker in swarm mode
|
|
97
95
|
--parallel-workers Run swarm workers in parallel instead of dependency order
|
|
98
96
|
|
|
99
|
-
|
|
100
|
-
--target <
|
|
101
|
-
--codex
|
|
102
|
-
--claude
|
|
103
|
-
--
|
|
104
|
-
|
|
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
|
|
105
115
|
|
|
106
116
|
Auto workflow options:
|
|
107
117
|
--auto Let GOAP planner recommend workflow before execution
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
## commands
|
|
2
|
+
|
|
3
|
+
`1swarmer/src/commands` 存放 `alanbox` 的 worker 和 provider 诊断命令处理器。每个文件只负责本 flow 相关命令的行为编排,底层 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
|
+
- `review-file.js` — 双 provider 文件/目录 review 命令;第一阶段 Codex/Claude 并行审查并各自生成初审 md,第二阶段把 finding 合并成 `[codex√]`、`[claude√]`、`[codex√claude❌codex√]` 这类共识链条目,默认输出到 `all-project\.tmp\swarm` 的日期时间 hash `.md` 文件。
|
|
11
|
+
- `swarm/custom.js` — 多 worker 串行/依赖层编排;解析 worker specs 后复用共享 executor。
|
|
12
|
+
- `swarm/auto.js` — `swarm --auto` 状态机;负责 GOAP workflow 推荐、确认门、pending/resume、执行和失败重规划。
|
|
13
|
+
- `info.js` — 输出当前配置和运行信息;应避免泄露 secret 或本机敏感路径之外的无关细节。
|
|
14
|
+
- `doctor.js` — provider 健康检查;用于诊断 CLI 命令、home、认证和运行环境。
|
|
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 执行统一通过 `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 可能卡住直到超时。
|
|
22
|
+
- `install`、`init`、`update` 归 `0boxer/src/commands`;不要在本目录新增或恢复这些包级资源命令。
|
|
23
|
+
- `swarmer info` 输出解析后的 provider、command、env 和 worker 配置,是用户排查的重要依据;改动 provider、env、args 解析时要实际运行 `info` 检查(本地源码可用 `node bin/swarmer.js info`,`--dry-run` 预览已移除)。
|
|
24
|
+
|
|
25
|
+
### Verification
|
|
26
|
+
|
|
27
|
+
- 从包根目录运行:`npm run validate`
|
|
28
|
+
- 修改命令参数或 provider/env 展示后:`node bin/swarmer.js info`
|
|
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` 或等效分阶段命令验证报告写入。
|
|
31
|
+
- 修改 auto workflow、planner 或模板后,需实际运行一次 `swarm --auto`(已无 dry-run/JSON 离线预览)验证。
|