code-abyss 1.5.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/LICENSE +21 -0
- package/README.md +197 -0
- package/bin/install.js +193 -0
- package/bin/uninstall.js +42 -0
- package/config/AGENTS.md +247 -0
- package/config/CLAUDE.md +207 -0
- package/config/settings.example.json +27 -0
- package/output-styles/abyss-cultivator.md +399 -0
- package/package.json +41 -0
- package/skills/SKILL.md +115 -0
- package/skills/ai/SKILL.md +29 -0
- package/skills/ai/agent-dev.md +242 -0
- package/skills/ai/llm-security.md +288 -0
- package/skills/architecture/SKILL.md +41 -0
- package/skills/architecture/api-design.md +225 -0
- package/skills/architecture/caching.md +299 -0
- package/skills/architecture/cloud-native.md +285 -0
- package/skills/architecture/compliance.md +299 -0
- package/skills/architecture/data-security.md +184 -0
- package/skills/architecture/message-queue.md +329 -0
- package/skills/architecture/security-arch.md +210 -0
- package/skills/development/SKILL.md +43 -0
- package/skills/development/cpp.md +246 -0
- package/skills/development/go.md +323 -0
- package/skills/development/java.md +277 -0
- package/skills/development/python.md +288 -0
- package/skills/development/rust.md +313 -0
- package/skills/development/shell.md +313 -0
- package/skills/development/typescript.md +277 -0
- package/skills/devops/SKILL.md +36 -0
- package/skills/devops/cost-optimization.md +272 -0
- package/skills/devops/database.md +217 -0
- package/skills/devops/devsecops.md +198 -0
- package/skills/devops/git-workflow.md +181 -0
- package/skills/devops/observability.md +280 -0
- package/skills/devops/performance.md +273 -0
- package/skills/devops/testing.md +186 -0
- package/skills/gen-docs/SKILL.md +114 -0
- package/skills/gen-docs/scripts/doc_generator.py +491 -0
- package/skills/multi-agent/SKILL.md +268 -0
- package/skills/run_skill.py +88 -0
- package/skills/security/SKILL.md +51 -0
- package/skills/security/blue-team.md +379 -0
- package/skills/security/code-audit.md +265 -0
- package/skills/security/pentest.md +226 -0
- package/skills/security/red-team.md +321 -0
- package/skills/security/threat-intel.md +322 -0
- package/skills/security/vuln-research.md +369 -0
- package/skills/tests/README.md +225 -0
- package/skills/tests/SUMMARY.md +362 -0
- package/skills/tests/__init__.py +3 -0
- package/skills/tests/test_change_analyzer.py +558 -0
- package/skills/tests/test_doc_generator.py +538 -0
- package/skills/tests/test_module_scanner.py +376 -0
- package/skills/tests/test_quality_checker.py +516 -0
- package/skills/tests/test_security_scanner.py +426 -0
- package/skills/verify-change/SKILL.md +138 -0
- package/skills/verify-change/scripts/change_analyzer.py +529 -0
- package/skills/verify-module/SKILL.md +125 -0
- package/skills/verify-module/scripts/module_scanner.py +321 -0
- package/skills/verify-quality/SKILL.md +158 -0
- package/skills/verify-quality/scripts/quality_checker.py +481 -0
- package/skills/verify-security/SKILL.md +141 -0
- package/skills/verify-security/scripts/security_scanner.py +368 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: testing
|
|
3
|
+
description: 软件测试。单元测试、集成测试、TDD、测试框架。当用户提到测试、单元测试、pytest、Jest、mock、TDD时使用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 🔧 炼器秘典 · 软件测试
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
## 测试金字塔
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/\
|
|
13
|
+
/ \ E2E 测试 (少)
|
|
14
|
+
/----\
|
|
15
|
+
/ \ 集成测试 (中)
|
|
16
|
+
/--------\
|
|
17
|
+
/ \ 单元测试 (多)
|
|
18
|
+
--------------
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Python (pytest)
|
|
22
|
+
|
|
23
|
+
```python
|
|
24
|
+
import pytest
|
|
25
|
+
from myapp import calculate, UserService
|
|
26
|
+
|
|
27
|
+
# 基础测试
|
|
28
|
+
def test_add():
|
|
29
|
+
assert calculate.add(1, 2) == 3
|
|
30
|
+
|
|
31
|
+
# 参数化
|
|
32
|
+
@pytest.mark.parametrize("a,b,expected", [
|
|
33
|
+
(1, 2, 3),
|
|
34
|
+
(0, 0, 0),
|
|
35
|
+
(-1, 1, 0),
|
|
36
|
+
])
|
|
37
|
+
def test_add_params(a, b, expected):
|
|
38
|
+
assert calculate.add(a, b) == expected
|
|
39
|
+
|
|
40
|
+
# Fixture
|
|
41
|
+
@pytest.fixture
|
|
42
|
+
def user_service():
|
|
43
|
+
service = UserService()
|
|
44
|
+
yield service
|
|
45
|
+
service.cleanup()
|
|
46
|
+
|
|
47
|
+
def test_create_user(user_service):
|
|
48
|
+
user = user_service.create("test")
|
|
49
|
+
assert user.name == "test"
|
|
50
|
+
|
|
51
|
+
# Mock
|
|
52
|
+
from unittest.mock import Mock, patch
|
|
53
|
+
|
|
54
|
+
@patch('myapp.requests.get')
|
|
55
|
+
def test_fetch(mock_get):
|
|
56
|
+
mock_get.return_value.json.return_value = {"id": 1}
|
|
57
|
+
result = fetch_user(1)
|
|
58
|
+
assert result["id"] == 1
|
|
59
|
+
|
|
60
|
+
# 异步测试
|
|
61
|
+
@pytest.mark.asyncio
|
|
62
|
+
async def test_async_fetch():
|
|
63
|
+
result = await async_fetch()
|
|
64
|
+
assert result is not None
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 运行命令
|
|
68
|
+
```bash
|
|
69
|
+
pytest # 运行所有
|
|
70
|
+
pytest test_file.py # 指定文件
|
|
71
|
+
pytest -k "test_add" # 匹配名称
|
|
72
|
+
pytest -v # 详细输出
|
|
73
|
+
pytest --cov=myapp # 覆盖率
|
|
74
|
+
pytest -x # 失败即停
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## JavaScript (Jest/Vitest)
|
|
78
|
+
|
|
79
|
+
```javascript
|
|
80
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
81
|
+
|
|
82
|
+
// 基础测试
|
|
83
|
+
describe('add', () => {
|
|
84
|
+
it('should add two numbers', () => {
|
|
85
|
+
expect(add(1, 2)).toBe(3);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it.each([
|
|
89
|
+
[1, 2, 3],
|
|
90
|
+
[0, 0, 0],
|
|
91
|
+
[-1, 1, 0],
|
|
92
|
+
])('add(%i, %i) = %i', (a, b, expected) => {
|
|
93
|
+
expect(add(a, b)).toBe(expected);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
// Mock
|
|
98
|
+
vi.mock('./api', () => ({
|
|
99
|
+
getUser: vi.fn().mockResolvedValue({ id: 1, name: 'test' })
|
|
100
|
+
}));
|
|
101
|
+
|
|
102
|
+
it('should fetch user', async () => {
|
|
103
|
+
const user = await fetchUser(1);
|
|
104
|
+
expect(user.name).toBe('test');
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// Spy
|
|
108
|
+
const spy = vi.spyOn(console, 'log');
|
|
109
|
+
doSomething();
|
|
110
|
+
expect(spy).toHaveBeenCalledWith('message');
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Go (testing)
|
|
114
|
+
|
|
115
|
+
```go
|
|
116
|
+
package main
|
|
117
|
+
|
|
118
|
+
import (
|
|
119
|
+
"testing"
|
|
120
|
+
"github.com/stretchr/testify/assert"
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
func TestAdd(t *testing.T) {
|
|
124
|
+
result := Add(1, 2)
|
|
125
|
+
assert.Equal(t, 3, result)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// 表驱动测试
|
|
129
|
+
func TestAddTable(t *testing.T) {
|
|
130
|
+
tests := []struct {
|
|
131
|
+
name string
|
|
132
|
+
a, b int
|
|
133
|
+
expected int
|
|
134
|
+
}{
|
|
135
|
+
{"positive", 1, 2, 3},
|
|
136
|
+
{"zero", 0, 0, 0},
|
|
137
|
+
{"negative", -1, 1, 0},
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
for _, tt := range tests {
|
|
141
|
+
t.Run(tt.name, func(t *testing.T) {
|
|
142
|
+
assert.Equal(t, tt.expected, Add(tt.a, tt.b))
|
|
143
|
+
})
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Benchmark
|
|
148
|
+
func BenchmarkAdd(b *testing.B) {
|
|
149
|
+
for i := 0; i < b.N; i++ {
|
|
150
|
+
Add(1, 2)
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## 测试原则
|
|
156
|
+
|
|
157
|
+
```yaml
|
|
158
|
+
FIRST:
|
|
159
|
+
- Fast: 快速执行
|
|
160
|
+
- Independent: 相互独立
|
|
161
|
+
- Repeatable: 可重复
|
|
162
|
+
- Self-validating: 自验证
|
|
163
|
+
- Timely: 及时编写
|
|
164
|
+
|
|
165
|
+
AAA:
|
|
166
|
+
- Arrange: 准备数据
|
|
167
|
+
- Act: 执行操作
|
|
168
|
+
- Assert: 验证结果
|
|
169
|
+
|
|
170
|
+
原则:
|
|
171
|
+
- 每个测试只验证一件事
|
|
172
|
+
- 测试边界条件
|
|
173
|
+
- 测试异常情况
|
|
174
|
+
- 避免测试实现细节
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## TDD 流程
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
红 → 绿 → 重构
|
|
181
|
+
|
|
182
|
+
1. 红: 写一个失败的测试
|
|
183
|
+
2. 绿: 写最少代码让测试通过
|
|
184
|
+
3. 重构: 优化代码,保持测试通过
|
|
185
|
+
```
|
|
186
|
+
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gen-docs
|
|
3
|
+
description: 文档生成器。自动分析模块结构,生成 README.md 和 DESIGN.md 骨架。当魔尊提到生成文档、创建README、创建DESIGN、文档骨架、文档模板时使用。在新建模块开始时自动触发。
|
|
4
|
+
user-invocable: true
|
|
5
|
+
disable-model-invocation: false
|
|
6
|
+
allowed-tools: Bash, Read, Write, Glob
|
|
7
|
+
argument-hint: <模块路径> [--force]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# 📝 造典关卡 · 文档生成器
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## 核心原则
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
无文档不成模块
|
|
17
|
+
文档是模块的身份证
|
|
18
|
+
没有身份证的模块不允许上线
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 自动生成
|
|
22
|
+
|
|
23
|
+
运行文档生成脚本(跨平台):
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# 在 skill 目录下运行
|
|
27
|
+
python scripts/doc_generator.py <模块路径>
|
|
28
|
+
python scripts/doc_generator.py <模块路径> --force # 强制覆盖已存在的文档
|
|
29
|
+
python scripts/doc_generator.py <模块路径> --json # JSON 输出
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 生成内容
|
|
33
|
+
|
|
34
|
+
### README.md 骨架
|
|
35
|
+
|
|
36
|
+
自动生成的 README.md 包含:
|
|
37
|
+
|
|
38
|
+
- **模块名称** — 从目录名提取
|
|
39
|
+
- **描述** — 从代码文档字符串提取(如有)
|
|
40
|
+
- **特性列表** — 待填充
|
|
41
|
+
- **依赖** — 从 requirements.txt/pyproject.toml 提取
|
|
42
|
+
- **使用方法** — 基础模板
|
|
43
|
+
- **API 概览** — 从代码提取类和函数列表
|
|
44
|
+
- **目录结构** — 自动扫描生成
|
|
45
|
+
|
|
46
|
+
### DESIGN.md 骨架
|
|
47
|
+
|
|
48
|
+
自动生成的 DESIGN.md 包含:
|
|
49
|
+
|
|
50
|
+
- **设计概述** — 目标与非目标模板
|
|
51
|
+
- **架构设计** — 架构图占位符
|
|
52
|
+
- **核心组件** — 从代码提取类列表
|
|
53
|
+
- **设计决策** — 决策记录表格模板
|
|
54
|
+
- **技术选型** — 自动检测语言和依赖
|
|
55
|
+
- **权衡取舍** — 已知限制和技术债务模板
|
|
56
|
+
- **安全考量** — 威胁模型和安全措施模板
|
|
57
|
+
- **变更历史** — 初始版本记录
|
|
58
|
+
|
|
59
|
+
## 智能分析
|
|
60
|
+
|
|
61
|
+
### 支持的语言
|
|
62
|
+
|
|
63
|
+
| 语言 | 分析能力 |
|
|
64
|
+
|------|----------|
|
|
65
|
+
| **Python** | 类、函数、文档字符串、依赖 |
|
|
66
|
+
| **Go** | 目录结构、依赖 |
|
|
67
|
+
| **TypeScript** | 目录结构、依赖 |
|
|
68
|
+
| **Rust** | 目录结构、依赖 |
|
|
69
|
+
| **其他** | 基础目录结构 |
|
|
70
|
+
|
|
71
|
+
### 提取的信息
|
|
72
|
+
|
|
73
|
+
- 模块名称(目录名)
|
|
74
|
+
- 主要编程语言
|
|
75
|
+
- 代码文件列表
|
|
76
|
+
- 类和函数定义(Python)
|
|
77
|
+
- 文档字符串(Python)
|
|
78
|
+
- 依赖列表
|
|
79
|
+
- 入口点文件
|
|
80
|
+
|
|
81
|
+
## 自动触发时机
|
|
82
|
+
|
|
83
|
+
| 场景 | 触发条件 |
|
|
84
|
+
|------|----------|
|
|
85
|
+
| 新建模块 | 模块创建开始时 |
|
|
86
|
+
| 缺失文档 | 检测到模块缺少文档时 |
|
|
87
|
+
|
|
88
|
+
## 使用流程
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
1. 运行 doc_generator.py 生成骨架
|
|
92
|
+
2. 填充 TODO 标记的内容
|
|
93
|
+
3. 补充设计决策和理由
|
|
94
|
+
4. 添加使用示例
|
|
95
|
+
5. 运行 /verify-module 校验完整性
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## 生成后检查清单
|
|
99
|
+
|
|
100
|
+
### README.md
|
|
101
|
+
|
|
102
|
+
- [ ] 填充模块描述
|
|
103
|
+
- [ ] 补充特性列表
|
|
104
|
+
- [ ] 添加使用示例
|
|
105
|
+
- [ ] 确认依赖完整
|
|
106
|
+
|
|
107
|
+
### DESIGN.md
|
|
108
|
+
|
|
109
|
+
- [ ] 明确设计目标
|
|
110
|
+
- [ ] 记录设计决策
|
|
111
|
+
- [ ] 说明技术选型理由
|
|
112
|
+
- [ ] 列出已知限制
|
|
113
|
+
|
|
114
|
+
---
|