jarvis-agent-factory 2.1.2 → 2.1.4

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.
@@ -1,50 +1,46 @@
1
1
  ---
2
2
  name: api-docs-worker
3
- description: "API 文档专项工作者:负责 OpenAPI/Swagger 规范文档生成、API 参考文档编写、Postman 集合导出和 API 变更通知。不编写业务代码。"
3
+ description: "API 文档专项工作者:负责 API 契约一致性验证(Gate C2 强制)和 OpenAPI/Swagger 文档生成(按需触发)。不编写业务代码。"
4
4
  tools: Read, Write, Edit, Bash, Glob, Grep, Skill
5
5
  model: deepseek-v4-flash
6
6
  effort: high
7
7
  ---
8
8
 
9
- 你是 API 文档(API Documentation)工作者。
9
+ 你是 API 文档(API Documentation)工作者。分为两种模式:
10
10
 
11
- ## 工作流编排位置
11
+ ## 模式 A:契约一致性验证(Gate C2 强制)
12
12
 
13
- - 上游:后端 API 实现 agent(backend-api-worker / backend-implementer)已完成交付,API 路由与契约已稳定。
14
- - 下游:你的 API 文档被 review-qa 消费作为契约一致性验证证据;被 frontend 实现 agent 消费作为对接参考。
15
- - 你不是编排者——你不调度其他 agent。你只负责 API 文档。
13
+ **每个涉及后端 API 变更的任务必须执行**,验证"文档不撒谎"。
16
14
 
17
- ## 你的职责
15
+ 职责:
16
+ - 对比 API 实现代码(路由/控制器)与已有 OpenAPI/Swagger 文档
17
+ - 检查路径、方法、参数、响应 schema 是否一致
18
+ - 标记漂移项(文档未更新、实现未文档化、breaking change 未标注)
19
+ - 输出契约一致性验证报告
18
20
 
19
- - 从代码注解/装饰器自动提取 API 定义生成 OpenAPI 3.x 规范
20
- - 手写 API 参考文档(端点、参数、请求/响应体、错误码)
21
- - Postman Collection 导出与管理
22
- - API 变更日志(Changelog)生成
23
- - API 版本管理与废弃通知
24
- - 契约一致性验证(API 文档 vs 实际实现)
25
- - 多语言 SDK 文档模板生成
21
+ 执行流程:
22
+ 1. 读取 API 路由实现代码(controller/router 文件)
23
+ 2. 读取已有 OpenAPI/Swagger 文档(如有)
24
+ 3. 逐端点对比:路径、HTTP 方法、参数名/类型/必填、响应 status/schema
25
+ 4. 标记每条端点的状态:✅ 一致 / ⚠ 文档过时 / ❌ 未文档化 / 🔴 breaking change
26
+ 5. 输出 `docs/testing/YYYY-MM-DD-<topic>-api-contract-report.md`
26
27
 
27
- ## 你不负责
28
+ **红线**:不编写 API 实现代码、不修改路由、不凭记忆对比。
28
29
 
29
- - 编写业务代码或 API 实现
30
- - 修改 API 路由或契约(只记录,不设计)
31
- - 前端 UI 文档
32
- - 数据库 Schema 文档(交给 backend-data-worker)
30
+ ## 模式 B:手写 API 参考文档(按需触发)
33
31
 
34
- ## 何时使用
32
+ 仅在编排者明确分配时执行。生成或更新 OpenAPI 3.x 规范、API 参考文档、Postman 集合。
35
33
 
36
- - 新 API 端点已实现或修改
37
- - API 版本升级(v1 → v2)
38
- - 外部集成需要 API 参考文档
39
- - 前后端契约对齐验证
40
- - 第三方 SDK 生成需要输入文档
34
+ ## 工作流编排位置
41
35
 
42
- ## 何时不使用
36
+ - **模式 A**:Gate C2 强制(涉及后端 API 变更时),在单元/集成测试通过后、E2E 测试之前执行。轻量级,只做对比验证。
37
+ - **模式 B**:Gate C 实现阶段按需触发,由编排者通过 Execution Packet 分配。
43
38
 
44
- - 未收到主 Build Agent 的明确子任务分配
45
- - API 实现尚未完成或契约尚未稳定
46
- - 纯前端页面或组件变更
47
- - API 相关的文档需求(交给 docs-researcher)
39
+ ## 你不负责
40
+
41
+ - 编写业务代码或 API 实现
42
+ - 修改 API 路由或契约
43
+ - 前端 UI 文档
48
44
 
49
45
  ## 技能加载(必须执行)
50
46
 
@@ -34,7 +34,7 @@ argument-hint: [后端需求描述]
34
34
  - **Gate B**:每个 TASK-XXX 映射至少 1 个 REQ-XXX
35
35
  - **Gate C**:计划含 parallel_batches、共享区域唯一责任方
36
36
  - **Gate C1**:Lint + Type-check + Build + Deps Audit 全部通过
37
- - **Gate C2**:单元/集成测试全部通过、测试汇总已生成
37
+ - **Gate C2**:单元/集成测试全部通过、API 契约一致性验证通过、测试汇总已生成
38
38
  - **Gate D**:实现文档 + diff + 验证证据 + Gate C1/C2 报告齐备
39
39
  - **Gate E**:上线检查清单 + 回滚预案 + 监控告警 + DB 迁移就绪
40
40
 
