@mycodemap/mycodemap 0.2.0 → 0.3.7

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 (99) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/dist/cli/commands/ship/analyzer.d.ts +26 -0
  3. package/dist/cli/commands/ship/analyzer.d.ts.map +1 -0
  4. package/dist/cli/commands/ship/analyzer.js +143 -0
  5. package/dist/cli/commands/ship/analyzer.js.map +1 -0
  6. package/dist/cli/commands/ship/checker.d.ts +20 -0
  7. package/dist/cli/commands/ship/checker.d.ts.map +1 -0
  8. package/dist/cli/commands/ship/checker.js +86 -0
  9. package/dist/cli/commands/ship/checker.js.map +1 -0
  10. package/dist/cli/commands/ship/index.d.ts +17 -0
  11. package/dist/cli/commands/ship/index.d.ts.map +1 -0
  12. package/dist/cli/commands/ship/index.js +51 -0
  13. package/dist/cli/commands/ship/index.js.map +1 -0
  14. package/dist/cli/commands/ship/monitor.d.ts +19 -0
  15. package/dist/cli/commands/ship/monitor.d.ts.map +1 -0
  16. package/dist/cli/commands/ship/monitor.js +105 -0
  17. package/dist/cli/commands/ship/monitor.js.map +1 -0
  18. package/dist/cli/commands/ship/pipeline.d.ts +23 -0
  19. package/dist/cli/commands/ship/pipeline.d.ts.map +1 -0
  20. package/dist/cli/commands/ship/pipeline.js +152 -0
  21. package/dist/cli/commands/ship/pipeline.js.map +1 -0
  22. package/dist/cli/commands/ship/publisher.d.ts +11 -0
  23. package/dist/cli/commands/ship/publisher.d.ts.map +1 -0
  24. package/dist/cli/commands/ship/publisher.js +75 -0
  25. package/dist/cli/commands/ship/publisher.js.map +1 -0
  26. package/dist/cli/commands/ship/rules/confidence-rules.d.ts +48 -0
  27. package/dist/cli/commands/ship/rules/confidence-rules.d.ts.map +1 -0
  28. package/dist/cli/commands/ship/rules/confidence-rules.js +122 -0
  29. package/dist/cli/commands/ship/rules/confidence-rules.js.map +1 -0
  30. package/dist/cli/commands/ship/rules/quality-rules.d.ts +25 -0
  31. package/dist/cli/commands/ship/rules/quality-rules.d.ts.map +1 -0
  32. package/dist/cli/commands/ship/rules/quality-rules.js +134 -0
  33. package/dist/cli/commands/ship/rules/quality-rules.js.map +1 -0
  34. package/dist/cli/commands/ship/rules/version-rules.d.ts +24 -0
  35. package/dist/cli/commands/ship/rules/version-rules.d.ts.map +1 -0
  36. package/dist/cli/commands/ship/rules/version-rules.js +75 -0
  37. package/dist/cli/commands/ship/rules/version-rules.js.map +1 -0
  38. package/dist/cli/commands/ship/versioner.d.ts +12 -0
  39. package/dist/cli/commands/ship/versioner.d.ts.map +1 -0
  40. package/dist/cli/commands/ship/versioner.js +92 -0
  41. package/dist/cli/commands/ship/versioner.js.map +1 -0
  42. package/dist/cli/index.js +9 -0
  43. package/dist/cli/index.js.map +1 -1
  44. package/docs/PUBLISHING.md +344 -34
  45. package/docs/ai-guide/COMMANDS.md +34 -0
  46. package/docs/rules/pre-release-checklist.md +426 -0
  47. package/package.json +8 -2
  48. package/scripts/.githooks/commit-msg +31 -0
  49. package/scripts/.githooks/pre-commit +55 -0
  50. package/scripts/benchmark.ts +209 -0
  51. package/scripts/hooks/commit-msg +24 -0
  52. package/scripts/hooks/install-hooks.sh +29 -0
  53. package/scripts/hooks/pre-commit +60 -0
  54. package/scripts/pre-release-check.js +717 -0
  55. package/scripts/release.sh +142 -0
  56. package/scripts/run-benchmark.sh +29 -0
  57. package/scripts/validate-ai-docs.js +294 -0
  58. package/scripts/validate-docs.js +238 -0
  59. package/scripts/validate-pack.js +86 -0
  60. package/dist/ai/claude.d.ts +0 -38
  61. package/dist/ai/claude.d.ts.map +0 -1
  62. package/dist/ai/claude.js +0 -169
  63. package/dist/ai/claude.js.map +0 -1
  64. package/dist/ai/codex.d.ts +0 -38
  65. package/dist/ai/codex.d.ts.map +0 -1
  66. package/dist/ai/codex.js +0 -169
  67. package/dist/ai/codex.js.map +0 -1
  68. package/dist/ai/factory.d.ts +0 -48
  69. package/dist/ai/factory.d.ts.map +0 -1
  70. package/dist/ai/factory.js +0 -95
  71. package/dist/ai/factory.js.map +0 -1
  72. package/dist/ai/index.d.ts +0 -12
  73. package/dist/ai/index.d.ts.map +0 -1
  74. package/dist/ai/index.js +0 -29
  75. package/dist/ai/index.js.map +0 -1
  76. package/dist/ai/provider.d.ts +0 -70
  77. package/dist/ai/provider.d.ts.map +0 -1
  78. package/dist/ai/provider.js +0 -31
  79. package/dist/ai/provider.js.map +0 -1
  80. package/dist/ai/subagent-caller.d.ts +0 -90
  81. package/dist/ai/subagent-caller.d.ts.map +0 -1
  82. package/dist/ai/subagent-caller.js +0 -280
  83. package/dist/ai/subagent-caller.js.map +0 -1
  84. package/dist/ai/types.d.ts +0 -70
  85. package/dist/ai/types.d.ts.map +0 -1
  86. package/dist/ai/types.js +0 -5
  87. package/dist/ai/types.js.map +0 -1
  88. package/dist/generator/ai-overview.d.ts +0 -51
  89. package/dist/generator/ai-overview.d.ts.map +0 -1
  90. package/dist/generator/ai-overview.js +0 -160
  91. package/dist/generator/ai-overview.js.map +0 -1
  92. package/dist/orchestrator/ai-feed-generator.d.ts +0 -210
  93. package/dist/orchestrator/ai-feed-generator.d.ts.map +0 -1
  94. package/dist/orchestrator/ai-feed-generator.js +0 -377
  95. package/dist/orchestrator/ai-feed-generator.js.map +0 -1
  96. package/docs/archive/test-report-symbol-search.md +0 -384
  97. package/docs/archive/test-scenario-4-complexity-analysis.md +0 -460
  98. package/docs/archive/test_report_scenario5.md +0 -615
  99. package/docs/archive/test_scenario_3_impact_analysis_report.md +0 -520
