jarvis-agent-factory 3.7.2 → 3.8.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/README.md +134 -221
- package/package.json +1 -1
- package/src/doctor.js +16 -2
- package/src/hook.js +15 -3
- package/src/templates/mcp-claude.json +1 -1
- package/src/templates/platforms/claude/commands/jarvis.md +3 -3
package/README.md
CHANGED
|
@@ -1,273 +1,186 @@
|
|
|
1
1
|
# Jarvis Agent Factory · 贾维斯智能体工厂
|
|
2
2
|
|
|
3
3
|
[](./LICENSE)
|
|
4
|
-
[](https://gitee.com/wujl1124/JarvisAgentFactory/releases)
|
|
5
|
+
[](https://www.npmjs.com/package/jarvis-agent-factory)
|
|
5
6
|
<br>**简体中文** | [English](./README_EN.md)
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
跨平台多智能体 AI 编程助手配置集 + MCP 编排引擎。从想法到交付的完整软件开发流水线,支持 **Claude Code / OpenCode / Codex** 三平台。
|
|
8
9
|
|
|
9
|
-
> **v3.7.
|
|
10
|
+
> **v3.7.2** — 提示词工程(软约束)→ 引擎驱动(硬约束),FSM 直接拒绝非法操作
|
|
10
11
|
|
|
11
|
-
##
|
|
12
|
+
## 快速开始
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
│ │ │ │ │ │ │ │ │ │ │
|
|
20
|
-
└─ 阶段 0 Gate A Gate B Gate C │ Gate C1 Gate C1.5 Gate C2 Gate D Gate E
|
|
21
|
-
│
|
|
22
|
-
┌──────────┘
|
|
23
|
-
│ 同 Batch 内任务并行
|
|
24
|
-
│ Batch 之间串行等待
|
|
25
|
-
└── 无共享依赖 → 可跨 Batch 提前启动
|
|
14
|
+
```bash
|
|
15
|
+
npm i -g jarvis-agent-factory # 安装 CLI
|
|
16
|
+
jarvis init my-app -y # 一键部署三平台配置 + MCP + 钩子
|
|
17
|
+
cd my-app
|
|
18
|
+
jarvis engine start --dashboard # 启动编排引擎 + Web 面板
|
|
19
|
+
# → http://localhost:3456/dashboard
|
|
26
20
|
```
|
|
27
21
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
| 维度 | 策略 |
|
|
31
|
-
|------|------|
|
|
32
|
-
| **Agent 重试** | 4 种失败类型差异化重试,最多 3 次 |
|
|
33
|
-
| **Batch 部分失败** | 成功产物保留,仅重试失败任务 |
|
|
34
|
-
| **回滚/中止** | 可修复→重试→回退→中止,同 Gate 最多回退 2 次 |
|
|
35
|
-
| **会话检查点** | 每个 Gate 通过后输出检查点,支持中断恢复 |
|
|
36
|
-
| **冲突解决** | Plan patch 排队,数据层 > API 层 > UI 层,10 分钟超时 |
|
|
37
|
-
|
|
38
|
-
## 闭环体系
|
|
39
|
-
|
|
40
|
-
| # | 闭环 | 触发 | 流程 |
|
|
41
|
-
|---|------|------|------|
|
|
42
|
-
| 1 | **开发闭环** | 编排者 Gate C→C1→C2 | 实现 → 质量检查 → 测试 → 失败回退 |
|
|
43
|
-
| 2 | **测试闭环** | `browser-test` | 写用例 → agent-browser 执行 → 截图 → 失败→修复→重测 |
|
|
44
|
-
| 3 | **Bug 闭环** | `bug-fix` | Bug → agent-browser 复现 → 定位根因 → 修复 → 验证 |
|
|
45
|
-
| 4 | **审查闭环** | `review-fix-optimize` | 初审 → 规划 → 执行 → 验证 → 复审关闭 |
|
|
46
|
-
| 5 | **安全闭环** | Gate E | security-auditor → 威胁建模 + CVE + SAST → 修复 → 重扫 |
|
|
47
|
-
| 6 | **契约闭环** | Gate C2(API 变更强制) | api-docs-worker 模式A → 对比 auto-generated spec vs 代码实现 → 标记漂移 |
|
|
48
|
-
|
|
49
|
-
失败自动路由到修复闭环,最多 2 轮;第 3 轮仍失败标记 BLOCKED 并保留产物。
|
|
22
|
+
然后在你用的平台里开始开发。引擎会在后台自动检查 Gate 条件,Dashboard 实时显示进度。
|
|
50
23
|
|
|
51
|
-
|
|
24
|
+
---
|
|
52
25
|
|
|
53
|
-
|
|
54
|
-
提示词工程(软约束)→ 引擎驱动(硬约束)
|
|
55
|
-
"请勿跳过 Gate" → FSM 直接拒绝非法操作
|
|
56
|
-
```
|
|
26
|
+
## 怎么用:完整流程
|
|
57
27
|
|
|
58
|
-
|
|
59
|
-
|------|------|
|
|
60
|
-
| **MCP Server** | 4 个编排工具:pipeline_init / status / gate_enforce / advance_gate |
|
|
61
|
-
| **硬约束 FSM** | 跳过 Gate 被拒 / 乱序推进被拒 / 条件未满足被拒 |
|
|
62
|
-
| **SQLite 持久化** | pipeline + sessions + checkpoints + agent_models 四表 |
|
|
63
|
-
| **Session 管理** | Leader 选举 + 心跳超时 + Observer 只读 |
|
|
64
|
-
| **三平台钩子** | PostToolUse{Agent} → `jarvis hook gate-check`,每次 spawn 后自动验证 |
|
|
65
|
-
| **Web Dashboard** | Gate 进度条 + Agent 像素模型配置卡片 + SSE 实时推送 |
|
|
66
|
-
| **REST API** | `/api/pipeline` `/api/gate/enforce` `/api/gate/advance` `/api/agents` |
|
|
28
|
+
### 第一步:部署
|
|
67
29
|
|
|
68
30
|
```bash
|
|
69
|
-
jarvis
|
|
70
|
-
jarvis engine stop # 停止
|
|
31
|
+
jarvis init ./my-project # 安装全部三平台配置 + MCP + 钩子
|
|
71
32
|
```
|
|
72
33
|
|
|
73
|
-
|
|
34
|
+
这一步会在项目里生成:
|
|
74
35
|
|
|
75
36
|
```
|
|
76
|
-
|
|
77
|
-
├──
|
|
78
|
-
|
|
79
|
-
├──
|
|
80
|
-
├──
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
└──
|
|
37
|
+
my-project/
|
|
38
|
+
├── .claude/ ← Claude Code: 47 agents + 15 命令 + 27 skills
|
|
39
|
+
│ └── settings.json ← 含引擎钩子(PostToolUse{Agent} → gate-check)
|
|
40
|
+
├── .opencode/ ← OpenCode: 55 agents + 27 skills
|
|
41
|
+
├── .codex/ ← Codex: 45 agents + 42 skills
|
|
42
|
+
│ └── hooks.json ← Codex 钩子
|
|
43
|
+
├── .mcp.json ← Playwright + Jarvis Engine MCP 配置
|
|
44
|
+
└── opencode.json ← OpenCode MCP 配置
|
|
84
45
|
```
|
|
85
46
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
### npm CLI(推荐)
|
|
47
|
+
### 第二步:启动引擎
|
|
89
48
|
|
|
90
49
|
```bash
|
|
91
|
-
|
|
50
|
+
jarvis engine start --dashboard # 后台运行 + Web 面板
|
|
51
|
+
jarvis engine start # 纯后台(无面板)
|
|
92
52
|
```
|
|
93
53
|
|
|
94
|
-
|
|
95
|
-
|------|------|
|
|
96
|
-
| `jarvis` | 引导当前目录(≡ `jarvis init .`) |
|
|
97
|
-
| `jarvis init [path]` | 初始化项目,安装全部三平台 + Playwright MCP 配置 |
|
|
98
|
-
| `jarvis add <p...> [path]` | 添加指定平台(`claude` `opencode` `codex` 可多选) |
|
|
99
|
-
| `jarvis remove <p...> [path]` | 移除指定平台 + 对应 MCP 配置 |
|
|
100
|
-
| `jarvis upgrade [path]` | 升级已安装的配置到最新版本 |
|
|
101
|
-
| `jarvis doctor [path]` | 健康检查 |
|
|
102
|
-
| `-g, --global` | 安装到用户全局目录 `~/.claude/` 等 |
|
|
103
|
-
| `-y, --yes` | 跳过覆盖确认 |
|
|
104
|
-
| `-v, --version` | 查看版本 |
|
|
105
|
-
| `-h, --help` | 帮助 |
|
|
54
|
+
引擎监听 `localhost:3456`,SQLite 持久化状态到 `.jarvis/engine.db`。
|
|
106
55
|
|
|
107
|
-
|
|
108
|
-
# 常用
|
|
109
|
-
jarvis # 引导当前目录
|
|
110
|
-
jarvis init my-app -y # 一键初始化
|
|
111
|
-
jarvis add claude # 追加 Claude Code
|
|
112
|
-
jarvis remove codex # 移除 Codex
|
|
113
|
-
jarvis upgrade # 升级配置
|
|
114
|
-
jarvis doctor # 检查
|
|
115
|
-
|
|
116
|
-
# 全局安装
|
|
117
|
-
jarvis init -g -y # 一键全局安装
|
|
118
|
-
jarvis add opencode -g # 全局追加 OpenCode
|
|
119
|
-
```
|
|
56
|
+
### 第三步:在平台里开发
|
|
120
57
|
|
|
121
|
-
|
|
58
|
+
**Claude Code:**
|
|
59
|
+
```
|
|
60
|
+
/jarvis "做一个登录页"
|
|
61
|
+
```
|
|
62
|
+
命令自动按 Gate A→B→C→... 流程推进。每次 spawn 子 Agent 后,引擎钩子自动触发 `gate-check` 验证条件。
|
|
122
63
|
|
|
64
|
+
**OpenCode:**
|
|
123
65
|
```bash
|
|
124
|
-
|
|
125
|
-
|
|
66
|
+
opencode --agent frontend # 切换到前端编排中枢
|
|
67
|
+
# 然后说"做一个登录页"
|
|
126
68
|
```
|
|
69
|
+
OpenCode 原生兼容 Claude Code 钩子格式,同样自动触发 `gate-check`。
|
|
127
70
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
| 命令 | 领域 | 专属 Agent |
|
|
131
|
-
|------|------|-----------|
|
|
132
|
-
| **`/backend`** | 后端 | backend-implementer, backend-api/data/service-worker, backend-test-worker, database-specialist, performance-test-worker, security-auditor, api-docs-worker, infra-worker |
|
|
133
|
-
| **`/frontend`** | 前端 | frontend-implementer, frontend-ui/state-worker, frontend-test-worker, browser-test-worker, e2e-test-worker, performance-audit-reviewer, security-auditor, infra-worker |
|
|
134
|
-
| **`/taro`** | Taro 小程序/H5 | taro-worker, taro-ui/state-worker, browser-test-worker, e2e-test-worker |
|
|
135
|
-
| **`/android`** | Android | android-worker, android-ui/state-worker, e2e-test-worker |
|
|
136
|
-
| **`/ios`** | iOS | ios-worker, ios-ui/state-worker, e2e-test-worker |
|
|
137
|
-
| **`/expo`** | Expo 跨端 | react-native-worker, rn-ui/state-worker, browser-test-worker, e2e-test-worker |
|
|
138
|
-
| **`/flutter`** | Flutter | flutter-worker, flutter-ui/state-worker, browser-test-worker, e2e-test-worker |
|
|
139
|
-
|
|
140
|
-
**专项命令**:
|
|
141
|
-
|
|
142
|
-
| 命令 | 用途 |
|
|
143
|
-
|------|------|
|
|
144
|
-
| **`/jarvis`** | 全栈流水线编排(跨领域完整生命周期) |
|
|
145
|
-
| **`/browser-test`** | 浏览器自动化测试闭环(agent-browser) |
|
|
146
|
-
| **`/bug-fix`** | Bug 修复闭环(agent-browser 复现→修复→验证) |
|
|
147
|
-
| **`/review`** | 只读审查模式(不修改文件) |
|
|
148
|
-
| **`/review-fix`** | 审查修复优化闭环(初审→规划→执行→验证→复审) |
|
|
149
|
-
| **`/algorithm-expert`** | 算法专家(选型/复杂度/性能优化) |
|
|
150
|
-
| **`/frontend-architect`** | 前端架构师(技术选型/组件架构/构建策略) |
|
|
151
|
-
| **`/backend-architect`** | 后端架构师(微服务/数据库/分布式) |
|
|
152
|
-
|
|
153
|
-
### OpenCode
|
|
154
|
-
|
|
71
|
+
**Codex:**
|
|
155
72
|
```bash
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
opencode --agent jarvis # 切换至全栈编排中枢
|
|
73
|
+
codex # 启动后加载 jarvis skill
|
|
74
|
+
# 然后说"做一个登录页"
|
|
159
75
|
```
|
|
76
|
+
Codex 钩子在每次 Bash 工具执行后自动触发 gate-check。
|
|
160
77
|
|
|
161
|
-
|
|
78
|
+
### 第四步:查看进度
|
|
162
79
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
| `review-only` | 只读审查 |
|
|
169
|
-
| `review-fix-optimize` | 审查修复闭环 |
|
|
80
|
+
打开 `http://localhost:3456/dashboard` 查看:
|
|
81
|
+
- Gate 进度条(A→B→C→...→E)
|
|
82
|
+
- 点 Gate 行 → 检查条件是否满足
|
|
83
|
+
- 点 **Advance →** 推进到下一 Gate
|
|
84
|
+
- `/agents` 页配置每个子 Agent 的模型
|
|
170
85
|
|
|
171
|
-
###
|
|
86
|
+
### 引擎提供的能力
|
|
172
87
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
88
|
+
| 能力 | 机制 | 自动/手动 |
|
|
89
|
+
|------|------|----------|
|
|
90
|
+
| 每次 Agent spawn 后检查 Gate 条件 | **钩子**(PostToolUse) | 🔄 自动 |
|
|
91
|
+
| 条件不满足时报警 | **钩子** → `gate_enforce` | 🔄 自动 |
|
|
92
|
+
| 推进到下一个 Gate | `jarvis hook gate-advance` | 👆 编排者手动调用 |
|
|
93
|
+
| 跳过 Gate 被拒绝 | **FSM** 硬约束 | 🔄 自动 |
|
|
94
|
+
| 乱序推进被拒绝 | **FSM** 硬约束 | 🔄 自动 |
|
|
95
|
+
| 查看流水线状态 | **Dashboard** / `jarvis hook status` | 👆 按需 |
|
|
96
|
+
| Session 并发控制 | **Leader 选举 + 写锁** | 🔄 自动 |
|
|
97
|
+
|
|
98
|
+
---
|
|
176
99
|
|
|
177
|
-
|
|
100
|
+
## 三平台适配确认
|
|
178
101
|
|
|
179
|
-
|
|
|
180
|
-
|
|
181
|
-
|
|
|
182
|
-
| `
|
|
183
|
-
| `
|
|
184
|
-
|
|
|
102
|
+
| 适配项 | Claude Code | OpenCode | Codex |
|
|
103
|
+
|------|:--:|:--:|:--:|
|
|
104
|
+
| **编排入口** | `/` 命令 | 智能体切换 `--agent` | Skill 加载 |
|
|
105
|
+
| **子 Agent 格式** | `.md` + `tools:` | `.md` + `permission:` | `.toml` + `sandbox_mode` |
|
|
106
|
+
| **Spawn 机制** | `Agent()` | `Task()` | Task via skill |
|
|
107
|
+
| **钩子机制** | `settings.json` hooks | 原生兼容 Claude 格式 | `.codex/hooks.json` |
|
|
108
|
+
| **MCP 引擎连接** | `.mcp.json` `:3456/mcp` | `opencode.json` `:3456/mcp` | `config.toml` `:3456/mcp` |
|
|
109
|
+
| **Playwright MCP** | ✅ 28 tools | ✅ `mcp: playwright: allow` | ✅ config.toml |
|
|
110
|
+
| **e2e/browser-test 边界** | ✅ 明确分离 | ✅ 明确分离 | ✅ 明确分离 |
|
|
111
|
+
| **required_skills** | ✅ 4处 | ✅ 4处 | ✅ jarvis skill |
|
|
112
|
+
| **子 Agent 隔离** | `Skill` tool | `task: deny` (44 agent) | TOML 独立 |
|
|
185
113
|
|
|
186
|
-
|
|
114
|
+
---
|
|
187
115
|
|
|
188
|
-
|
|
116
|
+
## CLI 命令
|
|
189
117
|
|
|
190
118
|
```bash
|
|
191
|
-
|
|
192
|
-
|
|
119
|
+
jarvis # 引导当前目录
|
|
120
|
+
jarvis init [path] -y # 初始化项目
|
|
121
|
+
jarvis add <claude|opencode|codex> # 添加平台(多选)
|
|
122
|
+
jarvis remove <platform> [path] # 移除平台
|
|
123
|
+
jarvis upgrade [path] # 升级配置
|
|
124
|
+
jarvis doctor [path] # 健康检查
|
|
193
125
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
- Claude Code 额外搭配 Preview MCP 做本地开发预览验证
|
|
198
|
-
|
|
199
|
-
## 智能体体系
|
|
200
|
-
|
|
201
|
-
| 类别 | 智能体 |
|
|
202
|
-
|------|--------|
|
|
203
|
-
| **编排中枢(Primary)** | `jarvis`(全栈)、`frontend`、`backend`、`android`、`ios`、`flutter`、`expo`、`taro` |
|
|
204
|
-
| **审查主控(Primary)** | `review-only`(只读)、`review-fix-optimize`(审查修复闭环) |
|
|
205
|
-
| **规划与评审** | `task-design`、`planner`、`review-qa` |
|
|
206
|
-
| **探索与资料** | `repo-explorer`、`docs-researcher` |
|
|
207
|
-
| **架构设计** | `algorithm-expert`、`frontend-architect`、`backend-architect`、`database-specialist` |
|
|
208
|
-
| **审查与修复** | `project-audit-reviewer`、`diff-code-reviewer`、`performance-audit-reviewer`、`security-auditor`、`remediation-planner`、`remediation-worker`、`post-change-reviewer` |
|
|
209
|
-
| **后端实现** | `backend-implementer`、`backend-api-worker`、`backend-service-worker`、`backend-data-worker`、`backend-test-worker` |
|
|
210
|
-
| **前端实现** | `frontend-implementer`、`frontend-ui-worker`、`frontend-state-worker`、`frontend-test-worker` |
|
|
211
|
-
| **移动端** | `taro-worker`、`android-worker`、`ios-worker`、`react-native-worker`(Expo)、`flutter-worker`(各含 ui/state 子变体,共 15 个) |
|
|
212
|
-
| **测试与文档** | `browser-test-worker`、`e2e-test-worker`、`performance-test-worker`、`api-docs-worker` |
|
|
213
|
-
| **基础设施** | `infra-worker` |
|
|
214
|
-
|
|
215
|
-
> **10 个 Primary 智能体**(OpenCode 专属):支持 `opencode --agent <name>` 直接切换,每个都是完整的领域编排中枢,含独立 Gate 闭环。Claude Code 通过 `/command` 等价触发,Codex 通过 Skill 触发。
|
|
216
|
-
|
|
217
|
-
## 技能系统
|
|
218
|
-
|
|
219
|
-
**27 个共享技能**(三平台同步)+ Codex 额外 15 个主流程技能(共 42 个):
|
|
220
|
-
|
|
221
|
-
| 类别 | 技能 |
|
|
222
|
-
|------|------|
|
|
223
|
-
| **基础** | `behavioral-guidelines` `context-engineering` `using-agent-skills` |
|
|
224
|
-
| **需求** | `spec-driven-development` `idea-refine` |
|
|
225
|
-
| **规划** | `planning-and-task-breakdown` |
|
|
226
|
-
| **实现** | `source-driven-development` `incremental-implementation` `test-driven-development` `code-standards` `code-simplification` |
|
|
227
|
-
| **质量** | `code-quality-gate` `code-review-and-quality` `verification-before-completion` |
|
|
228
|
-
| **调试** | `debugging-and-error-recovery` |
|
|
229
|
-
| **浏览器** | `agent-browser` `browser-testing` |
|
|
230
|
-
| **安全** | `security-and-hardening` |
|
|
231
|
-
| **流程** | `shipping-and-launch` `git-workflow-and-versioning` `finishing-a-development-branch` |
|
|
232
|
-
| **文档** | `chinese-documentation` `documentation-and-adrs` `writing-skills` |
|
|
233
|
-
| **探索** | `find-docs` `find-skills` |
|
|
234
|
-
| **工具** | `mcp-builder` |
|
|
235
|
-
|
|
236
|
-
## 目录结构
|
|
126
|
+
jarvis engine start [--dashboard] # 启动编排引擎
|
|
127
|
+
jarvis engine stop # 停止引擎
|
|
128
|
+
jarvis engine status # 引擎状态
|
|
237
129
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
│ ├── claude/ # 47 agents + 15 commands + 27 skills
|
|
242
|
-
│ ├── opencode/ # 55 agents + 27 skills
|
|
243
|
-
│ └── codex/ # 45 agents + 42 skills + config.toml
|
|
244
|
-
├── engine/ # 🧠 引擎层
|
|
245
|
-
│ ├── server.js # MCP HTTP Server
|
|
246
|
-
│ ├── db.js # SQLite 持久化(WAL)
|
|
247
|
-
│ └── gates.js # 状态机 + Agent 定义
|
|
248
|
-
├── web/ # 🌐 Web 层
|
|
249
|
-
│ ├── routes.js # REST API + SSE
|
|
250
|
-
│ └── views/ # Dashboard HTML
|
|
251
|
-
├── templates/ # 📋 MCP + 钩子模板
|
|
252
|
-
├── cli.js # ⌨️ CLI 入口
|
|
253
|
-
├── install.js # 📥 安装 + 钩子注入
|
|
254
|
-
└── hook.js # 🪝 钩子集成
|
|
255
|
-
```
|
|
130
|
+
jarvis hook gate-check # 钩子:检查 Gate 条件
|
|
131
|
+
jarvis hook gate-advance # 钩子:推进 Gate
|
|
132
|
+
jarvis hook status [--json] # 钩子:流水线状态
|
|
256
133
|
|
|
257
|
-
|
|
134
|
+
# 选项:-g 全局 -y 跳过确认 -v 版本 -h 帮助
|
|
135
|
+
```
|
|
258
136
|
|
|
259
|
-
|
|
260
|
-
- **闸门控制** — 每阶段必须满足条件才推进,不可绕过
|
|
261
|
-
- **需求可追溯** — 每条代码变更追溯到 `REQ-XXX`
|
|
262
|
-
- **共享区域唯一责任方** — 避免并行写入冲突
|
|
263
|
-
- **最大并发** — 无依赖任务同消息批量调度
|
|
264
|
-
- **注释语言约定** — 遵循 `behavioral-guidelines` 准则 5
|
|
137
|
+
---
|
|
265
138
|
|
|
266
|
-
##
|
|
139
|
+
## 闭环体系
|
|
267
140
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
141
|
+
| # | 闭环 | 流程 |
|
|
142
|
+
|---|------|------|
|
|
143
|
+
| 1 | **开发** | 实现 → Gate C1 质量门 → Gate C2 测试门 → 失败回退 |
|
|
144
|
+
| 2 | **测试** | 写用例 → agent-browser 执行 → 截图 → 失败→修复→重测 |
|
|
145
|
+
| 3 | **Bug 修复** | Bug → agent-browser 复现 → 定位根因 → 修复 → 验证 |
|
|
146
|
+
| 4 | **审查** | 初审 → 规划 → 执行 → 验证 → 复审关闭 |
|
|
147
|
+
| 5 | **安全** | security-auditor → 威胁建模 + CVE + SAST → 修复 |
|
|
148
|
+
| 6 | **契约** | api-docs-worker 模式A → 对比 auto spec vs 实现 → 标记漂移 |
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## 平台入口速查
|
|
153
|
+
|
|
154
|
+
| 领域 | Claude Code | OpenCode | Codex |
|
|
155
|
+
|------|-----------|----------|-------|
|
|
156
|
+
| 全栈 | `/jarvis` | `--agent jarvis` | `jarvis` skill |
|
|
157
|
+
| 前端 | `/frontend` | `--agent frontend` | `frontend` skill |
|
|
158
|
+
| 后端 | `/backend` | `--agent backend` | `backend` skill |
|
|
159
|
+
| Android | `/android` | `--agent android` | `android` skill |
|
|
160
|
+
| iOS | `/ios` | `--agent ios` | `ios` skill |
|
|
161
|
+
| Flutter | `/flutter` | `--agent flutter` | `flutter` skill |
|
|
162
|
+
| Expo | `/expo` | `--agent expo` | `expo` skill |
|
|
163
|
+
| Taro | `/taro` | `--agent taro` | `taro` skill |
|
|
164
|
+
| 审查 | `/review` | `--agent review-only` | `review-only` skill |
|
|
165
|
+
| 修复闭环 | `/review-fix` | `--agent review-fix-optimize` | `review-fix-optimize` skill |
|
|
166
|
+
| 浏览器测试 | `/browser-test` | spawn browser-test-worker | `browser-test` skill |
|
|
167
|
+
| Bug 修复 | `/bug-fix` | spawn via orchestrator | `bug-fix` skill |
|
|
168
|
+
| 算法专家 | `/algorithm-expert` | `--agent algorithm-expert` | `algorithm-expert` skill |
|
|
169
|
+
| 前端架构 | `/frontend-architect` | `--agent frontend-architect` | `frontend-architect` skill |
|
|
170
|
+
| 后端架构 | `/backend-architect` | `--agent backend-architect` | `backend-architect` skill |
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 统计
|
|
175
|
+
|
|
176
|
+
| | Claude Code | OpenCode | Codex |
|
|
177
|
+
|---|:--:|:--:|:--:|
|
|
178
|
+
| Agents | 47 | 55 | 45 |
|
|
179
|
+
| Commands | 15 | 0 | 0 |
|
|
180
|
+
| Skills | 27 | 27 | 42 |
|
|
181
|
+
| 钩子 | settings.json | 兼容 Claude 格式 | hooks.json |
|
|
182
|
+
|
|
183
|
+
---
|
|
271
184
|
|
|
272
185
|
## License
|
|
273
186
|
|
package/package.json
CHANGED
package/src/doctor.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
|
2
2
|
import { resolve, join } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Check the health of installed Jarvis configurations.
|
|
@@ -52,10 +53,23 @@ export function doctor({ target, platforms, pkgRoot }) {
|
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
console.log('');
|
|
56
|
+
// Check engine status (sync — check PID file)
|
|
57
|
+
const pidFile = resolve(homedir(), '.jarvis', 'engine.pid');
|
|
58
|
+
let engineRunning = false;
|
|
59
|
+
if (existsSync(pidFile)) {
|
|
60
|
+
try { const pid = Number(readFileSync(pidFile, 'utf-8').trim()); process.kill(pid, 0); engineRunning = true; } catch {}
|
|
61
|
+
}
|
|
62
|
+
if (!engineRunning) {
|
|
63
|
+
console.log('\n ⚠️ Engine not running. Gate enforcement is INACTIVE.');
|
|
64
|
+
console.log(' Start it: jarvis engine start [--dashboard]\n');
|
|
65
|
+
allOk = false;
|
|
66
|
+
}
|
|
67
|
+
|
|
55
68
|
if (allOk) {
|
|
56
|
-
console.log(' ✅ All platforms OK\n');
|
|
69
|
+
console.log(' ✅ All platforms OK, engine running\n');
|
|
57
70
|
} else {
|
|
58
|
-
console.log(' ⚠️
|
|
71
|
+
if (!engineRunning) console.log(' ⚠️ Start the engine to enable gate enforcement.\n');
|
|
72
|
+
else console.log(' ⚠️ Some platforms need attention. Run `jarvis add <platform>` to fix.\n');
|
|
59
73
|
}
|
|
60
74
|
}
|
|
61
75
|
|
package/src/hook.js
CHANGED
|
@@ -25,7 +25,12 @@ export async function hookCommand(args) {
|
|
|
25
25
|
const g = await api(`/api/gate/${encodeURIComponent(current)}/enforce`);
|
|
26
26
|
if (g.allowed) { console.log(`✅ ${current} — OK`); process.exit(0); }
|
|
27
27
|
else { console.log(`🚫 ${current} BLOCKED — ${g.required}`); process.exit(1); }
|
|
28
|
-
} catch (e) {
|
|
28
|
+
} catch (e) {
|
|
29
|
+
// Engine not running — warn loudly so user knows enforcement is absent
|
|
30
|
+
console.error(`\n⚠️ Jarvis Engine is NOT running. Gate enforcement is INACTIVE.`);
|
|
31
|
+
console.error(` Start it: jarvis engine start\n`);
|
|
32
|
+
process.exit(2); // Exit 2 = block (Claude Code treats exit 2 as feedback)
|
|
33
|
+
}
|
|
29
34
|
}
|
|
30
35
|
|
|
31
36
|
else if (sub === 'gate-advance') {
|
|
@@ -34,7 +39,11 @@ export async function hookCommand(args) {
|
|
|
34
39
|
const g = await r.json();
|
|
35
40
|
if (g.allowed) { console.log(`🚀 ${g.previous} → ${g.current}${g.next ? ` (next: ${g.next})` : ''}`); process.exit(0); }
|
|
36
41
|
else { console.log(`🚫 BLOCKED — ${g.error}`); process.exit(1); }
|
|
37
|
-
} catch (e) {
|
|
42
|
+
} catch (e) {
|
|
43
|
+
console.error(`\n⚠️ Jarvis Engine is NOT running. Cannot advance gate.`);
|
|
44
|
+
console.error(` Start it: jarvis engine start\n`);
|
|
45
|
+
process.exit(2);
|
|
46
|
+
}
|
|
38
47
|
}
|
|
39
48
|
|
|
40
49
|
else if (sub === 'status') {
|
|
@@ -43,7 +52,10 @@ export async function hookCommand(args) {
|
|
|
43
52
|
if (args.includes('--json')) console.log(JSON.stringify(p, null, 2));
|
|
44
53
|
else console.log(p._display || `${p.current_gate}`);
|
|
45
54
|
process.exit(0);
|
|
46
|
-
} catch (e) {
|
|
55
|
+
} catch (e) {
|
|
56
|
+
console.log('Engine: not running. Start with: jarvis engine start');
|
|
57
|
+
process.exit(0);
|
|
58
|
+
}
|
|
47
59
|
}
|
|
48
60
|
|
|
49
61
|
else {
|
|
@@ -13,7 +13,7 @@ description: 启动贾维斯编排模式——需求→文档→任务→计划
|
|
|
13
13
|
Gate C1 时加载:`Skill("code-quality-gate")`
|
|
14
14
|
Gate E 时加载:`Skill("shipping-and-launch")` `Skill("git-workflow-and-versioning")` `Skill("finishing-a-development-branch")`
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
**引擎驱动**:引擎运行后,MCP 工具自动可用。每个 Gate 工作完成后调用 `mcp__jarvis-engine__gate_enforce` 验证条件,通过后调用 `mcp__jarvis-engine__advance_gate` 推进硬状态机。
|
|
17
17
|
|
|
18
18
|
2. 判断当前需求是否适合流水线:
|
|
19
19
|
- ❌ **不适合**:用户提问信息量("有多少模块?")、明确要求单 agent 执行、纯文档格式化翻译
|
|
@@ -112,7 +112,7 @@ Batch 3: [TASK-005, TASK-006] ← 依赖 Batch 2 完成
|
|
|
112
112
|
|
|
113
113
|
## 🟠 Gate C1:代码质量门(不可绕过)
|
|
114
114
|
|
|
115
|
-
实现完成后的第一道质量门。**不可绕过。** 加载 `Skill("code-quality-gate")` 执行四项检查(Lint → Type-check → Build → Deps Audit),按技能中的项目类型工具链表选择命令。全部通过后输出质量检查摘要,作为 Gate C2 前置输入。通过后 `
|
|
115
|
+
实现完成后的第一道质量门。**不可绕过。** 加载 `Skill("code-quality-gate")` 执行四项检查(Lint → Type-check → Build → Deps Audit),按技能中的项目类型工具链表选择命令。全部通过后输出质量检查摘要,作为 Gate C2 前置输入。通过后 `mcp__jarvis-engine__advance_gate({ gate: "Gate C2" })`。
|
|
116
116
|
|
|
117
117
|
必须**全部**满足才能进入 Gate C2:
|
|
118
118
|
- [ ] **Lint 零错误**(warning 可接受但需记录)
|
|
@@ -176,7 +176,7 @@ Gate C1(+ Gate C1.5 如适用)通过后方可进入此门。
|
|
|
176
176
|
│ └── spawn e2e-test-worker
|
|
177
177
|
│
|
|
178
178
|
├── 步骤 6:测试结果汇总 → docs/testing/...
|
|
179
|
-
├── Gate C2 通过 → `
|
|
179
|
+
├── Gate C2 通过 → `mcp__jarvis-engine__advance_gate({ gate: "Gate D" })` → 进入 Gate D 评审
|
|
180
180
|
```
|
|
181
181
|
|
|
182
182
|
### test_after 策略规范
|