speccore 8.3.159 → 8.3.161
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/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze.d.ts +16 -0
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +538 -316
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/change.d.ts.map +1 -1
- package/dist/commands/change.js +14 -14
- package/dist/commands/change.js.map +1 -1
- package/dist/commands/execute.d.ts +1 -0
- package/dist/commands/execute.d.ts.map +1 -1
- package/dist/commands/execute.js +92 -10
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +6 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/iteration/split.d.ts.map +1 -1
- package/dist/commands/iteration/split.js +299 -52
- package/dist/commands/iteration/split.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +45 -36
- package/dist/commands/plan.js.map +1 -1
- package/dist/core/agent-adapter.d.ts +81 -0
- package/dist/core/agent-adapter.d.ts.map +1 -0
- package/dist/core/agent-adapter.js +425 -0
- package/dist/core/agent-adapter.js.map +1 -0
- package/dist/core/ask-engine.d.ts.map +1 -1
- package/dist/core/ask-engine.js +60 -0
- package/dist/core/ask-engine.js.map +1 -1
- package/dist/core/pipeline-engine.d.ts +49 -8
- package/dist/core/pipeline-engine.d.ts.map +1 -1
- package/dist/core/pipeline-engine.js +221 -34
- package/dist/core/pipeline-engine.js.map +1 -1
- package/dist/core/prompt-builder.d.ts +12 -3
- package/dist/core/prompt-builder.d.ts.map +1 -1
- package/dist/core/prompt-builder.js +238 -15
- package/dist/core/prompt-builder.js.map +1 -1
- package/dist/core/requirement-clarifier.d.ts.map +1 -1
- package/dist/core/requirement-clarifier.js +36 -3
- package/dist/core/requirement-clarifier.js.map +1 -1
- package/dist/core/schemas/task.schema.d.ts +2 -2
- package/dist/core/structured-extractor.d.ts +2 -0
- package/dist/core/structured-extractor.d.ts.map +1 -1
- package/dist/core/structured-extractor.js +61 -0
- package/dist/core/structured-extractor.js.map +1 -1
- package/dist/core/unified-retrieval.d.ts +2 -1
- package/dist/core/unified-retrieval.d.ts.map +1 -1
- package/dist/core/unified-retrieval.js +34 -15
- package/dist/core/unified-retrieval.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AgentAdapter — 子 Agent 统一适配层
|
|
4
|
+
*
|
|
5
|
+
* v8.3.160+: 实现子 Agent 隔离,解决上下文漂移问题。
|
|
6
|
+
* 每个 Pipeline 步骤可以指定 subagent,由适配层负责:
|
|
7
|
+
* 1. 准备该 subagent 所需的紧凑上下文
|
|
8
|
+
* 2. 控制上下文大小(Token 预算)
|
|
9
|
+
* 3. 输出子 Agent 激活标记和指令
|
|
10
|
+
*
|
|
11
|
+
* 适配模式:
|
|
12
|
+
* - Headless: 基于文件/状态机模拟子 Agent(默认,无需 SDK)
|
|
13
|
+
* - QoderSdk: 通过 Qoder SDK API 创建独立子 Agent(预留接口)
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.defaultAdapter = exports.QoderSdkAdapter = exports.HeadlessAdapter = void 0;
|
|
17
|
+
exports.createAgentAdapter = createAgentAdapter;
|
|
18
|
+
const logger_1 = require("../utils/logger");
|
|
19
|
+
// ── 全局子 Agent 注册表 ──
|
|
20
|
+
const subagentRegistry = new Map();
|
|
21
|
+
// ── 默认子 Agent 配置(以 _INDEX.md 角色定义为准) ──
|
|
22
|
+
const DEFAULT_SUBAGENTS = [
|
|
23
|
+
// analyze / clarify 阶段
|
|
24
|
+
{
|
|
25
|
+
name: 'product-analyst',
|
|
26
|
+
description: '产品分析师:业务流程完整性、遗漏识别、术语统一',
|
|
27
|
+
systemPrompt: '你是 SpecCore 产品分析师。你的职责是审查业务流程完整性、识别需求遗漏、检查术语统一性。输出格式:Markdown 产品分析报告。',
|
|
28
|
+
defaultContextType: 'full',
|
|
29
|
+
defaultContextBudget: 4000,
|
|
30
|
+
skills: ['.speccore/AGENTS/product-analyst.md'],
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'interaction-designer',
|
|
34
|
+
description: '交互设计师:信息架构、状态矩阵、前后端一致性',
|
|
35
|
+
systemPrompt: '你是 SpecCore 交互设计师。你的职责是设计页面信息架构、定义交互状态矩阵、检查前后端交互一致性。输出格式:Markdown 交互审查报告。',
|
|
36
|
+
defaultContextType: 'full',
|
|
37
|
+
defaultContextBudget: 4000,
|
|
38
|
+
skills: ['.speccore/AGENTS/interaction-designer.md'],
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'security-reviewer',
|
|
42
|
+
description: '安全审查员:认证授权、输入验证、数据保护',
|
|
43
|
+
systemPrompt: '你是 SpecCore 安全审查员。你的职责是识别需求/代码中的安全风险,检查认证、授权、输入验证、数据保护。输出格式:安全问题列表。',
|
|
44
|
+
defaultContextType: 'full',
|
|
45
|
+
defaultContextBudget: 4000,
|
|
46
|
+
skills: ['.speccore/AGENTS/security-reviewer.md'],
|
|
47
|
+
},
|
|
48
|
+
// analyze 阶段
|
|
49
|
+
{
|
|
50
|
+
name: 'spec-analyzer',
|
|
51
|
+
description: '需求分析专家:逐端分析、架构设计、技术方案',
|
|
52
|
+
systemPrompt: '你是 SpecCore 需求分析专家。你的职责是根据需求文档和契约,为指定端生成完整的技术规格。必须遵循 CONSTITUTION.md 中的命名规范和端名标准。输出格式:Markdown 技术文档。',
|
|
53
|
+
defaultContextType: 'platform-only',
|
|
54
|
+
// v8.3.160+: 配合按需加载优化,降至 10K
|
|
55
|
+
defaultContextBudget: 10000,
|
|
56
|
+
skills: ['.speccore/AGENTS/product-analyst-backend.md', '.speccore/AGENTS/product-analyst-frontend.md'],
|
|
57
|
+
},
|
|
58
|
+
// execute 阶段
|
|
59
|
+
{
|
|
60
|
+
name: 'spec-executor',
|
|
61
|
+
description: '代码生成专家:读取规格、生成代码、遵循规范',
|
|
62
|
+
systemPrompt: '你是 SpecCore 代码生成专家。你的职责是根据 TASK.md 和技术规格,生成符合项目规范的代码实现。必须遵循 CONSTITUTION.md 的命名规范、端名标准和错误码体系。输出格式:JSON 文件列表。',
|
|
63
|
+
defaultContextType: 'incremental',
|
|
64
|
+
defaultContextBudget: 10000,
|
|
65
|
+
skills: ['.speccore/SKILLS/execute.md'],
|
|
66
|
+
},
|
|
67
|
+
// execute / quality-gate 阶段
|
|
68
|
+
// v8.3.160+: compiler 合并 test-engineer 职责(quality-gate-build)
|
|
69
|
+
{
|
|
70
|
+
name: 'compiler',
|
|
71
|
+
description: '构建质量检查员:编译检查 + 测试覆盖',
|
|
72
|
+
systemPrompt: '你是 SpecCore 构建质量检查员。你的职责是:1) 检查代码编译可行性,识别语法错误和类型错误;2) 检查单元测试和集成测试覆盖率,确保新增代码有配套测试。输出格式:构建质量报告(含编译结果 + 测试覆盖)。',
|
|
73
|
+
defaultContextType: 'incremental',
|
|
74
|
+
defaultContextBudget: 8000,
|
|
75
|
+
skills: ['.speccore/AGENTS/compiler.md', '.speccore/AGENTS/test-engineer.md'],
|
|
76
|
+
},
|
|
77
|
+
// v8.3.160+: security-reviewer 合并 performance-expert 职责(quality-gate-nfr)
|
|
78
|
+
{
|
|
79
|
+
name: 'security-reviewer',
|
|
80
|
+
description: '非功能质量检查员:安全审查 + 性能检测',
|
|
81
|
+
systemPrompt: '你是 SpecCore 非功能质量检查员。你的职责是:1) 识别代码中的安全风险(认证、授权、输入验证、数据保护);2) 检查性能瓶颈(N+1 查询、内存泄漏、不必要的重渲染)。输出格式:非功能质量报告(含安全 + 性能)。',
|
|
82
|
+
defaultContextType: 'incremental',
|
|
83
|
+
defaultContextBudget: 6000,
|
|
84
|
+
skills: ['.speccore/AGENTS/security-reviewer.md', '.speccore/AGENTS/performance-expert.md'],
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'doc-sync-agent',
|
|
88
|
+
description: '文档同步检查员:代码与文档一致性',
|
|
89
|
+
systemPrompt: '你是 SpecCore 文档同步检查员。你的职责是检查代码与文档的一致性,确保 API 文档与实际接口匹配,注释和文档未过时。输出格式:文档同步报告。',
|
|
90
|
+
defaultContextType: 'incremental',
|
|
91
|
+
defaultContextBudget: 3000,
|
|
92
|
+
skills: ['.speccore/AGENTS/doc-sync-agent.md'],
|
|
93
|
+
},
|
|
94
|
+
// split 阶段
|
|
95
|
+
{
|
|
96
|
+
name: 'task-decomposer',
|
|
97
|
+
description: '任务拆分专家:功能模块拆分为原子级开发任务',
|
|
98
|
+
systemPrompt: '你是 SpecCore 任务拆分专家。你的职责是将功能模块拆分为原子级开发任务,确保每个任务可独立执行、可验收,工时控制在 2h-8h。输出格式:任务列表。',
|
|
99
|
+
defaultContextType: 'full',
|
|
100
|
+
defaultContextBudget: 8000,
|
|
101
|
+
skills: ['.speccore/AGENTS/task-decomposer.md'],
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: 'dependency-analyst',
|
|
105
|
+
description: '依赖关系分析师:任务间依赖、循环依赖检测',
|
|
106
|
+
systemPrompt: '你是 SpecCore 依赖关系分析师。你的职责是识别任务间的依赖关系,构建任务依赖图,发现循环依赖,推荐任务执行顺序。输出格式:依赖分析报告。',
|
|
107
|
+
defaultContextType: 'incremental',
|
|
108
|
+
defaultContextBudget: 5000,
|
|
109
|
+
skills: ['.speccore/AGENTS/dependency-analyst.md'],
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'effort-estimator',
|
|
113
|
+
description: '工时估算专家:任务工时估算',
|
|
114
|
+
systemPrompt: '你是 SpecCore 工时估算专家。你的职责是根据任务复杂度和历史数据,为每个任务估算工时。输出格式:工时估算表。',
|
|
115
|
+
defaultContextType: 'incremental',
|
|
116
|
+
defaultContextBudget: 4000,
|
|
117
|
+
skills: [],
|
|
118
|
+
},
|
|
119
|
+
// global-analyze 阶段
|
|
120
|
+
{
|
|
121
|
+
name: 'spec-global-analyzer',
|
|
122
|
+
description: '全局分析专家:跨迭代依赖、全局架构、一致性检查',
|
|
123
|
+
systemPrompt: '你是 SpecCore 全局分析专家。你的职责是分析跨迭代的依赖关系、全局架构一致性和技术债务。必须识别所有跨端关联和重复实现。输出格式:Markdown 全局报告。',
|
|
124
|
+
defaultContextType: 'full',
|
|
125
|
+
// v8.3.160+: 配合按需加载优化,降至 10K
|
|
126
|
+
defaultContextBudget: 10000,
|
|
127
|
+
skills: ['.speccore/SKILLS/global-analyze.md'],
|
|
128
|
+
},
|
|
129
|
+
// plan 阶段(预留)
|
|
130
|
+
{
|
|
131
|
+
name: 'schedule-planner',
|
|
132
|
+
description: '排期规划专家:任务排期、资源分配',
|
|
133
|
+
systemPrompt: '你是 SpecCore 排期规划专家。你的职责是根据任务列表和人员配置,生成执行计划,识别可并行的任务批次。输出格式:执行计划。',
|
|
134
|
+
defaultContextType: 'full',
|
|
135
|
+
defaultContextBudget: 6000,
|
|
136
|
+
skills: ['.speccore/AGENTS/schedule-planner.md'],
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
name: 'risk-assessor',
|
|
140
|
+
description: '风险评估专家:技术风险、依赖风险识别',
|
|
141
|
+
systemPrompt: '你是 SpecCore 风险评估专家。你的职责是评估任务执行中的技术风险和依赖风险,参考 RISK.md 和 .issues.md。输出格式:风险评估报告。',
|
|
142
|
+
defaultContextType: 'incremental',
|
|
143
|
+
defaultContextBudget: 4000,
|
|
144
|
+
skills: ['.speccore/AGENTS/risk-assessor.md'],
|
|
145
|
+
},
|
|
146
|
+
// change 阶段(预留)
|
|
147
|
+
{
|
|
148
|
+
name: 'impact-analyst',
|
|
149
|
+
description: '影响范围分析师:变更影响分析',
|
|
150
|
+
systemPrompt: '你是 SpecCore 影响范围分析师。你的职责是分析变更对现有代码、文档、测试的影响范围,识别需要同步修改的关联模块。输出格式:影响范围分析报告。',
|
|
151
|
+
defaultContextType: 'full',
|
|
152
|
+
defaultContextBudget: 6000,
|
|
153
|
+
skills: ['.speccore/AGENTS/impact-analyst.md'],
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
name: 'regression-tester',
|
|
157
|
+
description: '回归测试专家:回归测试范围确定',
|
|
158
|
+
systemPrompt: '你是 SpecCore 回归测试专家。你的职责是根据变更内容确定回归测试范围,确保变更不会破坏已有功能。输出格式:回归测试计划。',
|
|
159
|
+
defaultContextType: 'incremental',
|
|
160
|
+
defaultContextBudget: 4000,
|
|
161
|
+
skills: ['.speccore/AGENTS/regression-tester.md'],
|
|
162
|
+
},
|
|
163
|
+
// pr 阶段(预留)
|
|
164
|
+
{
|
|
165
|
+
name: 'code-reviewer',
|
|
166
|
+
description: '代码审查员:代码质量、可读性、可维护性',
|
|
167
|
+
systemPrompt: '你是 SpecCore 代码审查员。你的职责是审查代码质量、可读性、可维护性,检查是否符合项目编码规范。输出格式:代码审查报告。',
|
|
168
|
+
defaultContextType: 'incremental',
|
|
169
|
+
defaultContextBudget: 6000,
|
|
170
|
+
skills: ['.speccore/AGENTS/code-reviewer.md'],
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
name: 'test-reviewer',
|
|
174
|
+
description: '测试审查员:测试完整性审查',
|
|
175
|
+
systemPrompt: '你是 SpecCore 测试审查员。你的职责是审查测试代码的完整性和有效性,确保测试覆盖所有场景。输出格式:测试审查报告。',
|
|
176
|
+
defaultContextType: 'incremental',
|
|
177
|
+
defaultContextBudget: 4000,
|
|
178
|
+
skills: ['.speccore/AGENTS/test-reviewer.md'],
|
|
179
|
+
},
|
|
180
|
+
];
|
|
181
|
+
// ═══════════════════════════════════════════════════════════
|
|
182
|
+
// HeadlessAdapter — 基于文件/状态机的子 Agent 模拟
|
|
183
|
+
// ═══════════════════════════════════════════════════════════
|
|
184
|
+
class HeadlessAdapter {
|
|
185
|
+
constructor() {
|
|
186
|
+
this.registry = new Map(subagentRegistry);
|
|
187
|
+
// 注册默认子 Agent
|
|
188
|
+
for (const config of DEFAULT_SUBAGENTS) {
|
|
189
|
+
if (!this.registry.has(config.name)) {
|
|
190
|
+
this.registry.set(config.name, config);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
getMode() {
|
|
195
|
+
return 'headless';
|
|
196
|
+
}
|
|
197
|
+
registerSubagent(name, config) {
|
|
198
|
+
this.registry.set(name, config);
|
|
199
|
+
logger_1.logger.debug(`[AgentAdapter] 注册子 Agent: ${name}`);
|
|
200
|
+
}
|
|
201
|
+
getSubagentConfig(name) {
|
|
202
|
+
return this.registry.get(name);
|
|
203
|
+
}
|
|
204
|
+
/** 准备子 Agent 的紧凑上下文 */
|
|
205
|
+
async prepareContext(ctx) {
|
|
206
|
+
const config = this.registry.get(ctx.subagent);
|
|
207
|
+
const lines = [];
|
|
208
|
+
// 1. 子 Agent 角色定义
|
|
209
|
+
if (config) {
|
|
210
|
+
lines.push(`## 🤖 子 Agent: ${config.name}`);
|
|
211
|
+
lines.push(`> ${config.description}`);
|
|
212
|
+
lines.push('');
|
|
213
|
+
lines.push('### 角色定义');
|
|
214
|
+
lines.push(config.systemPrompt);
|
|
215
|
+
lines.push('');
|
|
216
|
+
}
|
|
217
|
+
// 2. 上下文预算提醒
|
|
218
|
+
lines.push(`### 上下文预算`);
|
|
219
|
+
lines.push(`- 可用 Token: ~${ctx.contextBudget}`);
|
|
220
|
+
lines.push(`- 加载模式: ${ctx.contextType}`);
|
|
221
|
+
lines.push('');
|
|
222
|
+
// 3. 根据 contextType 加载不同范围的上下文
|
|
223
|
+
if (ctx.contextSnapshot) {
|
|
224
|
+
lines.push('### 已完成步骤');
|
|
225
|
+
for (const step of ctx.contextSnapshot.completedSteps) {
|
|
226
|
+
lines.push(`- ✅ ${step}`);
|
|
227
|
+
}
|
|
228
|
+
lines.push('');
|
|
229
|
+
if (ctx.contextSnapshot.completedOutputs.length > 0) {
|
|
230
|
+
lines.push('### 已完成产出(文件路径)');
|
|
231
|
+
for (const output of ctx.contextSnapshot.completedOutputs) {
|
|
232
|
+
lines.push(`- 📄 ${output}`);
|
|
233
|
+
}
|
|
234
|
+
lines.push('');
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// 4. 增量模式下只加载路径引用
|
|
238
|
+
if (ctx.contextType === 'incremental') {
|
|
239
|
+
lines.push('> 💡 增量模式:已完成的产出文件已在上方列出,需要时按需 Read,不要全文加载到上下文中。');
|
|
240
|
+
lines.push('');
|
|
241
|
+
}
|
|
242
|
+
// 5. platform-only 模式下提示只加载当前端
|
|
243
|
+
if (ctx.contextType === 'platform-only' && ctx.platform) {
|
|
244
|
+
lines.push(`> 💡 平台隔离模式:只加载 ${ctx.platform} 端的规格,其他端的内容通过文件路径引用。`);
|
|
245
|
+
lines.push('');
|
|
246
|
+
}
|
|
247
|
+
// 6. contract-only 模式下提示只加载契约
|
|
248
|
+
if (ctx.contextType === 'contract-only') {
|
|
249
|
+
lines.push('> 💡 契约模式:只加载跨端 API 契约,不涉及具体实现细节。');
|
|
250
|
+
lines.push('');
|
|
251
|
+
}
|
|
252
|
+
// 7. v8.3.160+: 按角色裁剪上下文 —— 告诉 AI 哪些文件需要全文读取,哪些只需路径引用
|
|
253
|
+
lines.push('### 上下文裁剪策略');
|
|
254
|
+
const roleHints = {
|
|
255
|
+
'product-analyst': [
|
|
256
|
+
'📖 **全文读取**:迭代目录 010-requirements/ 下的所有需求文档',
|
|
257
|
+
'📖 **全文读取**:已有的 CLARIFY_REPORT.md(如有)',
|
|
258
|
+
'🔗 **路径引用**:020-specs/ 下的已有规格(按需 Read)',
|
|
259
|
+
'❌ **不加载**:代码实现、构建配置、测试用例',
|
|
260
|
+
],
|
|
261
|
+
'interaction-designer': [
|
|
262
|
+
'📖 **全文读取**:需求文档中的交互流程、页面描述',
|
|
263
|
+
'📖 **全文读取**:原型图文件(010-requirements/prototypes/)',
|
|
264
|
+
'🔗 **路径引用**:技术栈交互约束(.speccore/RULES/frontend-*.md)',
|
|
265
|
+
'❌ **不加载**:后端 API 实现细节、数据库设计',
|
|
266
|
+
],
|
|
267
|
+
'security-reviewer': [
|
|
268
|
+
'📖 **全文读取**:安全规则(.speccore/RULES/security.md)',
|
|
269
|
+
ctx.contextType === 'incremental'
|
|
270
|
+
? '📖 **全文读取**:当前代码实现(重点检查输入验证、认证授权)'
|
|
271
|
+
: '📖 **全文读取**:需求文档中的安全相关描述',
|
|
272
|
+
'🔗 **路径引用**:OWASP 检查清单',
|
|
273
|
+
],
|
|
274
|
+
'compiler': [
|
|
275
|
+
'📖 **全文读取**:新生成的代码文件',
|
|
276
|
+
'📖 **全文读取**:构建配置文件(tsconfig.json / pom.xml / build.gradle 等)',
|
|
277
|
+
'🔗 **路径引用**:技术栈编译规则(.speccore/RULES/{技术栈}.md)',
|
|
278
|
+
'❌ **不加载**:需求文档、测试用例',
|
|
279
|
+
],
|
|
280
|
+
'test-engineer': [
|
|
281
|
+
'📖 **全文读取**:代码实现(重点检查可测试性)',
|
|
282
|
+
'📖 **全文读取**:TEST.md 中的测试用例',
|
|
283
|
+
'📖 **全文读取**:覆盖率报告(如有)',
|
|
284
|
+
'🔗 **路径引用**:技术栈测试规范',
|
|
285
|
+
],
|
|
286
|
+
'performance-expert': [
|
|
287
|
+
'📖 **全文读取**:代码实现(重点检查数据库查询、循环、渲染)',
|
|
288
|
+
'📖 **全文读取**:性能基准数据(如有)',
|
|
289
|
+
'🔗 **路径引用**:技术栈性能规范',
|
|
290
|
+
'❌ **不加载**:需求文档全文',
|
|
291
|
+
],
|
|
292
|
+
'doc-sync-agent': [
|
|
293
|
+
'📖 **全文读取**:代码中的 API 定义、注释',
|
|
294
|
+
'📖 **全文读取**:文档中的 API 规格',
|
|
295
|
+
'🔗 **路径引用**:技术栈文档格式规范',
|
|
296
|
+
'❌ **不加载**:测试用例、性能数据',
|
|
297
|
+
],
|
|
298
|
+
'spec-analyzer': [
|
|
299
|
+
'📖 **全文读取**:需求文档、跨端契约',
|
|
300
|
+
'📖 **全文读取**:CONSTITUTION.md(命名规范、端名标准)',
|
|
301
|
+
'🔗 **路径引用**:已有端的规格(参考但不全文加载)',
|
|
302
|
+
],
|
|
303
|
+
'spec-executor': [
|
|
304
|
+
'📖 **全文读取**:TASK.md、TECH.md',
|
|
305
|
+
'📖 **全文读取**:结构化代码事实卡片(匹配相关部分)',
|
|
306
|
+
'🔗 **路径引用**:已有代码文件(按需 Read,不全文加载)',
|
|
307
|
+
],
|
|
308
|
+
'task-decomposer': [
|
|
309
|
+
'📖 **全文读取**:需求文档全文(010-requirements/)',
|
|
310
|
+
'📖 **全文读取**:功能模块清单',
|
|
311
|
+
'🔗 **路径引用**:端列表(CONSTITUTION.md)',
|
|
312
|
+
],
|
|
313
|
+
'dependency-analyst': [
|
|
314
|
+
'📖 **全文读取**:任务列表、需求文档中的依赖描述',
|
|
315
|
+
'🔗 **路径引用**:已有代码的模块结构',
|
|
316
|
+
],
|
|
317
|
+
'code-reviewer': [
|
|
318
|
+
'📖 **全文读取**:代码变更(diff)',
|
|
319
|
+
'📖 **全文读取**:编码规范(.speccore/RULES/{技术栈}.md)',
|
|
320
|
+
'🔗 **路径引用**:需求文档(按需确认)',
|
|
321
|
+
],
|
|
322
|
+
'test-reviewer': [
|
|
323
|
+
'📖 **全文读取**:测试代码',
|
|
324
|
+
'📖 **全文读取**:测试规范(.speccore/RULES/testing.md)',
|
|
325
|
+
'🔗 **路径引用**:被测代码文件',
|
|
326
|
+
],
|
|
327
|
+
'impact-analyst': [
|
|
328
|
+
'📖 **全文读取**:变更内容、依赖图谱',
|
|
329
|
+
'🔗 **路径引用**:模块结构文档',
|
|
330
|
+
],
|
|
331
|
+
'regression-tester': [
|
|
332
|
+
'📖 **全文读取**:变更内容、测试策略',
|
|
333
|
+
'🔗 **路径引用**:已有测试用例',
|
|
334
|
+
],
|
|
335
|
+
};
|
|
336
|
+
const hints = roleHints[ctx.subagent];
|
|
337
|
+
if (hints) {
|
|
338
|
+
for (const hint of hints) {
|
|
339
|
+
lines.push(`- ${hint}`);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
lines.push('- 按上下文类型默认加载');
|
|
344
|
+
}
|
|
345
|
+
lines.push('');
|
|
346
|
+
return lines.join('\n');
|
|
347
|
+
}
|
|
348
|
+
/** 构建子 Agent 激活标记 */
|
|
349
|
+
buildActivationPrompt(ctx, nextPrompt) {
|
|
350
|
+
const config = this.registry.get(ctx.subagent);
|
|
351
|
+
const lines = [];
|
|
352
|
+
lines.push(`[SPECCORE_SUBAGENT: ${ctx.subagent}]`);
|
|
353
|
+
if (config) {
|
|
354
|
+
lines.push(`[SPECCORE_SUBAGENT_DESC: ${config.description}]`);
|
|
355
|
+
}
|
|
356
|
+
lines.push(`[SPECCORE_CONTEXT_BUDGET: ${ctx.contextBudget}]`);
|
|
357
|
+
lines.push(`[SPECCORE_CONTEXT_TYPE: ${ctx.contextType}]`);
|
|
358
|
+
lines.push('');
|
|
359
|
+
lines.push('--- 子 Agent 上下文 ---');
|
|
360
|
+
lines.push('');
|
|
361
|
+
return lines.join('\n');
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
exports.HeadlessAdapter = HeadlessAdapter;
|
|
365
|
+
// ═══════════════════════════════════════════════════════════
|
|
366
|
+
// QoderSdkAdapter — Qoder SDK 深度集成(预留接口)
|
|
367
|
+
// ═══════════════════════════════════════════════════════════
|
|
368
|
+
class QoderSdkAdapter {
|
|
369
|
+
// private sdkClient: any; // Qoder SDK 客户端(运行时动态加载)
|
|
370
|
+
constructor() {
|
|
371
|
+
this.registry = new Map(subagentRegistry);
|
|
372
|
+
for (const config of DEFAULT_SUBAGENTS) {
|
|
373
|
+
if (!this.registry.has(config.name)) {
|
|
374
|
+
this.registry.set(config.name, config);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
getMode() {
|
|
379
|
+
return 'qoder-sdk';
|
|
380
|
+
}
|
|
381
|
+
registerSubagent(name, config) {
|
|
382
|
+
this.registry.set(name, config);
|
|
383
|
+
}
|
|
384
|
+
getSubagentConfig(name) {
|
|
385
|
+
return this.registry.get(name);
|
|
386
|
+
}
|
|
387
|
+
async prepareContext(ctx) {
|
|
388
|
+
// TODO: 通过 Qoder SDK 创建子 Agent,传递 systemPrompt 和上下文
|
|
389
|
+
// 当前回退到 Headless 实现
|
|
390
|
+
logger_1.logger.warn('[QoderSdkAdapter] SDK 未初始化,回退到 Headless 模式');
|
|
391
|
+
const headless = new HeadlessAdapter();
|
|
392
|
+
return headless.prepareContext(ctx);
|
|
393
|
+
}
|
|
394
|
+
buildActivationPrompt(ctx, nextPrompt) {
|
|
395
|
+
// TODO: 调用 Qoder SDK 创建子 Agent 并触发执行
|
|
396
|
+
// 当前回退到 Headless 实现
|
|
397
|
+
const headless = new HeadlessAdapter();
|
|
398
|
+
return headless.buildActivationPrompt(ctx, nextPrompt);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
exports.QoderSdkAdapter = QoderSdkAdapter;
|
|
402
|
+
// ═══════════════════════════════════════════════════════════
|
|
403
|
+
// 工厂函数
|
|
404
|
+
// ═══════════════════════════════════════════════════════════
|
|
405
|
+
function createAgentAdapter(mode) {
|
|
406
|
+
const envMode = process.env.SPECCORE_AGENT_MODE;
|
|
407
|
+
const effectiveMode = mode || envMode || 'headless';
|
|
408
|
+
if (effectiveMode === 'qoder-sdk') {
|
|
409
|
+
// 检查 Qoder SDK 是否可用
|
|
410
|
+
try {
|
|
411
|
+
// require('@qoder/sdk'); // 运行时检查
|
|
412
|
+
logger_1.logger.info('[AgentAdapter] 使用 Qoder SDK 模式');
|
|
413
|
+
return new QoderSdkAdapter();
|
|
414
|
+
}
|
|
415
|
+
catch {
|
|
416
|
+
logger_1.logger.warn('[AgentAdapter] Qoder SDK 不可用,回退到 Headless 模式');
|
|
417
|
+
return new HeadlessAdapter();
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
logger_1.logger.debug('[AgentAdapter] 使用 Headless 模式');
|
|
421
|
+
return new HeadlessAdapter();
|
|
422
|
+
}
|
|
423
|
+
// 默认导出 HeadlessAdapter(向后兼容)
|
|
424
|
+
exports.defaultAdapter = new HeadlessAdapter();
|
|
425
|
+
//# sourceMappingURL=agent-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-adapter.js","sourceRoot":"","sources":["../../src/core/agent-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-engine.d.ts","sourceRoot":"","sources":["../../src/core/ask-engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,aAAa;AACb,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC;AAE/E,aAAa;AACb,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,kBAAkB;AAClB,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kBAAkB;AAClB,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,aAAa;AACb,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACjE;AAED,eAAe;AACf,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAMD,QAAA,MAAM,UAAU,EAAE,gBAAgB,EAwEjC,CAAC;AA8EF,QAAA,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"ask-engine.d.ts","sourceRoot":"","sources":["../../src/core/ask-engine.ts"],"names":[],"mappings":"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"}
|
package/dist/core/ask-engine.js
CHANGED
|
@@ -229,6 +229,25 @@ const WORKFLOWS = {
|
|
|
229
229
|
{ order: 2, command: 'analyze', args: '--audit', explanation: '深度审计分析', dependsOn: 1 },
|
|
230
230
|
{ order: 3, command: 'pr', args: '--auto', explanation: '生成 PR 审查', dependsOn: 2 },
|
|
231
231
|
],
|
|
232
|
+
// v8.3.160+: 常见复合意图工作流
|
|
233
|
+
'analyze-split': [
|
|
234
|
+
{ order: 1, command: 'analyze', args: '--iteration {iteration}', explanation: 'AI 分析需求,生成各端规格文档', dependsOn: undefined },
|
|
235
|
+
{ order: 2, command: 'split', args: '--iteration {iteration}', explanation: '将分析结果拆分为独立开发任务', dependsOn: 1 },
|
|
236
|
+
],
|
|
237
|
+
'analyze-split-plan': [
|
|
238
|
+
{ order: 1, command: 'analyze', args: '--iteration {iteration}', explanation: 'AI 分析需求,生成各端规格文档', dependsOn: undefined },
|
|
239
|
+
{ order: 2, command: 'split', args: '--iteration {iteration}', explanation: '将分析结果拆分为独立开发任务', dependsOn: 1 },
|
|
240
|
+
{ order: 3, command: 'plan', args: '--all', explanation: '生成任务执行计划,确定优先级和依赖', dependsOn: 2 },
|
|
241
|
+
],
|
|
242
|
+
'plan-execute': [
|
|
243
|
+
{ order: 1, command: 'plan', args: '--all', explanation: '生成任务执行计划,确定优先级和依赖', dependsOn: undefined },
|
|
244
|
+
{ order: 2, command: 'execute', args: '--auto', explanation: '按计划依次执行开发任务', dependsOn: 1 },
|
|
245
|
+
],
|
|
246
|
+
'analyze-plan-execute': [
|
|
247
|
+
{ order: 1, command: 'analyze', args: '--iteration {iteration}', explanation: 'AI 分析需求,生成各端规格文档', dependsOn: undefined },
|
|
248
|
+
{ order: 2, command: 'plan', args: '--all', explanation: '生成任务执行计划,确定优先级和依赖', dependsOn: 1 },
|
|
249
|
+
{ order: 3, command: 'execute', args: '--auto', explanation: '按计划依次执行开发任务', dependsOn: 2 },
|
|
250
|
+
],
|
|
232
251
|
};
|
|
233
252
|
exports.WORKFLOWS = WORKFLOWS;
|
|
234
253
|
// ============================================================
|
|
@@ -804,10 +823,13 @@ function handlePipeline(input) {
|
|
|
804
823
|
});
|
|
805
824
|
// ── 意图得分系统(替代硬关键词匹配,模拟语义理解)──
|
|
806
825
|
// 得分 = 维度加权,而非单关键词触发
|
|
826
|
+
// v8.3.160+: 增加复合意图维度
|
|
807
827
|
const scores = {
|
|
808
828
|
batchExec: 0,
|
|
809
829
|
newFeature: 0,
|
|
810
830
|
auto: 0,
|
|
831
|
+
analyzeSplit: 0,
|
|
832
|
+
planExecute: 0,
|
|
811
833
|
};
|
|
812
834
|
// 维度1: 动作词
|
|
813
835
|
const actionWords = [
|
|
@@ -816,6 +838,9 @@ function handlePipeline(input) {
|
|
|
816
838
|
[/(?:执行|跑|运行|execute|run)/, 10, 'batchExec'],
|
|
817
839
|
[/(?:实现|动手|做|开发|feature|新.*功能|新.*模块)/, 40, 'newFeature'],
|
|
818
840
|
[/(?:自主|自动|一键|不用确认|直接|全部.*执行|全自动)/, 30, 'auto'],
|
|
841
|
+
// v8.3.160+: 复合意图动作词
|
|
842
|
+
[/(?:分析.*拆分|拆分.*任务|分析.*然后.*拆分|先分析.*再拆分)/, 40, 'analyzeSplit'],
|
|
843
|
+
[/(?:计划.*执行|排程.*执行|先计划.*再执行|分析.*计划.*执行)/, 40, 'planExecute'],
|
|
819
844
|
];
|
|
820
845
|
for (const [re, wt, key] of actionWords) {
|
|
821
846
|
if (re.test(lower))
|
|
@@ -830,11 +855,20 @@ function handlePipeline(input) {
|
|
|
830
855
|
scores.auto += 20;
|
|
831
856
|
if (/先看|先列|先.*看|预览|看看|再说|然后|再.*执行/.test(lower))
|
|
832
857
|
scores.auto -= 30; // 说明想要交互
|
|
858
|
+
// v8.3.160+: 复合意图上下文词
|
|
859
|
+
if (/分析|analyze|audit|审计/.test(lower) && /拆分|split|task|任务/.test(lower))
|
|
860
|
+
scores.analyzeSplit += 20;
|
|
861
|
+
if (/计划|plan|排程/.test(lower) && /执行|execute|跑|运行/.test(lower))
|
|
862
|
+
scores.planExecute += 20;
|
|
863
|
+
if (/分析|analyze/.test(lower) && /计划|plan/.test(lower) && /执行|execute/.test(lower))
|
|
864
|
+
scores.planExecute += 15;
|
|
833
865
|
// 维度3: 复杂度 — 只要有一点不确定,必须确认
|
|
834
866
|
// 触发复杂度 = 任何多步骤/定时/多任务/审查/修改 的信号
|
|
835
867
|
const isComplex = (
|
|
836
868
|
// 计划+执行 组合
|
|
837
869
|
(/计划|plan|安排|排程/.test(lower) && /执行|跑|execute/.test(lower)) ||
|
|
870
|
+
// 分析+拆分 组合
|
|
871
|
+
(/分析|analyze|审计/.test(lower) && /拆分|split|任务|task/.test(lower)) ||
|
|
838
872
|
// 时间调度
|
|
839
873
|
/定时|指定时间|几点|晚.*点|早上.*点|明天.*点|到.*点|稍后|一会/.test(lower) ||
|
|
840
874
|
// 审查/测试/安全 任务
|
|
@@ -855,6 +889,8 @@ function handlePipeline(input) {
|
|
|
855
889
|
if (/别|不要|不.*执行|先别|取消/.test(lower)) {
|
|
856
890
|
scores.batchExec = 0;
|
|
857
891
|
scores.auto = 0;
|
|
892
|
+
scores.analyzeSplit = 0;
|
|
893
|
+
scores.planExecute = 0;
|
|
858
894
|
}
|
|
859
895
|
// 判断:batchExec 最高 → 批量流程
|
|
860
896
|
const hasAuto = scores.auto > 0;
|
|
@@ -875,6 +911,30 @@ function handlePipeline(input) {
|
|
|
875
911
|
pipeline: { steps, input, confirm: needConfirm },
|
|
876
912
|
};
|
|
877
913
|
}
|
|
914
|
+
// v8.3.160+: 匹配 analyze-split 复合意图
|
|
915
|
+
if (scores.analyzeSplit >= 40) {
|
|
916
|
+
const steps = WORKFLOWS['analyze-split-plan'];
|
|
917
|
+
return {
|
|
918
|
+
mode: 'pipeline',
|
|
919
|
+
summary: `已编排「分析→拆分→计划」流程(${steps.length} 步)`,
|
|
920
|
+
detail: buildPipelineDetail(steps, input),
|
|
921
|
+
commands: steps.map(s => s.command),
|
|
922
|
+
pipeline: { steps, input, confirm: true },
|
|
923
|
+
};
|
|
924
|
+
}
|
|
925
|
+
// v8.3.160+: 匹配 plan-execute 复合意图
|
|
926
|
+
if (scores.planExecute >= 40) {
|
|
927
|
+
const hasAnalyze = /分析|analyze|审计|audit/.test(lower);
|
|
928
|
+
const wfName = hasAnalyze ? 'analyze-plan-execute' : 'plan-execute';
|
|
929
|
+
const steps = WORKFLOWS[wfName];
|
|
930
|
+
return {
|
|
931
|
+
mode: 'pipeline',
|
|
932
|
+
summary: `已编排「${hasAnalyze ? '分析→' : ''}计划→执行」流程(${steps.length} 步)`,
|
|
933
|
+
detail: buildPipelineDetail(steps, input),
|
|
934
|
+
commands: steps.map(s => s.command),
|
|
935
|
+
pipeline: { steps, input, confirm: true },
|
|
936
|
+
};
|
|
937
|
+
}
|
|
878
938
|
// 匹配新功能流程(得分系统)
|
|
879
939
|
if (scores.newFeature >= 40) {
|
|
880
940
|
const steps = WORKFLOWS['new feature'];
|