ironweave 1.0.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.
Files changed (99) hide show
  1. package/.claude-plugin/plugin.json +16 -0
  2. package/.clinerules +7 -0
  3. package/.codex/INSTALL.md +45 -0
  4. package/.cursor-plugin/plugin.json +19 -0
  5. package/.cursorrules +7 -0
  6. package/.github/copilot-instructions.md +7 -0
  7. package/.opencode/INSTALL.md +42 -0
  8. package/.windsurfrules +7 -0
  9. package/AGENTS.md +1 -0
  10. package/CLAUDE.md +22 -0
  11. package/CONTRIBUTING.md +81 -0
  12. package/GEMINI.md +1 -0
  13. package/LICENSE +21 -0
  14. package/README.md +250 -0
  15. package/README_CN.md +248 -0
  16. package/package.json +48 -0
  17. package/skills/api-contract-design/SKILL.md +227 -0
  18. package/skills/api-contract-design/references/api-design-rules.md +106 -0
  19. package/skills/brainstorm/SKILL.md +271 -0
  20. package/skills/brainstorm/agents/architect.md +34 -0
  21. package/skills/brainstorm/agents/challenger.md +34 -0
  22. package/skills/brainstorm/agents/domain-expert.md +34 -0
  23. package/skills/brainstorm/agents/pragmatist.md +34 -0
  24. package/skills/brainstorm/agents/product-manager.md +34 -0
  25. package/skills/brainstorm/agents/ux-designer.md +34 -0
  26. package/skills/brainstorm/references/synthesis-rules.md +51 -0
  27. package/skills/code-scaffold/SKILL.md +313 -0
  28. package/skills/code-scaffold/references/scaffold-rules.md +131 -0
  29. package/skills/docs-output/SKILL.md +149 -0
  30. package/skills/docs-output/references/naming-rules.md +52 -0
  31. package/skills/docs-output/scripts/docs_manager.py +353 -0
  32. package/skills/engineering-principles/SKILL.md +133 -0
  33. package/skills/engineering-principles/references/anti-patterns.md +144 -0
  34. package/skills/engineering-principles/references/ddd-patterns.md +66 -0
  35. package/skills/engineering-principles/references/design-patterns.md +34 -0
  36. package/skills/engineering-principles/references/patterns-architecture.md +301 -0
  37. package/skills/engineering-principles/references/patterns-backend.md +77 -0
  38. package/skills/engineering-principles/references/patterns-classic.md +200 -0
  39. package/skills/engineering-principles/references/patterns-crosscut.md +67 -0
  40. package/skills/engineering-principles/references/patterns-frontend.md +27 -0
  41. package/skills/engineering-principles/references/patterns-module.md +95 -0
  42. package/skills/engineering-principles/references/patterns-small-scale.md +79 -0
  43. package/skills/engineering-principles/references/quality-checklist.md +76 -0
  44. package/skills/engineering-principles/references/solid-principles.md +46 -0
  45. package/skills/engineering-principles/references/tdd-workflow.md +60 -0
  46. package/skills/engineering-principles/scripts/principles_matcher.py +433 -0
  47. package/skills/error-handling-strategy/SKILL.md +347 -0
  48. package/skills/error-handling-strategy/references/error-handling-rules.md +91 -0
  49. package/skills/implementation-complexity-analysis/SKILL.md +193 -0
  50. package/skills/implementation-complexity-analysis/references/complexity-rules.md +126 -0
  51. package/skills/integration-test-design/SKILL.md +296 -0
  52. package/skills/integration-test-design/references/test-strategy-rules.md +90 -0
  53. package/skills/observability-design/SKILL.md +327 -0
  54. package/skills/observability-design/references/observability-rules.md +129 -0
  55. package/skills/orchestrator/SKILL.md +260 -0
  56. package/skills/orchestrator/references/deliver.md +112 -0
  57. package/skills/orchestrator/references/execute.md +313 -0
  58. package/skills/orchestrator/references/gates.md +252 -0
  59. package/skills/orchestrator/references/parallel.md +70 -0
  60. package/skills/orchestrator/references/route-a.md +135 -0
  61. package/skills/orchestrator/references/route-b.md +91 -0
  62. package/skills/orchestrator/references/route-c.md +65 -0
  63. package/skills/orchestrator/references/route-d.md +75 -0
  64. package/skills/orchestrator/references/scope-sizer.md +219 -0
  65. package/skills/performance-arch-design/SKILL.md +208 -0
  66. package/skills/performance-arch-design/references/performance-rules.md +95 -0
  67. package/skills/project-context/SKILL.md +104 -0
  68. package/skills/project-context/references/schema.md +97 -0
  69. package/skills/project-context/scripts/context_db.py +358 -0
  70. package/skills/requirement-qa/SKILL.md +287 -0
  71. package/skills/requirement-qa/references/completion-signals.md +42 -0
  72. package/skills/requirement-qa/references/option-rules.md +57 -0
  73. package/skills/requirement-qa/scripts/qa_session.py +223 -0
  74. package/skills/skill-creator/LICENSE.txt +202 -0
  75. package/skills/skill-creator/SKILL.md +485 -0
  76. package/skills/skill-creator/agents/analyzer.md +274 -0
  77. package/skills/skill-creator/agents/comparator.md +202 -0
  78. package/skills/skill-creator/agents/grader.md +223 -0
  79. package/skills/skill-creator/assets/eval_review.html +146 -0
  80. package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  81. package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  82. package/skills/skill-creator/references/schemas.md +430 -0
  83. package/skills/skill-creator/scripts/__init__.py +0 -0
  84. package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  85. package/skills/skill-creator/scripts/generate_report.py +326 -0
  86. package/skills/skill-creator/scripts/improve_description.py +247 -0
  87. package/skills/skill-creator/scripts/package_skill.py +136 -0
  88. package/skills/skill-creator/scripts/quick_validate.py +103 -0
  89. package/skills/skill-creator/scripts/run_eval.py +310 -0
  90. package/skills/skill-creator/scripts/run_loop.py +328 -0
  91. package/skills/skill-creator/scripts/utils.py +47 -0
  92. package/skills/spec-writing/SKILL.md +96 -0
  93. package/skills/spec-writing/references/mermaid-guide.md +66 -0
  94. package/skills/spec-writing/references/test-matrix.md +73 -0
  95. package/skills/task-difficulty/SKILL.md +162 -0
  96. package/skills/task-difficulty/references/scoring-guide.md +123 -0
  97. package/skills/task-difficulty/scripts/difficulty_scorer.py +328 -0
  98. package/skills/tech-stack/SKILL.md +67 -0
  99. package/skills/tech-stack/references/tech-reference-tables.md +130 -0
