code-abyss 1.6.16 → 1.7.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/package.json +2 -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 +134 -0
- package/skills/tools/gen-docs/SKILL.md +6 -4
- package/skills/tools/gen-docs/scripts/doc_generator.js +349 -0
- package/skills/tools/verify-change/SKILL.md +8 -6
- package/skills/tools/verify-change/scripts/change_analyzer.js +270 -0
- package/skills/tools/verify-module/SKILL.md +6 -4
- package/skills/tools/verify-module/scripts/module_scanner.js +145 -0
- package/skills/tools/verify-quality/SKILL.md +5 -3
- package/skills/tools/verify-quality/scripts/quality_checker.js +276 -0
- package/skills/tools/verify-security/SKILL.md +7 -5
- package/skills/tools/verify-security/scripts/security_scanner.js +133 -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
|
@@ -375,5 +375,62 @@ WHERE command LIKE '%powershell%' OR command LIKE '%cmd%'
|
|
|
375
375
|
| TheHive | 事件管理 |
|
|
376
376
|
| MISP | 威胁情报 |
|
|
377
377
|
|
|
378
|
+
## 密钥管理
|
|
379
|
+
|
|
380
|
+
### 密钥生命周期
|
|
381
|
+
```
|
|
382
|
+
生成 → 存储 → 分发 → 使用 → 轮转 → 撤销 → 销毁
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
### 核心工具
|
|
386
|
+
| 工具 | 类型 | 特点 |
|
|
387
|
+
|------|------|------|
|
|
388
|
+
| HashiCorp Vault | 平台 | 动态密钥、AppRole、多后端 |
|
|
389
|
+
| AWS KMS | 云服务 | 托管密钥、信封加密、自动轮转 |
|
|
390
|
+
| AWS Secrets Manager | 云服务 | 自动轮转、Lambda集成 |
|
|
391
|
+
| Sealed Secrets | K8s | GitOps 友好、加密存储 |
|
|
392
|
+
| External Secrets | K8s | 多后端同步(Vault/AWS/GCP) |
|
|
393
|
+
|
|
394
|
+
### 密钥管理检查清单
|
|
395
|
+
```yaml
|
|
396
|
+
生成与存储:
|
|
397
|
+
- [ ] 加密强随机数生成器
|
|
398
|
+
- [ ] 密钥长度符合标准(AES-256, RSA-2048+)
|
|
399
|
+
- [ ] 集中存储在密钥管理系统 + 静态加密 + 访问控制
|
|
400
|
+
|
|
401
|
+
分发与使用:
|
|
402
|
+
- [ ] 最小权限 + 短期凭证优先(动态密钥)
|
|
403
|
+
- [ ] 禁止硬编码,使用环境变量或挂载卷
|
|
404
|
+
- [ ] 传输加密(TLS)
|
|
405
|
+
|
|
406
|
+
轮转与撤销:
|
|
407
|
+
- [ ] 定期自动轮转(P0年度/P1季度/P2月度/P3小时)
|
|
408
|
+
- [ ] 支持紧急撤销 + 轮转后验证 + 审计日志
|
|
409
|
+
|
|
410
|
+
监控:
|
|
411
|
+
- [ ] 记录所有密钥访问 + 异常检测告警 + 定期合规审计
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
### Vault 关键操作速查
|
|
415
|
+
```bash
|
|
416
|
+
# KV 读写
|
|
417
|
+
vault kv put secret/myapp/config db_password="xxx" api_key="yyy"
|
|
418
|
+
vault kv get -field=db_password secret/myapp/config
|
|
419
|
+
|
|
420
|
+
# 动态数据库凭证
|
|
421
|
+
vault read database/creds/readonly
|
|
422
|
+
|
|
423
|
+
# AppRole 登录
|
|
424
|
+
vault write auth/approle/login role_id="<id>" secret_id="<id>"
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
### 密钥分类策略
|
|
428
|
+
| 级别 | 类型 | 轮转周期 | 存储 |
|
|
429
|
+
|------|------|----------|------|
|
|
430
|
+
| P0 | 根密钥、主密钥 | 年度 | HSM |
|
|
431
|
+
| P1 | 数据加密密钥 | 季度 | Vault |
|
|
432
|
+
| P2 | API 密钥 | 月度 | Secrets Manager |
|
|
433
|
+
| P3 | 会话令牌 | 小时 | Redis |
|
|
434
|
+
|
|
378
435
|
---
|
|
379
436
|
|
|
@@ -317,5 +317,59 @@ echo "/tmp/evil.so" >> /etc/ld.so.preload
|
|
|
317
317
|
| Rubeus | Kerberos 工具 |
|
|
318
318
|
| BloodHound | AD 路径分析 |
|
|
319
319
|
|
|
320
|
+
## 供应链安全
|
|
321
|
+
|
|
322
|
+
### 供应链攻击向量
|
|
323
|
+
```
|
|
324
|
+
源代码 → 构建 → 制品 → 分发 → 部署 → 运行
|
|
325
|
+
│ │ │ │ │ │
|
|
326
|
+
投毒 篡改 后门 劫持 提权 横向
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
| 阶段 | 攻击方式 | 示例 |
|
|
330
|
+
|------|----------|------|
|
|
331
|
+
| 源代码 | 依赖投毒 | event-stream、ua-parser-js |
|
|
332
|
+
| 构建 | CI/CD 劫持 | SolarWinds、CodeCov |
|
|
333
|
+
| 制品 | 恶意包 | PyPI/npm 钓鱼包 |
|
|
334
|
+
| 部署 | 配置篡改 | K8s YAML 注入 |
|
|
335
|
+
| 运行 | 容器逃逸 | 特权容器、内核漏洞 |
|
|
336
|
+
|
|
337
|
+
### SBOM + 依赖扫描
|
|
338
|
+
```bash
|
|
339
|
+
# SBOM 生成 (Syft)
|
|
340
|
+
syft nginx:latest -o cyclonedx-json > sbom.json
|
|
341
|
+
|
|
342
|
+
# 漏洞扫描 (Trivy)
|
|
343
|
+
trivy image --severity HIGH,CRITICAL nginx:latest
|
|
344
|
+
trivy fs --scanners vuln,secret,misconfig .
|
|
345
|
+
|
|
346
|
+
# 依赖扫描 (Grype)
|
|
347
|
+
grype sbom:./sbom.json
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### 签名验证 (Sigstore/Cosign)
|
|
351
|
+
```bash
|
|
352
|
+
cosign sign --key cosign.key myregistry/myapp:v1.0
|
|
353
|
+
cosign verify --key cosign.pub myregistry/myapp:v1.0
|
|
354
|
+
cosign attach sbom --sbom sbom.json myregistry/myapp:v1.0
|
|
355
|
+
cosign verify-attestation --key cosign.pub myregistry/myapp:v1.0
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### SLSA 等级
|
|
359
|
+
```
|
|
360
|
+
Level 1: 文档化构建 Level 2: 防篡改+签名来源
|
|
361
|
+
Level 3: 安全平台+隔离构建 Level 4: 双方审查+密封构建
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
### 供应链安全检查清单
|
|
365
|
+
```yaml
|
|
366
|
+
源代码:
|
|
367
|
+
- [ ] 分支保护 + 代码审查 + 依赖锁定 + 密钥泄露扫描
|
|
368
|
+
构建与制品:
|
|
369
|
+
- [ ] 托管CI/CD + 隔离构建 + 生成SBOM + 签名制品 + 漏洞扫描
|
|
370
|
+
部署与运行:
|
|
371
|
+
- [ ] 验证签名(Cosign/SLSA) + 准入控制(Kyverno/OPA) + 运行时监控
|
|
372
|
+
```
|
|
373
|
+
|
|
320
374
|
---
|
|
321
375
|
|
|
@@ -318,5 +318,55 @@ misp.tag(event, 'misp-galaxy:mitre-attack-pattern="T1566"')
|
|
|
318
318
|
| VirusTotal | 恶意软件分析 |
|
|
319
319
|
| ATT&CK Navigator | TTP 可视化 |
|
|
320
320
|
|
|
321
|
+
## 威胁建模
|
|
322
|
+
|
|
323
|
+
### 建模流程
|
|
324
|
+
```
|
|
325
|
+
资产识别 → 架构分解 → 威胁枚举 → 风险评级 → 缓解措施 → 验证
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### STRIDE 速查
|
|
329
|
+
| 威胁 | 含义 | 缓解 |
|
|
330
|
+
|------|------|------|
|
|
331
|
+
| Spoofing | 身份伪造 | 强认证、MFA |
|
|
332
|
+
| Tampering | 数据篡改 | 完整性校验、签名 |
|
|
333
|
+
| Repudiation | 否认操作 | 审计日志、数字签名 |
|
|
334
|
+
| Info Disclosure | 信息泄露 | 加密、访问控制 |
|
|
335
|
+
| DoS | 拒绝服务 | 限流、冗余 |
|
|
336
|
+
| EoP | 权限提升 | 最小权限、输入验证 |
|
|
337
|
+
|
|
338
|
+
### PASTA 七阶段
|
|
339
|
+
```
|
|
340
|
+
定义目标 → 技术范围 → 应用分解 → 威胁分析 → 漏洞分析 → 攻击建模 → 风险管理
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
### 攻击树建模
|
|
344
|
+
```yaml
|
|
345
|
+
# OR节点: 任一子成功即成功, 风险=1-∏(1-Pi)
|
|
346
|
+
# AND节点: 全部子成功才成功, 风险=∏Pi
|
|
347
|
+
# 每节点属性: goal, cost, skill, detection, success_rate, mitigations
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### 风险矩阵
|
|
351
|
+
```
|
|
352
|
+
>=15 严重(立即) / >=10 高(优先) / >=6 中(计划) / <6 低(监控)
|
|
353
|
+
风险分 = 可能性(1-5) x 影响(1-5)
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### 威胁建模检查清单
|
|
357
|
+
```yaml
|
|
358
|
+
准备: 识别关键资产 + 定义安全目标 + 组建跨职能团队
|
|
359
|
+
建模: 数据流图+信任边界 + STRIDE/PASTA枚举 + 风险评级 + 缓解措施
|
|
360
|
+
验证: 安全测试 + 定期更新模型 + 跟踪缓解实施 + 事件后复盘
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
### 工具
|
|
364
|
+
| 工具 | 特点 |
|
|
365
|
+
|------|------|
|
|
366
|
+
| Microsoft Threat Modeling Tool | STRIDE 自动化 |
|
|
367
|
+
| OWASP Threat Dragon | 开源、DFD 支持 |
|
|
368
|
+
| Threagile | CLI、代码化建模 |
|
|
369
|
+
| PyTM | Python 编程式建模 |
|
|
370
|
+
|
|
321
371
|
---
|
|
322
372
|
|
|
@@ -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,134 @@
|
|
|
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
|
+
while (Date.now() < deadline) {
|
|
72
|
+
try {
|
|
73
|
+
const fd = openSync(lockPath, 'wx');
|
|
74
|
+
return { fd, lockPath };
|
|
75
|
+
} catch { /* busy wait */ }
|
|
76
|
+
const wait = 100;
|
|
77
|
+
const start = Date.now();
|
|
78
|
+
while (Date.now() - start < wait) { /* spin */ }
|
|
79
|
+
}
|
|
80
|
+
console.error(`⏳ 等待锁超时: ${target}`);
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
// 其他错误,忽略锁继续执行
|
|
84
|
+
return { fd: null, lockPath: null };
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function releaseLock({ fd, lockPath }) {
|
|
89
|
+
if (fd !== null) {
|
|
90
|
+
try { closeSync(fd); } catch {}
|
|
91
|
+
}
|
|
92
|
+
if (lockPath) {
|
|
93
|
+
try { unlinkSync(lockPath); } catch {}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function main() {
|
|
98
|
+
const args = process.argv.slice(2);
|
|
99
|
+
|
|
100
|
+
if (args.length === 0 || args[0] === '-h' || args[0] === '--help') {
|
|
101
|
+
console.log(__filename.split('/').pop() + ' <skill_name> [args...]');
|
|
102
|
+
process.exit(args.length === 0 ? 1 : 0);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const skillName = args[0];
|
|
106
|
+
const scriptPath = getScriptPath(skillName);
|
|
107
|
+
const scriptArgs = args.slice(1);
|
|
108
|
+
|
|
109
|
+
const lock = acquireTargetLock(scriptArgs);
|
|
110
|
+
|
|
111
|
+
const child = spawn(process.execPath, [scriptPath, ...scriptArgs], {
|
|
112
|
+
stdio: 'inherit',
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
child.on('close', (code) => {
|
|
116
|
+
releaseLock(lock);
|
|
117
|
+
process.exit(code || 0);
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
child.on('error', (err) => {
|
|
121
|
+
console.error(`执行错误: ${err.message}`);
|
|
122
|
+
releaseLock(lock);
|
|
123
|
+
process.exit(1);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
process.on('SIGINT', () => {
|
|
127
|
+
console.log('\n已取消');
|
|
128
|
+
child.kill('SIGINT');
|
|
129
|
+
releaseLock(lock);
|
|
130
|
+
process.exit(130);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
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. 添加使用示例
|