@winspan/claude-forge 1.2.3 → 1.2.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 (36) hide show
  1. package/dist/ai-provider/base-provider.d.ts +1 -16
  2. package/dist/ai-provider/base-provider.d.ts.map +1 -1
  3. package/dist/ai-provider/base-provider.js +16 -50
  4. package/dist/ai-provider/base-provider.js.map +1 -1
  5. package/dist/cli/commands/backup.d.ts.map +1 -1
  6. package/dist/cli/commands/backup.js +57 -18
  7. package/dist/cli/commands/backup.js.map +1 -1
  8. package/dist/cli/commands/config.d.ts +1 -1
  9. package/dist/cli/commands/config.d.ts.map +1 -1
  10. package/dist/cli/commands/config.js +84 -22
  11. package/dist/cli/commands/config.js.map +1 -1
  12. package/dist/cli/commands/daemon.d.ts.map +1 -1
  13. package/dist/cli/commands/daemon.js +21 -20
  14. package/dist/cli/commands/daemon.js.map +1 -1
  15. package/dist/cli/commands/init/index.d.ts.map +1 -1
  16. package/dist/cli/commands/init/index.js +24 -10
  17. package/dist/cli/commands/init/index.js.map +1 -1
  18. package/dist/cli/commands/pattern.d.ts.map +1 -1
  19. package/dist/cli/commands/pattern.js +88 -78
  20. package/dist/cli/commands/pattern.js.map +1 -1
  21. package/dist/cli/utils/output.d.ts.map +1 -1
  22. package/dist/cli/utils/output.js +36 -7
  23. package/dist/cli/utils/output.js.map +1 -1
  24. package/dist/pipeline/phase-manager.d.ts +30 -1
  25. package/dist/pipeline/phase-manager.d.ts.map +1 -1
  26. package/dist/pipeline/phase-manager.js +115 -22
  27. package/dist/pipeline/phase-manager.js.map +1 -1
  28. package/dist/utils/circuit-breaker.d.ts +35 -0
  29. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  30. package/dist/utils/circuit-breaker.js +86 -0
  31. package/dist/utils/circuit-breaker.js.map +1 -0
  32. package/dist/utils/claude-api.d.ts +14 -55
  33. package/dist/utils/claude-api.d.ts.map +1 -1
  34. package/dist/utils/claude-api.js +27 -216
  35. package/dist/utils/claude-api.js.map +1 -1
  36. package/package.json +1 -1
@@ -1,20 +1,6 @@
1
1
  import type { AIProvider, ApiCallStats, CompletionOptions } from './types.js';
2
2
  import type { SQLiteStorage } from '../storage/sqlite.js';
