claude-coder 1.9.0 → 1.9.2

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 (74) hide show
  1. package/README.md +214 -214
  2. package/bin/cli.js +155 -155
  3. package/package.json +55 -55
  4. package/recipes/_shared/roles/developer.md +11 -11
  5. package/recipes/_shared/roles/product.md +12 -12
  6. package/recipes/_shared/roles/tester.md +12 -12
  7. package/recipes/_shared/test/report-format.md +86 -86
  8. package/recipes/backend/base.md +27 -27
  9. package/recipes/backend/components/auth.md +18 -18
  10. package/recipes/backend/components/crud-api.md +18 -18
  11. package/recipes/backend/components/file-service.md +15 -15
  12. package/recipes/backend/manifest.json +20 -20
  13. package/recipes/backend/test/api-test.md +25 -25
  14. package/recipes/console/base.md +37 -37
  15. package/recipes/console/components/modal-form.md +20 -20
  16. package/recipes/console/components/pagination.md +17 -17
  17. package/recipes/console/components/search.md +17 -17
  18. package/recipes/console/components/table-list.md +18 -18
  19. package/recipes/console/components/tabs.md +14 -14
  20. package/recipes/console/components/tree.md +15 -15
  21. package/recipes/console/components/upload.md +15 -15
  22. package/recipes/console/manifest.json +24 -24
  23. package/recipes/console/test/crud-e2e.md +47 -47
  24. package/recipes/h5/base.md +26 -26
  25. package/recipes/h5/components/animation.md +11 -11
  26. package/recipes/h5/components/countdown.md +11 -11
  27. package/recipes/h5/components/share.md +11 -11
  28. package/recipes/h5/components/swiper.md +11 -11
  29. package/recipes/h5/manifest.json +21 -21
  30. package/recipes/h5/test/h5-e2e.md +20 -20
  31. package/src/commands/auth.js +420 -362
  32. package/src/commands/setup-modules/helpers.js +100 -100
  33. package/src/commands/setup-modules/index.js +25 -25
  34. package/src/commands/setup-modules/mcp.js +115 -115
  35. package/src/commands/setup-modules/provider.js +260 -260
  36. package/src/commands/setup-modules/safety.js +47 -47
  37. package/src/commands/setup-modules/simplify.js +52 -52
  38. package/src/commands/setup.js +172 -172
  39. package/src/common/assets.js +245 -245
  40. package/src/common/config.js +125 -125
  41. package/src/common/constants.js +55 -55
  42. package/src/common/indicator.js +260 -260
  43. package/src/common/interaction.js +170 -170
  44. package/src/common/logging.js +77 -77
  45. package/src/common/sdk.js +50 -50
  46. package/src/common/tasks.js +88 -88
  47. package/src/common/utils.js +213 -213
  48. package/src/core/coding.js +33 -33
  49. package/src/core/go.js +264 -264
  50. package/src/core/hooks.js +500 -500
  51. package/src/core/init.js +166 -165
  52. package/src/core/plan.js +188 -187
  53. package/src/core/prompts.js +247 -247
  54. package/src/core/repair.js +36 -36
  55. package/src/core/runner.js +471 -458
  56. package/src/core/scan.js +93 -93
  57. package/src/core/session.js +280 -271
  58. package/src/core/simplify.js +74 -74
  59. package/src/core/state.js +105 -105
  60. package/src/index.js +76 -76
  61. package/templates/bash-process.md +12 -12
  62. package/templates/codingSystem.md +65 -65
  63. package/templates/codingUser.md +17 -17
  64. package/templates/coreProtocol.md +29 -29
  65. package/templates/goSystem.md +130 -130
  66. package/templates/guidance.json +72 -72
  67. package/templates/planSystem.md +78 -78
  68. package/templates/planUser.md +8 -8
  69. package/templates/requirements.example.md +57 -57
  70. package/templates/scanSystem.md +120 -120
  71. package/templates/scanUser.md +10 -10
  72. package/templates/test_rule.md +194 -194
  73. package/templates/web-testing.md +17 -17
  74. package/types/index.d.ts +217 -217