@@ -0,0 +1,86 @@
1
+ // [META] since:2026-03 | owner:release-team | stable:true
2
+ // [WHY] Validate package contents before publishing to ensure all required files are included
3
+
4
+ import { execSync } from 'child_process';
5
+ import path from 'path';
6
+ import { fileURLToPath } from 'url';
7
+
8
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
+ const rootDir = path.resolve(__dirname, '..');
10
+
11
+ const REQUIRED_FILES = [
12
+ 'README.md',
13
+ 'LICENSE',
14
+ 'CHANGELOG.md',
15
+ 'mycodemap.config.schema.json'
16
+ ];
17
+
18
+ const REQUIRED_DIRS = [
19
+ 'dist/'
20
+ ];
21
+
22
+ function validate() {
23
+ console.log('🔍 Validating package contents...');
24
+
25
+ // Change to project root
26
+ process.chdir(rootDir);
27
+
28
+ // Run npm pack dry-run
29
+ let output;
30
+ try {
31
+ output = execSync('npm pack --dry-run --json', { encoding: 'utf-8', timeout: 60000 });
32
+ } catch (error) {
33
+ console.error('❌ Failed to run npm pack --dry-run --json');
34
+ process.exit(1);
35
+ }
36
+
37
+ let packInfo;
38
+ try {
39
+ packInfo = JSON.parse(output);
40
+ } catch (error) {
41
+ console.error('❌ Failed to parse pack output');
42
+ process.exit(1);
43
+ }
44
+
45
+ // Validate packInfo structure
46
+ if (!packInfo || packInfo.length === 0 || !packInfo[0].files) {
47
+ console.error('❌ No package files found in npm pack output');
48
+ process.exit(1);
49
+ }
50
+
51
+ const files = packInfo[0].files.map(f => f.path);
52
+
53
+ console.log('📦 Packaged files count:', files.length);
54
+
55
+ // Check required files
56
+ const missing = [];
57
+ for (const reqFile of REQUIRED_FILES) {
58
+ if (!files.some(p => p === reqFile || p.startsWith(reqFile + '/'))) {
59
+ missing.push(reqFile);
60
+ }
61
+ }
62
+
63
+ if (missing.length > 0) {
64
+ console.error('❌ Missing required files:', missing.join(', '));
65
+ process.exit(1);
66
+ }
67
+
68
+ // Check required directories
69
+ const missingDirs = [];
70
+ for (const reqDir of REQUIRED_DIRS) {
71
+ if (!files.some(p => p.startsWith(reqDir))) {
72
+ missingDirs.push(reqDir);
73
+ }
74
+ }
75
+
76
+ if (missingDirs.length > 0) {
77
+ console.error('❌ Missing required directories:', missingDirs.join(', '));
78
+ process.exit(1);
79
+ }
80
+
81
+ console.log('✅ Package validation passed!');
82
+ console.log(' Required files:', REQUIRED_FILES.join(', '));
83
+ console.log(' Required dirs:', REQUIRED_DIRS.join(', '));
84
+ }
85
+
86
+ validate();
@@ -1,38 +0,0 @@
1
- import { AIProvider, type AIProviderConfig, type AIResponse } from './provider.js';
2
- import type { CodeMap } from '../types/index.js';
3
- /**
4
- * Claude Provider 配置
5
- */
6
- export interface ClaudeProviderConfig extends AIProviderConfig {
7
- /** CLI 路径,默认 claude */
8
- cliPath?: string;
9
- }
10
- /**
11
- * Claude Provider - 通过 CLI 调用 Claude
12
- */
13
- export declare class ClaudeProvider extends AIProvider {
14
- readonly name: "claude";
15
- private cliPath;
16
- constructor(config?: ClaudeProviderConfig);
17
- /**
18
- * 执行 AI 推理
19
- */
20
- execute(prompt: string, context?: CodeMap): Promise<AIResponse>;
21
- /**
22
- * 检查 Claude CLI 是否可用
23
- */
24
- isAvailable(): Promise<boolean>;
25
- /**
26
- * 构建提示词
27
- */
28
- private buildPrompt;
29
- /**
30
- * 总结 CodeMap 上下文
31
- */
32
- private summarizeContext;
33
- /**
34
- * 解析 Claude CLI JSON 响应
35
- */
36
- private parseResponse;
37
- }
38
- //# sourceMappingURL=claude.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/ai/claude.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAWjD;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,UAAU;IAC5C,SAAgB,IAAI,EAAG,QAAQ,CAAU;IACzC,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,GAAE,oBAAyB;IAK7C;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAoErE;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAsBrC;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;IACH,OAAO,CAAC,aAAa;CA6BtB"}
package/dist/ai/claude.js DELETED
@@ -1,169 +0,0 @@
1
- // ============================================
2
- // Claude CLI Provider 实现
3
- // ============================================
4
- import { spawn } from 'child_process';
5
- import { AIProvider } from './provider.js';
6
- /**
7
- * Claude Provider - 通过 CLI 调用 Claude
8
- */
9
- export class ClaudeProvider extends AIProvider {
10
- name = 'claude';
11
- cliPath;
12
- constructor(config = {}) {
13
- super(config);
14
- this.cliPath = config.cliPath || 'claude';
15
- }
16
- /**
17
- * 执行 AI 推理
18
- */
19
- async execute(prompt, context) {
20
- const timeout = this.config.timeout || 60000;
21
- // 构建包含上下文的完整提示词
22
- const fullPrompt = this.buildPrompt(prompt, context);
23
- return new Promise((resolve, reject) => {
24
- const args = [
25
- '-p',
26
- '--output-format', 'json',
27
- '--dangerously-skip-permissions'
28
- ];
29
- let stdout = '';
30
- let stderr = '';
31
- let killed = false;
32
- const proc = spawn(this.cliPath, args, {
33
- stdio: ['pipe', 'pipe', 'pipe'],
34
- timeout
35
- });
36
- // 超时处理
37
- const timeoutId = setTimeout(() => {
38
- killed = true;
39
- proc.kill('SIGTERM');
40
- reject(new Error(`Claude 执行超时(${timeout / 1000}秒)`));
41
- }, timeout);
42
- proc.stdout.on('data', (data) => {
43
- stdout += data.toString();
44
- });
45
- proc.stderr.on('data', (data) => {
46
- stderr += data.toString();
47
- });
48
- proc.on('close', (code) => {
49
- clearTimeout(timeoutId);
50
- if (killed)
51
- return;
52
- if (code !== 0 && code !== null) {
53
- reject(new Error(`Claude CLI 错误: ${stderr || `exit code ${code}`}`));
54
- return;
55
- }
56
- try {
57
- const response = this.parseResponse(stdout);
58
- resolve(response);
59
- }
60
- catch (error) {
61
- reject(new Error(`解析 Claude 响应失败: ${error instanceof Error ? error.message : String(error)}`));
62
- }
63
- });
64
- proc.on('error', (error) => {
65
- clearTimeout(timeoutId);
66
- if (!killed) {
67
- reject(new Error(`Claude CLI 执行失败: ${error.message}`));
68
- }
69
- });
70
- // 发送提示词
71
- proc.stdin.write(fullPrompt);
72
- proc.stdin.end();
73
- });
74
- }
75
- /**
76
- * 检查 Claude CLI 是否可用
77
- */
78
- async isAvailable() {
79
- return new Promise((resolve) => {
80
- const proc = spawn(this.cliPath, ['--version'], {
81
- stdio: 'ignore'
82
- });
83
- proc.on('close', (code) => {
84
- resolve(code === 0);
85
- });
86
- proc.on('error', () => {
87
- resolve(false);
88
- });
89
- // 2 秒超时
90
- setTimeout(() => {
91
- proc.kill();
92
- resolve(false);
93
- }, 2000);
94
- });
95
- }
96
- /**
97
- * 构建提示词
98
- */
99
- buildPrompt(prompt, context) {
100
- let fullPrompt = prompt;
101
- if (context) {
102
- const contextInfo = this.summarizeContext(context);
103
- fullPrompt = `${contextInfo}\n\n---\n\n${prompt}`;
104
- }
105
- return fullPrompt;
106
- }
107
- /**
108
- * 总结 CodeMap 上下文
109
- */
110
- summarizeContext(codeMap) {
111
- const lines = [];
112
- lines.push('# Project Context');
113
- lines.push('');
114
- lines.push(`Project: ${codeMap.project.name}`);
115
- lines.push(`Total Files: ${codeMap.summary.totalFiles}`);
116
- lines.push(`Total Modules: ${codeMap.summary.totalModules}`);
117
- lines.push('');
118
- // 入口点
119
- const entryPoints = codeMap.modules.filter(m => {
120
- const basename = require('path').basename(m.path);
121
- return basename === 'index.ts' || basename === 'main.ts' || basename === 'app.ts';
122
- });
123
- if (entryPoints.length > 0) {
124
- lines.push('## Entry Points');
125
- for (const ep of entryPoints.slice(0, 5)) {
126
- lines.push(`- ${ep.path}`);
127
- }
128
- lines.push('');
129
- }
130
- // 模块列表
131
- lines.push('## Modules');
132
- for (const mod of codeMap.modules.slice(0, 20)) {
133
- const exports = mod.exports.map(e => e.name).join(', ');
134
- lines.push(`- ${mod.path}: ${exports || '(no exports)'}`);
135
- }
136
- if (codeMap.modules.length > 20) {
137
- lines.push(`- ... and ${codeMap.modules.length - 20} more`);
138
- }
139
- return lines.join('\n');
140
- }
141
- /**
142
- * 解析 Claude CLI JSON 响应
143
- */
144
- parseResponse(stdout) {
145
- // Claude 可能输出多行 JSON,需要找到有效的 JSON
146
- const lines = stdout.trim().split('\n');
147
- let jsonStr = '';
148
- // 从后往前找有效的 JSON 对象
149
- for (let i = lines.length - 1; i >= 0; i--) {
150
- const line = lines[i].trim();
151
- if (line.startsWith('{') && line.endsWith('}')) {
152
- jsonStr = line;
153
- break;
154
- }
155
- }
156
- if (!jsonStr) {
157
- // 如果没有 JSON,直接返回原始输出
158
- return { content: stdout.trim() };
159
- }
160
- const parsed = JSON.parse(jsonStr);
161
- if (parsed.error) {
162
- throw new Error(parsed.error);
163
- }
164
- return {
165
- content: parsed.result || stdout.trim()
166
- };
167
- }
168
- }
169
- //# sourceMappingURL=claude.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/ai/claude.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,yBAAyB;AACzB,+CAA+C;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAA0C,MAAM,eAAe,CAAC;AAoBnF;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,UAAU;IAC5B,IAAI,GAAG,QAAiB,CAAC;IACjC,OAAO,CAAS;IAExB,YAAY,SAA+B,EAAE;QAC3C,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,OAAiB;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;QAE7C,gBAAgB;QAChB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAErD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG;gBACX,IAAI;gBACJ,iBAAiB,EAAE,MAAM;gBACzB,gCAAgC;aACjC,CAAC;YAEF,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,KAAK,CAAC;YAEnB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;gBACrC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gBAC/B,OAAO;aACR,CAAC,CAAC;YAEH,OAAO;YACP,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,MAAM,GAAG,IAAI,CAAC;gBACd,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;YACvD,CAAC,EAAE,OAAO,CAAC,CAAC;YAEZ,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC9B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC9B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACxB,YAAY,CAAC,SAAS,CAAC,CAAC;gBAExB,IAAI,MAAM;oBAAE,OAAO;gBAEnB,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAChC,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,MAAM,IAAI,aAAa,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;oBACrE,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;oBAC5C,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACpB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjG,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACzB,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,QAAQ;YACR,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE;gBAC9C,KAAK,EAAE,QAAQ;aAChB,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACxB,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpB,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;YAEH,QAAQ;YACR,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,EAAE,IAAI,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,MAAc,EAAE,OAAiB;QACnD,IAAI,UAAU,GAAG,MAAM,CAAC;QAExB,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACnD,UAAU,GAAG,GAAG,WAAW,cAAc,MAAM,EAAE,CAAC;QACpD,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,OAAgB;QACvC,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,MAAM;QACN,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAClD,OAAO,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,QAAQ,CAAC;QACpF,CAAC,CAAC,CAAC;QAEH,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9B,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACzC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7B,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,OAAO;QACP,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxD,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,cAAc,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,MAAc;QAClC,kCAAkC;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,mBAAmB;QACnB,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/C,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,qBAAqB;YACrB,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACpC,CAAC;QAED,MAAM,MAAM,GAAsB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEtD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE;SACxC,CAAC;IACJ,CAAC;CACF"}
@@ -1,38 +0,0 @@
1
- import { AIProvider, type AIProviderConfig, type AIResponse } from './provider.js';
2
- import type { CodeMap } from '../types/index.js';
3
- /**
4
- * Codex Provider 配置
5
- */
6
- export interface CodexProviderConfig extends AIProviderConfig {
7
- /** CLI 路径,默认 codex */
8
- cliPath?: string;
9
- }
10
- /**
11
- * Codex Provider - 通过 CLI 调用 Codex
12
- */
13
- export declare class CodexProvider extends AIProvider {
14
- readonly name: "codex";
15
- private cliPath;
16
- constructor(config?: CodexProviderConfig);
17
- /**
18
- * 执行 AI 推理
19
- */
20
- execute(prompt: string, context?: CodeMap): Promise<AIResponse>;
21
- /**
22
- * 检查 Codex CLI 是否可用
23
- */
24
- isAvailable(): Promise<boolean>;
25
- /**
26
- * 构建提示词
27
- */
28
- private buildPrompt;
29
- /**
30
- * 总结 CodeMap 上下文
31
- */
32
- private summarizeContext;
33
- /**
34
- * 解析 Codex CLI JSON 响应
35
- */
36
- private parseResponse;
37
- }
38
- //# sourceMappingURL=codex.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/ai/codex.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,sBAAsB;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,UAAU;IAC3C,SAAgB,IAAI,EAAG,OAAO,CAAU;IACxC,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,GAAE,mBAAwB;IAK5C;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAiErE;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAsBrC;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;IACH,OAAO,CAAC,aAAa;CA4BtB"}
package/dist/ai/codex.js DELETED
@@ -1,169 +0,0 @@
1
- // ============================================
2
- // Codex CLI Provider 实现
3
- // ============================================
4
- import { spawn } from 'child_process';
5
- import { AIProvider } from './provider.js';
6
- /**
7
- * Codex Provider - 通过 CLI 调用 Codex
8
- */
9
- export class CodexProvider extends AIProvider {
10
- name = 'codex';
11
- cliPath;
12
- constructor(config = {}) {
13
- super(config);
14
- this.cliPath = config.cliPath || 'codex';
15
- }
16
- /**
17
- * 执行 AI 推理
18
- */
19
- async execute(prompt, context) {
20
- const timeout = this.config.timeout || 60000;
21
- // 构建包含上下文的完整提示词
22
- const fullPrompt = this.buildPrompt(prompt, context);
23
- return new Promise((resolve, reject) => {
24
- // Codex exec 使用位置参数传递 prompt
25
- const args = [
26
- 'exec',
27
- '--dangerously-bypass-approvals-and-sandbox',
28
- fullPrompt
29
- ];
30
- let stdout = '';
31
- let stderr = '';
32
- let killed = false;
33
- const proc = spawn(this.cliPath, args, {
34
- stdio: ['ignore', 'pipe', 'pipe'],
35
- timeout
36
- });
37
- // 超时处理
38
- const timeoutId = setTimeout(() => {
39
- killed = true;
40
- proc.kill('SIGTERM');
41
- reject(new Error(`Codex 执行超时(${timeout / 1000}秒)`));
42
- }, timeout);
43
- proc.stdout.on('data', (data) => {
44
- stdout += data.toString();
45
- });
46
- proc.stderr.on('data', (data) => {
47
- stderr += data.toString();
48
- });
49
- proc.on('close', (code) => {
50
- clearTimeout(timeoutId);
51
- if (killed)
52
- return;
53
- if (code !== 0 && code !== null) {
54
- reject(new Error(`Codex CLI 错误: ${stderr || `exit code ${code}`}`));
55
- return;
56
- }
57
- try {
58
- const response = this.parseResponse(stdout);
59
- resolve(response);
60
- }
61
- catch (error) {
62
- reject(new Error(`解析 Codex 响应失败: ${error instanceof Error ? error.message : String(error)}`));
63
- }
64
- });
65
- proc.on('error', (error) => {
66
- clearTimeout(timeoutId);
67
- if (!killed) {
68
- reject(new Error(`Codex CLI 执行失败: ${error.message}`));
69
- }
70
- });
71
- });
72
- }
73
- /**
74
- * 检查 Codex CLI 是否可用
75
- */
76
- async isAvailable() {
77
- return new Promise((resolve) => {
78
- const proc = spawn(this.cliPath, ['--version'], {
79
- stdio: 'ignore'
80
- });
81
- proc.on('close', (code) => {
82
- resolve(code === 0);
83
- });
84
- proc.on('error', () => {
85
- resolve(false);
86
- });
87
- // 2 秒超时
88
- setTimeout(() => {
89
- proc.kill();
90
- resolve(false);
91
- }, 2000);
92
- });
93
- }
94
- /**
95
- * 构建提示词
96
- */
97
- buildPrompt(prompt, context) {
98
- let fullPrompt = prompt;
99
- if (context) {
100
- const contextInfo = this.summarizeContext(context);
101
- fullPrompt = `${contextInfo}\n\n---\n\n${prompt}`;
102
- }
103
- return fullPrompt;
104
- }
105
- /**
106
- * 总结 CodeMap 上下文
107
- */
108
- summarizeContext(codeMap) {
109
- const lines = [];
110
- lines.push('# Project Context');
111
- lines.push('');
112
- lines.push(`Project: ${codeMap.project.name}`);
113
- lines.push(`Total Files: ${codeMap.summary.totalFiles}`);
114
- lines.push(`Total Modules: ${codeMap.summary.totalModules}`);
115
- lines.push('');
116
- // 入口点
117
- const entryPoints = codeMap.modules.filter(m => {
118
- const basename = require('path').basename(m.path);
119
- return basename === 'index.ts' || basename === 'main.ts' || basename === 'app.ts';
120
- });
121
- if (entryPoints.length > 0) {
122
- lines.push('## Entry Points');
123
- for (const ep of entryPoints.slice(0, 5)) {
124
- lines.push(`- ${ep.path}`);
125
- }
126
- lines.push('');
127
- }
128
- // 模块列表
129
- lines.push('## Modules');
130
- for (const mod of codeMap.modules.slice(0, 20)) {
131
- const exports = mod.exports.map(e => e.name).join(', ');
132
- lines.push(`- ${mod.path}: ${exports || '(no exports)'}`);
133
- }
134
- if (codeMap.modules.length > 20) {
135
- lines.push(`- ... and ${codeMap.modules.length - 20} more`);
136
- }
137
- return lines.join('\n');
138
- }
139
- /**
140
- * 解析 Codex CLI JSON 响应
141
- */
142
- parseResponse(stdout) {
143
- // 尝试解析 JSON
144
- const trimmed = stdout.trim();
145
- try {
146
- const parsed = JSON.parse(trimmed);
147
- // 处理不同的响应格式
148
- if (parsed.result) {
149
- return { content: parsed.result };
150
- }
151
- if (parsed.output) {
152
- return { content: parsed.output };
153
- }
154
- if (parsed.response) {
155
- return { content: parsed.response };
156
- }
157
- if (parsed.message) {
158
- return { content: parsed.message };
159
- }
160
- // 如果解析成功但没有已知字段,返回 stringify 后的内容
161
- return { content: JSON.stringify(parsed, null, 2) };
162
- }
163
- catch {
164
- // 如果不是 JSON,直接返回原始内容
165
- return { content: trimmed };
166
- }
167
- }
168
- }
169
- //# sourceMappingURL=codex.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/ai/codex.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- import { AIProvider, type ProviderType, type AIProviderConfig } from './provider.js';
2
- /**
3
- * Provider 工厂
4
- * 用于创建和管理 AI Provider 实例
5
- */
6
- export declare class ProviderFactory {
7
- /** 默认 Provider 优先级 */
8
- private static readonly DEFAULT_PRIORITY;
9
- /** 已创建的 Provider 实例缓存 */
10
- private static providers;
11
- /**
12
- * 根据名称创建 Provider
13
- */
14
- static create(type: ProviderType, config?: AIProviderConfig): AIProvider;
15
- /**
16
- * 自动检测可用的 Provider
17
- * 按优先级顺序返回第一个可用的 Provider
18
- */
19
- static detectAvailable(priority?: ProviderType[], config?: AIProviderConfig): Promise<{
20
- provider: AIProvider;
21
- type: ProviderType;
22
- } | null>;
23
- /**
24
- * 获取所有可用的 Provider
25
- */
26
- static getAllAvailable(config?: AIProviderConfig): Promise<Array<{
27
- type: ProviderType;
28
- provider: AIProvider;
29
- }>>;
30
- /**
31
- * 检查特定 Provider 是否可用
32
- */
33
- static checkAvailability(type: ProviderType): Promise<boolean>;
34
- /**
35
- * 清除 Provider 缓存
36
- */
37
- static clearCache(): void;
38
- /**
39
- * 获取默认 Provider
40
- * 优先使用 Claude,其次 Codex
41
- */
42
- static getDefault(config?: AIProviderConfig): AIProvider;
43
- }
44
- /**
45
- * 创建 AI Provider 实例的简便函数
46
- */
47
- export declare function createAIProvider(type: ProviderType, config?: AIProviderConfig): AIProvider;
48
- //# sourceMappingURL=factory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/ai/factory.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAIrF;;;GAGG;AACH,qBAAa,eAAe;IAC1B,sBAAsB;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAuC;IAE/E,yBAAyB;IACzB,OAAO,CAAC,MAAM,CAAC,SAAS,CAA4C;IAEpE;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,UAAU;IA0BxE;;;OAGG;WACU,eAAe,CAC1B,QAAQ,GAAE,YAAY,EAA0B,EAChD,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC;QAAE,QAAQ,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,YAAY,CAAA;KAAE,GAAG,IAAI,CAAC;IAU/D;;OAEG;WACU,eAAe,CAC1B,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,QAAQ,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC;IAa/D;;OAEG;WACU,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAKpE;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,IAAI;IAOzB;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,UAAU;CAGzD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAE1F"}
@@ -1,95 +0,0 @@
1
- // ============================================
2
- // Provider 工厂类
3
- // ============================================
4
- import { ClaudeProvider } from './claude.js';
5
- import { CodexProvider } from './codex.js';
6
- /**
7
- * Provider 工厂
8
- * 用于创建和管理 AI Provider 实例
9
- */
10
- export class ProviderFactory {
11
- /** 默认 Provider 优先级 */
12
- static DEFAULT_PRIORITY = ['claude', 'codex'];
13
- /** 已创建的 Provider 实例缓存 */
14
- static providers = new Map();
15
- /**
16
- * 根据名称创建 Provider
17
- */
18
- static create(type, config) {
19
- // 如果已有缓存,直接返回
20
- const cached = this.providers.get(type);
21
- if (cached) {
22
- return cached;
23
- }
24
- let provider;
25
- switch (type) {
26
- case 'claude':
27
- provider = new ClaudeProvider(config);
28
- break;
29
- case 'codex':
30
- provider = new CodexProvider(config);
31
- break;
32
- default:
33
- throw new Error(`Unknown provider type: ${type}`);
34
- }
35
- // 缓存实例
36
- this.providers.set(type, provider);
37
- return provider;
38
- }
39
- /**
40
- * 自动检测可用的 Provider
41
- * 按优先级顺序返回第一个可用的 Provider
42
- */
43
- static async detectAvailable(priority = this.DEFAULT_PRIORITY, config) {
44
- for (const type of priority) {
45
- const provider = this.create(type, config);
46
- if (await provider.isAvailable()) {
47
- return { provider, type };
48
- }
49
- }
50
- return null;
51
- }
52
- /**
53
- * 获取所有可用的 Provider
54
- */
55
- static async getAllAvailable(config) {
56
- const results = [];
57
- for (const type of this.DEFAULT_PRIORITY) {
58
- const provider = this.create(type, config);
59
- if (await provider.isAvailable()) {
60
- results.push({ type, provider });
61
- }
62
- }
63
- return results;
64
- }
65
- /**
66
- * 检查特定 Provider 是否可用
67
- */
68
- static async checkAvailability(type) {
69
- const provider = this.create(type);
70
- return provider.isAvailable();
71
- }
72
- /**
73
- * 清除 Provider 缓存
74
- */
75
- static clearCache() {
76
- this.providers.forEach((provider) => {
77
- provider.destroy();
78
- });
79
- this.providers.clear();
80
- }
81
- /**
82
- * 获取默认 Provider
83
- * 优先使用 Claude,其次 Codex
84
- */
85
- static getDefault(config) {
86
- return this.create('claude', config);
87
- }
88
- }
89
- /**
90
- * 创建 AI Provider 实例的简便函数
91
- */
92
- export function createAIProvider(type, config) {
93
- return ProviderFactory.create(type, config);
94
- }
95
- //# sourceMappingURL=factory.js.map