speccore 8.3.159 → 8.3.160

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.
@@ -0,0 +1,81 @@
1
+ /**
2
+ * AgentAdapter — 子 Agent 统一适配层
3
+ *
4
+ * v8.3.160+: 实现子 Agent 隔离,解决上下文漂移问题。
5
+ * 每个 Pipeline 步骤可以指定 subagent,由适配层负责:
6
+ * 1. 准备该 subagent 所需的紧凑上下文
7
+ * 2. 控制上下文大小(Token 预算)
8
+ * 3. 输出子 Agent 激活标记和指令
9
+ *
10
+ * 适配模式:
11
+ * - Headless: 基于文件/状态机模拟子 Agent(默认,无需 SDK)
12
+ * - QoderSdk: 通过 Qoder SDK API 创建独立子 Agent(预留接口)
13
+ */
14
+ import { ContextSnapshot } from './pipeline-engine';
15
+ export interface AgentContext {
16
+ /** 子 Agent 名称 */
17
+ subagent: string;
18
+ /** 迭代名 */
19
+ iteration: string;
20
+ /** 任务 ID */
21
+ task?: string;
22
+ /** 端名 */
23
+ platform?: string;
24
+ /** 上下文快照 */
25
+ contextSnapshot?: ContextSnapshot;
26
+ /** 上下文预算(tokens) */
27
+ contextBudget: number;
28
+ /** 上下文加载类型 */
29
+ contextType: 'full' | 'incremental' | 'platform-only' | 'contract-only';
30
+ /** 工作区根目录 */
31
+ cwd: string;
32
+ }
33
+ export interface SubagentConfig {
34
+ /** 子 Agent 标识名 */
35
+ name: string;
36
+ /** 职责描述 */
37
+ description: string;
38
+ /** 系统级 Prompt(角色定义) */
39
+ systemPrompt: string;
40
+ /** 默认上下文类型 */
41
+ defaultContextType: 'full' | 'incremental' | 'platform-only' | 'contract-only';
42
+ /** 默认 Token 预算 */
43
+ defaultContextBudget: number;
44
+ /** 关联技能文件路径 */
45
+ skills: string[];
46
+ }
47
+ export interface AgentAdapter {
48
+ /** 注册子 Agent 配置 */
49
+ registerSubagent(name: string, config: SubagentConfig): void;
50
+ /** 根据 subagent 名获取配置 */
51
+ getSubagentConfig(name: string): SubagentConfig | undefined;
52
+ /** 准备子 Agent 的紧凑上下文文本 */
53
+ prepareContext(ctx: AgentContext): Promise<string>;
54
+ /** 构建子 Agent 激活标记和指令 */
55
+ buildActivationPrompt(ctx: AgentContext, nextPrompt: string): string;
56
+ /** 获取支持的适配模式 */
57
+ getMode(): 'headless' | 'qoder-sdk';
58
+ }
59
+ export declare class HeadlessAdapter implements AgentAdapter {
60
+ private registry;
61
+ constructor();
62
+ getMode(): 'headless' | 'qoder-sdk';
63
+ registerSubagent(name: string, config: SubagentConfig): void;
64
+ getSubagentConfig(name: string): SubagentConfig | undefined;
65
+ /** 准备子 Agent 的紧凑上下文 */
66
+ prepareContext(ctx: AgentContext): Promise<string>;
67
+ /** 构建子 Agent 激活标记 */
68
+ buildActivationPrompt(ctx: AgentContext, nextPrompt: string): string;
69
+ }
70
+ export declare class QoderSdkAdapter implements AgentAdapter {
71
+ private registry;
72
+ constructor();
73
+ getMode(): 'headless' | 'qoder-sdk';
74
+ registerSubagent(name: string, config: SubagentConfig): void;
75
+ getSubagentConfig(name: string): SubagentConfig | undefined;
76
+ prepareContext(ctx: AgentContext): Promise<string>;
77
+ buildActivationPrompt(ctx: AgentContext, nextPrompt: string): string;
78
+ }
79
+ export declare function createAgentAdapter(mode?: 'headless' | 'qoder-sdk'): AgentAdapter;
80
+ export declare const defaultAdapter: HeadlessAdapter;
81
+ //# sourceMappingURL=agent-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-adapter.d.ts","sourceRoot":"","sources":["../../src/core/agent-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIpD,MAAM,WAAW,YAAY;IAC3B,iBAAiB;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS;IACT,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY;IACZ,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,oBAAoB;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc;IACd,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,eAAe,GAAG,eAAe,CAAC;IACxE,aAAa;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAGD,MAAM,WAAW,cAAc;IAC7B,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc;IACd,kBAAkB,EAAE,MAAM,GAAG,aAAa,GAAG,eAAe,GAAG,eAAe,CAAC;IAC/E,kBAAkB;IAClB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAGD,MAAM,WAAW,YAAY;IAC3B,mBAAmB;IACnB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7D,wBAAwB;IACxB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IAC5D,yBAAyB;IACzB,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,wBAAwB;IACxB,qBAAqB,CAAC,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IACrE,gBAAgB;IAChB,OAAO,IAAI,UAAU,GAAG,WAAW,CAAC;CACrC;AA0KD,qBAAa,eAAgB,YAAW,YAAY;IAClD,OAAO,CAAC,QAAQ,CAA8B;;IAY9C,OAAO,IAAI,UAAU,GAAG,WAAW;IAInC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAK5D,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI3D,uBAAuB;IACjB,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAyJxD,qBAAqB;IACrB,qBAAqB,CAAC,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;CAgBrE;AAMD,qBAAa,eAAgB,YAAW,YAAY;IAClD,OAAO,CAAC,QAAQ,CAA8B;;IAY9C,OAAO,IAAI,UAAU,GAAG,WAAW;IAInC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAI5D,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIrD,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAQxD,qBAAqB,CAAC,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;CAMrE;AAMD,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,YAAY,CAkBhF;AAGD,eAAO,MAAM,cAAc,iBAAwB,CAAC"}
@@ -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":";AAAA;;;;;;;;;;;;GAYG;;;AAydH,gDAkBC;AAteD,4CAAyC;AAoDzC,sBAAsB;AACtB,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA0B,CAAC;AAE3D,yCAAyC;AACzC,MAAM,iBAAiB,GAAqB;IAC1C,uBAAuB;IACvB;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,yBAAyB;QACtC,YAAY,EAAE,uEAAuE;QACrF,kBAAkB,EAAE,MAAM;QAC1B,oBAAoB,EAAE,IAAI;QAC1B,MAAM,EAAE,CAAC,qCAAqC,CAAC;KAChD;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,wBAAwB;QACrC,YAAY,EAAE,2EAA2E;QACzF,kBAAkB,EAAE,MAAM;QAC1B,oBAAoB,EAAE,IAAI;QAC1B,MAAM,EAAE,CAAC,0CAA0C,CAAC;KACrD;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,sBAAsB;QACnC,YAAY,EAAE,qEAAqE;QACnF,kBAAkB,EAAE,MAAM;QAC1B,oBAAoB,EAAE,IAAI;QAC1B,MAAM,EAAE,CAAC,uCAAuC,CAAC;KAClD;IACD,aAAa;IACb;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,uBAAuB;QACpC,YAAY,EAAE,sGAAsG;QACpH,kBAAkB,EAAE,eAAe;QACnC,6BAA6B;QAC7B,oBAAoB,EAAE,KAAK;QAC3B,MAAM,EAAE,CAAC,6CAA6C,EAAE,8CAA8C,CAAC;KACxG;IACD,aAAa;IACb;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,uBAAuB;QACpC,YAAY,EAAE,8GAA8G;QAC5H,kBAAkB,EAAE,aAAa;QACjC,oBAAoB,EAAE,KAAK;QAC3B,MAAM,EAAE,CAAC,6BAA6B,CAAC;KACxC;IACD,4BAA4B;IAC5B,8DAA8D;IAC9D;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,qBAAqB;QAClC,YAAY,EAAE,6GAA6G;QAC3H,kBAAkB,EAAE,aAAa;QACjC,oBAAoB,EAAE,IAAI;QAC1B,MAAM,EAAE,CAAC,8BAA8B,EAAE,mCAAmC,CAAC;KAC9E;IACD,0EAA0E;IAC1E;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,sBAAsB;QACnC,YAAY,EAAE,kHAAkH;QAChI,kBAAkB,EAAE,aAAa;QACjC,oBAAoB,EAAE,IAAI;QAC1B,MAAM,EAAE,CAAC,uCAAuC,EAAE,wCAAwC,CAAC;KAC5F;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,kBAAkB;QAC/B,YAAY,EAAE,6EAA6E;QAC3F,kBAAkB,EAAE,aAAa;QACjC,oBAAoB,EAAE,IAAI;QAC1B,MAAM,EAAE,CAAC,oCAAoC,CAAC;KAC/C;IACD,WAAW;IACX;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,uBAAuB;QACpC,YAAY,EAAE,gFAAgF;QAC9F,kBAAkB,EAAE,MAAM;QAC1B,oBAAoB,EAAE,IAAI;QAC1B,MAAM,EAAE,CAAC,qCAAqC,CAAC;KAChD;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,sBAAsB;QACnC,YAAY,EAAE,0EAA0E;QACxF,kBAAkB,EAAE,aAAa;QACjC,oBAAoB,EAAE,IAAI;QAC1B,MAAM,EAAE,CAAC,wCAAwC,CAAC;KACnD;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,eAAe;QAC5B,YAAY,EAAE,4DAA4D;QAC1E,kBAAkB,EAAE,aAAa;QACjC,oBAAoB,EAAE,IAAI;QAC1B,MAAM,EAAE,EAAE;KACX;IACD,oBAAoB;IACpB;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,yBAAyB;QACtC,YAAY,EAAE,qFAAqF;QACnG,kBAAkB,EAAE,MAAM;QAC1B,6BAA6B;QAC7B,oBAAoB,EAAE,KAAK;QAC3B,MAAM,EAAE,CAAC,oCAAoC,CAAC;KAC/C;IACD,cAAc;IACd;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,kBAAkB;QAC/B,YAAY,EAAE,kEAAkE;QAChF,kBAAkB,EAAE,MAAM;QAC1B,oBAAoB,EAAE,IAAI;QAC1B,MAAM,EAAE,CAAC,sCAAsC,CAAC;KACjD;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,oBAAoB;QACjC,YAAY,EAAE,gFAAgF;QAC9F,kBAAkB,EAAE,aAAa;QACjC,oBAAoB,EAAE,IAAI;QAC1B,MAAM,EAAE,CAAC,mCAAmC,CAAC;KAC9C;IACD,gBAAgB;IAChB;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,gBAAgB;QAC7B,YAAY,EAAE,4EAA4E;QAC1F,kBAAkB,EAAE,MAAM;QAC1B,oBAAoB,EAAE,IAAI;QAC1B,MAAM,EAAE,CAAC,oCAAoC,CAAC;KAC/C;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,iBAAiB;QAC9B,YAAY,EAAE,kEAAkE;QAChF,kBAAkB,EAAE,aAAa;QACjC,oBAAoB,EAAE,IAAI;QAC1B,MAAM,EAAE,CAAC,uCAAuC,CAAC;KAClD;IACD,YAAY;IACZ;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,qBAAqB;QAClC,YAAY,EAAE,kEAAkE;QAChF,kBAAkB,EAAE,aAAa;QACjC,oBAAoB,EAAE,IAAI;QAC1B,MAAM,EAAE,CAAC,mCAAmC,CAAC;KAC9C;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,eAAe;QAC5B,YAAY,EAAE,+DAA+D;QAC7E,kBAAkB,EAAE,aAAa;QACjC,oBAAoB,EAAE,IAAI;QAC1B,MAAM,EAAE,CAAC,mCAAmC,CAAC;KAC9C;CACF,CAAC;AAEF,8DAA8D;AAC9D,wCAAwC;AACxC,8DAA8D;AAE9D,MAAa,eAAe;IAG1B;QACE,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC1C,cAAc;QACd,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,gBAAgB,CAAC,IAAY,EAAE,MAAsB;QACnD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAChC,eAAM,CAAC,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,iBAAiB,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,uBAAuB;IACvB,KAAK,CAAC,cAAc,CAAC,GAAiB;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,kBAAkB;QAClB,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,aAAa;QACb,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,+BAA+B;QAC/B,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC;gBACtD,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC5B,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEf,IAAI,GAAG,CAAC,eAAe,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC9B,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC;oBAC1D,KAAK,CAAC,IAAI,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC;gBAC/B,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,IAAI,GAAG,CAAC,WAAW,KAAK,aAAa,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,+BAA+B;QAC/B,IAAI,GAAG,CAAC,WAAW,KAAK,eAAe,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACxD,KAAK,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,QAAQ,uBAAuB,CAAC,CAAC;YACnE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,8BAA8B;QAC9B,IAAI,GAAG,CAAC,WAAW,KAAK,eAAe,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,sDAAsD;QACtD,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,MAAM,SAAS,GAA6B;YAC1C,iBAAiB,EAAE;gBACjB,6CAA6C;gBAC7C,uCAAuC;gBACvC,wCAAwC;gBACxC,0BAA0B;aAC3B;YACD,sBAAsB,EAAE;gBACtB,6BAA6B;gBAC7B,iDAAiD;gBACjD,oDAAoD;gBACpD,6BAA6B;aAC9B;YACD,mBAAmB,EAAE;gBACnB,+CAA+C;gBAC/C,GAAG,CAAC,WAAW,KAAK,aAAa;oBAC/B,CAAC,CAAC,mCAAmC;oBACrC,CAAC,CAAC,0BAA0B;gBAC9B,wBAAwB;aACzB;YACD,UAAU,EAAE;gBACV,sBAAsB;gBACtB,8DAA8D;gBAC9D,+CAA+C;gBAC/C,qBAAqB;aACtB;YACD,eAAe,EAAE;gBACf,4BAA4B;gBAC5B,4BAA4B;gBAC5B,uBAAuB;gBACvB,qBAAqB;aACtB;YACD,oBAAoB,EAAE;gBACpB,mCAAmC;gBACnC,wBAAwB;gBACxB,qBAAqB;gBACrB,kBAAkB;aACnB;YACD,gBAAgB,EAAE;gBAChB,4BAA4B;gBAC5B,yBAAyB;gBACzB,uBAAuB;gBACvB,qBAAqB;aACtB;YACD,eAAe,EAAE;gBACf,uBAAuB;gBACvB,wCAAwC;gBACxC,8BAA8B;aAC/B;YACD,eAAe,EAAE;gBACf,6BAA6B;gBAC7B,+BAA+B;gBAC/B,mCAAmC;aACpC;YACD,iBAAiB,EAAE;gBACjB,uCAAuC;gBACvC,oBAAoB;gBACpB,kCAAkC;aACnC;YACD,oBAAoB,EAAE;gBACpB,6BAA6B;gBAC7B,uBAAuB;aACxB;YACD,eAAe,EAAE;gBACf,wBAAwB;gBACxB,4CAA4C;gBAC5C,wBAAwB;aACzB;YACD,eAAe,EAAE;gBACf,kBAAkB;gBAClB,8CAA8C;gBAC9C,oBAAoB;aACrB;YACD,gBAAgB,EAAE;gBAChB,uBAAuB;gBACvB,oBAAoB;aACrB;YACD,mBAAmB,EAAE;gBACnB,uBAAuB;gBACvB,oBAAoB;aACrB;SACF,CAAC;QAEF,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,qBAAqB;IACrB,qBAAqB,CAAC,GAAiB,EAAE,UAAkB;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;QACnD,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,CAAC,IAAI,CAAC,4BAA4B,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;QAChE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,6BAA6B,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,2BAA2B,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF;AArMD,0CAqMC;AAED,8DAA8D;AAC9D,yCAAyC;AACzC,8DAA8D;AAE9D,MAAa,eAAe;IAE1B,oDAAoD;IAEpD;QACE,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC1C,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,gBAAgB,CAAC,IAAY,EAAE,MAAsB;QACnD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,iBAAiB,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAiB;QACpC,oDAAoD;QACpD,oBAAoB;QACpB,eAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,qBAAqB,CAAC,GAAiB,EAAE,UAAkB;QACzD,qCAAqC;QACrC,oBAAoB;QACpB,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC,qBAAqB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACzD,CAAC;CACF;AAvCD,0CAuCC;AAED,8DAA8D;AAC9D,OAAO;AACP,8DAA8D;AAE9D,SAAgB,kBAAkB,CAAC,IAA+B;IAChE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAA2D,CAAC;IACxF,MAAM,aAAa,GAAG,IAAI,IAAI,OAAO,IAAI,UAAU,CAAC;IAEpD,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;QAClC,oBAAoB;QACpB,IAAI,CAAC;YACH,kCAAkC;YAClC,eAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAC9C,OAAO,IAAI,eAAe,EAAE,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,eAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC5D,OAAO,IAAI,eAAe,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,eAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAC9C,OAAO,IAAI,eAAe,EAAE,CAAC;AAC/B,CAAC;AAED,6BAA6B;AAChB,QAAA,cAAc,GAAG,IAAI,eAAe,EAAE,CAAC"}
@@ -10,14 +10,32 @@
10
10
  * init → phase1-prompt → (AI --apply) → phase1-done