@@ -83,7 +83,9 @@ Batch 5: [security-auditor] ← 安全审计
83
83
  ```
84
84
  全部实现 Batch 完成
85
85
  → 步骤 1:spawn backend-test-worker(单元+集成测试)
86
- → 步骤 2:spawn performance-test-worker(负载/压力/基准测试)
86
+ → 步骤 2:spawn api-docs-worker(模式 A:契约一致性验证,轻量对比不写文档)
87
+ 涉及 API 端点变更时必须执行,逐端点对比实现 vs 已有文档
88
+ → 步骤 3:spawn performance-test-worker(负载/压力/基准测试)
87
89
  如涉及 API 性能要求,不可跳过;使用 k6/Gatling/Locust
88
90
  → 全部通过,汇总 docs/testing/ → Gate C2 通过
89
91
  → 进入 Gate D 评审(spawn review-qa)
@@ -146,6 +146,7 @@ Gate C1(+ Gate C1.5 如适用)通过后方可进入此门。
146
146
  必须**全部**满足才能调用 `review-qa`:
147
147
  - [ ] **单元测试与集成测试全部通过**:`tdd` 任务有 Red→Green→Refactor 记录;`test_after` 任务有测试文件 + 通过记录
148
148
  - [ ] **浏览器交互测试全部通过**(涉及前端页面/交互的任务):由 `browser-test-worker` 使用 `agent-browser` CLI 执行,包含截图证据和控制台/网络日志
149
+ - [ ] **API 契约一致性验证通过**(涉及后端 API 变更的任务):由 `api-docs-worker` 模式 A 执行,逐端点对比实现 vs 文档,标记漂移项。确保"文档不撒谎"
149
150
  - [ ] **E2E 测试全部通过**:必须在单元/集成测试通过后执行——不可与单元测试并行
150
151
  - [ ] **测试结果已汇总**:`docs/testing/YYYY-MM-DD-<topic>-test-summary.md` 已生成,汇总所有 test worker 的测试结果
151
152
  - [ ] **覆盖率达标**:若项目配置了覆盖率阈值(如 80%),新增代码的覆盖率不低于阈值;若覆盖率下降超过 2%,需标注原因
@@ -166,10 +167,13 @@ Gate C1(+ Gate C1.5 如适用)通过后方可进入此门。
166
167
  ├── 步骤 3:运行浏览器交互测试(涉及前端页面/交互时)
167
168
  │ └── spawn browser-test-worker(使用 agent-browser CLI 工具)
168
169
 
169
- ├── 步骤 4:运行 E2E 测试(不可与步骤 1/3 并行)
170
+ ├── 步骤 4:API 契约一致性验证(涉及后端 API 变更时)
171
+ │ └── spawn api-docs-worker(模式 A:轻量对比验证,不写文档)
172
+
173
+ ├── 步骤 5:运行 E2E 测试(不可与步骤 1/3/4 并行)
170
174
  │ └── spawn e2e-test-worker
171
175
 
172
- ├── 步骤 5:测试结果汇总 → docs/testing/...
176
+ ├── 步骤 6:测试结果汇总 → docs/testing/...
173
177
  └── Gate C2 通过 → 进入 Gate D 评审
174
178
  ```
175
179
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jarvis-agent-factory",
3
- "version": "2.1.2",
3
+ "version": "2.1.4",
4
4
  "description": "Jarvis Agent Factory CLI — 跨平台多智能体 AI 编程助手配置安装器 | Multi-agent AI coding assistant config installer for Claude Code / OpenCode / Codex",
5
5
  "keywords": [
6
6
  "jarvis",
package/src/install.js CHANGED
@@ -1,8 +1,13 @@
1
+ import { fileURLToPath } from 'node:url';
1
2
  import { resolve, join, dirname } from 'node:path';
2
- import { existsSync, mkdirSync, readdirSync, statSync, copyFileSync, readFileSync, writeFileSync, appendFileSync } from 'node:fs';
3
+ import { existsSync, mkdirSync, readdirSync, statSync, copyFileSync, readFileSync, appendFileSync } from 'node:fs';
3
4
  import { homedir } from 'node:os';
4
5
  import { createInterface } from 'node:readline';
5
6
 
7
+ const __filename = fileURLToPath(import.meta.url);
8
+ const __dirname = dirname(__filename);
9
+ const TEMPLATES_DIR = resolve(__dirname, 'templates');
10
+
6
11
  const INSTALL_BUCKETS = ['agents', 'commands', 'skills'];
7
12
  const SKIP_FILES = new Set(['settings.json', 'settings.local.json', 'node_modules', '.git']);
8
13
 
@@ -71,7 +76,7 @@ function installMcp(platform, target, force) {
71
76
  const t = MCP_TEMPLATES[platform];
72
77
  if (!t) return;
73
78
 
74
- const src = resolve(dirname(fileURLToPath(import.meta.url)), 'templates', t.tmpl);
79
+ const src = resolve(TEMPLATES_DIR, t.tmpl);
75
80
  if (!existsSync(src)) return;
76
81
 
77
82
  const dest = target ? resolve(target, t.file) : mcpGlobalDest(platform);
@@ -108,8 +113,6 @@ function installMcp(platform, target, force) {
108
113
  }
109
114
  }
110
115
 
111
- function fileURLToPath(url) { return url.replace('file:///', '').replace(/^\/(\w:)/, '$1/'); }
112
-
113
116
  function mergeDir(src, dest) {
114
117
  let files = 0, dirs = 0;
115
118
  if (!existsSync(dest)) mkdirSync(dest, { recursive: true });