package/bin/cli.js CHANGED
@@ -1,155 +1,155 @@
1
- #!/usr/bin/env node
2
- 'use strict';
3
-
4
- const pkg = require('../package.json');
5
-
6
- const COMMANDS = {
7
- run: { desc: '自动编码循环', usage: 'claude-coder run [--max N] [--pause N] [--dry-run]' },
8
- setup: { desc: '交互式模型配置', usage: 'claude-coder setup' },
9
- init: { desc: '初始化项目环境', usage: 'claude-coder init [--deploy-templates]' },
10
- plan: { desc: '生成计划方案', usage: 'claude-coder plan "需求" | plan -r requirements.md [--planOnly] [-i]' },
11
- simplify: { desc: '代码审查和简化', usage: 'claude-coder simplify [focus]' },
12
- auth: { desc: '导出 Playwright 登录状态', usage: 'claude-coder auth [url]' },
13
- status: { desc: '查看任务进度和成本', usage: 'claude-coder status' },
14
- go: { desc: 'AI 驱动的需求组装', usage: 'claude-coder go ["需求"] [-r file] [--reset]' },
15
- };
16
-
17
- function showHelp() {
18
- console.log(`\nClaude Coder v${pkg.version}\n`);
19
- console.log('用法: claude-coder <command> [options]\n');
20
- console.log('命令:');
21
- for (const [name, info] of Object.entries(COMMANDS)) {
22
- console.log(` ${name.padEnd(10)} ${info.desc}`);
23
- }
24
- console.log('\n示例:');
25
- console.log(' claude-coder setup 配置模型和 API Key');
26
- console.log(' claude-coder plan "实现用户登录" 生成计划方案');
27
- console.log(' claude-coder plan -r requirements.md 从文件读取需求');
28
- console.log(' claude-coder plan --planOnly 仅生成计划文档');
29
- console.log(' claude-coder plan -i "优化系统" 交互模式,允许模型提问');
30
- console.log(' claude-coder run 执行所有待处理任务');
31
- console.log(' claude-coder run --max 1 单次执行');
32
- console.log(' claude-coder run --max 5 --pause 5 每 5 个 session 暂停确认');
33
- console.log(' claude-coder run --dry-run 预览模式');
34
- console.log(' claude-coder init --deploy-templates 部署模板和食谱到项目目录(可自定义)');
35
- console.log(' claude-coder simplify 代码审查和简化');
36
- console.log(' claude-coder simplify "内存效率" 聚焦特定领域审查');
37
- console.log(' claude-coder go 对话式需求收集和方案组装');
38
- console.log(' claude-coder go "用户管理页面" AI 自动分析需求并组装方案');
39
- console.log(' claude-coder go -r requirements.md 从文件读取需求并自动组装');
40
- console.log(' claude-coder go --reset 重置 Go 记忆');
41
- console.log(' claude-coder auth 导出 Playwright 登录状态');
42
- console.log(' claude-coder auth http://localhost:8080 指定登录 URL');
43
- console.log(' claude-coder status 查看进度和成本');
44
- console.log(`\n前置条件: npm install -g @anthropic-ai/claude-agent-sdk`);
45
- }
46
-
47
- function parseArgs(argv) {
48
- const args = argv.slice(2);
49
- const command = args[0];
50
- const opts = { max: 50, pause: 0, dryRun: false, readFile: null, model: null, n: 3, planOnly: false, interactive: false };
51
- const positional = [];
52
-
53
- for (let i = 1; i < args.length; i++) {
54
- // support --key=value syntax
55
- if (args[i].startsWith('--') && args[i].includes('=')) {
56
- const eq = args[i].indexOf('=');
57
- args.splice(i, 1, args[i].slice(0, eq), args[i].slice(eq + 1));
58
- }
59
- switch (args[i]) {
60
- case '--max':
61
- opts.max = parseInt(args[++i], 10) || 50;
62
- break;
63
- case '--pause':
64
- { const v = parseInt(args[++i], 10); opts.pause = (v >= 0 && !isNaN(v)) ? v : 5; }
65
- break;
66
- case '--dry-run':
67
- opts.dryRun = true;
68
- break;
69
- case '--model':
70
- opts.model = args[++i] || null;
71
- break;
72
- case '-n':
73
- case '--n':
74
- opts.n = parseInt(args[++i], 10) || 3;
75
- break;
76
- case '-r': {
77
- const next = args[i + 1];
78
- if (next && !next.startsWith('-')) {
79
- opts.readFile = next;
80
- i++;
81
- } else {
82
- opts.readFile = 'requirements.md';
83
- }
84
- break;
85
- }
86
- case '--planOnly':
87
- opts.planOnly = true;
88
- break;
89
- case '--reset':
90
- opts.reset = true;
91
- break;
92
- case '-i':
93
- case '--interactive':
94
- opts.interactive = true;
95
- break;
96
- case '--deploy-templates':
97
- opts.deployTemplates = true;
98
- break;
99
- case '--help':
100
- case '-h':
101
- showHelp();
102
- process.exit(0);
103
- break;
104
- default:
105
- if (!args[i].startsWith('--')) {
106
- positional.push(args[i]);
107
- }
108
- break;
109
- }
110
- }
111
-
112
- return { command, positional, opts };
113
- }
114
-
115
- async function cliMain() {
116
- const { command, positional, opts } = parseArgs(process.argv);
117
-
118
- if (!command || command === '--help' || command === '-h') {
119
- showHelp();
120
- process.exit(0);
121
- }
122
-
123
- if (command === '--version' || command === '-v') {
124
- console.log(pkg.version);
125
- process.exit(0);
126
- }
127
-
128
- switch (command) {
129
- case 'setup': {
130
- const setup = require('../src/commands/setup');
131
- await setup.setup();
132
- return;
133
- }
134
- case 'auth': {
135
- const { auth } = require('../src/commands/auth');
136
- await auth(positional[0] || null);
137
- return;
138
- }
139
- case 'status': {
140
- const tasks = require('../src/common/tasks');
141
- tasks.showStatus();
142
- return;
143
- }
144
- }
145
-
146
- const { main } = require('../src');
147
- await main(command, positional[0] || '', opts);
148
- }
149
-
150
- cliMain().catch(err => {
151
- const { log } = require('../src/common/config');
152
- log('error', err.message);
153
- if (process.env.DEBUG) console.error(err.stack);
154
- process.exit(1);
155
- });
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ const pkg = require('../package.json');
5
+
6
+ const COMMANDS = {
7
+ run: { desc: '自动编码循环', usage: 'claude-coder run [--max N] [--pause N] [--dry-run]' },
8
+ setup: { desc: '交互式模型配置', usage: 'claude-coder setup' },
9
+ init: { desc: '初始化项目环境', usage: 'claude-coder init [--deploy-templates]' },
10
+ plan: { desc: '生成计划方案', usage: 'claude-coder plan "需求" | plan -r requirements.md [--planOnly] [-i]' },
11
+ simplify: { desc: '代码审查和简化', usage: 'claude-coder simplify [focus]' },
12
+ auth: { desc: '导出 Playwright 登录状态', usage: 'claude-coder auth [url]' },
13
+ status: { desc: '查看任务进度和成本', usage: 'claude-coder status' },
14
+ go: { desc: 'AI 驱动的需求组装', usage: 'claude-coder go ["需求"] [-r file] [--reset]' },
15
+ };
16
+
17
+ function showHelp() {
18
+ console.log(`\nClaude Coder v${pkg.version}\n`);
19
+ console.log('用法: claude-coder <command> [options]\n');
20
+ console.log('命令:');
21
+ for (const [name, info] of Object.entries(COMMANDS)) {
22
+ console.log(` ${name.padEnd(10)} ${info.desc}`);
23
+ }
24
+ console.log('\n示例:');
25
+ console.log(' claude-coder setup 配置模型和 API Key');
26
+ console.log(' claude-coder plan "实现用户登录" 生成计划方案');
27
+ console.log(' claude-coder plan -r requirements.md 从文件读取需求');
28
+ console.log(' claude-coder plan --planOnly 仅生成计划文档');
29
+ console.log(' claude-coder plan -i "优化系统" 交互模式,允许模型提问');
30
+ console.log(' claude-coder run 执行所有待处理任务');
31
+ console.log(' claude-coder run --max 1 单次执行');
32
+ console.log(' claude-coder run --max 5 --pause 5 每 5 个 session 暂停确认');
33
+ console.log(' claude-coder run --dry-run 预览模式');
34
+ console.log(' claude-coder init --deploy-templates 部署模板和食谱到项目目录(可自定义)');
35
+ console.log(' claude-coder simplify 代码审查和简化');
36
+ console.log(' claude-coder simplify "内存效率" 聚焦特定领域审查');
37
+ console.log(' claude-coder go 对话式需求收集和方案组装');
38
+ console.log(' claude-coder go "用户管理页面" AI 自动分析需求并组装方案');
39
+ console.log(' claude-coder go -r requirements.md 从文件读取需求并自动组装');
40
+ console.log(' claude-coder go --reset 重置 Go 记忆');
41
+ console.log(' claude-coder auth 导出 Playwright 登录状态');
42
+ console.log(' claude-coder auth http://localhost:8080 指定登录 URL');
43
+ console.log(' claude-coder status 查看进度和成本');
44
+ console.log(`\n前置条件: npm install -g @anthropic-ai/claude-agent-sdk`);
45
+ }
46
+
47
+ function parseArgs(argv) {
48
+ const args = argv.slice(2);
49
+ const command = args[0];
50
+ const opts = { max: 50, pause: 0, dryRun: false, readFile: null, model: null, n: 3, planOnly: false, interactive: false };
51
+ const positional = [];
52
+
53
+ for (let i = 1; i < args.length; i++) {
54
+ // support --key=value syntax
55
+ if (args[i].startsWith('--') && args[i].includes('=')) {
56
+ const eq = args[i].indexOf('=');
57
+ args.splice(i, 1, args[i].slice(0, eq), args[i].slice(eq + 1));
58
+ }
59
+ switch (args[i]) {
60
+ case '--max':
61
+ opts.max = parseInt(args[++i], 10) || 50;
62
+ break;
63
+ case '--pause':
64
+ { const v = parseInt(args[++i], 10); opts.pause = (v >= 0 && !isNaN(v)) ? v : 5; }
65
+ break;
66
+ case '--dry-run':
67
+ opts.dryRun = true;
68
+ break;
69
+ case '--model':
70
+ opts.model = args[++i] || null;
71
+ break;
72
+ case '-n':
73
+ case '--n':
74
+ opts.n = parseInt(args[++i], 10) || 3;
75
+ break;
76
+ case '-r': {
77
+ const next = args[i + 1];
78
+ if (next && !next.startsWith('-')) {
79
+ opts.readFile = next;
80
+ i++;
81
+ } else {
82
+ opts.readFile = 'requirements.md';
83
+ }
84
+ break;
85
+ }
86
+ case '--planOnly':
87
+ opts.planOnly = true;
88
+ break;
89
+ case '--reset':
90
+ opts.reset = true;
91
+ break;
92
+ case '-i':
93
+ case '--interactive':
94
+ opts.interactive = true;
95
+ break;
96
+ case '--deploy-templates':
97
+ opts.deployTemplates = true;
98
+ break;
99
+ case '--help':
100
+ case '-h':
101
+ showHelp();
102
+ process.exit(0);
103
+ break;
104
+ default:
105
+ if (!args[i].startsWith('--')) {
106
+ positional.push(args[i]);
107
+ }
108
+ break;
109
+ }
110
+ }
111
+
112
+ return { command, positional, opts };
113
+ }
114
+
115
+ async function cliMain() {
116
+ const { command, positional, opts } = parseArgs(process.argv);
117
+
118
+ if (!command || command === '--help' || command === '-h') {
119
+ showHelp();
120
+ process.exit(0);
121
+ }
122
+
123
+ if (command === '--version' || command === '-v') {
124
+ console.log(pkg.version);
125
+ process.exit(0);
126
+ }
127
+
128
+ switch (command) {
129
+ case 'setup': {
130
+ const setup = require('../src/commands/setup');
131
+ await setup.setup();
132
+ return;
133
+ }
134
+ case 'auth': {
135
+ const { auth } = require('../src/commands/auth');
136
+ await auth(positional[0] || null);
137
+ return;
138
+ }
139
+ case 'status': {
140
+ const tasks = require('../src/common/tasks');
141
+ tasks.showStatus();
142
+ return;
143
+ }
144
+ }
145
+
146
+ const { main } = require('../src');
147
+ await main(command, positional[0] || '', opts);
148
+ }
149
+
150
+ cliMain().catch(err => {
151
+ const { log } = require('../src/common/config');
152
+ log('error', err.message);
153
+ if (process.env.DEBUG) console.error(err.stack);
154
+ process.exit(1);
155
+ });
package/package.json CHANGED
@@ -1,55 +1,55 @@
1
- {
2
- "name": "claude-coder",
3
- "version": "1.9.0",
4
- "description": "Claude Coder — Autonomous coding agent harness powered by Claude Code SDK. Scan, plan, code, validate, git-commit in a loop.",
5
- "bin": {
6
- "claude-coder": "bin/cli.js"
7
- },
8
- "types": "types/index.d.ts",
9
- "files": [
10
- "bin/",
11
- "src/",
12
- "types/",
13
- "recipes/",
14
- "templates/"
15
- ],
16
- "scripts": {
17
- "test": "node test/complete.test.js && node test/integration.test.js && node test/flow.test.js"
18
- },
19
- "keywords": [
20
- "claude-coder",
21
- "claude",
22
- "claude-code",
23
- "ai",
24
- "agent",
25
- "autonomous",
26
- "automation",
27
- "coding",
28
- "harness",
29
- "loop",
30
- "agent-harness",
31
- "task-decomposition",
32
- "code-generation"
33
- ],
34
- "author": "lk19940215",
35
- "license": "MIT",
36
- "publishConfig": {
37
- "registry": "https://registry.npmjs.org/"
38
- },
39
- "repository": {
40
- "type": "git",
41
- "url": "https://github.com/lk19940215/claude-coder.git"
42
- },
43
- "engines": {
44
- "node": ">=18.0.0"
45
- },
46
- "peerDependencies": {
47
- "@anthropic-ai/claude-agent-sdk": ">=0.1.0"
48
- },
49
- "optionalDependencies": {
50
- "playwright": "^1.58.2"
51
- },
52
- "devDependencies": {
53
- "@anthropic-ai/claude-agent-sdk": "^0.2.71"
54
- }
55
- }
1
+ {
2
+ "name": "claude-coder",
3
+ "version": "1.9.2",
4
+ "description": "Claude Coder — Autonomous coding agent harness powered by Claude Code SDK. Scan, plan, code, validate, git-commit in a loop.",
5
+ "bin": {
6
+ "claude-coder": "bin/cli.js"
7
+ },
8
+ "types": "types/index.d.ts",
9
+ "files": [
10
+ "bin/",
11
+ "src/",
12
+ "types/",
13
+ "recipes/",
14
+ "templates/"
15
+ ],
16
+ "scripts": {
17
+ "test": "node test/complete.test.js && node test/integration.test.js && node test/flow.test.js"
18
+ },
19
+ "keywords": [
20
+ "claude-coder",
21
+ "claude",
22
+ "claude-code",
23
+ "ai",
24
+ "agent",
25
+ "autonomous",
26
+ "automation",
27
+ "coding",
28
+ "harness",
29
+ "loop",
30
+ "agent-harness",
31
+ "task-decomposition",
32
+ "code-generation"
33
+ ],
34
+ "author": "lk19940215",
35
+ "license": "MIT",
36
+ "publishConfig": {
37
+ "registry": "https://registry.npmjs.org/"
38
+ },
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "https://github.com/lk19940215/claude-coder.git"
42
+ },
43
+ "engines": {
44
+ "node": ">=18.0.0"
45
+ },
46
+ "peerDependencies": {
47
+ "@anthropic-ai/claude-agent-sdk": ">=0.1.0"
48
+ },
49
+ "optionalDependencies": {
50
+ "playwright": "^1.58.2"
51
+ },
52
+ "devDependencies": {
53
+ "@anthropic-ai/claude-agent-sdk": "^0.2.71"
54
+ }
55
+ }
@@ -1,11 +1,11 @@
1
- # 角色:开发者
2
-
3
- ## Plan 阶段提示
4
- 用户是有经验的开发者。请注意:
5
- - 方案可包含技术细节:API 设计、数据模型、组件结构
6
- - 尊重用户指定的技术约束(框架、组件库、API 风格等)
7
- - 如用户未指定,根据项目现有技术栈推荐
8
-
9
- ## Task 分解提示
10
- - steps 可包含具体的技术步骤
11
- - 验证步骤使用技术命令:curl、Playwright、lint 检查等
1
+ # 角色:开发者
2
+
3
+ ## Plan 阶段提示
4
+ 用户是有经验的开发者。请注意:
5
+ - 方案可包含技术细节:API 设计、数据模型、组件结构
6
+ - 尊重用户指定的技术约束(框架、组件库、API 风格等)
7
+ - 如用户未指定,根据项目现有技术栈推荐
8
+
9
+ ## Task 分解提示
10
+ - steps 可包含具体的技术步骤
11
+ - 验证步骤使用技术命令:curl、Playwright、lint 检查等
@@ -1,12 +1,12 @@
1
- # 角色:产品经理
2
-
3
- ## Plan 阶段提示
4
- 用户是非技术产品经理。请注意:
5
- - 用简单语言描述方案,避免技术术语
6
- - 技术选型自动采用项目现有方案或最佳推荐,不需要用户确认
7
- - 关注功能完整性和用户体验,而非实现细节
8
- - 生成方案后,输出一个功能确认清单(纯业务语言)
9
-
10
- ## Task 分解提示
11
- - steps 描述侧重"做什么"而非"怎么做"
12
- - 验证步骤用业务语言描述:"能看到用户列表"而非"curl GET /api/users → 200"
1
+ # 角色:产品经理
2
+
3
+ ## Plan 阶段提示
4
+ 用户是非技术产品经理。请注意:
5
+ - 用简单语言描述方案,避免技术术语
6
+ - 技术选型自动采用项目现有方案或最佳推荐,不需要用户确认
7
+ - 关注功能完整性和用户体验,而非实现细节
8
+ - 生成方案后,输出一个功能确认清单(纯业务语言)
9
+
10
+ ## Task 分解提示
11
+ - steps 描述侧重"做什么"而非"怎么做"
12
+ - 验证步骤用业务语言描述:"能看到用户列表"而非"curl GET /api/users → 200"
@@ -1,12 +1,12 @@
1
- # 角色:测试
2
-
3
- ## Plan 阶段提示
4
- 用户关注测试覆盖和质量保障。请注意:
5
- - 方案重点描述验收标准和测试场景
6
- - 每个功能点需列出正向 + 异常场景
7
- - 关注边界条件:空数据、超长输入、并发操作
8
-
9
- ## Task 分解提示
10
- - 每个功能对应的 test 任务应详细列出测试用例
11
- - steps 用 P0/P1/P2 标记优先级
12
- - 包含:正向流程、异常流程、边界测试
1
+ # 角色:测试
2
+
3
+ ## Plan 阶段提示
4
+ 用户关注测试覆盖和质量保障。请注意:
5
+ - 方案重点描述验收标准和测试场景
6
+ - 每个功能点需列出正向 + 异常场景
7
+ - 关注边界条件:空数据、超长输入、并发操作
8
+
9
+ ## Task 分解提示
10
+ - 每个功能对应的 test 任务应详细列出测试用例
11
+ - steps 用 P0/P1/P2 标记优先级
12
+ - 包含:正向流程、异常流程、边界测试