code-abyss 1.6.16 → 1.7.1
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 +8 -6
- package/bin/install.js +59 -163
- package/bin/lib/ccline.js +82 -0
- package/bin/lib/utils.js +61 -0
- package/package.json +5 -2
- package/skills/SKILL.md +24 -16
- package/skills/domains/ai/SKILL.md +2 -2
- package/skills/domains/ai/prompt-and-eval.md +279 -0
- package/skills/domains/architecture/SKILL.md +2 -3
- package/skills/domains/architecture/security-arch.md +87 -0
- package/skills/domains/data-engineering/SKILL.md +188 -26
- package/skills/domains/development/SKILL.md +1 -4
- package/skills/domains/devops/SKILL.md +3 -5
- package/skills/domains/devops/performance.md +63 -0
- package/skills/domains/devops/testing.md +97 -0
- package/skills/domains/frontend-design/SKILL.md +12 -3
- package/skills/domains/frontend-design/claymorphism/SKILL.md +117 -0
- package/skills/domains/frontend-design/claymorphism/references/tokens.css +52 -0
- package/skills/domains/frontend-design/engineering.md +287 -0
- package/skills/domains/frontend-design/glassmorphism/SKILL.md +138 -0
- package/skills/domains/frontend-design/glassmorphism/references/tokens.css +32 -0
- package/skills/domains/frontend-design/liquid-glass/SKILL.md +135 -0
- package/skills/domains/frontend-design/liquid-glass/references/tokens.css +81 -0
- package/skills/domains/frontend-design/neubrutalism/SKILL.md +141 -0
- package/skills/domains/frontend-design/neubrutalism/references/tokens.css +44 -0
- package/skills/domains/infrastructure/SKILL.md +174 -34
- package/skills/domains/mobile/SKILL.md +211 -21
- package/skills/domains/orchestration/SKILL.md +1 -0
- package/skills/domains/security/SKILL.md +4 -6
- package/skills/domains/security/blue-team.md +57 -0
- package/skills/domains/security/red-team.md +54 -0
- package/skills/domains/security/threat-intel.md +50 -0
- package/skills/orchestration/multi-agent/SKILL.md +195 -46
- package/skills/run_skill.js +139 -0
- package/skills/tools/gen-docs/SKILL.md +6 -4
- package/skills/tools/gen-docs/scripts/doc_generator.js +363 -0
- package/skills/tools/lib/shared.js +98 -0
- package/skills/tools/verify-change/SKILL.md +8 -6
- package/skills/tools/verify-change/scripts/change_analyzer.js +289 -0
- package/skills/tools/verify-module/SKILL.md +6 -4
- package/skills/tools/verify-module/scripts/module_scanner.js +171 -0
- package/skills/tools/verify-quality/SKILL.md +5 -3
- package/skills/tools/verify-quality/scripts/quality_checker.js +337 -0
- package/skills/tools/verify-security/SKILL.md +7 -5
- package/skills/tools/verify-security/scripts/security_scanner.js +283 -0
- package/skills/__pycache__/run_skill.cpython-312.pyc +0 -0
- package/skills/domains/COVERAGE_PLAN.md +0 -232
- package/skills/domains/ai/model-evaluation.md +0 -790
- package/skills/domains/ai/prompt-engineering.md +0 -703
- package/skills/domains/architecture/compliance.md +0 -299
- package/skills/domains/architecture/data-security.md +0 -184
- package/skills/domains/data-engineering/data-pipeline.md +0 -762
- package/skills/domains/data-engineering/data-quality.md +0 -894
- package/skills/domains/data-engineering/stream-processing.md +0 -791
- package/skills/domains/development/dart.md +0 -963
- package/skills/domains/development/kotlin.md +0 -834
- package/skills/domains/development/php.md +0 -659
- package/skills/domains/development/swift.md +0 -755
- package/skills/domains/devops/e2e-testing.md +0 -914
- package/skills/domains/devops/performance-testing.md +0 -734
- package/skills/domains/devops/testing-strategy.md +0 -667
- package/skills/domains/frontend-design/build-tools.md +0 -743
- package/skills/domains/frontend-design/performance.md +0 -734
- package/skills/domains/frontend-design/testing.md +0 -699
- package/skills/domains/infrastructure/gitops.md +0 -735
- package/skills/domains/infrastructure/iac.md +0 -855
- package/skills/domains/infrastructure/kubernetes.md +0 -1018
- package/skills/domains/mobile/android-dev.md +0 -979
- package/skills/domains/mobile/cross-platform.md +0 -795
- package/skills/domains/mobile/ios-dev.md +0 -931
- package/skills/domains/security/secrets-management.md +0 -834
- package/skills/domains/security/supply-chain.md +0 -931
- package/skills/domains/security/threat-modeling.md +0 -828
- package/skills/run_skill.py +0 -153
- package/skills/tests/README.md +0 -225
- package/skills/tests/SUMMARY.md +0 -362
- package/skills/tests/__init__.py +0 -3
- package/skills/tests/__pycache__/test_change_analyzer.cpython-312.pyc +0 -0
- package/skills/tests/__pycache__/test_doc_generator.cpython-312.pyc +0 -0
- package/skills/tests/__pycache__/test_module_scanner.cpython-312.pyc +0 -0
- package/skills/tests/__pycache__/test_quality_checker.cpython-312.pyc +0 -0
- package/skills/tests/__pycache__/test_security_scanner.cpython-312.pyc +0 -0
- package/skills/tests/test_change_analyzer.py +0 -558
- package/skills/tests/test_doc_generator.py +0 -538
- package/skills/tests/test_module_scanner.py +0 -376
- package/skills/tests/test_quality_checker.py +0 -516
- package/skills/tests/test_security_scanner.py +0 -426
- package/skills/tools/gen-docs/scripts/__pycache__/doc_generator.cpython-312.pyc +0 -0
- package/skills/tools/gen-docs/scripts/doc_generator.py +0 -520
- package/skills/tools/verify-change/scripts/__pycache__/change_analyzer.cpython-312.pyc +0 -0
- package/skills/tools/verify-change/scripts/change_analyzer.py +0 -529
- package/skills/tools/verify-module/scripts/__pycache__/module_scanner.cpython-312.pyc +0 -0
- package/skills/tools/verify-module/scripts/module_scanner.py +0 -321
- package/skills/tools/verify-quality/scripts/__pycache__/quality_checker.cpython-312.pyc +0 -0
- package/skills/tools/verify-quality/scripts/quality_checker.py +0 -481
- package/skills/tools/verify-security/scripts/__pycache__/security_scanner.cpython-312.pyc +0 -0
- package/skills/tools/verify-security/scripts/security_scanner.py +0 -374
|
@@ -1,10 +1,37 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: multi-agent
|
|
3
|
-
description: 天罗秘典·多Agent
|
|
3
|
+
description: 天罗秘典·多Agent协同。融合蚁群仿生设计,定义Agent角色、生命周期、信息素通信、任务分解、冲突解决。当需要多Agent并行协作时路由到此。
|
|
4
|
+
license: MIT
|
|
4
5
|
---
|
|
5
6
|
|
|
6
|
-
# 🕸 天罗秘典 · 多 Agent
|
|
7
|
+
# 🕸 天罗秘典 · 多 Agent 协同(蚁群仿生版)
|
|
7
8
|
|
|
9
|
+
> 参考蚁群仿生架构:侦察→工作→审查→修复→完成,信息素间接通信,自适应并发。
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 蚁群生命周期
|
|
14
|
+
|
|
15
|
+
所有多 Agent 协同任务遵循统一生命周期:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
目标 → 侦察(Scout) → 任务池 → 工蚁(Worker)并行执行 → 兵蚁(Soldier)审查 → 修复(如需) → 完成
|
|
19
|
+
│ │
|
|
20
|
+
│ 信息素衰减(过时信息自动失效) │ 子任务自动产生
|
|
21
|
+
└───────────────────────────┘
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### 阶段定义
|
|
25
|
+
|
|
26
|
+
| 阶段 | 角色 | 动作 | 产出 |
|
|
27
|
+
|------|------|------|------|
|
|
28
|
+
| 🔍 侦察 | Scout | 探索代码库,标记关键文件和依赖 | 任务池 + 依赖图 |
|
|
29
|
+
| ⚒️ 工作 | Worker | 并行执行任务,可产生子任务 | 代码变更 + 进度信息素 |
|
|
30
|
+
| 🛡️ 审查 | Soldier | 审查所有变更,发现问题 | 修复任务 / 通过 |
|
|
31
|
+
| 🔧 修复 | Worker | 执行审查产生的修复任务 | 修复后的代码 |
|
|
32
|
+
| ✅ 完成 | Lead | 汇总报告,统一 commit | 最终交付 |
|
|
33
|
+
|
|
34
|
+
---
|
|
8
35
|
|
|
9
36
|
## 何时启用多 Agent
|
|
10
37
|
|
|
@@ -36,6 +63,92 @@ description: 天罗秘典·多Agent协同。定义Agent角色、任务分解、
|
|
|
36
63
|
|
|
37
64
|
---
|
|
38
65
|
|
|
66
|
+
## 角色体系(蚁群映射)
|
|
67
|
+
|
|
68
|
+
| 角色 | 蚁群映射 | 道语 | 职责 | 工具权限 | 模型建议 |
|
|
69
|
+
|------|----------|------|------|----------|----------|
|
|
70
|
+
| 主修 (Lead) | 蚁后 Queen | 天罗主修 | 任务分解、调度、汇总 | TaskCreate/TaskUpdate/SendMessage | 当前模型 |
|
|
71
|
+
| 斥候 (Scout) | 侦察蚁 Scout | 天罗斥候 | 只读探索,标记关键文件 | Read/Grep/Glob(只读) | haiku(快速低成本) |
|
|
72
|
+
| 道侣 (Worker) | 工蚁 Worker | 天罗道侣 | 执行任务,可产生子任务 | Read/Write/Edit/Bash/SendMessage | sonnet/当前模型 |
|
|
73
|
+
| 护法 (Soldier) | 兵蚁 Soldier | 天罗护法 | 审查质量,发现问题 | Read/Grep/Glob/SendMessage(只读) | sonnet |
|
|
74
|
+
| 走卒 (Drone) | 无人蚁 Drone | 天罗走卒 | 简单 bash 命令,零 LLM 成本 | Bash(仅此一个) | 无(execSync) |
|
|
75
|
+
|
|
76
|
+
### 角色使用时机
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
需要了解代码库结构? → 派 Scout(Task subagent_type=Explore, model=haiku)
|
|
80
|
+
需要修改代码? → 派 Worker(Task subagent_type=general-purpose)
|
|
81
|
+
需要审查变更? → 派 Soldier(Task subagent_type=general-purpose, 只读 prompt)
|
|
82
|
+
需要跑命令? → 直接 Bash(Drone 等价)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 信息素系统(Stigmergy)
|
|
88
|
+
|
|
89
|
+
蚁群通过信息素间接通信,而非直接对话。在 Claude Code 中,用 **TaskCreate metadata** 模拟信息素:
|
|
90
|
+
|
|
91
|
+
### 信息素类型
|
|
92
|
+
|
|
93
|
+
| 类型 | 释放者 | 含义 | 用途 |
|
|
94
|
+
|------|--------|------|------|
|
|
95
|
+
| `discovery` | Scout | 发现的代码结构、关键文件 | 帮助 Worker 快速定位 |
|
|
96
|
+
| `progress` | Worker | 完成的变更、修改的文件 | 帮助后续 Worker 避免冲突 |
|
|
97
|
+
| `warning` | Soldier | 质量问题、冲突风险 | 降低相关任务优先级 |
|
|
98
|
+
| `completion` | Worker | 任务完成标记 | 强化成功路径 |
|
|
99
|
+
| `repellent` | 任意 | 失败路径标记(负信息素) | 阻止后续 Agent 走同一条死路 |
|
|
100
|
+
|
|
101
|
+
### 实现方式
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
# Scout 完成后,在 TaskUpdate 的 metadata 中记录发现
|
|
105
|
+
TaskUpdate(taskId, metadata: {
|
|
106
|
+
pheromone: "discovery",
|
|
107
|
+
files: ["src/auth.ts", "src/middleware.ts"],
|
|
108
|
+
content: "认证模块依赖 middleware,需先改 middleware"
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
# Worker 失败后,释放负信息素
|
|
112
|
+
TaskUpdate(taskId, metadata: {
|
|
113
|
+
pheromone: "repellent",
|
|
114
|
+
files: ["src/legacy.ts"],
|
|
115
|
+
content: "此文件有循环依赖,直接修改会崩溃"
|
|
116
|
+
})
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 信息素决策规则
|
|
120
|
+
|
|
121
|
+
| 规则 | 说明 |
|
|
122
|
+
|------|------|
|
|
123
|
+
| **正强化** | discovery/completion 信息素的文件 → 优先分配 |
|
|
124
|
+
| **负惩罚** | warning 信息素的文件 → 降低优先级 |
|
|
125
|
+
| **强负惩罚** | repellent 信息素的文件 → 避免分配,需主修评估 |
|
|
126
|
+
| **ε-greedy** | 90% 按信息素强度选任务,10% 随机选 → 避免全挤同一条路 |
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 自适应并发
|
|
131
|
+
|
|
132
|
+
根据任务数量和复杂度动态调整 Agent 数量:
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
任务数 1-2 → 1-2 个 Worker(直接 Task subagent)
|
|
136
|
+
任务数 3-5 → TeamCreate, 2-3 个 Worker
|
|
137
|
+
任务数 6-10 → TeamCreate, 3-5 个 Worker
|
|
138
|
+
任务数 >10 → TeamCreate, 5-7 个 Worker(上限)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 过载保护
|
|
142
|
+
|
|
143
|
+
| 信号 | 动作 |
|
|
144
|
+
|------|------|
|
|
145
|
+
| Agent 连续失败 ≥2 次 | 减少并发,释放 repellent 信息素 |
|
|
146
|
+
| 429 限流 | 暂停派发,等待恢复后继续 |
|
|
147
|
+
| 所有任务完成 | 立即进入审查阶段 |
|
|
148
|
+
| 子任务膨胀 >30 | 停止产生新子任务,先完成现有 |
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
39
152
|
## TeamCreate 最佳实践
|
|
40
153
|
|
|
41
154
|
### 命名规范
|
|
@@ -46,14 +159,6 @@ agent_type: "{角色}" # 如 "lead", "developer", "reviewer"
|
|
|
46
159
|
description: "一句话说明团队目标"
|
|
47
160
|
```
|
|
48
161
|
|
|
49
|
-
### 角色定义
|
|
50
|
-
|
|
51
|
-
| 角色 | 道语 | 职责 | 工具权限 |
|
|
52
|
-
|------|------|------|----------|
|
|
53
|
-
| 主修 (Lead) | 天罗主修 | 任务分解、进度追踪、结果汇总 | TaskCreate/TaskUpdate/SendMessage |
|
|
54
|
-
| 道侣 (Worker) | 天罗道侣 | 执行具体子任务、报告进度 | Read/Write/Edit/Bash/SendMessage |
|
|
55
|
-
| 护法 (Reviewer) | 天罗护法 | 代码审查、质量校验、冲突检测 | Read/Grep/Glob/SendMessage |
|
|
56
|
-
|
|
57
162
|
---
|
|
58
163
|
|
|
59
164
|
## 任务分解策略
|
|
@@ -78,14 +183,24 @@ Agent-后端: src/api/
|
|
|
78
183
|
Agent-基础: src/lib/
|
|
79
184
|
```
|
|
80
185
|
|
|
81
|
-
###
|
|
186
|
+
### 按流水线拆分(蚁群生命周期)
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
Scout(侦察) → Worker(执行) → Soldier(审查) → Worker(修复) → Lead(汇总)
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### 依赖感知调度
|
|
82
193
|
|
|
83
|
-
|
|
194
|
+
分配任务前,分析文件依赖关系:
|
|
84
195
|
|
|
85
196
|
```
|
|
86
|
-
|
|
197
|
+
文件A import 文件B?
|
|
198
|
+
├─ 是 → B 的任务必须先完成,A 的任务标记 blocked
|
|
199
|
+
└─ 否 → 可并行
|
|
87
200
|
```
|
|
88
201
|
|
|
202
|
+
**依赖深度优先**:被更多文件依赖的(底层模块)优先处理。
|
|
203
|
+
|
|
89
204
|
---
|
|
90
205
|
|
|
91
206
|
## 并行 vs 串行决策
|
|
@@ -98,41 +213,47 @@ Agent-生成 → Agent-校验 → Agent-集成
|
|
|
98
213
|
└─ 是(都写)→ 严格串行,或拆分文件区域
|
|
99
214
|
```
|
|
100
215
|
|
|
101
|
-
### 依赖矩阵示例
|
|
102
|
-
|
|
103
|
-
| | Task-A | Task-B | Task-C |
|
|
104
|
-
|---|--------|--------|--------|
|
|
105
|
-
| Task-A | - | 无依赖 | 无依赖 |
|
|
106
|
-
| Task-B | 无依赖 | - | B→C |
|
|
107
|
-
| Task-C | 无依赖 | B→C | - |
|
|
108
|
-
|
|
109
|
-
结论:A 与 B 并行,C 等 B 完成后执行。
|
|
110
|
-
|
|
111
216
|
---
|
|
112
217
|
|
|
113
218
|
## Agent 角色模板
|
|
114
219
|
|
|
115
|
-
### 主修(Lead)启动模板
|
|
220
|
+
### 主修(Lead / Queen)启动模板
|
|
116
221
|
|
|
117
222
|
```
|
|
118
|
-
|
|
223
|
+
你是天罗主修(蚁后),负责协调多 Agent 协同任务。
|
|
119
224
|
|
|
120
|
-
|
|
121
|
-
1.
|
|
122
|
-
2.
|
|
123
|
-
3.
|
|
124
|
-
4.
|
|
225
|
+
生命周期:
|
|
226
|
+
1. 侦察阶段:派 Scout 探索代码库
|
|
227
|
+
2. 工作阶段:根据侦察结果分配 Worker 并行执行
|
|
228
|
+
3. 审查阶段:派 Soldier 审查所有变更
|
|
229
|
+
4. 修复阶段:如有问题,派 Worker 修复
|
|
230
|
+
5. 汇总阶段:收集结果,统一 commit
|
|
125
231
|
|
|
126
232
|
铁律:
|
|
127
233
|
- 每个文件只能分配给一个 Agent
|
|
128
234
|
- 独立任务必须并行启动
|
|
129
|
-
-
|
|
235
|
+
- 关注信息素:discovery 优先分配,repellent 避免分配
|
|
236
|
+
- 收到所有道侣完成消息后才能进入审查
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### 斥候(Scout)启动模板
|
|
240
|
+
|
|
241
|
+
```
|
|
242
|
+
你是天罗斥候(侦察蚁),负责探索代码库。
|
|
243
|
+
|
|
244
|
+
职责:
|
|
245
|
+
1. 快速扫描项目结构和关键文件
|
|
246
|
+
2. 识别文件间的依赖关系
|
|
247
|
+
3. 标记需要修改的文件和潜在风险
|
|
248
|
+
4. 输出发现(discovery 信息素)
|
|
249
|
+
|
|
250
|
+
限制:只读操作,不修改任何文件。
|
|
130
251
|
```
|
|
131
252
|
|
|
132
253
|
### 道侣(Worker)启动模板
|
|
133
254
|
|
|
134
255
|
```
|
|
135
|
-
|
|
256
|
+
你是天罗道侣(工蚁),负责执行分配的子任务。
|
|
136
257
|
|
|
137
258
|
职责:
|
|
138
259
|
1. 严格按照分配的文件列表操作
|
|
@@ -142,7 +263,23 @@ Agent-生成 → Agent-校验 → Agent-集成
|
|
|
142
263
|
|
|
143
264
|
报告格式:
|
|
144
265
|
- 完成:列出创建/修改的文件 + 行数
|
|
145
|
-
- 阻塞:说明原因 +
|
|
266
|
+
- 阻塞:说明原因 + 建议方案(释放 warning 信息素)
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### 护法(Soldier)启动模板
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
你是天罗护法(兵蚁),负责审查所有变更。
|
|
273
|
+
|
|
274
|
+
职责:
|
|
275
|
+
1. 审查所有 Worker 的变更
|
|
276
|
+
2. 检查代码质量、安全性、一致性
|
|
277
|
+
3. 发现问题则生成修复任务
|
|
278
|
+
4. 无问题则确认通过
|
|
279
|
+
|
|
280
|
+
输出:
|
|
281
|
+
- 通过:确认所有变更合格
|
|
282
|
+
- 问题:列出问题 + 修复建议(释放 warning 信息素)
|
|
146
283
|
```
|
|
147
284
|
|
|
148
285
|
---
|
|
@@ -161,10 +298,11 @@ Agent-生成 → Agent-校验 → Agent-集成
|
|
|
161
298
|
|
|
162
299
|
| 事件 | 发送者 | 接收者 | 内容 |
|
|
163
300
|
|------|--------|--------|------|
|
|
164
|
-
|
|
|
165
|
-
|
|
|
301
|
+
| 侦察完成 | Scout | 主修 | 文件清单 + 依赖图 + discovery 信息素 |
|
|
302
|
+
| 任务分配 | 主修 | 道侣 | 文件列表 + 要求 + 相关信息素 |
|
|
166
303
|
| 任务完成 | 道侣 | 主修 | 文件清单 + 验证结果 |
|
|
167
|
-
| 遇阻报告 | 道侣 | 主修 | 阻塞原因 +
|
|
304
|
+
| 遇阻报告 | 道侣 | 主修 | 阻塞原因 + warning/repellent 信息素 |
|
|
305
|
+
| 审查完成 | 护法 | 主修 | 通过/问题列表 |
|
|
168
306
|
| 汇总指令 | 主修 | 全体 | broadcast 进入汇总阶段 |
|
|
169
307
|
|
|
170
308
|
---
|
|
@@ -183,6 +321,7 @@ Agent-生成 → Agent-校验 → Agent-集成
|
|
|
183
321
|
1. **分配时锁定** — 主修分配任务时明确文件归属
|
|
184
322
|
2. **声明式锁定** — 道侣开始前声明要操作的文件
|
|
185
323
|
3. **冲突检测** — 主修检查文件分配无重叠后才启动
|
|
324
|
+
4. **依赖感知** — 文件 A import 文件 B,则 A 和 B 不可同时修改
|
|
186
325
|
|
|
187
326
|
### 冲突解决
|
|
188
327
|
|
|
@@ -190,7 +329,8 @@ Agent-生成 → Agent-校验 → Agent-集成
|
|
|
190
329
|
|----------|----------|
|
|
191
330
|
| 两个 Agent 需写同一文件 | 串行执行,先完成的先写 |
|
|
192
331
|
| 写入内容矛盾 | 主修裁决,以业务逻辑为准 |
|
|
193
|
-
| 依赖文件未就绪 |
|
|
332
|
+
| 依赖文件未就绪 | 标记 blocked,主修协调优先级 |
|
|
333
|
+
| 循环依赖 | 释放 repellent 信息素,主修手动拆解 |
|
|
194
334
|
|
|
195
335
|
---
|
|
196
336
|
|
|
@@ -200,8 +340,9 @@ Agent-生成 → Agent-校验 → Agent-集成
|
|
|
200
340
|
|
|
201
341
|
```
|
|
202
342
|
TaskCreate: 主修创建总任务 + 子任务
|
|
203
|
-
TaskUpdate: 道侣更新子任务状态
|
|
343
|
+
TaskUpdate: 道侣更新子任务状态 + metadata(信息素)
|
|
204
344
|
TaskList: 主修查看全局进度
|
|
345
|
+
TaskGet: 查看任务详情 + 信息素
|
|
205
346
|
```
|
|
206
347
|
|
|
207
348
|
### 状态流转
|
|
@@ -218,9 +359,9 @@ pending → in_progress → completed
|
|
|
218
359
|
### 单 Agent 失败
|
|
219
360
|
|
|
220
361
|
```
|
|
221
|
-
道侣失败 → 报告主修 → 主修评估影响
|
|
362
|
+
道侣失败 → 释放 repellent 信息素 → 报告主修 → 主修评估影响
|
|
222
363
|
├─ 可重试 → 同一道侣重试(≤2次)
|
|
223
|
-
├─ 需换策略 →
|
|
364
|
+
├─ 需换策略 → 主修调整方案后重新分配(参考 repellent 避开死路)
|
|
224
365
|
└─ 不可恢复 → 主修接管该子任务
|
|
225
366
|
```
|
|
226
367
|
|
|
@@ -241,14 +382,16 @@ pending → in_progress → completed
|
|
|
241
382
|
|
|
242
383
|
## 结果汇总模式
|
|
243
384
|
|
|
244
|
-
###
|
|
385
|
+
### 汇总流程(蚁群版)
|
|
245
386
|
|
|
246
387
|
```
|
|
247
388
|
1. 收集所有道侣完成报告
|
|
248
|
-
2.
|
|
249
|
-
3.
|
|
250
|
-
4.
|
|
251
|
-
5.
|
|
389
|
+
2. 派护法审查所有变更(可选,变更 >3 个文件时建议)
|
|
390
|
+
3. 如有修复任务,派道侣修复
|
|
391
|
+
4. 验证文件完整性(所有预期文件存在)
|
|
392
|
+
5. 验证内容一致性(交叉引用正确)
|
|
393
|
+
6. 统一 git add + commit
|
|
394
|
+
7. 输出汇总报告
|
|
252
395
|
```
|
|
253
396
|
|
|
254
397
|
### 统一 Commit 规范
|
|
@@ -268,7 +411,13 @@ Co-authored-by: Agent-B"
|
|
|
268
411
|
🕸 天罗收阵!
|
|
269
412
|
|
|
270
413
|
【阵法】{团队名称}
|
|
271
|
-
【阵员】{Agent数量} 道侣
|
|
414
|
+
【阵员】{Agent数量} 道侣 + {Scout数} 斥候 + {Soldier数} 护法
|
|
415
|
+
【生命周期】侦察 → 工作 → 审查 → 完成
|
|
416
|
+
【信息素】
|
|
417
|
+
- discovery: {数量} 条
|
|
418
|
+
- completion: {数量} 条
|
|
419
|
+
- warning: {数量} 条
|
|
420
|
+
- repellent: {数量} 条
|
|
272
421
|
【战果】
|
|
273
422
|
- Agent-A: {文件数} 文件,{行数} 行
|
|
274
423
|
- Agent-B: {文件数} 文件,{行数} 行
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Skills 运行入口
|
|
4
|
+
* 跨平台统一调用各 skill 脚本
|
|
5
|
+
*
|
|
6
|
+
* 用法:
|
|
7
|
+
* node run_skill.js <skill_name> [args...]
|
|
8
|
+
*
|
|
9
|
+
* 示例:
|
|
10
|
+
* node run_skill.js verify-module ./my-project -v
|
|
11
|
+
* node run_skill.js verify-security ./src --json
|
|
12
|
+
* node run_skill.js verify-change --mode staged
|
|
13
|
+
* node run_skill.js verify-quality ./src
|
|
14
|
+
* node run_skill.js gen-docs ./new-module --force
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
const { spawn } = require('child_process');
|
|
18
|
+
const { readdirSync, statSync, writeFileSync, unlinkSync, closeSync, openSync } = require('fs');
|
|
19
|
+
const { join, resolve } = require('path');
|
|
20
|
+
const { createHash } = require('crypto');
|
|
21
|
+
const { tmpdir } = require('os');
|
|
22
|
+
|
|
23
|
+
const IS_WIN = process.platform === 'win32';
|
|
24
|
+
|
|
25
|
+
function getSkillsDir() {
|
|
26
|
+
const override = process.env.SAGE_SKILLS_DIR;
|
|
27
|
+
if (override) return resolve(override);
|
|
28
|
+
return __dirname;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function discoverSkills(skillsDir) {
|
|
32
|
+
const found = {};
|
|
33
|
+
const toolsDir = join(skillsDir, 'tools');
|
|
34
|
+
let entries;
|
|
35
|
+
try { entries = readdirSync(toolsDir).sort(); } catch { return found; }
|
|
36
|
+
|
|
37
|
+
for (const name of entries) {
|
|
38
|
+
const scriptsDir = join(toolsDir, name, 'scripts');
|
|
39
|
+
let scripts;
|
|
40
|
+
try { scripts = readdirSync(scriptsDir); } catch { continue; }
|
|
41
|
+
const jsFile = scripts.find(f => f.endsWith('.js'));
|
|
42
|
+
if (jsFile) found[name] = join(scriptsDir, jsFile);
|
|
43
|
+
}
|
|
44
|
+
return found;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function getScriptPath(skillName) {
|
|
48
|
+
const available = discoverSkills(getSkillsDir());
|
|
49
|
+
if (!(skillName in available)) {
|
|
50
|
+
const names = Object.keys(available).join(', ') || '(无)';
|
|
51
|
+
console.error(`错误: 未知的 skill '${skillName}'`);
|
|
52
|
+
console.error(`可用的 skills: ${names}`);
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
return available[skillName];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function acquireTargetLock(args) {
|
|
59
|
+
const target = args.find(a => !a.startsWith('-')) || process.cwd();
|
|
60
|
+
const hash = createHash('md5').update(resolve(target)).digest('hex').slice(0, 12);
|
|
61
|
+
const lockPath = join(tmpdir(), `sage_skill_${hash}.lock`);
|
|
62
|
+
|
|
63
|
+
try {
|
|
64
|
+
const fd = openSync(lockPath, 'wx');
|
|
65
|
+
return { fd, lockPath };
|
|
66
|
+
} catch (e) {
|
|
67
|
+
if (e.code === 'EEXIST') {
|
|
68
|
+
console.log(`⏳ 等待锁释放: ${target}`);
|
|
69
|
+
// 异步轮询等待,最多 30s
|
|
70
|
+
const deadline = Date.now() + 30000;
|
|
71
|
+
const poll = () => {
|
|
72
|
+
if (Date.now() >= deadline) { console.error(`⏳ 等待锁超时: ${target}`); process.exit(1); }
|
|
73
|
+
try {
|
|
74
|
+
const fd = openSync(lockPath, 'wx');
|
|
75
|
+
return { fd, lockPath };
|
|
76
|
+
} catch { /* still locked */ }
|
|
77
|
+
return null;
|
|
78
|
+
};
|
|
79
|
+
const result = poll();
|
|
80
|
+
if (result) return result;
|
|
81
|
+
return new Promise((resolve) => {
|
|
82
|
+
const timer = setInterval(() => {
|
|
83
|
+
const r = poll();
|
|
84
|
+
if (r) { clearInterval(timer); resolve(r); }
|
|
85
|
+
}, 200);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
// 其他错误,忽略锁继续执行
|
|
89
|
+
return { fd: null, lockPath: null };
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function releaseLock({ fd, lockPath }) {
|
|
94
|
+
if (fd !== null) {
|
|
95
|
+
try { closeSync(fd); } catch {}
|
|
96
|
+
}
|
|
97
|
+
if (lockPath) {
|
|
98
|
+
try { unlinkSync(lockPath); } catch {}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function main() {
|
|
103
|
+
const args = process.argv.slice(2);
|
|
104
|
+
|
|
105
|
+
if (args.length === 0 || args[0] === '-h' || args[0] === '--help') {
|
|
106
|
+
console.log(__filename.split('/').pop() + ' <skill_name> [args...]');
|
|
107
|
+
process.exit(args.length === 0 ? 1 : 0);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const skillName = args[0];
|
|
111
|
+
const scriptPath = getScriptPath(skillName);
|
|
112
|
+
const scriptArgs = args.slice(1);
|
|
113
|
+
|
|
114
|
+
const lock = acquireTargetLock(scriptArgs);
|
|
115
|
+
|
|
116
|
+
const child = spawn(process.execPath, [scriptPath, ...scriptArgs], {
|
|
117
|
+
stdio: 'inherit',
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
child.on('close', (code) => {
|
|
121
|
+
releaseLock(lock);
|
|
122
|
+
process.exit(code || 0);
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
child.on('error', (err) => {
|
|
126
|
+
console.error(`执行错误: ${err.message}`);
|
|
127
|
+
releaseLock(lock);
|
|
128
|
+
process.exit(1);
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
process.on('SIGINT', () => {
|
|
132
|
+
console.log('\n已取消');
|
|
133
|
+
child.kill('SIGINT');
|
|
134
|
+
releaseLock(lock);
|
|
135
|
+
process.exit(130);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
main();
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gen-docs
|
|
3
3
|
description: 文档生成器。自动分析模块结构,生成 README.md 和 DESIGN.md 骨架。当魔尊提到生成文档、创建README、创建DESIGN、文档骨架、文档模板时使用。在新建模块开始时自动触发。
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: node>=18
|
|
4
6
|
user-invocable: true
|
|
5
7
|
disable-model-invocation: false
|
|
6
8
|
allowed-tools: Bash, Read, Write, Glob
|
|
@@ -24,9 +26,9 @@ argument-hint: <模块路径> [--force]
|
|
|
24
26
|
|
|
25
27
|
```bash
|
|
26
28
|
# 在 skill 目录下运行
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
node scripts/doc_generator.js <模块路径>
|
|
30
|
+
node scripts/doc_generator.js <模块路径> --force # 强制覆盖已存在的文档
|
|
31
|
+
node scripts/doc_generator.js <模块路径> --json # JSON 输出
|
|
30
32
|
```
|
|
31
33
|
|
|
32
34
|
## 生成内容
|
|
@@ -88,7 +90,7 @@ python scripts/doc_generator.py <模块路径> --json # JSON 输出
|
|
|
88
90
|
## 使用流程
|
|
89
91
|
|
|
90
92
|
```
|
|
91
|
-
1. 运行 doc_generator.
|
|
93
|
+
1. 运行 doc_generator.js 生成骨架
|
|
92
94
|
2. 填充 TODO 标记的内容
|
|
93
95
|
3. 补充设计决策和理由
|
|
94
96
|
4. 添加使用示例
|