@@ -0,0 +1,95 @@
1
+ # 中尺度模式(模块 / 子系统级)
2
+
3
+ 调度、协调、流控、并发管理相关模式。
4
+
5
+ ## 管道 / 中间件 (Pipeline / Middleware)
6
+
7
+ ```typescript
8
+ // 数据沿处理链流过,每个中间件独立
9
+ type Middleware = (ctx: Context, next: () => Promise<void>) => Promise<void>
10
+
11
+ const app = new App()
12
+ app.use(cors()) // 跨域
13
+ app.use(authGuard()) // 认证
14
+ app.use(rateLimit()) // 限流
15
+ app.use(router()) // 路由
16
+ ```
17
+
18
+ ## 工作池 (Worker Pool)
19
+
20
+ ```typescript
21
+ // 有限并发 + 任务队列
22
+ class WorkerPool {
23
+ private running = 0
24
+ private queue: (() => Promise<void>)[] = []
25
+
26
+ constructor(private concurrency: number) {}
27
+
28
+ async add<T>(task: () => Promise<T>): Promise<T> {
29
+ if (this.running >= this.concurrency) {
30
+ await new Promise<void>(r => this.queue.push(async () => r()))
31
+ }
32
+ this.running++
33
+ try { return await task() }
34
+ finally { this.running--; this.queue.shift()?.() }
35
+ }
36
+ }
37
+ ```
38
+
39
+ ## 断路器 (Circuit Breaker)
40
+
41
+ ```typescript
42
+ // 三态: closed → open → half-open → closed
43
+ class CircuitBreaker {
44
+ private failures = 0
45
+ private state: 'closed' | 'open' | 'half-open' = 'closed'
46
+
47
+ async call<T>(fn: () => Promise<T>): Promise<T> {
48
+ if (this.state === 'open') throw new Error('Circuit is open')
49
+ try {
50
+ const result = await fn()
51
+ this.reset()
52
+ return result
53
+ } catch (e) {
54
+ this.failures++
55
+ if (this.failures >= this.threshold) this.state = 'open'
56
+ throw e
57
+ }
58
+ }
59
+ }
60
+ ```
61
+
62
+ ## 仓库模式 (Repository)
63
+
64
+ ```typescript
65
+ // 数据访问抽象,隔离 ORM/SQL 细节
66
+ interface UserRepository {
67
+ findById(id: string): Promise<User | null>
68
+ findByEmail(email: string): Promise<User | null>
69
+ save(user: User): Promise<User>
70
+ }
71
+
72
+ // 底层实现可替换(TypeORM, Prisma, 内存mock)
73
+ class TypeORMUserRepository implements UserRepository { ... }
74
+ class InMemoryUserRepository implements UserRepository { ... } // 测试用
75
+ ```
76
+
77
+ ## 有限状态机 (FSM)
78
+
79
+ 适用场景:表单流程、工作流引擎、游戏逻辑、协议解析、UI 交互状态。
80
+
81
+ ```typescript
82
+ // 状态 + 事件 + 转换表 = 可预测行为
83
+ interface FSM<S extends string, E extends string> {
84
+ initial: S
85
+ states: Record<S, { on?: Partial<Record<E, S>>; type?: 'final' }>
86
+ }
87
+
88
+ function transition<S extends string, E extends string>(
89
+ fsm: FSM<S, E>, current: S, event: E
90
+ ): S {
91
+ const next = fsm.states[current]?.on?.[event]
92
+ if (!next) throw new Error(`Invalid transition: ${current} + ${event}`)
93
+ return next
94
+ }
95
+ ```
@@ -0,0 +1,79 @@
1
+ # 小尺度模式(函数级)
2
+
3
+ 单个函数或几行代码粒度的模式。
4
+
5
+ ## Guard Clause(提前返回)
6
+
7
+ ```typescript
8
+ // DO: 提前返回消除嵌套
9
+ function getPayAmount(employee: Employee): number {
10
+ if (employee.isSeparated) return 0
11
+ if (employee.isRetired) return retiredAmount()
12
+ return normalPayAmount()
13
+ }
14
+
15
+ // DON'T: 多层嵌套
16
+ function getPayAmount(employee: Employee): number {
17
+ if (!employee.isSeparated) {
18
+ if (!employee.isRetired) {
19
+ return normalPayAmount()
20
+ } else {
21
+ return retiredAmount()
22
+ }
23
+ } else {
24
+ return 0
25
+ }
26
+ }
27
+ ```
28
+
29
+ ## Pipe / Compose(管道与组合)
30
+
31
+ ```typescript
32
+ // DO: 线性数据流变换
33
+ const result = pipe(rawInput, normalize, parse, validate, format)
34
+
35
+ // DON'T: 嵌套调用
36
+ const result = format(validate(parse(normalize(rawInput))))
37
+ ```
38
+
39
+ ## 表驱动(Table-Driven)
40
+
41
+ ```typescript
42
+ // DO: 用数据替代分支逻辑
43
+ const statusConfig: Record<Status, { icon: string; color: string }> = {
44
+ active: { icon: '✅', color: 'green' },
45
+ pending: { icon: '⏳', color: 'yellow' },
46
+ error: { icon: '❌', color: 'red' },
47
+ }
48
+ const { icon, color } = statusConfig[status] ?? statusConfig.pending
49
+
50
+ // DON'T: if-else 逐个判断
51
+ if (status === 'active') { icon = '✅'; color = 'green' }
52
+ else if (status === 'pending') { icon = '⏳'; color = 'yellow' }
53
+ ```
54
+
55
+ ## Null Object(空对象)
56
+
57
+ ```typescript
58
+ // DO: 无操作对象代替 null 检查
59
+ const logger = options.logger ?? { log: () => {}, warn: () => {} }
60
+
61
+ // DON'T: 到处检查 if (logger)
62
+ if (logger) { logger.log(...) }
63
+ ```
64
+
65
+ ## 惰性求值 & 闭包封装
66
+
67
+ ```typescript
68
+ // 惰性求值:延迟到首次访问才计算
69
+ class Config {
70
+ private _parsed?: ParsedConfig
71
+ get parsed() { return this._parsed ??= parseConfig(this.raw) }
72
+ }
73
+
74
+ // 闭包封装私有状态
75
+ function createCounter(initial = 0) {
76
+ let count = initial
77
+ return { increment: () => ++count, get: () => count }
78
+ }
79
+ ```
@@ -0,0 +1,76 @@
1
+ # 代码质量检查清单
2
+
3
+ ## Clean Code(始终适用)
4
+
5
+ ### 命名
6
+
7
+ - **DO**: `getUserByEmail(email)` — 动词+名词,意图清晰
8
+ - **DON'T**: `getData(e)` — 无语义缩写
9
+
10
+ ### 函数
11
+
12
+ - 单个函数 ≤ 30 行(超过考虑拆分)
13
+ - 参数 ≤ 3 个(超过用对象参数)
14
+ - 一个函数做一件事(能用一个动词描述)
15
+ - 避免 boolean 参数(拆成两个函数)
16
+
17
+ ### 避免 Magic Number
18
+
19
+ - **DO**: `const MAX_RETRY = 3; if (retries >= MAX_RETRY)`
20
+ - **DON'T**: `if (retries >= 3)`
21
+
22
+ ### 注释
23
+
24
+ - 好的代码不需要注释解释"做什么"(命名应自解释)
25
+ - 注释用于解释"为什么"(业务原因、历史决策、workaround)
26
+ - **DON'T**: `// 增加计数器` `count++`
27
+
28
+ ## 错误处理(始终适用)
29
+
30
+ ### 异常分级
31
+
32
+ | 级别 | 类型 | 处理方式 |
33
+ |------|------|---------|
34
+ | 业务异常 | 参数校验失败、业务规则违反 | 返回明确错误码和消息 |
35
+ | 系统异常 | 数据库超时、网络错误 | 记录日志 + 降级/重试 |
36
+ | 致命异常 | 配置缺失、依赖不可用 | 快速失败(fail fast) |
37
+
38
+ ### 具体约束
39
+
40
+ - **DO**: 自定义异常类区分业务/系统异常
41
+ - **DO**: 在系统边界处(Controller/API Gateway)统一捕获并格式化
42
+ - **DON'T**: `catch (e) {}` — 绝不吞异常
43
+ - **DON'T**: 用异常控制正常流程
44
+
45
+ ### 边界校验
46
+
47
+ - 在系统入口(Controller/API)校验输入
48
+ - 领域层假设输入合法(已被入口校验)
49
+ - **DO**: `if (!email.includes('@')) throw new ValidationError('...')`
50
+ - **DON'T**: 在每一层都重复校验同一参数
51
+
52
+ ## 可测试性(有测试框架时适用)
53
+
54
+ - 业务逻辑通过构造函数注入依赖(不在方法内 new)
55
+ - 纯函数优先(无副作用,输出只取决于输入)
56
+ - 外部依赖(DB / HTTP / 文件系统)通过接口隔离
57
+ - 避免全局状态和静态方法中的副作用
58
+
59
+ ## 性能意识(涉及 DB / API 时适用)
60
+
61
+ | 问题 | 检查项 |
62
+ |------|-------|
63
+ | N+1 查询 | 循环中有单条查询 → 改为批量查询 |
64
+ | 缺少索引 | WHERE/JOIN 字段无索引 → 检查执行计划 |
65
+ | 大数据返回 | API 返回所有字段 → 按需 select |
66
+ | 重复计算 | 同一请求中多次查同一数据 → 缓存/提前查询 |
67
+
68
+ ## 安全实践(涉及用户输入/API 时适用)
69
+
70
+ | 威胁 | 防护 |
71
+ |------|------|
72
+ | SQL 注入 | 参数化查询,不拼接 SQL |
73
+ | XSS | 输出编码,CSP headers |
74
+ | CSRF | Token 校验 |
75
+ | 越权 | 每个 API 校验当前用户权限 |
76
+ | 敏感数据 | 密码 bcrypt,日志脱敏,不返回敏感字段 |
@@ -0,0 +1,46 @@
1
+ # SOLID 原则
2
+
3
+ ## SRP — 单一职责原则
4
+
5
+ 一个类/函数只有一个引起它变化的原因。
6
+
7
+ - **DO**: 拆分 `UserService` 为 `UserAuthService` + `UserProfileService`
8
+ - **DON'T**: 一个 `UserService` 同时处理登录、注册、修改资料、发邮件
9
+
10
+ 判断标准:如果你需要用"和"来描述一个类的职责,它可能违反了 SRP。
11
+
12
+ ## OCP — 开闭原则
13
+
14
+ 对扩展开放,对修改关闭。通过接口/抽象类实现新行为,而非修改已有代码。
15
+
16
+ - **DO**: 定义 `PaymentStrategy` 接口,新增支付方式实现新类
17
+ - **DON'T**: 在 `pay()` 方法中用 `if/else` 判断支付类型
18
+
19
+ 适用信号:当你发现自己在添加新的 `else if` 分支时,考虑 OCP。
20
+
21
+ ## LSP — 里氏替换原则
22
+
23
+ 子类必须能替代父类使用,不改变程序正确性。
24
+
25
+ - **DO**: `Square extends Rectangle` 在所有使用 `Rectangle` 的地方行为一致
26
+ - **DON'T**: 子类重写方法后抛出父类调用方不期望的异常
27
+
28
+ 适用信号:当子类需要限制或强制父类的某些行为时,继承关系可能不合适。
29
+
30
+ ## ISP — 接口隔离原则
31
+
32
+ 客户端不应依赖它不使用的接口。多个小接口优于一个大接口。
33
+
34
+ - **DO**: `Readable`, `Writable`, `Closable` 三个独立接口
35
+ - **DON'T**: 一个 `FileOperations` 接口包含 20 个方法,实现类只用其中 3 个
36
+
37
+ 适用信号:实现类中有大量空方法或 `throw new NotImplementedError()`。
38
+
39
+ ## DIP — 依赖倒置原则
40
+
41
+ 高层模块不应依赖低层模块,两者都应依赖抽象。
42
+
43
+ - **DO**: `OrderService` 依赖 `OrderRepository`(接口),具体实现注入
44
+ - **DON'T**: `OrderService` 直接 `new MySQLOrderRepository()`
45
+
46
+ 适用信号:`new` 关键字出现在业务类中(应通过依赖注入替代)。
@@ -0,0 +1,60 @@
1
+ # TDD 工作流
2
+
3
+ ## 适用条件
4
+
5
+ - 项目已配置测试框架(jest / vitest / junit / pytest / go test)
6
+ - 新功能开发 或 Bug 修复
7
+
8
+ ## 不适用场景
9
+
10
+ - 旧项目无测试框架且无计划引入
11
+ - 纯 UI 样式调整(无逻辑)
12
+ - 一次性脚本/迁移脚本
13
+
14
+ ## 红绿重构循环
15
+
16
+ ```
17
+ 🔴 RED → 写一个失败的测试(定义期望行为)
18
+ 🟢 GREEN → 写最少代码让测试通过
19
+ 🔵 REFACTOR → 重构代码,保持测试绿色
20
+ ```
21
+
22
+ 每次循环控制在 5-15 分钟。
23
+
24
+ ## 测试金字塔
25
+
26
+ ```
27
+ / E2E \ 少量 · 慢 · 高置信
28
+ / 集成测试 \ 适量 · 中速
29
+ / 单元测试 \ 大量 · 快 · 高频
30
+ ```
31
+
32
+ | 层级 | 占比 | 测试什么 |
33
+ |------|------|---------|
34
+ | 单元 | 70% | 纯函数、业务逻辑、工具方法 |
35
+ | 集成 | 20% | API 端点、数据库交互、模块间协作 |
36
+ | E2E | 10% | 关键用户流程、冒烟测试 |
37
+
38
+ ## 具体约束
39
+
40
+ - **DO**: 每个新 public 函数写至少 1 个正向 + 1 个异常测试
41
+ - **DO**: Bug 修复先写复现测试,再改代码
42
+ - **DO**: 测试方法名描述行为:`should_return_error_when_email_invalid`
43
+ - **DON'T**: 测试实现细节(不要 mock 私有方法)
44
+ - **DON'T**: 测试中有条件逻辑(if/for)
45
+ - **DON'T**: 一个测试验证多个不相关行为
46
+
47
+ ## BDD 扩展(需有 E2E 框架)
48
+
49
+ 适用条件:项目配置了 Cypress / Playwright。
50
+
51
+ 验收场景用 Gherkin 格式:
52
+
53
+ ```gherkin
54
+ Scenario: 用户登录成功
55
+ Given 用户在登录页面
56
+ When 输入正确的用户名和密码
57
+ And 点击登录按钮
58
+ Then 应跳转到首页
59
+ And 显示用户名
60
+ ```