@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
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// Subagent Caller - Task 工具调用封装
|
|
3
|
+
// ============================================
|
|
4
|
+
import { spawn } from 'child_process';
|
|
5
|
+
/**
|
|
6
|
+
* Subagent Caller - 通过 Claude CLI 调用 subagent
|
|
7
|
+
*/
|
|
8
|
+
export class SubagentCaller {
|
|
9
|
+
cliPath;
|
|
10
|
+
timeout;
|
|
11
|
+
subagentName;
|
|
12
|
+
constructor(config = {}) {
|
|
13
|
+
this.cliPath = config.cliPath || 'claude';
|
|
14
|
+
this.timeout = config.timeout || 120000; // 默认 2 分钟
|
|
15
|
+
this.subagentName = config.subagentName || 'ai-generator';
|
|
16
|
+
// 使用 subagentName 构建提示词(用于日志或调试)
|
|
17
|
+
void this.subagentName;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 调用 subagent 生成项目概述
|
|
21
|
+
*/
|
|
22
|
+
async generateOverview(codeMap) {
|
|
23
|
+
// 准备输入数据
|
|
24
|
+
const input = {
|
|
25
|
+
project: codeMap.project,
|
|
26
|
+
summary: {
|
|
27
|
+
totalFiles: codeMap.summary.totalFiles,
|
|
28
|
+
totalModules: codeMap.summary.totalModules,
|
|
29
|
+
totalExports: codeMap.summary.totalExports,
|
|
30
|
+
totalTypes: codeMap.summary.totalTypes,
|
|
31
|
+
totalLines: codeMap.summary.totalLines
|
|
32
|
+
},
|
|
33
|
+
modules: codeMap.modules.slice(0, 20), // 限制数量
|
|
34
|
+
dependencies: codeMap.dependencies,
|
|
35
|
+
requestType: 'overview',
|
|
36
|
+
options: {
|
|
37
|
+
includeContext: true,
|
|
38
|
+
maxModules: 20
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
// 构建 prompt
|
|
42
|
+
const prompt = this.buildPrompt(input);
|
|
43
|
+
// 调用 CLI
|
|
44
|
+
const result = await this.execute(prompt);
|
|
45
|
+
// 解析输出
|
|
46
|
+
return this.parseOutput(result);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 构建调用 subagent 的 prompt
|
|
50
|
+
*/
|
|
51
|
+
buildPrompt(input) {
|
|
52
|
+
const contextJson = JSON.stringify(input, null, 2);
|
|
53
|
+
return `# AI Generator Subagent
|
|
54
|
+
|
|
55
|
+
你是 AI Generator Subagent,负责根据 CodeMap 数据生成专业的项目概述。
|
|
56
|
+
|
|
57
|
+
## 角色定义
|
|
58
|
+
|
|
59
|
+
你是一位专业的软件架构师,擅长分析 TypeScript/JavaScript 项目结构,识别架构模式,并提供有价值的见解。
|
|
60
|
+
|
|
61
|
+
## 输入数据
|
|
62
|
+
|
|
63
|
+
\`\`\`json
|
|
64
|
+
${contextJson}
|
|
65
|
+
\`\`\`
|
|
66
|
+
|
|
67
|
+
## 任务
|
|
68
|
+
|
|
69
|
+
根据上述 CodeMap 数据,生成一个专业的项目概述,需要包含以下内容:
|
|
70
|
+
|
|
71
|
+
### 1. 项目概览
|
|
72
|
+
- 项目名称和基本信息
|
|
73
|
+
- 技术栈识别
|
|
74
|
+
- 总体架构描述
|
|
75
|
+
|
|
76
|
+
### 2. 统计信息
|
|
77
|
+
- 文件总数、代码行数、模块数量
|
|
78
|
+
- 导出符号数量和类型分布
|
|
79
|
+
|
|
80
|
+
### 3. 核心模块分析
|
|
81
|
+
- 最重要的 5-10 个模块及其职责
|
|
82
|
+
- 每个模块的关键导出
|
|
83
|
+
- 模块间的依赖关系
|
|
84
|
+
|
|
85
|
+
### 4. 架构特点
|
|
86
|
+
- 识别的架构模式(如分层、DDD、微服务等)
|
|
87
|
+
- 各层的职责和边界
|
|
88
|
+
- 依赖方向和耦合度
|
|
89
|
+
|
|
90
|
+
### 5. 亮点模块
|
|
91
|
+
- 值得注意的模块或设计模式
|
|
92
|
+
- 可能的创新点或最佳实践
|
|
93
|
+
|
|
94
|
+
### 6. 建议(可选)
|
|
95
|
+
- 潜在的改进方向
|
|
96
|
+
- 架构优化建议
|
|
97
|
+
|
|
98
|
+
## 输出格式
|
|
99
|
+
|
|
100
|
+
请返回 JSON 格式的结果,包含以下字段:
|
|
101
|
+
|
|
102
|
+
\`\`\`json
|
|
103
|
+
{
|
|
104
|
+
"type": "overview",
|
|
105
|
+
"title": "项目概述标题",
|
|
106
|
+
"content": "Markdown 格式的详细描述(支持多级标题、列表、表格等)",
|
|
107
|
+
"highlights": ["亮点1", "亮点2", ...],
|
|
108
|
+
"architecture": {
|
|
109
|
+
"pattern": "识别的架构模式",
|
|
110
|
+
"layers": [
|
|
111
|
+
{
|
|
112
|
+
"name": "层名称",
|
|
113
|
+
"responsibility": "职责描述",
|
|
114
|
+
"modules": ["模块列表"]
|
|
115
|
+
}
|
|
116
|
+
],
|
|
117
|
+
"metrics": {
|
|
118
|
+
"coupling": "low|medium|high",
|
|
119
|
+
"cohesion": "low|medium|high",
|
|
120
|
+
"complexity": "low|medium|high"
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
"metadata": {
|
|
124
|
+
"generatedAt": "ISO 时间戳",
|
|
125
|
+
"model": "sonnet"
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
\`\`\`
|
|
129
|
+
|
|
130
|
+
## 输出指南
|
|
131
|
+
|
|
132
|
+
1. **准确性**: 确保分析基于实际数据,不要臆造信息
|
|
133
|
+
2. **专业性**: 使用标准的软件架构术语
|
|
134
|
+
3. **简洁性**: 保持内容简洁但完整,突出重点
|
|
135
|
+
4. **可读性**: 使用 Markdown 格式提高可读性
|
|
136
|
+
5. **实用性**: 提供有价值的架构见解和建议
|
|
137
|
+
|
|
138
|
+
## 注意事项
|
|
139
|
+
|
|
140
|
+
- 如果某些信息无法从输入数据中确定,请标注为"未识别"或"需要更多信息"
|
|
141
|
+
- 优先分析依赖关系最复杂的模块
|
|
142
|
+
- 关注导出数量多、被依赖次数多的核心模块
|
|
143
|
+
|
|
144
|
+
请确保返回的是有效的 JSON 格式,不要包含其他文字说明。
|
|
145
|
+
`;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* 执行 CLI 调用
|
|
149
|
+
*/
|
|
150
|
+
execute(prompt) {
|
|
151
|
+
return new Promise((resolve, reject) => {
|
|
152
|
+
const args = [
|
|
153
|
+
'-p',
|
|
154
|
+
'--output-format', 'json',
|
|
155
|
+
'--dangerously-skip-permissions'
|
|
156
|
+
];
|
|
157
|
+
let stdout = '';
|
|
158
|
+
let stderr = '';
|
|
159
|
+
let killed = false;
|
|
160
|
+
const proc = spawn(this.cliPath, args, {
|
|
161
|
+
stdio: ['pipe', 'pipe', 'pipe']
|
|
162
|
+
});
|
|
163
|
+
// 超时处理
|
|
164
|
+
const timeoutId = setTimeout(() => {
|
|
165
|
+
killed = true;
|
|
166
|
+
proc.kill('SIGTERM');
|
|
167
|
+
reject(new Error(`Subagent 执行超时(${this.timeout / 1000}秒)`));
|
|
168
|
+
}, this.timeout);
|
|
169
|
+
proc.stdout.on('data', (data) => {
|
|
170
|
+
stdout += data.toString();
|
|
171
|
+
});
|
|
172
|
+
proc.stderr.on('data', (data) => {
|
|
173
|
+
stderr += data.toString();
|
|
174
|
+
});
|
|
175
|
+
proc.on('close', (code) => {
|
|
176
|
+
clearTimeout(timeoutId);
|
|
177
|
+
if (killed)
|
|
178
|
+
return;
|
|
179
|
+
if (code !== 0 && code !== null) {
|
|
180
|
+
reject(new Error(`Subagent CLI 错误: ${stderr || `exit code ${code}`}`));
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
resolve(stdout);
|
|
184
|
+
});
|
|
185
|
+
proc.on('error', (error) => {
|
|
186
|
+
clearTimeout(timeoutId);
|
|
187
|
+
if (!killed) {
|
|
188
|
+
reject(new Error(`Subagent CLI 执行失败: ${error.message}`));
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
// 发送提示词
|
|
192
|
+
proc.stdin.write(prompt);
|
|
193
|
+
proc.stdin.end();
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* 解析 subagent 输出
|
|
198
|
+
*/
|
|
199
|
+
parseOutput(stdout) {
|
|
200
|
+
// Claude 可能输出多行 JSON,需要找到有效的 JSON
|
|
201
|
+
const lines = stdout.trim().split('\n');
|
|
202
|
+
let jsonStr = '';
|
|
203
|
+
// 从后往前找有效的 JSON 对象
|
|
204
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
205
|
+
const line = lines[i].trim();
|
|
206
|
+
if (line.startsWith('{') && line.endsWith('}')) {
|
|
207
|
+
jsonStr = line;
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (!jsonStr) {
|
|
212
|
+
// 如果没有 JSON,返回默认格式
|
|
213
|
+
return {
|
|
214
|
+
type: 'overview',
|
|
215
|
+
title: '项目概述',
|
|
216
|
+
content: stdout.trim(),
|
|
217
|
+
highlights: [],
|
|
218
|
+
metadata: {
|
|
219
|
+
generatedAt: new Date().toISOString(),
|
|
220
|
+
model: 'unknown'
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
try {
|
|
225
|
+
const parsed = JSON.parse(jsonStr);
|
|
226
|
+
return {
|
|
227
|
+
type: parsed.type || 'overview',
|
|
228
|
+
title: parsed.title || '项目概述',
|
|
229
|
+
content: parsed.content || stdout.trim(),
|
|
230
|
+
highlights: parsed.highlights || [],
|
|
231
|
+
architecture: parsed.architecture,
|
|
232
|
+
metadata: {
|
|
233
|
+
generatedAt: parsed.metadata?.generatedAt || new Date().toISOString(),
|
|
234
|
+
model: parsed.metadata?.model || 'sonnet'
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
// 解析失败,返回原始内容
|
|
240
|
+
return {
|
|
241
|
+
type: 'overview',
|
|
242
|
+
title: '项目概述',
|
|
243
|
+
content: stdout.trim(),
|
|
244
|
+
highlights: [],
|
|
245
|
+
metadata: {
|
|
246
|
+
generatedAt: new Date().toISOString(),
|
|
247
|
+
model: 'parse-error'
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* 检查 CLI 是否可用
|
|
254
|
+
*/
|
|
255
|
+
async isAvailable() {
|
|
256
|
+
return new Promise((resolve) => {
|
|
257
|
+
const proc = spawn(this.cliPath, ['--version'], {
|
|
258
|
+
stdio: 'ignore'
|
|
259
|
+
});
|
|
260
|
+
proc.on('close', (code) => {
|
|
261
|
+
resolve(code === 0);
|
|
262
|
+
});
|
|
263
|
+
proc.on('error', () => {
|
|
264
|
+
resolve(false);
|
|
265
|
+
});
|
|
266
|
+
// 2 秒超时
|
|
267
|
+
setTimeout(() => {
|
|
268
|
+
proc.kill();
|
|
269
|
+
resolve(false);
|
|
270
|
+
}, 2000);
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* 创建默认的 SubagentCaller 实例
|
|
276
|
+
*/
|
|
277
|
+
export function createSubagentCaller(config) {
|
|
278
|
+
return new SubagentCaller(config);
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=subagent-caller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-caller.js","sourceRoot":"","sources":["../../src/ai/subagent-caller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export interface AIProviderOptions {
|
|
2
|
+
/** Provider 名称 */
|
|
3
|
+
name: string;
|
|
4
|
+
/** 超时时间(毫秒) */
|
|
5
|
+
timeout?: number;
|
|
6
|
+
/** 最大重试次数 */
|
|
7
|
+
maxRetries?: number;
|
|
8
|
+
/** 是否启用调试模式 */
|
|
9
|
+
debug?: boolean;
|
|
10
|
+
/** 自定义环境变量 */
|
|
11
|
+
env?: Record<string, string>;
|
|
12
|
+
}
|
|
13
|
+
export interface ChatRequest {
|
|
14
|
+
/** 提示词 */
|
|
15
|
+
prompt: string;
|
|
16
|
+
/** 额外上下文 */
|
|
17
|
+
context?: Record<string, unknown>;
|
|
18
|
+
/** 系统提示词 */
|
|
19
|
+
systemPrompt?: string;
|
|
20
|
+
/** 最大令牌数 */
|
|
21
|
+
maxTokens?: number;
|
|
22
|
+
/** 温度参数 */
|
|
23
|
+
temperature?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface ChatResponse {
|
|
26
|
+
/** 响应内容 */
|
|
27
|
+
content: string;
|
|
28
|
+
/** 使用的 provider */
|
|
29
|
+
provider: string;
|
|
30
|
+
/** 消耗的令牌数 */
|
|
31
|
+
usage?: {
|
|
32
|
+
promptTokens: number;
|
|
33
|
+
completionTokens: number;
|
|
34
|
+
totalTokens: number;
|
|
35
|
+
};
|
|
36
|
+
/** 响应时间(毫秒) */
|
|
37
|
+
latency: number;
|
|
38
|
+
}
|
|
39
|
+
export interface ProviderStatus {
|
|
40
|
+
/** Provider 名称 */
|
|
41
|
+
name: string;
|
|
42
|
+
/** 是否可用 */
|
|
43
|
+
isAvailable: boolean;
|
|
44
|
+
/** 检查时间 */
|
|
45
|
+
checkedAt: string;
|
|
46
|
+
/** 错误信息(如果不可用) */
|
|
47
|
+
error?: string;
|
|
48
|
+
}
|
|
49
|
+
export type ProviderType = 'claude' | 'codex';
|
|
50
|
+
export interface ProviderInfo {
|
|
51
|
+
/** Provider 类型 */
|
|
52
|
+
type: ProviderType;
|
|
53
|
+
/** 显示名称 */
|
|
54
|
+
displayName: string;
|
|
55
|
+
/** 描述 */
|
|
56
|
+
description: string;
|
|
57
|
+
/** CLI 命令 */
|
|
58
|
+
command: string;
|
|
59
|
+
/** 默认参数 */
|
|
60
|
+
defaultArgs: string[];
|
|
61
|
+
}
|
|
62
|
+
export interface CLIResult {
|
|
63
|
+
/** 退出码 */
|
|
64
|
+
exitCode: number;
|
|
65
|
+
/** 标准输出 */
|
|
66
|
+
stdout: string;
|
|
67
|
+
/** 标准错误 */
|
|
68
|
+
stderr: string;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ai/types.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAGD,MAAM,WAAW,WAAW;IAC1B,UAAU;IACV,MAAM,EAAE,MAAM,CAAC;IACf,YAAY;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,YAAY;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,YAAY;IAC3B,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,cAAc;IAC7B,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC;AAG9C,MAAM,WAAW,YAAY;IAC3B,kBAAkB;IAClB,IAAI,EAAE,YAAY,CAAC;IACnB,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS;IACT,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAGD,MAAM,WAAW,SAAS;IACxB,UAAU;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW;IACX,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
package/dist/ai/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ai/types.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,mBAAmB;AACnB,+CAA+C"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* [META] since:2026-03-25 | owner:cli-team | stable:false
|
|
3
|
+
* [WHY] Provide a dedicated CLI surface for validating human-authored design contracts
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import { type LoadedDesignContract } from '../design-contract-loader.js';
|
|
7
|
+
import type { DesignHandoffResult, DesignMappingResult, DesignVerificationResult } from '../../interface/types/index.js';
|
|
8
|
+
export interface DesignValidateOptions {
|
|
9
|
+
json?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface DesignValidateJsonOutput {
|
|
12
|
+
ok: boolean;
|
|
13
|
+
exists: boolean;
|
|
14
|
+
filePath: string;
|
|
15
|
+
title?: string;
|
|
16
|
+
missingRequiredSections: string[];
|
|
17
|
+
diagnostics: LoadedDesignContract['diagnostics'];
|
|
18
|
+
sections: Array<{
|
|
19
|
+
id: string;
|
|
20
|
+
title: string;
|
|
21
|
+
line: number;
|
|
22
|
+
itemCount: number;
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
25
|
+
export interface DesignMapOptions {
|
|
26
|
+
json?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface DesignHandoffOptions {
|
|
29
|
+
json?: boolean;
|
|
30
|
+
output?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface DesignVerifyOptions {
|
|
33
|
+
json?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export declare function renderDesignValidationResult(result: LoadedDesignContract): string;
|
|
36
|
+
export declare function renderDesignMappingResult(result: DesignMappingResult): string;
|
|
37
|
+
export declare function renderDesignHandoffResult(result: DesignHandoffResult): string;
|
|
38
|
+
export declare function renderDesignVerificationResult(result: DesignVerificationResult): string;
|
|
39
|
+
export declare function runDesignValidate(filePath: string | undefined, options: DesignValidateOptions & {
|
|
40
|
+
json: true;
|
|
41
|
+
}): Promise<DesignValidateJsonOutput>;
|
|
42
|
+
export declare function runDesignValidate(filePath?: string, options?: DesignValidateOptions): Promise<LoadedDesignContract>;
|
|
43
|
+
export declare function runDesignMap(filePath?: string, _options?: DesignMapOptions): Promise<DesignMappingResult>;
|
|
44
|
+
export declare function runDesignHandoff(filePath?: string, options?: DesignHandoffOptions): Promise<DesignHandoffResult>;
|
|
45
|
+
export declare function runDesignVerify(filePath?: string, _options?: DesignVerifyOptions): Promise<DesignVerificationResult>;
|
|
46
|
+
export declare const designCommand: Command;
|
|
47
|
+
//# sourceMappingURL=design.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/design.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,8BAA8B,CAAC;AAQtC,OAAO,KAAK,EACV,mBAAmB,EAEnB,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,gCAAgC,CAAC;AAExC,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,WAAW,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;IACjD,QAAQ,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAmBD,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAyBjF;AA0BD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAmC7E;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CA4B7E;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,wBAAwB,GAAG,MAAM,CAyCvF;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,EAAE,qBAAqB,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GAC9C,OAAO,CAAC,wBAAwB,CAAC,CAAC;AACrC,wBAAsB,iBAAiB,CACrC,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAcjC,wBAAsB,YAAY,CAChC,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,GAAE,gBAAqB,GAC9B,OAAO,CAAC,mBAAmB,CAAC,CAE9B;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAK9B;AAED,wBAAsB,eAAe,CACnC,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,GAAE,mBAAwB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CAEnC;AAgFD,eAAO,MAAM,aAAa,SAAwB,CAAC"}
|