11
11
  * → 检测多端 → phase2-prompt → (AI --apply) → done
12
12
  *
13
- * AI 侧流程:
13
+ * AI 侧流程 (v8.3.160+ 步骤隔离模式):
14
14
  * 1. 收到 Phase 1 prompt → 生成全局文档 → --apply
15
- * 2. CLI 写入文件 → 自动推进 → 输出 [SPECCORE_PIPELINE_NEXT] + Phase 2 prompt
16
- * 3. AI 看到标记 → 自动执行下一个命令 → 生成各端文档 → --apply
15
+ * 2. CLI 写入文件 → 自动推进 → 输出 [SPECCORE_STEP_DONE] + [SPECCORE_NEXT_STEP] + Phase 2 prompt
16
+ * 3. AI 在新会话中执行提示的命令 → 生成各端文档 → --apply
17
17
  * 4. CLI 写入文件 → 标记完成 → Pipeline 结束
18
18
  *
19
19
  * @since v6.68.0
20
20
  */
21
+ export interface ContextSnapshot {
22
+ /** 核心约束摘要(从 CONSTITUTION.md 提取) */
23
+ keyConstraints: string[];
24
+ /** 已完成步骤的产出文件路径 */
25
+ completedOutputs: string[];
26
+ /** 技术栈摘要 */
27
+ techStackSummary?: string;
28
+ /** 当前任务/迭代 */
29
+ currentTask?: string;
30
+ /** 当前迭代 */
31
+ iteration: string;
32
+ /** 已完成的步骤 ID 列表 */
33
+ completedSteps: string[];
34
+ /** 下一步骤 ID */
35
+ nextStep?: string;
36
+ /** 生成时间 */
37
+ generatedAt: string;
38
+ }
21
39
  export interface PipelineState {
22
40
  /** 当前步骤 */
23
41
  currentStep: string;
@@ -31,11 +49,28 @@ export interface PipelineState {
31
49
  name: string;
32
50
  /** 端列表(analyze 专用) */
33
51
  platforms?: string[];
52
+ /** v8.3.160+: 上下文快照(步骤隔离模式) */
53
+ contextSnapshot?: ContextSnapshot;
34
54
  /** 创建时间 */
35
55
  createdAt: string;
36
56
  /** 最后更新时间 */
37
57
  updatedAt: string;
38
58
  }
59
+ export interface StepResult {
60
+ nextStepId: string | null;
61
+ nextStepName: string | null;
62
+ isComplete: boolean;
63
+ /** v8.3.160+: 是否需要新会话(步骤隔离模式) */
64
+ requiresNewSession: boolean;
65
+ /** v8.3.160+: 上下文快照(供新会话恢复) */
66
+ contextSnapshot?: ContextSnapshot;
67
+ /** v8.3.160+: 推荐的 Subagent */
68
+ subagent?: string;
69
+ /** v8.3.160+: 上下文 Token 预算 */
70
+ contextBudget?: number;
71
+ /** v8.3.160+: 上下文加载类型 */
72
+ contextType?: 'full' | 'incremental' | 'platform-only' | 'contract-only';
73
+ }
39
74
  export interface PipelineStepDef {
40
75
  /** 步骤 ID */
41
76
  id: string;
@@ -45,6 +80,12 @@ export interface PipelineStepDef {
45
80
  next: string | null;
46
81
  /** 条件判断:返回 true 才执行此步骤,否则跳到 next */
47
82
  condition?: () => Promise<boolean> | boolean;
83
+ /** v8.3.160+: 该步骤使用的 Subagent 名称 */
84
+ subagent?: string;
85
+ /** v8.3.160+: 该步骤的上下文 Token 预算(默认 12000) */
86
+ contextBudget?: number;
87
+ /** v8.3.160+: 该步骤需要加载的上下文类型 */
88
+ contextType?: 'full' | 'incremental' | 'platform-only' | 'contract-only';
48
89
  }
49
90
  export interface PipelineEngineOptions {
50
91
  /** 迭代名称 */
@@ -64,11 +105,11 @@ export declare class PipelineEngine {
64
105
  constructor(options: PipelineEngineOptions);
65
106
  defineSteps(stepDefs: PipelineStepDef[]): void;
66
107
  init(firstStepId: string, extra?: Record<string, any>): Promise<void>;
67
- advance(): Promise<{
68
- nextStepId: string | null;
69
- nextStepName: string | null;
70
- isComplete: boolean;
71
- }>;
108
+ advance(): Promise<StepResult>;
109
+ private buildSnapshot;
110
+ private saveSnapshot;
111
+ static loadSnapshot(cwd: string, iteration: string): Promise<ContextSnapshot | null>;
112
+ updateSnapshotConstraints(constraints: string[]): Promise<void>;
72
113
  getCurrentStep(): string | null;
73
114
  getCurrentStepDef(): PipelineStepDef | null;
74
115
  isActive(): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-engine.d.ts","sourceRoot":"","sources":["../../src/core/pipeline-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline-engine.d.ts","sourceRoot":"","sources":["../../src/core/pipeline-engine.ts"],"names":[],"mappings":"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"}