speccore 6.83.0 → 6.90.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/dist/cli.js +15 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +32 -7
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/change.d.ts.map +1 -1
- package/dist/commands/change.js +39 -1
- package/dist/commands/change.js.map +1 -1
- package/dist/commands/code-index.d.ts +1 -0
- package/dist/commands/code-index.d.ts.map +1 -1
- package/dist/commands/code-index.js +10 -0
- package/dist/commands/code-index.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +118 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/knowledge.d.ts +12 -0
- package/dist/commands/knowledge.d.ts.map +1 -1
- package/dist/commands/knowledge.js +80 -0
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/commands/pr.d.ts.map +1 -1
- package/dist/commands/pr.js +75 -38
- package/dist/commands/pr.js.map +1 -1
- package/dist/core/agents/defaults/_INDEX.md +68 -0
- package/dist/core/agents/defaults/_TEMPLATE.md +34 -0
- package/dist/core/agents/defaults/code-reviewer.md +49 -0
- package/dist/core/agents/defaults/compiler.md +25 -0
- package/dist/core/agents/defaults/compliance-checker.md +38 -0
- package/dist/core/agents/defaults/dependency-analyst.md +42 -0
- package/dist/core/agents/defaults/doc-sync-agent.md +25 -0
- package/dist/core/agents/defaults/impact-analyst.md +37 -0
- package/dist/core/agents/defaults/interaction-designer.md +73 -0
- package/dist/core/agents/defaults/performance-expert.md +35 -0
- package/dist/core/agents/defaults/product-analyst-backend.md +68 -0
- package/dist/core/agents/defaults/product-analyst-frontend.md +72 -0
- package/dist/core/agents/defaults/product-analyst.md +48 -0
- package/dist/core/agents/defaults/regression-tester.md +36 -0
- package/dist/core/agents/defaults/risk-assessor.md +38 -0
- package/dist/core/agents/defaults/schedule-planner.md +37 -0
- package/dist/core/agents/defaults/security-reviewer-finance.md +67 -0
- package/dist/core/agents/defaults/security-reviewer.md +43 -0
- package/dist/core/agents/defaults/task-decomposer.md +33 -0
- package/dist/core/agents/defaults/test-engineer.md +25 -0
- package/dist/core/agents/defaults/test-reviewer.md +48 -0
- package/dist/core/agents/engine/agent-executor.d.ts +50 -0
- package/dist/core/agents/engine/agent-executor.d.ts.map +1 -0
- package/dist/core/agents/engine/agent-executor.js +225 -0
- package/dist/core/agents/engine/agent-executor.js.map +1 -0
- package/dist/core/agents/engine/agent-loader.d.ts +58 -0
- package/dist/core/agents/engine/agent-loader.d.ts.map +1 -0
- package/dist/core/agents/engine/agent-loader.js +377 -0
- package/dist/core/agents/engine/agent-loader.js.map +1 -0
- package/dist/core/agents/engine/types.d.ts +71 -0
- package/dist/core/agents/engine/types.d.ts.map +1 -0
- package/dist/core/agents/engine/types.js +8 -0
- package/dist/core/agents/engine/types.js.map +1 -0
- package/dist/core/agents/index.d.ts +4 -0
- package/dist/core/agents/index.d.ts.map +1 -1
- package/dist/core/agents/index.js +17 -1
- package/dist/core/agents/index.js.map +1 -1
- package/dist/core/code-graph/builder.d.ts +6 -0
- package/dist/core/code-graph/builder.d.ts.map +1 -0
- package/dist/core/code-graph/builder.js +155 -0
- package/dist/core/code-graph/builder.js.map +1 -0
- package/dist/core/code-graph/index.d.ts +25 -0
- package/dist/core/code-graph/index.d.ts.map +1 -0
- package/dist/core/code-graph/index.js +125 -0
- package/dist/core/code-graph/index.js.map +1 -0
- package/dist/core/code-graph/parser.d.ts +10 -0
- package/dist/core/code-graph/parser.d.ts.map +1 -0
- package/dist/core/code-graph/parser.js +314 -0
- package/dist/core/code-graph/parser.js.map +1 -0
- package/dist/core/code-graph/query.d.ts +14 -0
- package/dist/core/code-graph/query.d.ts.map +1 -0
- package/dist/core/code-graph/query.js +112 -0
- package/dist/core/code-graph/query.js.map +1 -0
- package/dist/core/code-graph/reporter.d.ts +7 -0
- package/dist/core/code-graph/reporter.d.ts.map +1 -0
- package/dist/core/code-graph/reporter.js +97 -0
- package/dist/core/code-graph/reporter.js.map +1 -0
- package/dist/core/code-graph/types.d.ts +60 -0
- package/dist/core/code-graph/types.d.ts.map +1 -0
- package/dist/core/code-graph/types.js +7 -0
- package/dist/core/code-graph/types.js.map +1 -0
- package/dist/core/code-graph/visualizer.d.ts +9 -0
- package/dist/core/code-graph/visualizer.d.ts.map +1 -0
- package/dist/core/code-graph/visualizer.js +97 -0
- package/dist/core/code-graph/visualizer.js.map +1 -0
- package/dist/core/command-loader.d.ts +31 -0
- package/dist/core/command-loader.d.ts.map +1 -0
- package/dist/core/command-loader.js +76 -0
- package/dist/core/command-loader.js.map +1 -0
- package/dist/core/commands/defaults/change-impact.md +40 -0
- package/dist/core/commands/defaults/pr-review.md +42 -0
- package/dist/core/commands/defaults/refactor.md +37 -0
- package/dist/core/context-injector.d.ts +56 -0
- package/dist/core/context-injector.d.ts.map +1 -0
- package/dist/core/context-injector.js +122 -0
- package/dist/core/context-injector.js.map +1 -0
- package/dist/core/hook-runner.d.ts +36 -0
- package/dist/core/hook-runner.d.ts.map +1 -0
- package/dist/core/hook-runner.js +93 -0
- package/dist/core/hook-runner.js.map +1 -0
- package/dist/core/hooks/defaults/post-execute.md +22 -0
- package/dist/core/hooks/defaults/pre-execute.md +18 -0
- package/dist/core/prompt-builder.d.ts +1 -0
- package/dist/core/prompt-builder.d.ts.map +1 -1
- package/dist/core/prompt-builder.js +60 -1
- package/dist/core/prompt-builder.js.map +1 -1
- package/dist/core/rule-loader.d.ts +38 -0
- package/dist/core/rule-loader.d.ts.map +1 -0
- package/dist/core/rule-loader.js +156 -0
- package/dist/core/rule-loader.js.map +1 -0
- package/dist/core/rules/defaults/_INDEX.md +16 -0
- package/dist/core/rules/defaults/api-design.md +44 -0
- package/dist/core/rules/defaults/database.md +37 -0
- package/dist/core/rules/defaults/frontend-common.md +38 -0
- package/dist/core/rules/defaults/nodejs.md +38 -0
- package/dist/core/rules/defaults/react.md +34 -0
- package/dist/core/rules/defaults/security.md +31 -0
- package/dist/core/rules/defaults/testing.md +35 -0
- package/dist/core/rules/defaults/typescript.md +36 -0
- package/dist/core/skill-loader.d.ts +28 -0
- package/dist/core/skill-loader.d.ts.map +1 -0
- package/dist/core/skill-loader.js +102 -0
- package/dist/core/skill-loader.js.map +1 -0
- package/dist/core/skills/defaults/caching.md +33 -0
- package/dist/core/skills/defaults/db-migration.md +46 -0
- package/dist/core/skills/defaults/deployment.md +50 -0
- package/dist/core/skills/defaults/logging.md +38 -0
- package/dist/core/verify-engine.d.ts +7 -0
- package/dist/core/verify-engine.d.ts.map +1 -1
- package/dist/core/verify-engine.js +27 -1
- package/dist/core/verify-engine.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
activations:
|
|
3
|
+
- command: analyze
|
|
4
|
+
phase: clarify
|
|
5
|
+
condition: "project.securityLevel > 2"
|
|
6
|
+
- command: execute
|
|
7
|
+
phase: quality-gate
|
|
8
|
+
condition: ""
|
|
9
|
+
- command: pr
|
|
10
|
+
phase: review
|
|
11
|
+
condition: ""
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# 角色:安全审查员 (Security Reviewer)
|
|
15
|
+
|
|
16
|
+
## 职责
|
|
17
|
+
|
|
18
|
+
- 识别需求/代码中的安全风险
|
|
19
|
+
- 检查认证、授权、输入验证、数据保护
|
|
20
|
+
- 审查 OWASP Top 10 相关风险
|
|
21
|
+
|
|
22
|
+
## 检查清单
|
|
23
|
+
|
|
24
|
+
### 认证与授权
|
|
25
|
+
- [ ] 敏感操作是否有身份验证
|
|
26
|
+
- [ ] 权限校验是否在服务端执行(不信任客户端)
|
|
27
|
+
- [ ] 是否存在越权访问风险(水平/垂直越权)
|
|
28
|
+
|
|
29
|
+
### 输入验证
|
|
30
|
+
- [ ] 所有用户输入是否经过校验(长度、类型、范围)
|
|
31
|
+
- [ ] 是否存在 SQL 注入风险(使用参数化查询)
|
|
32
|
+
- [ ] 是否存在 XSS 风险(输出转义)
|
|
33
|
+
- [ ] 是否存在命令注入/路径遍历风险
|
|
34
|
+
|
|
35
|
+
### 数据保护
|
|
36
|
+
- [ ] 敏感数据是否加密存储
|
|
37
|
+
- [ ] 日志中是否泄露敏感信息
|
|
38
|
+
- [ ] 接口响应是否包含不必要的敏感字段
|
|
39
|
+
|
|
40
|
+
## 输出
|
|
41
|
+
|
|
42
|
+
对每个发现的安全问题,输出:
|
|
43
|
+
| 严重程度 | 位置 | 问题描述 | 修复建议 |
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
activations:
|
|
3
|
+
- command: split
|
|
4
|
+
phase: default
|
|
5
|
+
condition: ""
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 角色:任务拆分专家 (Task Decomposer)
|
|
9
|
+
|
|
10
|
+
## 职责
|
|
11
|
+
|
|
12
|
+
- 将功能模块拆分为原子级开发任务
|
|
13
|
+
- 确保每个任务可独立执行、可验收
|
|
14
|
+
- 避免任务过大(>8h)或过小(<1h)
|
|
15
|
+
|
|
16
|
+
## 拆分原则
|
|
17
|
+
|
|
18
|
+
1. **单一职责**:每个任务只实现一个功能点
|
|
19
|
+
2. **可验收**:每个任务有明确的完成标准和输出物
|
|
20
|
+
3. **独立执行**:任务间通过接口契约解耦,减少阻塞
|
|
21
|
+
4. **工时控制**:单个任务工时控制在 2h-8h
|
|
22
|
+
5. **端对齐**:同一功能按端拆分(backend/frontend/admin 等)
|
|
23
|
+
|
|
24
|
+
## 输出格式
|
|
25
|
+
|
|
26
|
+
每个任务包含:
|
|
27
|
+
- 任务 ID(如 Task-001-login-backend)
|
|
28
|
+
- 任务名称
|
|
29
|
+
- 所属功能模块
|
|
30
|
+
- 对应端(backend/frontend/admin)
|
|
31
|
+
- 依赖任务列表
|
|
32
|
+
- 预估工时
|
|
33
|
+
- 验收标准
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
activations:
|
|
3
|
+
- command: execute
|
|
4
|
+
phase: quality-gate
|
|
5
|
+
condition: ""
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 角色:测试工程师 (Test Engineer)
|
|
9
|
+
|
|
10
|
+
## 职责
|
|
11
|
+
|
|
12
|
+
- 执行单元测试和集成测试
|
|
13
|
+
- 检查测试覆盖率
|
|
14
|
+
- 确保新增代码有配套测试
|
|
15
|
+
|
|
16
|
+
## 检查项
|
|
17
|
+
|
|
18
|
+
1. **测试执行**:所有测试通过
|
|
19
|
+
2. **覆盖率**:行覆盖 ≥ 80%,分支覆盖 ≥ 70%
|
|
20
|
+
3. **新代码覆盖**:新增代码必须有测试覆盖
|
|
21
|
+
4. **测试质量**:测试用例有效、独立、可维护
|
|
22
|
+
|
|
23
|
+
## 输出
|
|
24
|
+
|
|
25
|
+
| 模块 | 测试数 | 通过 | 失败 | 覆盖率 |
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
activations:
|
|
3
|
+
- command: pr
|
|
4
|
+
phase: review
|
|
5
|
+
condition: ""
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 角色:测试审查员 (Test Reviewer)
|
|
9
|
+
|
|
10
|
+
## 职责
|
|
11
|
+
|
|
12
|
+
- 审查测试用例的完整性和有效性
|
|
13
|
+
- 检查测试覆盖率
|
|
14
|
+
- 识别未覆盖的边界条件
|
|
15
|
+
|
|
16
|
+
## 审查清单
|
|
17
|
+
|
|
18
|
+
### 测试完整性
|
|
19
|
+
- [ ] 正常流程是否有测试
|
|
20
|
+
- [ ] 异常流程是否有测试
|
|
21
|
+
- [ ] 边界条件是否有测试
|
|
22
|
+
- [ ] 空值/最大值/最小值是否有测试
|
|
23
|
+
|
|
24
|
+
### 测试质量
|
|
25
|
+
- [ ] 测试是否独立(不依赖顺序)
|
|
26
|
+
- [ ] 测试名称是否清晰描述场景
|
|
27
|
+
- [ ] 断言是否具体(不是 `toBeTruthy`)
|
|
28
|
+
- [ ] Mock 是否合理(不过度 Mock)
|
|
29
|
+
|
|
30
|
+
### 覆盖率
|
|
31
|
+
- [ ] 核心业务逻辑覆盖率 ≥ 80%
|
|
32
|
+
- [ ] 分支覆盖率 ≥ 70%
|
|
33
|
+
- [ ] 关键路径是否覆盖
|
|
34
|
+
|
|
35
|
+
## 输出格式
|
|
36
|
+
|
|
37
|
+
```markdown
|
|
38
|
+
## 测试审查报告
|
|
39
|
+
|
|
40
|
+
### 覆盖率概览
|
|
41
|
+
| 模块 | 行覆盖 | 分支覆盖 | 状态 |
|
|
42
|
+
|
|
43
|
+
### 缺失测试
|
|
44
|
+
| 功能 | 建议测试场景 | 优先级 |
|
|
45
|
+
|
|
46
|
+
### 测试改进建议
|
|
47
|
+
| # | 问题 | 建议 |
|
|
48
|
+
```
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AGENTS 引擎 — 执行器
|
|
3
|
+
*
|
|
4
|
+
* 负责:
|
|
5
|
+
* 1. 构建 Agent 专用 Prompt(角色定义 + 检查清单 + 输入上下文)
|
|
6
|
+
* 2. 执行 Agent 分析(生成 prompt 字符串,供外层 AI 调用)
|
|
7
|
+
* 3. 结果解析与聚合
|
|
8
|
+
*
|
|
9
|
+
* v6.84.0+
|
|
10
|
+
*/
|
|
11
|
+
import { AgentDefinition, AgentContext, AgentResult } from './types';
|
|
12
|
+
/**
|
|
13
|
+
* 为指定 Agent 构建完整的分析 Prompt
|
|
14
|
+
*
|
|
15
|
+
* 将 Agent 的角色定义与当前上下文组合,生成可直接发给 AI 的 prompt 字符串
|
|
16
|
+
*/
|
|
17
|
+
export declare function buildAgentPrompt(agent: AgentDefinition, context: AgentContext): string;
|
|
18
|
+
/**
|
|
19
|
+
* 模拟执行 Agent 任务
|
|
20
|
+
*
|
|
21
|
+
* 注意:此函数不直接调用 AI API,而是构建 prompt 并返回给外层调用者。
|
|
22
|
+
* 外层调用者(如 analyze.ts)将 prompt 发送给 AI,然后将 AI 的响应传回给 parseAgentResponse。
|
|
23
|
+
*
|
|
24
|
+
* 返回 { prompt: string, metadata: { agent, context } }
|
|
25
|
+
*/
|
|
26
|
+
export declare function prepareAgentTask(agent: AgentDefinition, context: AgentContext): {
|
|
27
|
+
prompt: string;
|
|
28
|
+
metadata: {
|
|
29
|
+
agentName: string;
|
|
30
|
+
agentDefinition: AgentDefinition;
|
|
31
|
+
context: AgentContext;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* 解析 Agent 的 AI 响应为结构化结果
|
|
36
|
+
*
|
|
37
|
+
* 这是一个启发式解析器,从 AI 返回的 Markdown 文本中提取结构化信息。
|
|
38
|
+
*/
|
|
39
|
+
export declare function parseAgentResponse(agentName: string, response: string, duration?: number): AgentResult;
|
|
40
|
+
/**
|
|
41
|
+
* 将多个 Agent 的结果聚合为统一报告
|
|
42
|
+
*/
|
|
43
|
+
export declare function mergeAgentResults(results: AgentResult[]): {
|
|
44
|
+
allPassed: boolean;
|
|
45
|
+
totalFindings: number;
|
|
46
|
+
criticalCount: number;
|
|
47
|
+
majorCount: number;
|
|
48
|
+
report: string;
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=agent-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-executor.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/engine/agent-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAa,WAAW,EAAgB,MAAM,SAAS,CAAC;AAE9F;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,CAsFtF;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,GAAG;IAC/E,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,eAAe,CAAC;QAAC,OAAO,EAAE,YAAY,CAAA;KAAE,CAAC;CAC1F,CAUA;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAU,GACnB,WAAW,CA6Db;AAUD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG;IACzD,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CAmCA"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AGENTS 引擎 — 执行器
|
|
4
|
+
*
|
|
5
|
+
* 负责:
|
|
6
|
+
* 1. 构建 Agent 专用 Prompt(角色定义 + 检查清单 + 输入上下文)
|
|
7
|
+
* 2. 执行 Agent 分析(生成 prompt 字符串,供外层 AI 调用)
|
|
8
|
+
* 3. 结果解析与聚合
|
|
9
|
+
*
|
|
10
|
+
* v6.84.0+
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.buildAgentPrompt = buildAgentPrompt;
|
|
14
|
+
exports.prepareAgentTask = prepareAgentTask;
|
|
15
|
+
exports.parseAgentResponse = parseAgentResponse;
|
|
16
|
+
exports.mergeAgentResults = mergeAgentResults;
|
|
17
|
+
/**
|
|
18
|
+
* 为指定 Agent 构建完整的分析 Prompt
|
|
19
|
+
*
|
|
20
|
+
* 将 Agent 的角色定义与当前上下文组合,生成可直接发给 AI 的 prompt 字符串
|
|
21
|
+
*/
|
|
22
|
+
function buildAgentPrompt(agent, context) {
|
|
23
|
+
const sections = [];
|
|
24
|
+
// 1. 角色注入
|
|
25
|
+
sections.push(agent.rolePrompt);
|
|
26
|
+
sections.push('');
|
|
27
|
+
// 2. 输入上下文
|
|
28
|
+
sections.push('---');
|
|
29
|
+
sections.push('# 输入上下文');
|
|
30
|
+
sections.push('');
|
|
31
|
+
if (context.iteration) {
|
|
32
|
+
sections.push(`- 迭代: ${context.iteration}`);
|
|
33
|
+
}
|
|
34
|
+
if (context.platform) {
|
|
35
|
+
sections.push(`- 端: ${context.platform}`);
|
|
36
|
+
}
|
|
37
|
+
if (context.project?.industry) {
|
|
38
|
+
sections.push(`- 行业: ${context.project.industry}`);
|
|
39
|
+
}
|
|
40
|
+
sections.push('');
|
|
41
|
+
// 3. 任务特定输入
|
|
42
|
+
if (context.docContent) {
|
|
43
|
+
sections.push('## 需求文档内容');
|
|
44
|
+
sections.push('');
|
|
45
|
+
sections.push('```');
|
|
46
|
+
const content = String(context.docContent);
|
|
47
|
+
sections.push(content.slice(0, 8000));
|
|
48
|
+
if (content.length > 8000) {
|
|
49
|
+
sections.push('\n... (文档过长,已截断,请继续读取完整文档)');
|
|
50
|
+
}
|
|
51
|
+
sections.push('```');
|
|
52
|
+
sections.push('');
|
|
53
|
+
}
|
|
54
|
+
if (context.qualityIssues && Array.isArray(context.qualityIssues) && context.qualityIssues.length > 0) {
|
|
55
|
+
sections.push('## 已识别的质量问题');
|
|
56
|
+
sections.push('');
|
|
57
|
+
for (const issue of context.qualityIssues) {
|
|
58
|
+
sections.push(`- ${issue}`);
|
|
59
|
+
}
|
|
60
|
+
sections.push('');
|
|
61
|
+
}
|
|
62
|
+
if (context.codeContent) {
|
|
63
|
+
sections.push('## 代码内容');
|
|
64
|
+
sections.push('');
|
|
65
|
+
sections.push('```');
|
|
66
|
+
const code = String(context.codeContent);
|
|
67
|
+
sections.push(code.slice(0, 6000));
|
|
68
|
+
if (code.length > 6000) {
|
|
69
|
+
sections.push('\n... (代码过长,已截断)');
|
|
70
|
+
}
|
|
71
|
+
sections.push('```');
|
|
72
|
+
sections.push('');
|
|
73
|
+
}
|
|
74
|
+
// 4. 输出格式要求
|
|
75
|
+
if (agent.outputFormat) {
|
|
76
|
+
sections.push('---');
|
|
77
|
+
sections.push('# 输出要求');
|
|
78
|
+
sections.push('');
|
|
79
|
+
sections.push(agent.outputFormat);
|
|
80
|
+
sections.push('');
|
|
81
|
+
}
|
|
82
|
+
// 5. 通用输出格式(结构化)
|
|
83
|
+
sections.push('---');
|
|
84
|
+
sections.push('# 输出格式(必须严格遵守)');
|
|
85
|
+
sections.push('');
|
|
86
|
+
sections.push('请以以下结构输出分析结果:');
|
|
87
|
+
sections.push('');
|
|
88
|
+
sections.push('## 总体评估');
|
|
89
|
+
sections.push('通过 / 不通过');
|
|
90
|
+
sections.push('');
|
|
91
|
+
sections.push('## 发现的问题');
|
|
92
|
+
sections.push('对每个问题,按以下格式:');
|
|
93
|
+
sections.push('- [严重级别] [类别]: [问题描述] → [修改建议]');
|
|
94
|
+
sections.push('');
|
|
95
|
+
sections.push('## 改进建议');
|
|
96
|
+
sections.push('(可选)具体的修改方案');
|
|
97
|
+
sections.push('');
|
|
98
|
+
return sections.join('\n');
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* 模拟执行 Agent 任务
|
|
102
|
+
*
|
|
103
|
+
* 注意:此函数不直接调用 AI API,而是构建 prompt 并返回给外层调用者。
|
|
104
|
+
* 外层调用者(如 analyze.ts)将 prompt 发送给 AI,然后将 AI 的响应传回给 parseAgentResponse。
|
|
105
|
+
*
|
|
106
|
+
* 返回 { prompt: string, metadata: { agent, context } }
|
|
107
|
+
*/
|
|
108
|
+
function prepareAgentTask(agent, context) {
|
|
109
|
+
const prompt = buildAgentPrompt(agent, context);
|
|
110
|
+
return {
|
|
111
|
+
prompt,
|
|
112
|
+
metadata: {
|
|
113
|
+
agentName: agent.name,
|
|
114
|
+
agentDefinition: agent,
|
|
115
|
+
context,
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* 解析 Agent 的 AI 响应为结构化结果
|
|
121
|
+
*
|
|
122
|
+
* 这是一个启发式解析器,从 AI 返回的 Markdown 文本中提取结构化信息。
|
|
123
|
+
*/
|
|
124
|
+
function parseAgentResponse(agentName, response, duration = 0) {
|
|
125
|
+
const findings = [];
|
|
126
|
+
let passed = true;
|
|
127
|
+
// 1. 解析总体评估
|
|
128
|
+
const overallMatch = response.match(/##\s+总体评估\s*\n\s*(通过|不通过|PASS|FAIL|✅|❌)/i);
|
|
129
|
+
if (overallMatch) {
|
|
130
|
+
const verdict = overallMatch[1].toLowerCase();
|
|
131
|
+
passed = !verdict.includes('不') && !verdict.includes('fail') && !verdict.includes('❌');
|
|
132
|
+
}
|
|
133
|
+
// 2. 解析问题列表
|
|
134
|
+
// 格式: - [严重级别] [类别]: [问题描述] → [修改建议]
|
|
135
|
+
const issuePattern = /^\s*[-*]\s*\[?(critical|major|minor|info|严重|重要|一般|提示)\]?\s*\[?([^\]]+)\]?\s*[::]\s*(.+?)(?:→|->|\s-\s)(.+)$/gim;
|
|
136
|
+
let m;
|
|
137
|
+
while ((m = issuePattern.exec(response)) !== null) {
|
|
138
|
+
const severity = mapSeverity(m[1]);
|
|
139
|
+
findings.push({
|
|
140
|
+
severity,
|
|
141
|
+
category: m[2].trim(),
|
|
142
|
+
message: m[3].trim(),
|
|
143
|
+
suggestion: m[4].trim(),
|
|
144
|
+
});
|
|
145
|
+
if (severity === 'critical' || severity === 'major') {
|
|
146
|
+
passed = false;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// 3. 备用解析:简单列表项
|
|
150
|
+
if (findings.length === 0) {
|
|
151
|
+
const listPattern = /^\s*[-*]\s*(.+)$/gm;
|
|
152
|
+
while ((m = listPattern.exec(response)) !== null) {
|
|
153
|
+
const text = m[1].trim();
|
|
154
|
+
if (text.length < 5)
|
|
155
|
+
continue;
|
|
156
|
+
if (text.startsWith('[') && text.includes(']:'))
|
|
157
|
+
continue; // 跳过已解析的
|
|
158
|
+
// 尝试推断严重级别
|
|
159
|
+
let severity = 'info';
|
|
160
|
+
if (/critical|严重|致命|阻塞/i.test(text))
|
|
161
|
+
severity = 'critical';
|
|
162
|
+
else if (/major|重要|严重/i.test(text))
|
|
163
|
+
severity = 'major';
|
|
164
|
+
else if (/minor|一般|轻微/i.test(text))
|
|
165
|
+
severity = 'minor';
|
|
166
|
+
findings.push({
|
|
167
|
+
severity,
|
|
168
|
+
category: 'general',
|
|
169
|
+
message: text,
|
|
170
|
+
});
|
|
171
|
+
if (severity === 'critical' || severity === 'major') {
|
|
172
|
+
passed = false;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
agent: agentName,
|
|
178
|
+
passed,
|
|
179
|
+
findings,
|
|
180
|
+
duration,
|
|
181
|
+
output: response,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
function mapSeverity(text) {
|
|
185
|
+
const lower = text.toLowerCase();
|
|
186
|
+
if (lower.includes('critical') || lower.includes('严重') || lower.includes('致命'))
|
|
187
|
+
return 'critical';
|
|
188
|
+
if (lower.includes('major') || lower.includes('重要'))
|
|
189
|
+
return 'major';
|
|
190
|
+
if (lower.includes('minor') || lower.includes('一般') || lower.includes('轻微'))
|
|
191
|
+
return 'minor';
|
|
192
|
+
return 'info';
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* 将多个 Agent 的结果聚合为统一报告
|
|
196
|
+
*/
|
|
197
|
+
function mergeAgentResults(results) {
|
|
198
|
+
const allPassed = results.every(r => r.passed);
|
|
199
|
+
const totalFindings = results.reduce((s, r) => s + r.findings.length, 0);
|
|
200
|
+
const criticalCount = results.reduce((s, r) => s + r.findings.filter(f => f.severity === 'critical').length, 0);
|
|
201
|
+
const majorCount = results.reduce((s, r) => s + r.findings.filter(f => f.severity === 'major').length, 0);
|
|
202
|
+
let report = `# Multi-Agent 审查报告\n\n`;
|
|
203
|
+
report += `| Agent | 结果 | 发现数 | 耗时 |\n`;
|
|
204
|
+
report += `| :--- | :--- | :--- | :--- |\n`;
|
|
205
|
+
for (const r of results) {
|
|
206
|
+
const icon = r.passed ? '✅' : '❌';
|
|
207
|
+
report += `| ${r.agent} | ${icon} ${r.passed ? '通过' : '不通过'} | ${r.findings.length} | ${(r.duration / 1000).toFixed(1)}s |\n`;
|
|
208
|
+
}
|
|
209
|
+
report += '\n';
|
|
210
|
+
for (const r of results) {
|
|
211
|
+
if (r.findings.length === 0)
|
|
212
|
+
continue;
|
|
213
|
+
report += `## ${r.agent}\n\n`;
|
|
214
|
+
for (const f of r.findings) {
|
|
215
|
+
const icon = f.severity === 'critical' ? '🔴' : f.severity === 'major' ? '🟠' : f.severity === 'minor' ? '🟡' : '🔵';
|
|
216
|
+
report += `- ${icon} **[${f.severity.toUpperCase()}]** ${f.category}: ${f.message}\n`;
|
|
217
|
+
if (f.suggestion) {
|
|
218
|
+
report += ` → ${f.suggestion}\n`;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
report += '\n';
|
|
222
|
+
}
|
|
223
|
+
return { allPassed, totalFindings, criticalCount, majorCount, report };
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=agent-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-executor.js","sourceRoot":"","sources":["../../../../src/core/agents/engine/agent-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AGENTS 引擎 — 加载器
|
|
3
|
+
*
|
|
4
|
+
* 负责:
|
|
5
|
+
* 1. 扫描 .speccore/AGENTS/ 目录下的角色定义
|
|
6
|
+
* 2. 解析 Markdown 文件为 AgentDefinition
|
|
7
|
+
* 3. 解析 _INDEX.md 注册表
|
|
8
|
+
* 4. 根据 platform/industry 解析特化版本
|
|
9
|
+
* 5. 条件过滤和优先级排序
|
|
10
|
+
*
|
|
11
|
+
* v6.84.0+
|
|
12
|
+
*/
|
|
13
|
+
import { AgentDefinition, AgentRegistry, AgentContext, ResolvedAgent } from './types';
|
|
14
|
+
/**
|
|
15
|
+
* 根据 platform/industry 解析特化版本的 Agent 名称
|
|
16
|
+
*
|
|
17
|
+
* 优先级:platform-specific > industry-specific > generic
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolveAgentName(baseAgent: string, context: AgentContext, availableAgents: Set<string>): string;
|
|
20
|
+
/**
|
|
21
|
+
* 加载所有可用的 Agent 定义
|
|
22
|
+
* 优先读取用户自定义,回退到内置默认
|
|
23
|
+
*/
|
|
24
|
+
export declare function loadAllAgents(projectRoot: string): Promise<Map<string, AgentDefinition>>;
|
|
25
|
+
/**
|
|
26
|
+
* 加载注册表
|
|
27
|
+
* 优先读取用户自定义,回退到内置默认
|
|
28
|
+
*/
|
|
29
|
+
export declare function loadRegistry(projectRoot: string): Promise<AgentRegistry>;
|
|
30
|
+
/**
|
|
31
|
+
* 获取指定命令/阶段下需要激活的 Agent 列表
|
|
32
|
+
* 返回按优先级排序的 ResolvedAgent 数组
|
|
33
|
+
*
|
|
34
|
+
* 混合模式:
|
|
35
|
+
* 1. 注册表中的核心角色(显式配置,优先)
|
|
36
|
+
* 2. 用户自定义角色的自描述激活规则(扩展)
|
|
37
|
+
*/
|
|
38
|
+
export declare function resolveAgentsForPhase(command: string, phase: string, context: AgentContext, projectRoot: string): Promise<ResolvedAgent[]>;
|
|
39
|
+
/**
|
|
40
|
+
* 获取单个 Agent 的定义
|
|
41
|
+
*/
|
|
42
|
+
export declare function loadAgentDefinition(agentName: string, projectRoot: string): Promise<AgentDefinition | undefined>;
|
|
43
|
+
/**
|
|
44
|
+
* 获取内置 Agent 的原始 Markdown 内容(用于 init 时复制到项目)
|
|
45
|
+
*/
|
|
46
|
+
export declare function getBuiltinAgentContents(): Promise<{
|
|
47
|
+
name: string;
|
|
48
|
+
content: string;
|
|
49
|
+
}[]>;
|
|
50
|
+
/**
|
|
51
|
+
* 获取内置注册表内容(用于 init 时复制到项目)
|
|
52
|
+
*/
|
|
53
|
+
export declare function getBuiltinRegistryContent(): Promise<string | undefined>;
|
|
54
|
+
/**
|
|
55
|
+
* 获取内置模板内容(用于 init 时复制到项目)
|
|
56
|
+
*/
|
|
57
|
+
export declare function getBuiltinTemplateContent(): Promise<string | undefined>;
|
|
58
|
+
//# sourceMappingURL=agent-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-loader.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/engine/agent-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EACL,eAAe,EAEf,aAAa,EAEb,YAAY,EACZ,aAAa,EACd,MAAM,SAAS,CAAC;AAiOjB;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,EACrB,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,GAC3B,MAAM,CAkBR;AAMD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAmB9F;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAa9E;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,EAAE,CAAC,CAoD1B;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAGtC;AAED;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAG5F;AAED;;GAEG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAM7E;AAED;;GAEG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAM7E"}
|