claude-coder 1.8.0 → 1.8.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 (52) hide show
  1. package/README.md +167 -177
  2. package/bin/cli.js +172 -159
  3. package/package.json +52 -52
  4. package/src/commands/auth.js +240 -294
  5. package/src/commands/setup-modules/helpers.js +99 -105
  6. package/src/commands/setup-modules/index.js +25 -25
  7. package/src/commands/setup-modules/mcp.js +94 -94
  8. package/src/commands/setup-modules/provider.js +260 -260
  9. package/src/commands/setup-modules/safety.js +61 -61
  10. package/src/commands/setup-modules/simplify.js +52 -52
  11. package/src/commands/setup.js +172 -172
  12. package/src/common/assets.js +236 -192
  13. package/src/common/config.js +125 -138
  14. package/src/common/constants.js +55 -56
  15. package/src/common/indicator.js +222 -222
  16. package/src/common/interaction.js +170 -170
  17. package/src/common/logging.js +77 -76
  18. package/src/common/sdk.js +50 -50
  19. package/src/common/tasks.js +88 -157
  20. package/src/common/utils.js +161 -146
  21. package/src/core/coding.js +55 -55
  22. package/src/core/context.js +117 -132
  23. package/src/core/go.js +310 -0
  24. package/src/core/harness.js +484 -0
  25. package/src/core/hooks.js +533 -528
  26. package/src/core/init.js +171 -163
  27. package/src/core/plan.js +325 -318
  28. package/src/core/prompts.js +227 -253
  29. package/src/core/query.js +49 -47
  30. package/src/core/repair.js +46 -58
  31. package/src/core/runner.js +195 -352
  32. package/src/core/scan.js +89 -89
  33. package/src/core/{base.js → session.js} +56 -53
  34. package/src/core/simplify.js +52 -59
  35. package/templates/bash-process.md +12 -5
  36. package/templates/codingSystem.md +65 -0
  37. package/templates/codingUser.md +17 -31
  38. package/templates/coreProtocol.md +29 -0
  39. package/templates/goSystem.md +130 -0
  40. package/templates/guidance.json +52 -34
  41. package/templates/planSystem.md +78 -0
  42. package/templates/planUser.md +9 -0
  43. package/templates/playwright.md +16 -16
  44. package/templates/requirements.example.md +57 -56
  45. package/templates/scanSystem.md +120 -0
  46. package/templates/scanUser.md +10 -17
  47. package/templates/test_rule.md +194 -194
  48. package/src/core/validator.js +0 -138
  49. package/templates/addGuide.md +0 -98
  50. package/templates/addUser.md +0 -26
  51. package/templates/agentProtocol.md +0 -195
  52. package/templates/scanProtocol.md +0 -118