3
- /**
4
- * 熔断器:连续失败达到阈值后打开,拒绝后续请求,避免雪崩
5
- */
6
- declare class CircuitBreaker {
7
- private threshold;
8
- private timeout;
9
- private failureCount;
10
- private lastFailureTime;
11
- private state;
12
- constructor(threshold?: number, timeout?: number);
13
- execute<T>(fn: () => Promise<T>): Promise<T>;
14
- private recordFailure;
15
- private reset;
16
- getState(): 'closed' | 'open' | 'half-open';
17
- }
3
+ import { CircuitBreaker } from '../utils/circuit-breaker.js';
18
4
  /**
19
5
  * AI Provider 基类
20
6
  * 提供通用的熔断器、统计、重试逻辑
@@ -58,5 +44,4 @@ export declare abstract class BaseProvider implements AIProvider {
58
44
  getStats(): Readonly<ApiCallStats>;
59
45
  formatStats(): string;
60
46
  }
61
- export {};
62
47
  //# sourceMappingURL=base-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-provider.d.ts","sourceRoot":"","sources":["../../src/ai-provider/base-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D;;GAEG;AACH,cAAM,cAAc;IAMhB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IANjB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,KAAK,CAA6C;gBAGhD,SAAS,GAAE,MAAU,EACrB,OAAO,GAAE,MAAe;IAG5B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAqBlD,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,KAAK;IAKb,QAAQ,IAAI,QAAQ,GAAG,MAAM,GAAG,WAAW;CAG5C;AAED;;;;GAIG;AACH,8BAAsB,YAAa,YAAW,UAAU;IACtD,SAAS,CAAC,KAAK,EAAE,YAAY,CAS3B;IAEF,SAAS,CAAC,cAAc,iBAAiC;IACzD,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAQ;IAC/C,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEjD;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAK3D;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QACxE,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE;YAAE,aAAa,EAAE,MAAM,CAAC;YAAC,iBAAiB,EAAE,MAAM,CAAA;SAAE,CAAC;KAC9D,CAAC;IAEF;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,MAAM;IAEzC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAE7E;;;;;OAKG;IACG,QAAQ,CACZ,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAkB,EACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,iBAAiB,EAC7C,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;IAsGlB,QAAQ,IAAI,QAAQ,CAAC,YAAY,CAAC;IASlC,WAAW,IAAI,MAAM;CAatB"}
1
+ {"version":3,"file":"base-provider.d.ts","sourceRoot":"","sources":["../../src/ai-provider/base-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D;;;;GAIG;AACH,8BAAsB,YAAa,YAAW,UAAU;IACtD,SAAS,CAAC,KAAK,EAAE,YAAY,CAS3B;IAEF,SAAS,CAAC,cAAc,iBAAiC;IACzD,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAQ;IAC/C,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEjD;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAK3D;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QACxE,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE;YAAE,aAAa,EAAE,MAAM,CAAC;YAAC,iBAAiB,EAAE,MAAM,CAAA;SAAE,CAAC;KAC9D,CAAC;IAEF;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,MAAM;IAEzC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAE7E;;;;;OAKG;IACG,QAAQ,CACZ,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAkB,EACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,iBAAiB,EAC7C,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;IAqHlB,QAAQ,IAAI,QAAQ,CAAC,YAAY,CAAC;IASlC,WAAW,IAAI,MAAM;CAatB"}
@@ -1,54 +1,6 @@
1
1
  import { ApiTimeoutError, CircuitOpenError } from './types.js';
2
+ import { CircuitBreaker } from '../utils/circuit-breaker.js';
2
3
  import { randomUUID } from 'crypto';
3
- /**
4
- * 熔断器:连续失败达到阈值后打开,拒绝后续请求,避免雪崩
5
- */
6
- class CircuitBreaker {
7
- threshold;
8
- timeout;
9
- failureCount = 0;
10
- lastFailureTime = 0;
11
- state = 'closed';
12
- constructor(threshold = 5, timeout = 60_000) {
13
- this.threshold = threshold;
14
- this.timeout = timeout;
15
- }
16
- async execute(fn) {
17
- if (this.state === 'open') {
18
- if (Date.now() - this.lastFailureTime > this.timeout) {
19
- this.state = 'half-open';
20
- }
21
- else {
22
- throw new CircuitOpenError();
23
- }
24
- }
25
- try {
26
- const result = await fn();
27
- if (this.state === 'half-open') {
28
- this.reset();
29
- }
30
- return result;
31
- }
32
- catch (err) {
33
- this.recordFailure();
34
- throw err;
35
- }
36
- }
37
- recordFailure() {
38
- this.failureCount++;
39
- this.lastFailureTime = Date.now();
40
- if (this.failureCount >= this.threshold) {
41
- this.state = 'open';
42
- }
43
- }
44
- reset() {
45
- this.failureCount = 0;
46
- this.state = 'closed';
47
- }
48
- getState() {
49
- return this.state;
50
- }
51
- }
52
4
  /**
53
5
  * AI Provider 基类
54
6
  * 提供通用的熔断器、统计、重试逻辑
@@ -113,7 +65,13 @@ export class BaseProvider {
113
65
  }
114
66
  try {
115
67
  const result = await this.circuitBreaker.execute(async () => {
116
- return await this.doComplete(prompt, maxTokens);
68
+ const timeoutRace = new Promise((_, reject) => {
69
+ setTimeout(() => reject(new ApiTimeoutError(timeout)), timeout);
70
+ });
71
+ return await Promise.race([
72
+ this.doComplete(prompt, maxTokens),
73
+ timeoutRace,
74
+ ]);
117
75
  });
118
76
  const latency = Date.now() - startTime;
119
77
  this.stats.totalLatencyMs += latency;
@@ -156,8 +114,16 @@ export class BaseProvider {
156
114
  throw err;
157
115
  }
158
116
  if (err instanceof ApiTimeoutError) {
117
+ this.stats.totalErrors++;
118
+ this.stats.byLabel[label].errors++;
159
119
  throw err; // 超时不重试
160
120
  }
121
+ const status = err.status;
122
+ if (status && status >= 400 && status < 500) {
123
+ this.stats.totalErrors++;
124
+ this.stats.byLabel[label].errors++;
125
+ throw err; // 4xx 不重试
126
+ }
161
127
  if (attempt === retries) {
162
128
  break; // 最后一次尝试失败
163
129
  }
@@ -1 +1 @@
1
- {"version":3,"file":"base-provider.js","sourceRoot":"","sources":["../../src/ai-provider/base-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-provider.js","sourceRoot":"","sources":["../../src/ai-provider/base-provider.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/backup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6D5D"}
1
+ {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/backup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiG5D"}
@@ -2,39 +2,78 @@ import { success, info } from '../utils/output.js';
2
2
  import { handleError } from '../utils/errors.js';
3
3
  import { BackupManager } from '../../backup/index.js';
4
4
  export function registerBackupCommand(program) {
5
- program
5
+ const backup = program
6
6
  .command('backup')
7
- .description('Create a backup of all Claude Forge data')
8
- .option('-p, --project <path>', 'Only backup data for a specific project')
9
- .option('-e, --encrypt', 'Encrypt the backup file')
10
- .option('-o, --output <path>', 'Output file path')
7
+ .description('备份与恢复 Claude Forge 数据');
8
+ backup
9
+ .command('create')
10
+ .description('创建备份')
11
+ .option('-p, --project <path>', '仅备份指定项目数据')
12
+ .option('-e, --encrypt', '加密备份文件')
13
+ .option('-o, --output <path>', '输出文件路径')
11
14
  .action(async (options) => {
12
15
  try {
13
- info('Creating backup...');
16
+ info('正在创建备份...');
14
17
  const manager = new BackupManager();
15
18
  const outputFile = manager.backup({
16
19
  outputPath: options.output,
17
20
  projectPath: options.project,
18
21
  encrypt: options.encrypt,
19
22
  });
20
- success(`Backup created: ${outputFile}`);
21
- info(`Checksum: ${outputFile}.sha256`);
23
+ success(`备份创建完成:${outputFile}`);
24
+ info(`校验文件:${outputFile}.sha256`);
25
+ }
26
+ catch (err) {
27
+ handleError(err);
28
+ }
29
+ });
30
+ backup
31
+ .command('restore')
32
+ .description('从备份文件恢复数据')
33
+ .argument('<file>', '备份文件路径')
34
+ .option('-s, --strategy <strategy>', '恢复策略:merge(合并)、overwrite(覆盖)、cancel(取消)', 'merge')
35
+ .action(async (file, options) => {
36
+ try {
37
+ info(`正在从 ${file} 恢复...`);
38
+ const manager = new BackupManager();
39
+ manager.restore(file, options.strategy);
40
+ success('恢复完成');
41
+ }
42
+ catch (err) {
43
+ handleError(err);
44
+ }
45
+ });
46
+ backup
47
+ .command('export')
48
+ .description('导出指定项目的数据')
49
+ .requiredOption('-p, --project <path>', '要导出的项目路径')
50
+ .option('-o, --output <path>', '输出文件路径')
51
+ .action(async (options) => {
52
+ try {
53
+ info('正在导出项目数据...');
54
+ const manager = new BackupManager();
55
+ const outputFile = manager.backup({
56
+ outputPath: options.output,
57
+ projectPath: options.project,
58
+ });
59
+ success(`导出完成:${outputFile}`);
22
60
  }
23
61
  catch (err) {
24
62
  handleError(err);
25
63
  }
26
64
  });
65
+ // 兼容旧命令
27
66
  program
28
67
  .command('restore')
29
- .description('Restore data from a backup file')
30
- .argument('<file>', 'Backup file path')
31
- .option('-s, --strategy <strategy>', 'Restore strategy: merge, overwrite, cancel', 'merge')
68
+ .description('从备份文件恢复数据(兼容旧命令)')
69
+ .argument('<file>', '备份文件路径')
70
+ .option('-s, --strategy <strategy>', '恢复策略:merge/overwrite/cancel', 'merge')
32
71
  .action(async (file, options) => {
33
72
  try {
34
- info(`Restoring from ${file}...`);
35
73
  const manager = new BackupManager();
74
+ info(`正在从 ${file} 恢复...`);
36
75
  manager.restore(file, options.strategy);
37
- success('Restore completed successfully');
76
+ success('恢复完成');
38
77
  }
39
78
  catch (err) {
40
79
  handleError(err);
@@ -42,18 +81,18 @@ export function registerBackupCommand(program) {
42
81
  });
43
82
  program
44
83
  .command('export')
45
- .description('Export data for a specific project')
46
- .requiredOption('-p, --project <path>', 'Project path to export')
47
- .option('-o, --output <path>', 'Output file path')
84
+ .description('导出指定项目的数据(兼容旧命令)')
85
+ .requiredOption('-p, --project <path>', '要导出的项目路径')
86
+ .option('-o, --output <path>', '输出文件路径')
48
87
  .action(async (options) => {
49
88
  try {
50
- info(`Exporting project data...`);
51
89
  const manager = new BackupManager();
90
+ info('正在导出项目数据...');
52
91
  const outputFile = manager.backup({
53
92
  outputPath: options.output,
54
93
  projectPath: options.project,
55
94
  });
56
- success(`Export completed: ${outputFile}`);
95
+ success(`导出完成:${outputFile}`);
57
96
  }
58
97
  catch (err) {
59
98
  handleError(err);
@@ -1 +1 @@
1
- {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../../src/cli/commands/backup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAW,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAsB,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,sBAAsB,EAAE,yCAAyC,CAAC;SACzE,MAAM,CAAC,eAAe,EAAE,yBAAyB,CAAC;SAClD,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;SACjD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAC3B,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;gBAChC,UAAU,EAAE,OAAO,CAAC,MAAM;gBAC1B,WAAW,EAAE,OAAO,CAAC,OAAO;gBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC;YACH,OAAO,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,aAAa,UAAU,SAAS,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;SACtC,MAAM,CACL,2BAA2B,EAC3B,4CAA4C,EAC5C,OAAO,CACR;SACA,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QAC9B,IAAI,CAAC;YACH,IAAI,CAAC,kBAAkB,IAAI,KAAK,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;YACpC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YACxC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oCAAoC,CAAC;SACjD,cAAc,CAAC,sBAAsB,EAAE,wBAAwB,CAAC;SAChE,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;SACjD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;gBAChC,UAAU,EAAE,OAAO,CAAC,MAAM;gBAC1B,WAAW,EAAE,OAAO,CAAC,OAAO;aAC7B,CAAC,CAAC;YACH,OAAO,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../../src/cli/commands/backup.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { Command } from 'commander';
1
+ import type { Command } from 'commander';
2
2
  export declare function registerConfigCommand(program: Command): void;
3
3
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwH5D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4DzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+H5D"}
@@ -1,23 +1,78 @@
1
+ import readline from 'readline';
1
2
  import { ConfigManager } from '../../config/index.js';
2
- import { success, info, error as errorOutput, formatOutput } from '../utils/output.js';
3
+ import { success, info, error as errorOutput, formatOutput, warning } from '../utils/output.js';
3
4
  import { handleError } from '../utils/errors.js';
5
+ const VALID_CONFIG_KEYS = [
6
+ 'storage.path',
7
+ 'storage.max_size_mb',
8
+ 'distill.provider',
9
+ 'distill.auto_trigger',
10
+ 'distill.event_threshold',
11
+ 'distill.timer_interval_minutes',
12
+ 'distill.api_key',
13
+ 'distill.model',
14
+ 'distill.base_url',
15
+ 'resume.enabled',
16
+ 'resume.timeout_minutes',
17
+ 'resume.max_age_days',
18
+ 'backup.include_profile',
19
+ 'backup.encrypt_by_default',
20
+ 'claudemd.auto_generate',
21
+ 'claudemd.auto_refine',
22
+ 'claudemd.refine_interval',
23
+ 'orchestration.enabled',
24
+ 'orchestration.notify_on_distill',
25
+ 'orchestration.notify_on_claudemd',
26
+ 'autopilot.enabled',
27
+ 'autopilot.intent_analysis',
28
+ 'autopilot.quality_gate',
29
+ 'autopilot.quality_review_interval',
30
+ 'autopilot.auto_start_pipeline',
31
+ 'autopilot.pipeline_confirm_mode',
32
+ 'pattern_engine.enabled',
33
+ 'pattern_engine.route_timeout_ms',
34
+ 'pattern_engine.evolve_interval_days',
35
+ 'pattern_engine.evolve_min_executions',
36
+ 'ui.skill_repair_limit',
37
+ 'ui.logs_tail_default',
38
+ 'ui.pipeline_expire_hours',
39
+ 'ai.models.haiku',
40
+ 'ai.models.sonnet',
41
+ 'ai.models.opus',
42
+ ];
43
+ function parseValue(value) {
44
+ if (value === 'true')
45
+ return true;
46
+ if (value === 'false')
47
+ return false;
48
+ if (/^-?\d+$/.test(value))
49
+ return Number(value);
50
+ return value;
51
+ }
52
+ async function confirmReset() {
53
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
54
+ const answer = await new Promise((resolve) => {
55
+ rl.question('确认重置配置为默认值?所有自定义设置将丢失 (y/N): ', resolve);
56
+ });
57
+ rl.close();
58
+ return answer.trim().toLowerCase() === 'y';
59
+ }
4
60
  export function registerConfigCommand(program) {
5
61
  const config = program
6
62
  .command('config')
7
- .description('Manage Claude Forge configuration');
63
+ .description('管理 Claude Forge 配置');
8
64
  config
9
65
  .command('api')
10
- .description('Configure AI provider and API settings')
11
- .option('--key <api_key>', 'Set API Key (e.g., sk-ant-...)')
12
- .option('--url <base_url>', 'Set Base URL (optional, for custom endpoints)')
13
- .option('--provider <type>', 'AI provider (claude/openai/ollama)')
66
+ .description('配置 AI provider API 参数')
67
+ .option('--key <api_key>', '设置 API Key(例如 sk-ant-...)')
68
+ .option('--url <base_url>', '设置 Base URL(可选,用于自定义端点)')
69
+ .option('--provider <type>', 'AI providerclaude/openai/ollama')
14
70
  .action(async (options) => {
15
71
  try {
16
72
  const manager = new ConfigManager();
17
73
  const cfg = manager.get();
18
74
  const provider = cfg.distill.provider ?? 'claude';
19
75
  if (!options.key && !options.url && !options.provider) {
20
- // 显示当前配置
21
76
  info('当前 API 配置:');
22
77
  info(` Provider: ${provider}`);
23
78
  info(` API Key: ${cfg.distill.api_key ? '已设置 (***' + cfg.distill.api_key.slice(-4) + ')' : '未设置'}`);
@@ -56,7 +111,7 @@ export function registerConfigCommand(program) {
56
111
  });
57
112
  config
58
113
  .command('show')
59
- .description('Show current configuration')
114
+ .description('显示当前配置')
60
115
  .action(async () => {
61
116
  try {
62
117
  const manager = new ConfigManager();
@@ -72,28 +127,27 @@ export function registerConfigCommand(program) {
72
127
  });
73
128
  config
74
129
  .command('set')
75
- .description('Set a configuration value')
76
- .argument('<key>', 'Configuration key (e.g. distill.api_key, distill.base_url)')
77
- .argument('<value>', 'Configuration value')
130
+ .description('设置配置项')
131
+ .argument('<key>', '配置键(例如 distill.api_key, distill.base_url')
132
+ .argument('<value>', '配置值')
78
133
  .action(async (key, value) => {
79
134
  try {
135
+ if (!VALID_CONFIG_KEYS.includes(key)) {
136
+ warning(`未知的配置键:${key}`);
137
+ info(`支持的配置键:${VALID_CONFIG_KEYS.join(', ')}`);
138
+ return;
139
+ }
80
140
  const manager = new ConfigManager();
81
141
  const cfg = manager.get();
82
- // 解析嵌套的 key (e.g. "distill.api_key")
83
142
  const keys = key.split('.');
84
143
  let current = cfg;
85
- // 导航到目标对象
86
144
  for (let i = 0; i < keys.length - 1; i++) {
87
- if (!current[keys[i]]) {
88
- current[keys[i]] = {};
89
- }
90
145
  current = current[keys[i]];
91
146
  }
92
- // 设置值
93
147
  const lastKey = keys[keys.length - 1];
94
- current[lastKey] = value;
148
+ current[lastKey] = parseValue(value);
95
149
  manager.save(cfg);
96
- success(`Configuration updated: ${key} = ${value}`);
150
+ success(`配置已更新:${key} = ${value}`);
97
151
  }
98
152
  catch (err) {
99
153
  handleError(err);
@@ -101,12 +155,20 @@ export function registerConfigCommand(program) {
101
155
  });
102
156
  config
103
157
  .command('reset')
104
- .description('Reset configuration to defaults')
105
- .action(async () => {
158
+ .description('重置配置为默认值')
159
+ .option('-f, --force', '跳过确认提示')
160
+ .action(async (options) => {
106
161
  try {
162
+ if (!options.force) {
163
+ const confirmed = await confirmReset();
164
+ if (!confirmed) {
165
+ info('已取消');
166
+ return;
167
+ }
168
+ }
107
169
  const manager = new ConfigManager();
108
170
  manager.reset();
109
- success('Configuration reset to defaults');
171
+ success('配置已重置为默认值');
110
172
  }
111
173
  catch (err) {
112
174
  handleError(err);
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+DpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoN5D"}
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgEpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoN5D"}
@@ -5,15 +5,16 @@ import os from 'os';
5
5
  import { success, info, error as errorOutput, warning } from '../utils/output.js';
6
6
  import { readPid, isRunning, removePidFile, cleanSocket, getSocketPath, } from '../../daemon/lifecycle.js';
7
7
  import { ConfigManager } from '../../config/index.js';
8
- import { detectBestModel } from '../../utils/claude-api.js';
8
+ import { detectBestModels } from '../../utils/claude-api.js';
9
9
  async function autoDetectAndSaveModel() {
10
10
  try {
11
11
  const manager = new ConfigManager();
12
12
  const current = manager.get();
13
- const bestModel = await detectBestModel();
13
+ const detected = await detectBestModels();
14
+ const bestModel = detected?.sonnet;
14
15
  if (bestModel && bestModel !== current.distill.model) {
15
16
  manager.save({ distill: { ...current.distill, model: bestModel } });
16
- info(`Auto-detected model: ${bestModel}`);
17
+ info(`自动检测到模型:${bestModel}`);
17
18
  }
18
19
  }
19
20
  catch {
@@ -52,27 +53,27 @@ function checkApiKey() {
52
53
  export function registerDaemonCommand(program) {
53
54
  const daemon = program
54
55
  .command('daemon')
55
- .description('Manage the Claude Forge daemon process');
56
+ .description('管理 Claude Forge 守护进程');
56
57
  daemon
57
58
  .command('start')
58
- .description('Start the daemon process')
59
- .option('-f, --foreground', 'Run in foreground')
59
+ .description('启动守护进程')
60
+ .option('-f, --foreground', '以前台模式运行')
60
61
  .action(async (options) => {
61
62
  if (isRunning()) {
62
63
  const pid = readPid();
63
- warning(`Daemon is already running (PID: ${pid})`);
64
+ warning(`守护进程已在运行 (PID: ${pid})`);
64
65
  return;
65
66
  }
66
67
  if (!checkApiKey())
67
68
  return;
68
69
  await autoDetectAndSaveModel();
69
70
  if (options.foreground) {
70
- info('Starting daemon in foreground...');
71
+ info('正在以前台模式启动守护进程...');
71
72
  const { startDaemon } = await import('../../daemon/index.js');
72
73
  await startDaemon(true);
73
74
  }
74
75
  else {
75
- info('Starting daemon in background...');
76
+ info('正在后台启动守护进程...');
76
77
  // 使用 tsx 在后台启动守护进程
77
78
  const daemonScript = path.join(path.dirname(new URL(import.meta.url).pathname), '../../daemon/index.js');
78
79
  const child = spawn('node', ['-e', `import('${daemonScript}').then(m => m.startDaemon(false))`], {
@@ -81,50 +82,50 @@ export function registerDaemonCommand(program) {
81
82
  env: process.env,
82
83
  });
83
84
  child.unref();
84
- success(`Daemon started in background (PID: ${child.pid})`);
85
+ success(`守护进程已在后台启动 (PID: ${child.pid})`);
85
86
  }
86
87
  });
87
88
  daemon
88
89
  .command('stop')
89
- .description('Stop the daemon process')
90
+ .description('停止守护进程')
90
91
  .action(async () => {
91
92
  const pid = readPid();
92
93
  if (!pid) {
93
- warning('Daemon is not running');
94
+ warning('守护进程未运行');
94
95
  return;
95
96
  }
96
97
  try {
97
98
  process.kill(pid, 'SIGTERM');
98
- success(`Daemon stopped (PID: ${pid})`);
99
+ success(`守护进程已停止 (PID: ${pid})`);
99
100
  }
100
101
  catch {
101
- warning('Daemon process not found, cleaning up...');
102
+ warning('未找到守护进程,正在清理残留状态...');
102
103
  removePidFile();
103
104
  cleanSocket();
104
105
  }
105
106
  });
106
107
  daemon
107
108
  .command('status')
108
- .description('Show daemon status')
109
+ .description('显示守护进程状态')
109
110
  .action(async () => {
110
111
  const pid = readPid();
111
112
  const socketPath = getSocketPath();
112
113
  const socketExists = fs.existsSync(socketPath);
113
114
  if (pid) {
114
115
  success(`守护进程运行中 (PID: ${pid})`);
115
- info(`Socket: ${socketPath} ${socketExists ? '✓' : '✗ (缺失)'}`);
116
+ info(`Socket: ${socketPath} ${socketExists ? '✓' : '✗(缺失)'}`);
116
117
  }
117
118
  else {
118
119
  warning('守护进程未运行');
119
120
  if (socketExists) {
120
- warning(`发现残留 socket 文件: ${socketPath},运行 daemon restart 清理`);
121
+ warning(`发现残留 socket 文件: ${socketPath},运行 cf daemon restart 清理`);
121
122
  }
122
- info('运行 claude-forge daemon start 启动守护进程');
123
+ info('运行 cf daemon start 启动守护进程');
123
124
  }
124
125
  });
125
126
  daemon
126
127
  .command('restart')
127
- .description('Restart the daemon process')
128
+ .description('重启守护进程')
128
129
  .action(async () => {
129
130
  const pid = readPid();
130
131
  if (pid) {
@@ -155,7 +156,7 @@ export function registerDaemonCommand(program) {
155
156
  });
156
157
  daemon
157
158
  .command('install')
158
- .description('Install daemon as a system service (launchd on macOS, systemd on Linux)')
159
+ .description('安装守护进程为系统服务(macOS 使用 launchd,Linux 使用 systemd')
159
160
  .action(async () => {
160
161
  const platform = os.platform();
161
162
  const execPath = process.execPath;