@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.
- package/CHANGELOG.md +95 -0
- package/dist/cli/commands/ship/analyzer.d.ts +26 -0
- package/dist/cli/commands/ship/analyzer.d.ts.map +1 -0
- package/dist/cli/commands/ship/analyzer.js +143 -0
- package/dist/cli/commands/ship/analyzer.js.map +1 -0
- package/dist/cli/commands/ship/checker.d.ts +20 -0
- package/dist/cli/commands/ship/checker.d.ts.map +1 -0
- package/dist/cli/commands/ship/checker.js +86 -0
- package/dist/cli/commands/ship/checker.js.map +1 -0
- package/dist/cli/commands/ship/index.d.ts +17 -0
- package/dist/cli/commands/ship/index.d.ts.map +1 -0
- package/dist/cli/commands/ship/index.js +51 -0
- package/dist/cli/commands/ship/index.js.map +1 -0
- package/dist/cli/commands/ship/monitor.d.ts +19 -0
- package/dist/cli/commands/ship/monitor.d.ts.map +1 -0
- package/dist/cli/commands/ship/monitor.js +105 -0
- package/dist/cli/commands/ship/monitor.js.map +1 -0
- package/dist/cli/commands/ship/pipeline.d.ts +23 -0
- package/dist/cli/commands/ship/pipeline.d.ts.map +1 -0
- package/dist/cli/commands/ship/pipeline.js +152 -0
- package/dist/cli/commands/ship/pipeline.js.map +1 -0
- package/dist/cli/commands/ship/publisher.d.ts +11 -0
- package/dist/cli/commands/ship/publisher.d.ts.map +1 -0
- package/dist/cli/commands/ship/publisher.js +75 -0
- package/dist/cli/commands/ship/publisher.js.map +1 -0
- package/dist/cli/commands/ship/rules/confidence-rules.d.ts +48 -0
- package/dist/cli/commands/ship/rules/confidence-rules.d.ts.map +1 -0
- package/dist/cli/commands/ship/rules/confidence-rules.js +122 -0
- package/dist/cli/commands/ship/rules/confidence-rules.js.map +1 -0
- package/dist/cli/commands/ship/rules/quality-rules.d.ts +25 -0
- package/dist/cli/commands/ship/rules/quality-rules.d.ts.map +1 -0
- package/dist/cli/commands/ship/rules/quality-rules.js +134 -0
- package/dist/cli/commands/ship/rules/quality-rules.js.map +1 -0
- package/dist/cli/commands/ship/rules/version-rules.d.ts +24 -0
- package/dist/cli/commands/ship/rules/version-rules.d.ts.map +1 -0
- package/dist/cli/commands/ship/rules/version-rules.js +75 -0
- package/dist/cli/commands/ship/rules/version-rules.js.map +1 -0
- package/dist/cli/commands/ship/versioner.d.ts +12 -0
- package/dist/cli/commands/ship/versioner.d.ts.map +1 -0
- package/dist/cli/commands/ship/versioner.js +92 -0
- package/dist/cli/commands/ship/versioner.js.map +1 -0
- package/dist/cli/index.js +9 -0
- package/dist/cli/index.js.map +1 -1
- package/docs/PUBLISHING.md +344 -34
- package/docs/ai-guide/COMMANDS.md +34 -0
- package/docs/rules/pre-release-checklist.md +426 -0
- package/package.json +8 -2
- package/scripts/.githooks/commit-msg +31 -0
- package/scripts/.githooks/pre-commit +55 -0
- package/scripts/benchmark.ts +209 -0
- package/scripts/hooks/commit-msg +24 -0
- package/scripts/hooks/install-hooks.sh +29 -0
- package/scripts/hooks/pre-commit +60 -0
- package/scripts/pre-release-check.js +717 -0
- package/scripts/release.sh +142 -0
- package/scripts/run-benchmark.sh +29 -0
- package/scripts/validate-ai-docs.js +294 -0
- package/scripts/validate-docs.js +238 -0
- package/scripts/validate-pack.js +86 -0
- package/dist/ai/claude.d.ts +0 -38
- package/dist/ai/claude.d.ts.map +0 -1
- package/dist/ai/claude.js +0 -169
- package/dist/ai/claude.js.map +0 -1
- package/dist/ai/codex.d.ts +0 -38
- package/dist/ai/codex.d.ts.map +0 -1
- package/dist/ai/codex.js +0 -169
- package/dist/ai/codex.js.map +0 -1
- package/dist/ai/factory.d.ts +0 -48
- package/dist/ai/factory.d.ts.map +0 -1
- package/dist/ai/factory.js +0 -95
- package/dist/ai/factory.js.map +0 -1
- package/dist/ai/index.d.ts +0 -12
- package/dist/ai/index.d.ts.map +0 -1
- package/dist/ai/index.js +0 -29
- package/dist/ai/index.js.map +0 -1
- package/dist/ai/provider.d.ts +0 -70
- package/dist/ai/provider.d.ts.map +0 -1
- package/dist/ai/provider.js +0 -31
- package/dist/ai/provider.js.map +0 -1
- package/dist/ai/subagent-caller.d.ts +0 -90
- package/dist/ai/subagent-caller.d.ts.map +0 -1
- package/dist/ai/subagent-caller.js +0 -280
- package/dist/ai/subagent-caller.js.map +0 -1
- package/dist/ai/types.d.ts +0 -70
- package/dist/ai/types.d.ts.map +0 -1
- package/dist/ai/types.js +0 -5
- package/dist/ai/types.js.map +0 -1
- package/dist/generator/ai-overview.d.ts +0 -51
- package/dist/generator/ai-overview.d.ts.map +0 -1
- package/dist/generator/ai-overview.js +0 -160
- package/dist/generator/ai-overview.js.map +0 -1
- package/dist/orchestrator/ai-feed-generator.d.ts +0 -210
- package/dist/orchestrator/ai-feed-generator.d.ts.map +0 -1
- package/dist/orchestrator/ai-feed-generator.js +0 -377
- package/dist/orchestrator/ai-feed-generator.js.map +0 -1
- package/docs/archive/test-report-symbol-search.md +0 -384
- package/docs/archive/test-scenario-4-complexity-analysis.md +0 -460
- package/docs/archive/test_report_scenario5.md +0 -615
- 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();
|
package/dist/ai/claude.d.ts
DELETED
|
@@ -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
|
package/dist/ai/claude.d.ts.map
DELETED
|
@@ -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
|
package/dist/ai/claude.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/ai/claude.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/codex.d.ts
DELETED
|
@@ -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
|
package/dist/ai/codex.d.ts.map
DELETED
|
@@ -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
|
package/dist/ai/codex.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/ai/codex.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/factory.d.ts
DELETED
|
@@ -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
|
package/dist/ai/factory.d.ts.map
DELETED
|
@@ -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"}
|
package/dist/ai/factory.js
DELETED
|
@@ -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
|