package/bin/cli.js CHANGED
@@ -1,159 +1,172 @@
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' },
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
- };
15
-
16
- function showHelp() {
17
- console.log(`\nClaude Coder v${pkg.version}\n`);
18
- console.log('用法: claude-coder <command> [options]\n');
19
- console.log('命令:');
20
- for (const [name, info] of Object.entries(COMMANDS)) {
21
- console.log(` ${name.padEnd(10)} ${info.desc}`);
22
- }
23
- console.log('\n示例:');
24
- console.log(' claude-coder setup 配置模型和 API Key');
25
- console.log(' claude-coder plan "实现用户登录" 生成计划方案');
26
- console.log(' claude-coder plan -r requirements.md 从文件读取需求');
27
- console.log(' claude-coder plan --planOnly 仅生成计划文档');
28
- console.log(' claude-coder plan -i "优化系统" 交互模式,允许模型提问');
29
- console.log(' claude-coder run 执行所有待处理任务');
30
- console.log(' claude-coder run --max 1 单次执行');
31
- console.log(' claude-coder run --max 5 --pause 5 每 5 个 session 暂停确认');
32
- console.log(' claude-coder run --dry-run 预览模式');
33
- console.log(' claude-coder simplify 代码审查和简化');
34
- console.log(' claude-coder simplify "内存效率" 聚焦特定领域审查');
35
- console.log(' claude-coder auth 导出 Playwright 登录状态');
36
- console.log(' claude-coder auth http://localhost:8080 指定登录 URL');
37
- console.log(' claude-coder status 查看进度和成本');
38
- console.log(`\n前置条件: npm install -g @anthropic-ai/claude-agent-sdk`);
39
- }
40
-
41
- function parseArgs(argv) {
42
- const args = argv.slice(2);
43
- const command = args[0];
44
- const opts = { max: 50, pause: 0, dryRun: false, readFile: null, model: null, n: 3, planOnly: false, interactive: false };
45
- const positional = [];
46
-
47
- for (let i = 1; i < args.length; i++) {
48
- switch (args[i]) {
49
- case '--max':
50
- opts.max = parseInt(args[++i], 10) || 50;
51
- break;
52
- case '--pause':
53
- { const v = parseInt(args[++i], 10); opts.pause = (v >= 0 && !isNaN(v)) ? v : 5; }
54
- break;
55
- case '--dry-run':
56
- opts.dryRun = true;
57
- break;
58
- case '--model':
59
- opts.model = args[++i] || null;
60
- break;
61
- case '-n':
62
- case '--n':
63
- opts.n = parseInt(args[++i], 10) || 3;
64
- break;
65
- case '-r': {
66
- const next = args[i + 1];
67
- if (next && !next.startsWith('-')) {
68
- opts.readFile = next;
69
- i++;
70
- } else {
71
- opts.readFile = 'requirements.md';
72
- }
73
- break;
74
- }
75
- case '--planOnly':
76
- opts.planOnly = true;
77
- break;
78
- case '-i':
79
- case '--interactive':
80
- opts.interactive = true;
81
- break;
82
- case '--help':
83
- case '-h':
84
- showHelp();
85
- process.exit(0);
86
- break;
87
- default:
88
- if (!args[i].startsWith('--')) {
89
- positional.push(args[i]);
90
- }
91
- break;
92
- }
93
- }
94
-
95
- return { command, positional, opts };
96
- }
97
-
98
- async function main() {
99
- const { command, positional, opts } = parseArgs(process.argv);
100
-
101
- if (!command || command === '--help' || command === '-h') {
102
- showHelp();
103
- process.exit(0);
104
- }
105
-
106
- if (command === '--version' || command === '-v') {
107
- console.log(pkg.version);
108
- process.exit(0);
109
- }
110
-
111
- switch (command) {
112
- case 'run': {
113
- const runner = require('../src/core/runner');
114
- await runner.run(opts);
115
- break;
116
- }
117
- case 'setup': {
118
- const setup = require('../src/commands/setup');
119
- await setup.setup();
120
- break;
121
- }
122
- case 'init': {
123
- const { init } = require('../src/core/init');
124
- await init();
125
- break;
126
- }
127
- case 'plan': {
128
- const { run: planRun } = require('../src/core/plan');
129
- const input = positional[0] || '';
130
- await planRun(input, opts);
131
- break;
132
- }
133
- case 'simplify': {
134
- const { simplify } = require('../src/core/simplify');
135
- await simplify(positional[0] || null, { n: opts.n });
136
- break;
137
- }
138
- case 'auth': {
139
- const { auth } = require('../src/commands/auth');
140
- await auth(positional[0] || null);
141
- break;
142
- }
143
- case 'status': {
144
- const tasks = require('../src/common/tasks');
145
- tasks.showStatus();
146
- break;
147
- }
148
- default:
149
- console.error(`未知命令: ${command}`);
150
- showHelp();
151
- process.exit(1);
152
- }
153
- }
154
-
155
- main().catch(err => {
156
- console.error(`\n错误: ${err.message}`);
157
- if (process.env.DEBUG) console.error(err.stack);
158
- process.exit(1);
159
- });
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' },
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 simplify 代码审查和简化');
35
+ console.log(' claude-coder simplify "内存效率" 聚焦特定领域审查');
36
+ console.log(' claude-coder go 对话式需求收集和方案组装');
37
+ console.log(' claude-coder go "用户管理页面" AI 自动分析需求并组装方案');
38
+ console.log(' claude-coder go -r requirements.md 从文件读取需求并自动组装');
39
+ console.log(' claude-coder go --reset 重置 Go 记忆');
40
+ console.log(' claude-coder auth 导出 Playwright 登录状态');
41
+ console.log(' claude-coder auth http://localhost:8080 指定登录 URL');
42
+ console.log(' claude-coder status 查看进度和成本');
43
+ console.log(`\n前置条件: npm install -g @anthropic-ai/claude-agent-sdk`);
44
+ }
45
+
46
+ function parseArgs(argv) {
47
+ const args = argv.slice(2);
48
+ const command = args[0];
49
+ const opts = { max: 50, pause: 0, dryRun: false, readFile: null, model: null, n: 3, planOnly: false, interactive: false };
50
+ const positional = [];
51
+
52
+ for (let i = 1; i < args.length; i++) {
53
+ switch (args[i]) {
54
+ case '--max':
55
+ opts.max = parseInt(args[++i], 10) || 50;
56
+ break;
57
+ case '--pause':
58
+ { const v = parseInt(args[++i], 10); opts.pause = (v >= 0 && !isNaN(v)) ? v : 5; }
59
+ break;
60
+ case '--dry-run':
61
+ opts.dryRun = true;
62
+ break;
63
+ case '--model':
64
+ opts.model = args[++i] || null;
65
+ break;
66
+ case '-n':
67
+ case '--n':
68
+ opts.n = parseInt(args[++i], 10) || 3;
69
+ break;
70
+ case '-r': {
71
+ const next = args[i + 1];
72
+ if (next && !next.startsWith('-')) {
73
+ opts.readFile = next;
74
+ i++;
75
+ } else {
76
+ opts.readFile = 'requirements.md';
77
+ }
78
+ break;
79
+ }
80
+ case '--planOnly':
81
+ opts.planOnly = true;
82
+ break;
83
+ case '--reset':
84
+ opts.reset = true;
85
+ break;
86
+ case '-i':
87
+ case '--interactive':
88
+ opts.interactive = true;
89
+ break;
90
+ case '--help':
91
+ case '-h':
92
+ showHelp();
93
+ process.exit(0);
94
+ break;
95
+ default:
96
+ if (!args[i].startsWith('--')) {
97
+ positional.push(args[i]);
98
+ }
99
+ break;
100
+ }
101
+ }
102
+
103
+ return { command, positional, opts };
104
+ }
105
+
106
+ async function main() {
107
+ const { command, positional, opts } = parseArgs(process.argv);
108
+
109
+ if (!command || command === '--help' || command === '-h') {
110
+ showHelp();
111
+ process.exit(0);
112
+ }
113
+
114
+ if (command === '--version' || command === '-v') {
115
+ console.log(pkg.version);
116
+ process.exit(0);
117
+ }
118
+
119
+ switch (command) {
120
+ case 'run': {
121
+ const runner = require('../src/core/runner');
122
+ await runner.run(opts);
123
+ break;
124
+ }
125
+ case 'setup': {
126
+ const setup = require('../src/commands/setup');
127
+ await setup.setup();
128
+ break;
129
+ }
130
+ case 'init': {
131
+ const { init } = require('../src/core/init');
132
+ await init();
133
+ break;
134
+ }
135
+ case 'plan': {
136
+ const { run: planRun } = require('../src/core/plan');
137
+ const input = positional[0] || '';
138
+ await planRun(input, opts);
139
+ break;
140
+ }
141
+ case 'simplify': {
142
+ const { simplify } = require('../src/core/simplify');
143
+ await simplify(positional[0] || null, { n: opts.n });
144
+ break;
145
+ }
146
+ case 'auth': {
147
+ const { auth } = require('../src/commands/auth');
148
+ await auth(positional[0] || null);
149
+ break;
150
+ }
151
+ case 'go': {
152
+ const { run: goRun } = require('../src/core/go');
153
+ await goRun(positional[0] || '', opts);
154
+ break;
155
+ }
156
+ case 'status': {
157
+ const tasks = require('../src/common/tasks');
158
+ tasks.showStatus();
159
+ break;
160
+ }
161
+ default:
162
+ console.error(`未知命令: ${command}`);
163
+ showHelp();
164
+ process.exit(1);
165
+ }
166
+ }
167
+
168
+ main().catch(err => {
169
+ console.error(`\n错误: ${err.message}`);
170
+ if (process.env.DEBUG) console.error(err.stack);
171
+ process.exit(1);
172
+ });
package/package.json CHANGED
@@ -1,52 +1,52 @@
1
- {
2
- "name": "claude-coder",
3
- "version": "1.8.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
- "files": [
9
- "bin/",
10
- "src/",
11
- "templates/"
12
- ],
13
- "scripts": {
14
- "test": "node test/complete.test.js && node test/integration.test.js && node test/flow.test.js"
15
- },
16
- "keywords": [
17
- "claude-coder",
18
- "claude",
19
- "claude-code",
20
- "ai",
21
- "agent",
22
- "autonomous",
23
- "automation",
24
- "coding",
25
- "harness",
26
- "loop",
27
- "agent-harness",
28
- "task-decomposition",
29
- "code-generation"
30
- ],
31
- "author": "lk19940215",
32
- "license": "MIT",
33
- "publishConfig": {
34
- "registry": "https://registry.npmjs.org/"
35
- },
36
- "repository": {
37
- "type": "git",
38
- "url": "https://github.com/lk19940215/claude-coder.git"
39
- },
40
- "engines": {
41
- "node": ">=18.0.0"
42
- },
43
- "peerDependencies": {
44
- "@anthropic-ai/claude-agent-sdk": ">=0.1.0"
45
- },
46
- "optionalDependencies": {
47
- "playwright": "^1.58.2"
48
- },
49
- "devDependencies": {
50
- "@anthropic-ai/claude-agent-sdk": "^0.2.71"
51
- }
52
- }
1
+ {
2
+ "name": "claude-coder",
3
+ "version": "1.8.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
+ "files": [
9
+ "bin/",
10
+ "src/",
11
+ "templates/"
12
+ ],
13
+ "scripts": {
14
+ "test": "node test/complete.test.js && node test/integration.test.js && node test/flow.test.js"
15
+ },
16
+ "keywords": [
17
+ "claude-coder",
18
+ "claude",
19
+ "claude-code",
20
+ "ai",
21
+ "agent",
22
+ "autonomous",
23
+ "automation",
24
+ "coding",
25
+ "harness",
26
+ "loop",
27
+ "agent-harness",
28
+ "task-decomposition",
29
+ "code-generation"
30
+ ],
31
+ "author": "lk19940215",
32
+ "license": "MIT",
33
+ "publishConfig": {
34
+ "registry": "https://registry.npmjs.org/"
35
+ },
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "https://github.com/lk19940215/claude-coder.git"
39
+ },
40
+ "engines": {
41
+ "node": ">=18.0.0"
42
+ },
43
+ "peerDependencies": {
44
+ "@anthropic-ai/claude-agent-sdk": ">=0.1.0"
45
+ },
46
+ "optionalDependencies": {
47
+ "playwright": "^1.58.2"
48
+ },
49
+ "devDependencies": {
50
+ "@anthropic-ai/claude-agent-sdk": "^0.2.71"
51
+ }
52
+ }