@mycodemap/mycodemap 0.4.2 → 0.5.0
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 +92 -3
- package/README.md +117 -46
- package/dist/ai/claude.d.ts +38 -0
- package/dist/ai/claude.d.ts.map +1 -0
- package/dist/ai/claude.js +169 -0
- package/dist/ai/claude.js.map +1 -0
- package/dist/ai/codex.d.ts +38 -0
- package/dist/ai/codex.d.ts.map +1 -0
- package/dist/ai/codex.js +169 -0
- package/dist/ai/codex.js.map +1 -0
- package/dist/ai/factory.d.ts +48 -0
- package/dist/ai/factory.d.ts.map +1 -0
- package/dist/ai/factory.js +95 -0
- package/dist/ai/factory.js.map +1 -0
- package/dist/ai/index.d.ts +12 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +29 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/provider.d.ts +70 -0
- package/dist/ai/provider.d.ts.map +1 -0
- package/dist/ai/provider.js +31 -0
- package/dist/ai/provider.js.map +1 -0
- package/dist/ai/subagent-caller.d.ts +90 -0
- package/dist/ai/subagent-caller.d.ts.map +1 -0
- package/dist/ai/subagent-caller.js +280 -0
- package/dist/ai/subagent-caller.js.map +1 -0
- package/dist/ai/types.d.ts +70 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +5 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/cli/commands/design.d.ts +47 -0
- package/dist/cli/commands/design.d.ts.map +1 -0
- package/dist/cli/commands/design.js +268 -0
- package/dist/cli/commands/design.js.map +1 -0
- package/dist/cli/commands/server.d.ts +9 -0
- package/dist/cli/commands/server.d.ts.map +1 -0
- package/dist/cli/commands/server.js +65 -0
- package/dist/cli/commands/server.js.map +1 -0
- package/dist/cli/commands/ship/pipeline.d.ts.map +1 -1
- package/dist/cli/commands/ship/pipeline.js +8 -1
- package/dist/cli/commands/ship/pipeline.js.map +1 -1
- package/dist/cli/commands/ship/publisher.d.ts +9 -1
- package/dist/cli/commands/ship/publisher.d.ts.map +1 -1
- package/dist/cli/commands/ship/publisher.js +149 -6
- package/dist/cli/commands/ship/publisher.js.map +1 -1
- package/dist/cli/design-contract-loader.d.ts +15 -0
- package/dist/cli/design-contract-loader.d.ts.map +1 -0
- package/dist/cli/design-contract-loader.js +175 -0
- package/dist/cli/design-contract-loader.js.map +1 -0
- package/dist/cli/design-contract-schema.d.ts +11 -0
- package/dist/cli/design-contract-schema.d.ts.map +1 -0
- package/dist/cli/design-contract-schema.js +75 -0
- package/dist/cli/design-contract-schema.js.map +1 -0
- package/dist/cli/design-handoff-builder.d.ts +15 -0
- package/dist/cli/design-handoff-builder.d.ts.map +1 -0
- package/dist/cli/design-handoff-builder.js +345 -0
- package/dist/cli/design-handoff-builder.js.map +1 -0
- package/dist/cli/design-scope-resolver.d.ts +8 -0
- package/dist/cli/design-scope-resolver.d.ts.map +1 -0
- package/dist/cli/design-scope-resolver.js +712 -0
- package/dist/cli/design-scope-resolver.js.map +1 -0
- package/dist/cli/design-verification-builder.d.ts +8 -0
- package/dist/cli/design-verification-builder.d.ts.map +1 -0
- package/dist/cli/design-verification-builder.js +369 -0
- package/dist/cli/design-verification-builder.js.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli-new/commands/server.d.ts +13 -0
- package/dist/cli-new/commands/server.d.ts.map +1 -0
- package/dist/cli-new/commands/server.js +90 -0
- package/dist/cli-new/commands/server.js.map +1 -0
- package/dist/generator/ai-overview.d.ts +51 -0
- package/dist/generator/ai-overview.d.ts.map +1 -0
- package/dist/generator/ai-overview.js +160 -0
- package/dist/generator/ai-overview.js.map +1 -0
- package/dist/infrastructure/storage/StorageFactory.d.ts +12 -5
- package/dist/infrastructure/storage/StorageFactory.d.ts.map +1 -1
- package/dist/infrastructure/storage/StorageFactory.js +55 -14
- package/dist/infrastructure/storage/StorageFactory.js.map +1 -1
- package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts +41 -0
- package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts.map +1 -0
- package/dist/infrastructure/storage/adapters/Neo4jStorage.js +162 -0
- package/dist/infrastructure/storage/adapters/Neo4jStorage.js.map +1 -0
- package/dist/interface/types/design-contract.d.ts +68 -0
- package/dist/interface/types/design-contract.d.ts.map +1 -0
- package/dist/interface/types/design-contract.js +7 -0
- package/dist/interface/types/design-contract.js.map +1 -0
- package/dist/interface/types/design-handoff.d.ts +68 -0
- package/dist/interface/types/design-handoff.d.ts.map +1 -0
- package/dist/interface/types/design-handoff.js +4 -0
- package/dist/interface/types/design-handoff.js.map +1 -0
- package/dist/interface/types/design-mapping.d.ts +51 -0
- package/dist/interface/types/design-mapping.d.ts.map +1 -0
- package/dist/interface/types/design-mapping.js +4 -0
- package/dist/interface/types/design-mapping.js.map +1 -0
- package/dist/interface/types/design-verification.d.ts +49 -0
- package/dist/interface/types/design-verification.d.ts.map +1 -0
- package/dist/interface/types/design-verification.js +4 -0
- package/dist/interface/types/design-verification.js.map +1 -0
- package/dist/interface/types/index.d.ts +4 -0
- package/dist/interface/types/index.d.ts.map +1 -1
- package/dist/orchestrator/ai-feed-generator.d.ts +210 -0
- package/dist/orchestrator/ai-feed-generator.d.ts.map +1 -0
- package/dist/orchestrator/ai-feed-generator.js +377 -0
- package/dist/orchestrator/ai-feed-generator.js.map +1 -0
- package/docs/ai-guide/COMMANDS.md +73 -0
- package/docs/ai-guide/OUTPUT.md +415 -0
- package/docs/ai-guide/PATTERNS.md +14 -4
- package/docs/ai-guide/PROMPTS.md +12 -6
- package/docs/archive/test-report-symbol-search.md +384 -0
- package/docs/archive/test-scenario-4-complexity-analysis.md +460 -0
- package/docs/archive/test_report_scenario5.md +615 -0
- package/docs/archive/test_scenario_3_impact_analysis_report.md +520 -0
- package/docs/product-specs/DESIGN_CONTRACT_TEMPLATE.md +79 -0
- package/docs/product-specs/README.md +2 -1
- package/docs/rules/engineering-with-codex-openai.md +6 -2
- package/docs/rules/validation.md +9 -6
- package/package.json +1 -1
- package/scripts/experiments/arcadedb-http-smoke.mjs +90 -0
- package/scripts/validate-docs.js +247 -0
package/dist/ai/codex.js
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/ai/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/ai/factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type { AIProviderConfig, AIResponse, ProviderType, ProviderFactoryConfig } from './provider.js';
|
|
2
|
+
export type { AIProviderOptions, ChatRequest, ChatResponse, ProviderStatus, ProviderInfo, CLIResult } from './types.js';
|
|
3
|
+
export { AIProvider } from './provider.js';
|
|
4
|
+
export { ClaudeProvider, type ClaudeProviderConfig } from './claude.js';
|
|
5
|
+
export { CodexProvider, type CodexProviderConfig } from './codex.js';
|
|
6
|
+
export { ProviderFactory, createAIProvider } from './factory.js';
|
|
7
|
+
import type { ProviderType } from './provider.js';
|
|
8
|
+
export declare const PROVIDER_INFO: Record<ProviderType, {
|
|
9
|
+
displayName: string;
|
|
10
|
+
description: string;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAKA,YAAY,EACV,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,qBAAqB,EACtB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,SAAS,EACV,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGrE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAiB5F,CAAC"}
|
package/dist/ai/index.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// AI Provider 模块导出
|
|
3
|
+
// ============================================
|
|
4
|
+
// 抽象基类
|
|
5
|
+
export { AIProvider } from './provider.js';
|
|
6
|
+
// Provider 实现
|
|
7
|
+
export { ClaudeProvider } from './claude.js';
|
|
8
|
+
export { CodexProvider } from './codex.js';
|
|
9
|
+
// 工厂类
|
|
10
|
+
export { ProviderFactory, createAIProvider } from './factory.js';
|
|
11
|
+
export const PROVIDER_INFO = {
|
|
12
|
+
claude: {
|
|
13
|
+
displayName: 'Claude CLI',
|
|
14
|
+
description: 'Anthropic Claude via CLI'
|
|
15
|
+
},
|
|
16
|
+
codex: {
|
|
17
|
+
displayName: 'Codex CLI',
|
|
18
|
+
description: 'OpenAI Codex via CLI'
|
|
19
|
+
},
|
|
20
|
+
openai: {
|
|
21
|
+
displayName: 'OpenAI',
|
|
22
|
+
description: 'OpenAI API'
|
|
23
|
+
},
|
|
24
|
+
gemini: {
|
|
25
|
+
displayName: 'Google Gemini',
|
|
26
|
+
description: 'Google Gemini API'
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,mBAAmB;AACnB,+CAA+C;AAmB/C,OAAO;AACP,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,cAAc;AACd,OAAO,EAAE,cAAc,EAA6B,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,aAAa,EAA4B,MAAM,YAAY,CAAC;AAErE,MAAM;AACN,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAKjE,MAAM,CAAC,MAAM,aAAa,GAAuE;IAC/F,MAAM,EAAE;QACN,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,0BAA0B;KACxC;IACD,KAAK,EAAE;QACL,WAAW,EAAE,WAAW;QACxB,WAAW,EAAE,sBAAsB;KACpC;IACD,MAAM,EAAE;QACN,WAAW,EAAE,QAAQ;QACrB,WAAW,EAAE,YAAY;KAC1B;IACD,MAAM,EAAE;QACN,WAAW,EAAE,eAAe;QAC5B,WAAW,EAAE,mBAAmB;KACjC;CACF,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { CodeMap } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* AI Provider 配置
|
|
4
|
+
*/
|
|
5
|
+
export interface AIProviderConfig {
|
|
6
|
+
/** 超时时间(毫秒) */
|
|
7
|
+
timeout?: number;
|
|
8
|
+
/** 最大 token 数 */
|
|
9
|
+
maxTokens?: number;
|
|
10
|
+
/** 模型版本 */
|
|
11
|
+
model?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* AI 响应结果
|
|
15
|
+
*/
|
|
16
|
+
export interface AIResponse {
|
|
17
|
+
/** 响应内容 */
|
|
18
|
+
content: string;
|
|
19
|
+
/** 使用的模型 */
|
|
20
|
+
model?: string;
|
|
21
|
+
/** 消耗的 token 数 */
|
|
22
|
+
usage?: {
|
|
23
|
+
prompt: number;
|
|
24
|
+
completion: number;
|
|
25
|
+
total: number;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* AI Provider 基类
|
|
30
|
+
* 所有 AI Provider 都应继承此类
|
|
31
|
+
*/
|
|
32
|
+
export declare abstract class AIProvider {
|
|
33
|
+
/** Provider 名称 */
|
|
34
|
+
abstract readonly name: string;
|
|
35
|
+
/** 默认配置 */
|
|
36
|
+
protected config: AIProviderConfig;
|
|
37
|
+
constructor(config?: AIProviderConfig);
|
|
38
|
+
/**
|
|
39
|
+
* 执行 AI 推理
|
|
40
|
+
* @param prompt 提示词
|
|
41
|
+
* @param context 上下文数据(CodeMap)
|
|
42
|
+
*/
|
|
43
|
+
abstract execute(prompt: string, context?: CodeMap): Promise<AIResponse>;
|
|
44
|
+
/**
|
|
45
|
+
* 检查 Provider 是否可用
|
|
46
|
+
*/
|
|
47
|
+
abstract isAvailable(): Promise<boolean>;
|
|
48
|
+
/**
|
|
49
|
+
* 获取 Provider 类型
|
|
50
|
+
*/
|
|
51
|
+
getProviderType(): string;
|
|
52
|
+
/**
|
|
53
|
+
* 销毁 Provider(可选实现)
|
|
54
|
+
*/
|
|
55
|
+
destroy(): void;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Provider 类型枚举
|
|
59
|
+
*/
|
|
60
|
+
export type ProviderType = 'claude' | 'codex' | 'openai' | 'gemini';
|
|
61
|
+
/**
|
|
62
|
+
* Provider 工厂配置
|
|
63
|
+
*/
|
|
64
|
+
export interface ProviderFactoryConfig {
|
|
65
|
+
/** 使用的 Provider 类型 */
|
|
66
|
+
provider?: ProviderType;
|
|
67
|
+
/** Provider 配置 */
|
|
68
|
+
config?: AIProviderConfig;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,eAAe;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB;IAClB,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;;GAGG;AACH,8BAAsB,UAAU;IAC9B,kBAAkB;IAClB,kBAAyB,IAAI,EAAE,MAAM,CAAC;IAEtC,WAAW;IACX,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC;gBAEvB,MAAM,GAAE,gBAAqB;IAQzC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAExE;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAExC;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,sBAAsB;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,kBAAkB;IAClB,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// AI Provider 基础类型定义
|
|
3
|
+
// ============================================
|
|
4
|
+
/**
|
|
5
|
+
* AI Provider 基类
|
|
6
|
+
* 所有 AI Provider 都应继承此类
|
|
7
|
+
*/
|
|
8
|
+
export class AIProvider {
|
|
9
|
+
/** 默认配置 */
|
|
10
|
+
config;
|
|
11
|
+
constructor(config = {}) {
|
|
12
|
+
this.config = {
|
|
13
|
+
timeout: 60000, // 默认 60 秒
|
|
14
|
+
maxTokens: 4000,
|
|
15
|
+
...config
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 获取 Provider 类型
|
|
20
|
+
*/
|
|
21
|
+
getProviderType() {
|
|
22
|
+
return this.name;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 销毁 Provider(可选实现)
|
|
26
|
+
*/
|
|
27
|
+
destroy() {
|
|
28
|
+
// 默认空实现,子类可覆盖
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,qBAAqB;AACrB,+CAA+C;AAgC/C;;;GAGG;AACH,MAAM,OAAgB,UAAU;IAI9B,WAAW;IACD,MAAM,CAAmB;IAEnC,YAAY,SAA2B,EAAE;QACvC,IAAI,CAAC,MAAM,GAAG;YACZ,OAAO,EAAE,KAAK,EAAE,UAAU;YAC1B,SAAS,EAAE,IAAI;YACf,GAAG,MAAM;SACV,CAAC;IACJ,CAAC;IAcD;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,cAAc;IAChB,CAAC;CACF"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { CodeMap } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Subagent 输入类型
|
|
4
|
+
*/
|
|
5
|
+
export interface SubagentInput {
|
|
6
|
+
project: CodeMap['project'];
|
|
7
|
+
summary: CodeMap['summary'];
|
|
8
|
+
modules: CodeMap['modules'];
|
|
9
|
+
dependencies: CodeMap['dependencies'];
|
|
10
|
+
requestType: 'overview' | 'analysis' | 'documentation';
|
|
11
|
+
options: {
|
|
12
|
+
includeContext: boolean;
|
|
13
|
+
maxModules: number;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 架构信息
|
|
18
|
+
*/
|
|
19
|
+
export interface ArchitectureInfo {
|
|
20
|
+
pattern: string;
|
|
21
|
+
layers: Array<{
|
|
22
|
+
name: string;
|
|
23
|
+
responsibility: string;
|
|
24
|
+
modules: string[];
|
|
25
|
+
}>;
|
|
26
|
+
metrics: {
|
|
27
|
+
coupling: 'low' | 'medium' | 'high';
|
|
28
|
+
cohesion: 'low' | 'medium' | 'high';
|
|
29
|
+
complexity: 'low' | 'medium' | 'high';
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Subagent 输出类型
|
|
34
|
+
*/
|
|
35
|
+
export interface SubagentOutput {
|
|
36
|
+
type: string;
|
|
37
|
+
title: string;
|
|
38
|
+
content: string;
|
|
39
|
+
highlights: string[];
|
|
40
|
+
architecture?: ArchitectureInfo;
|
|
41
|
+
metadata: {
|
|
42
|
+
generatedAt: string;
|
|
43
|
+
model: string;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Subagent Caller 配置
|
|
48
|
+
*/
|
|
49
|
+
export interface SubagentCallerConfig {
|
|
50
|
+
/** CLI 路径 */
|
|
51
|
+
cliPath?: string;
|
|
52
|
+
/** 超时时间(毫秒) */
|
|
53
|
+
timeout?: number;
|
|
54
|
+
/** 子 agent 名称 */
|
|
55
|
+
subagentName?: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Subagent Caller - 通过 Claude CLI 调用 subagent
|
|
59
|
+
*/
|
|
60
|
+
export declare class SubagentCaller {
|
|
61
|
+
private cliPath;
|
|
62
|
+
private timeout;
|
|
63
|
+
private subagentName;
|
|
64
|
+
constructor(config?: SubagentCallerConfig);
|
|
65
|
+
/**
|
|
66
|
+
* 调用 subagent 生成项目概述
|
|
67
|
+
*/
|
|
68
|
+
generateOverview(codeMap: CodeMap): Promise<SubagentOutput>;
|
|
69
|
+
/**
|
|
70
|
+
* 构建调用 subagent 的 prompt
|
|
71
|
+
*/
|
|
72
|
+
private buildPrompt;
|
|
73
|
+
/**
|
|
74
|
+
* 执行 CLI 调用
|
|
75
|
+
*/
|
|
76
|
+
private execute;
|
|
77
|
+
/**
|
|
78
|
+
* 解析 subagent 输出
|
|
79
|
+
*/
|
|
80
|
+
private parseOutput;
|
|
81
|
+
/**
|
|
82
|
+
* 检查 CLI 是否可用
|
|
83
|
+
*/
|
|
84
|
+
isAvailable(): Promise<boolean>;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* 创建默认的 SubagentCaller 实例
|
|
88
|
+
*/
|
|
89
|
+
export declare function createSubagentCaller(config?: SubagentCallerConfig): SubagentCaller;
|
|
90
|
+
//# sourceMappingURL=subagent-caller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-caller.d.ts","sourceRoot":"","sources":["../../src/ai/subagent-caller.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACtC,WAAW,EAAE,UAAU,GAAG,UAAU,GAAG,eAAe,CAAC;IACvD,OAAO,EAAE;QACP,cAAc,EAAE,OAAO,CAAC;QACxB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC,CAAC;IACH,OAAO,EAAE;QACP,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;QACpC,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;QACpC,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;KACvC,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,QAAQ,EAAE;QACR,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,aAAa;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,GAAE,oBAAyB;IAQ7C;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IA8BjE;;OAEG;IACH,OAAO,CAAC,WAAW;IAkGnB;;OAEG;IACH,OAAO,CAAC,OAAO;IAyDf;;OAEG;IACH,OAAO,CAAC,WAAW;IAwDnB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAqBtC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,cAAc,CAElF"}
|