@hongmaple0820/scale-engine 0.24.0 → 0.26.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 (155) hide show
  1. package/LICENSE +15 -15
  2. package/README.en.md +336 -304
  3. package/README.md +500 -475
  4. package/dist/adapters/AiderAdapter.js +52 -52
  5. package/dist/adapters/AntigravityAdapter.d.ts +4 -0
  6. package/dist/adapters/AntigravityAdapter.js +21 -0
  7. package/dist/adapters/AntigravityAdapter.js.map +1 -0
  8. package/dist/adapters/ClaudeCodeAdapter.d.ts +4 -1
  9. package/dist/adapters/ClaudeCodeAdapter.js +34 -34
  10. package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
  11. package/dist/adapters/ClineAdapter.d.ts +4 -0
  12. package/dist/adapters/ClineAdapter.js +20 -0
  13. package/dist/adapters/ClineAdapter.js.map +1 -0
  14. package/dist/adapters/CodexAdapter.js +28 -28
  15. package/dist/adapters/CursorAdapter.js +26 -26
  16. package/dist/adapters/DeepSeekTuiAdapter.js +97 -97
  17. package/dist/adapters/DoubaoAdapter.js +33 -33
  18. package/dist/adapters/GeminiAdapter.js +26 -26
  19. package/dist/adapters/GenericProjectAgentAdapter.d.ts +29 -0
  20. package/dist/adapters/GenericProjectAgentAdapter.js +204 -0
  21. package/dist/adapters/GenericProjectAgentAdapter.js.map +1 -0
  22. package/dist/adapters/HermesAdapter.js +26 -26
  23. package/dist/adapters/JCodeAdapter.d.ts +4 -0
  24. package/dist/adapters/JCodeAdapter.js +19 -0
  25. package/dist/adapters/JCodeAdapter.js.map +1 -0
  26. package/dist/adapters/KiloCodeAdapter.d.ts +4 -0
  27. package/dist/adapters/KiloCodeAdapter.js +20 -0
  28. package/dist/adapters/KiloCodeAdapter.js.map +1 -0
  29. package/dist/adapters/KimiAdapter.js +32 -32
  30. package/dist/adapters/KiroAdapter.js +26 -26
  31. package/dist/adapters/OpenClawAdapter.js +26 -26
  32. package/dist/adapters/OpenCodeAdapter.js +26 -26
  33. package/dist/adapters/QCoderAdapter.js +26 -26
  34. package/dist/adapters/QoderAdapter.d.ts +4 -0
  35. package/dist/adapters/QoderAdapter.js +21 -0
  36. package/dist/adapters/QoderAdapter.js.map +1 -0
  37. package/dist/adapters/TraeAdapter.js +26 -26
  38. package/dist/adapters/VSCAdapter.js +26 -26
  39. package/dist/adapters/WindsurfAdapter.js +32 -32
  40. package/dist/adapters/WorkBuddyAdapter.js +26 -26
  41. package/dist/adapters/index.d.ts +5 -0
  42. package/dist/adapters/index.js +15 -0
  43. package/dist/adapters/index.js.map +1 -1
  44. package/dist/api/cli.js +226 -48
  45. package/dist/api/cli.js.map +1 -1
  46. package/dist/api/doctor.js +10 -3
  47. package/dist/api/doctor.js.map +1 -1
  48. package/dist/api/quickstart.js +7 -1
  49. package/dist/api/quickstart.js.map +1 -1
  50. package/dist/artifact/sqliteStore.js +89 -89
  51. package/dist/artifact/types.d.ts +1 -1
  52. package/dist/cli/phaseCommands.js +45 -45
  53. package/dist/context/AntiPatternRegistry.js +20 -20
  54. package/dist/context/ContextBuilder.js +155 -155
  55. package/dist/evolution/EvolutionEngine.js +31 -31
  56. package/dist/evolution/EvolutionEvaluator.d.ts +2 -0
  57. package/dist/evolution/EvolutionEvaluator.js +7 -1
  58. package/dist/evolution/EvolutionEvaluator.js.map +1 -1
  59. package/dist/fsm/FSMAgentBridge.js +11 -11
  60. package/dist/hooks/HookGeneratorEnhanced.js +218 -218
  61. package/dist/index.d.ts +1 -1
  62. package/dist/index.js +2 -2
  63. package/dist/index.js.map +1 -1
  64. package/dist/knowledge/SQLiteKnowledgeBase.js +28 -28
  65. package/dist/memory/MemoryBrain.d.ts +1 -0
  66. package/dist/memory/MemoryBrain.js +55 -52
  67. package/dist/memory/MemoryBrain.js.map +1 -1
  68. package/dist/memory/MemoryFabric.d.ts +13 -1
  69. package/dist/memory/MemoryFabric.js +35 -0
  70. package/dist/memory/MemoryFabric.js.map +1 -1
  71. package/dist/memory/MemoryProviders.d.ts +111 -0
  72. package/dist/memory/MemoryProviders.js +385 -0
  73. package/dist/memory/MemoryProviders.js.map +1 -0
  74. package/dist/memory/index.d.ts +1 -0
  75. package/dist/memory/index.js +1 -0
  76. package/dist/memory/index.js.map +1 -1
  77. package/dist/output/GovernanceDashboard.js +44 -44
  78. package/dist/output/HTMLArtifactLayer.js +31 -31
  79. package/dist/prompts/VibeTemplateGallery.js +121 -121
  80. package/dist/skills/SkillDiscovery.js +12 -1
  81. package/dist/skills/SkillDiscovery.js.map +1 -1
  82. package/dist/skills/SkillRadar.js +20 -0
  83. package/dist/skills/SkillRadar.js.map +1 -1
  84. package/dist/skills/SkillRepository.d.ts +9 -1
  85. package/dist/skills/SkillRepository.js +70 -0
  86. package/dist/skills/SkillRepository.js.map +1 -1
  87. package/dist/skills/routing/SkillPlanner.js +40 -40
  88. package/dist/workflow/EngineeringStandards.js +62 -62
  89. package/dist/workflow/GovernanceTemplatePacks.d.ts +1 -1
  90. package/dist/workflow/GovernanceTemplatePacks.js +1990 -162
  91. package/dist/workflow/GovernanceTemplatePacks.js.map +1 -1
  92. package/dist/workflow/GovernanceTemplates.d.ts +2 -0
  93. package/dist/workflow/GovernanceTemplates.js +1012 -1001
  94. package/dist/workflow/GovernanceTemplates.js.map +1 -1
  95. package/dist/workflow/ResourceGovernance.js +16 -16
  96. package/dist/workflow/TaskArtifactScaffolder.js +10 -10
  97. package/dist/workflow/UpgradeManager.d.ts +3 -2
  98. package/dist/workflow/UpgradeManager.js +134 -49
  99. package/dist/workflow/UpgradeManager.js.map +1 -1
  100. package/dist/workflow/WorkspaceTopology.js +18 -15
  101. package/dist/workflow/WorkspaceTopology.js.map +1 -1
  102. package/docs/CODE_INTELLIGENCE.md +138 -138
  103. package/docs/CONTEXT_BUDGET.md +81 -81
  104. package/docs/EXTERNAL_REFERENCES.md +63 -0
  105. package/docs/GITLAB_FLOW.md +125 -125
  106. package/docs/GOVERNANCE_DASHBOARD.md +64 -64
  107. package/docs/MEMORY_BRAIN.md +104 -104
  108. package/docs/MEMORY_FABRIC.md +134 -107
  109. package/docs/README.md +79 -68
  110. package/docs/RUNTIME_EVIDENCE.md +101 -101
  111. package/docs/SKILL-REPOSITORY.md +57 -0
  112. package/docs/SKILL_RADAR.md +122 -115
  113. package/docs/THIRD_PARTY_SKILLS.md +57 -0
  114. package/docs/WORKFLOW_EVAL.md +151 -151
  115. package/docs/guides/DEVELOPMENT_WORKFLOW.md +80 -0
  116. package/docs/guides/GETTING_STARTED.md +50 -0
  117. package/docs/start/README.md +78 -72
  118. package/docs/start/agent-governance-demo.md +107 -107
  119. package/docs/start/quickstart.md +137 -127
  120. package/docs/start/workflow-upgrade.md +32 -8
  121. package/docs/workflow/README.md +67 -0
  122. package/docs/workflow/node-library.md +52 -0
  123. package/docs/workflow/templates/api-contract.md +29 -0
  124. package/docs/workflow/templates/architecture-review.md +23 -0
  125. package/docs/workflow/templates/db-change-plan.md +20 -0
  126. package/docs/workflow/templates/docs-impact.md +17 -0
  127. package/docs/workflow/templates/e2e-plan.md +20 -0
  128. package/docs/workflow/templates/explore.md +16 -0
  129. package/docs/workflow/templates/github-actions-scale-preflight.yml +32 -0
  130. package/docs/workflow/templates/mini-prd.md +16 -0
  131. package/docs/workflow/templates/plan.md +37 -0
  132. package/docs/workflow/templates/pre-push-scale-preflight.sh +8 -0
  133. package/docs/workflow/templates/product-smoke.md +61 -0
  134. package/docs/workflow/templates/reality-check.md +28 -0
  135. package/docs/workflow/templates/resource-cleanup.md +17 -0
  136. package/docs/workflow/templates/resource-impact.md +25 -0
  137. package/docs/workflow/templates/review.md +12 -0
  138. package/docs/workflow/templates/runtime.md +23 -0
  139. package/docs/workflow/templates/security-review.md +26 -0
  140. package/docs/workflow/templates/skill-evidence.md +33 -0
  141. package/docs/workflow/templates/skill-plan.md +39 -0
  142. package/docs/workflow/templates/spec.md +17 -0
  143. package/docs/workflow/templates/standards-impact.md +28 -0
  144. package/docs/workflow/templates/summary.md +16 -0
  145. package/docs/workflow/templates/tasks.md +8 -0
  146. package/docs/workflow/templates/ui-spec.md +29 -0
  147. package/docs/workflow/templates/verification.md +20 -0
  148. package/docs/workflow/templates/visual-review.md +20 -0
  149. package/examples/demo-projects/agent-governance-demo/CONTEXT.md +14 -14
  150. package/examples/demo-projects/agent-governance-demo/README.md +48 -48
  151. package/examples/demo-projects/agent-governance-demo/docs/CONTEXT-MAP.md +14 -14
  152. package/examples/demo-projects/agent-governance-demo/package.json +22 -21
  153. package/examples/demo-projects/agent-governance-demo/src/oauth-state.ts +39 -39
  154. package/examples/demo-projects/agent-governance-demo/tests/oauth-state.test.ts +52 -52
  155. package/package.json +88 -75
@@ -12,11 +12,11 @@ const KARPATHY_ANTIPATTERNS = [
12
12
  category: 'hidden-assumptions',
13
13
  title: 'Hidden Assumptions',
14
14
  userRequest: 'Add a feature to export user data',
15
- wrongCode: `def export_users(format='json'):
16
- users = User.query.all()
17
- if format == 'json':
18
- with open('users.json', 'w') as f:
19
- json.dump([u.to_dict() for u in users], f)
15
+ wrongCode: `def export_users(format='json'):
16
+ users = User.query.all()
17
+ if format == 'json':
18
+ with open('users.json', 'w') as f:
19
+ json.dump([u.to_dict() for u in users], f)
20
20
  return f"Exported {len(users)} users"`,
21
21
  wrongDescription: 'Assumed export ALL users, assumed file location, assumed no pagination or privacy concerns',
22
22
  correctApproach: ['Before implementing, clarify: 1. Scope: Export all or filtered? 2. Format: Download/API/background? 3. Fields: Which user fields? 4. Volume: How many users?'],
@@ -30,8 +30,8 @@ const KARPATHY_ANTIPATTERNS = [
30
30
  category: 'multiple-interpretations',
31
31
  title: 'Multiple Interpretations Picked Silently',
32
32
  userRequest: 'Make the search faster',
33
- wrongCode: `@lru_cache(maxsize=1000)
34
- async def search(query: str) -> List[Result]:
33
+ wrongCode: `@lru_cache(maxsize=1000)
34
+ async def search(query: str) -> List[Result]:
35
35
  # 200 lines of optimization without asking which "faster" matters`,
36
36
  wrongDescription: 'Picked one interpretation of "faster" silently - could mean response time, throughput, or perceived UX',
37
37
  correctApproach: ['"Make search faster" could mean: 1. Response time (< 100ms) 2. Throughput (more concurrent) 3. Perceived UX (partial results). Present all, let user choose.'],
@@ -46,16 +46,16 @@ async def search(query: str) -> List[Result]:
46
46
  category: 'over-abstraction',
47
47
  title: 'Over-Abstraction',
48
48
  userRequest: 'Add a function to calculate discount',
49
- wrongCode: `class DiscountStrategy(ABC):
50
- @abstractmethod
51
- def calculate(self, amount: float) -> float: pass
52
- class PercentageDiscount(DiscountStrategy): ...
53
- class FixedDiscount(DiscountStrategy): ...
54
- class DiscountCalculator:
49
+ wrongCode: `class DiscountStrategy(ABC):
50
+ @abstractmethod
51
+ def calculate(self, amount: float) -> float: pass
52
+ class PercentageDiscount(DiscountStrategy): ...
53
+ class FixedDiscount(DiscountStrategy): ...
54
+ class DiscountCalculator:
55
55
  def __init__(self, config: DiscountConfig): ...`,
56
56
  wrongDescription: 'Created Strategy pattern, abstract base class, config class for a simple percentage calculation',
57
57
  correctApproach: 'Write a single function first. Add classes/abstractions only when multiple discount types are actually required.',
58
- correctCode: `def calculate_discount(amount: float, percent: float) -> float:
58
+ correctCode: `def calculate_discount(amount: float, percent: float) -> float:
59
59
  return amount * (percent / 100)`,
60
60
  correctDescription: 'One function until complexity is actually needed. Add classes when multiple discount types are required.',
61
61
  testQuestion: 'Would a senior engineer say this is overcomplicated?',
@@ -67,12 +67,12 @@ class DiscountCalculator:
67
67
  category: 'speculative-features',
68
68
  title: 'Speculative Features',
69
69
  userRequest: 'Save user preferences to database',
70
- wrongCode: `class PreferenceManager:
71
- def save(self, user_id, prefs, merge=True, validate=True, notify=False):
70
+ wrongCode: `class PreferenceManager:
71
+ def save(self, user_id, prefs, merge=True, validate=True, notify=False):
72
72
  # Added caching, validation, merging, notifications - nobody asked`,
73
73
  wrongDescription: 'Added caching, validation, merging, notifications - features nobody asked for',
74
74
  correctApproach: 'Just save the preferences. Add caching when performance matters, validation when bad data appears, notifications when needed.',
75
- correctCode: `def save_preferences(db, user_id: int, preferences: dict):
75
+ correctCode: `def save_preferences(db, user_id: int, preferences: dict):
76
76
  db.execute("UPDATE users SET preferences = ? WHERE id = ?", (json.dumps(preferences), user_id))`,
77
77
  correctDescription: 'Add later if needed: caching (when performance matters), validation (when bad data appears)',
78
78
  testQuestion: 'Did you add features beyond what was asked?',
@@ -85,7 +85,7 @@ class DiscountCalculator:
85
85
  category: 'drive-by-refactoring',
86
86
  title: 'Drive-by Refactoring',
87
87
  userRequest: 'Fix the bug where empty emails crash the validator',
88
- wrongCode: `# Changed comments, added docstring, improved email validation beyond bug,
88
+ wrongCode: `# Changed comments, added docstring, improved email validation beyond bug,
89
89
  # added username validation nobody asked for`,
90
90
  wrongDescription: 'Improved email validation beyond the bug, added username validation, changed comments, added docstring',
91
91
  correctApproach: 'Only fix the empty email handling. Do not change comments, add docstrings, or improve adjacent code.',
@@ -99,7 +99,7 @@ class DiscountCalculator:
99
99
  category: 'style-drift',
100
100
  title: 'Style Drift',
101
101
  userRequest: 'Add logging to the upload function',
102
- wrongCode: `# Changed quote style (' to "), added type hints, added docstring,
102
+ wrongCode: `# Changed quote style (' to "), added type hints, added docstring,
103
103
  # reformatted whitespace, changed boolean return logic`,
104
104
  wrongDescription: 'Changed quote style, added type hints, added docstring, reformatted whitespace',
105
105
  correctApproach: 'Match existing code style. Only add the logging statements without changing quotes, types, or formatting.',
@@ -114,7 +114,7 @@ class DiscountCalculator:
114
114
  category: 'vague-approach',
115
115
  title: 'Vague Approach Without Success Criteria',
116
116
  userRequest: 'Fix the authentication system',
117
- wrongCode: `I'll fix auth by: 1. Review code 2. Identify issues 3. Make improvements 4. Test
117
+ wrongCode: `I'll fix auth by: 1. Review code 2. Identify issues 3. Make improvements 4. Test
118
118
  [Proceeds without clear success criteria]`,
119
119
  wrongDescription: 'No verifiable success criteria, no reproduction test, vague steps',
120
120
  correctApproach: ['Plan: 1. Write test: Change password -> verify session invalidated (Verify: test fails). 2. Implement (Verify: test passes). 3. Check edge cases (Verify: additional tests pass). 4. No regression (Verify: full suite green)'],
@@ -6,177 +6,177 @@ import { join } from 'node:path';
6
6
  // ============================================================================
7
7
  // SCALE v10.0 Philosophy — P1 system_rules layer content
8
8
  // ============================================================================
9
- const SCALE_V10_PHILOSOPHY = `## SCALE Engine v10.0 — System Rules
10
-
11
- You are operating under SCALE Engine governance. These rules are PHYSICALLY ENFORCED — you cannot bypass them by choice.
12
-
13
- ### Core Philosophy
14
- - **S**caffold — Every action is scaffolded by artifacts (Spec→Plan→Task→Change→Evidence)
15
- - **C**ontrol — Guardrails physically block dangerous actions; no "soft" suggestions
16
- - **A**rtifact — All work products are tracked artifacts with FSM state machines
17
- - **L**earn — Defects auto-extract to Lessons → Rules → Hooks (evolution loop)
18
- - **E**volve — The system improves itself from mistakes
19
-
20
- ### Physical Constraints (cannot be bypassed)
21
- 🔴 **Dangerous commands** (rm -rf, DROP TABLE, format) are BLOCKED at the gate
22
- 🔴 **Hardcoded secrets** (AWS keys, passwords, tokens) are BLOCKED on Edit/Write
23
- 🔴 **Unapproved code** — Cannot implement until Spec is FROZEN and Plan is APPROVED
24
- 🟡 **Brute retry** — 3+ identical retries detected → forced pause + context injection
25
- 🟡 **Premature completion** — Cannot claim "done" without running tests
26
- 🟡 **Blame shift** — Detected when AI blames environment without evidence
27
-
28
- ### Mandatory Workflow
29
- 1. **Explore** (role: explorer) — Read/Grep only, no edits
30
- 2. **Plan** (role: planner) — Create Spec → refine → approve (guard: ambiguity ≤ 0.2)
31
- 3. **Implement** (role: implementer) — Edit/Write/Bash unlocked only after Plan APPROVED
32
- 4. **Verify** — Must run build+lint+test before marking task complete
33
- 5. **Learn** — Defects auto-extract → lessons → rules → hooks
34
-
35
- ### Artifact Lifecycle
36
- - Every piece of work is an Artifact with typed FSM transitions
37
- - Guards check quality gates at each transition (ambiguity score, test coverage, etc.)
38
- - Artifacts form a DAG: Need→Insight→Spec→Plan→Task→Change→Evidence
39
- - Challenging a FROZEN Spec invalidates downstream Plans and Tasks
40
-
41
- ### Self-Evolution
42
- - Defect → Lesson (auto-extracted from root cause)
43
- - Lesson → Rule (promoted by access count + verification)
44
- - Rule → Hook (auto-generated enforcement code)
9
+ const SCALE_V10_PHILOSOPHY = `## SCALE Engine v10.0 — System Rules
10
+
11
+ You are operating under SCALE Engine governance. These rules are PHYSICALLY ENFORCED — you cannot bypass them by choice.
12
+
13
+ ### Core Philosophy
14
+ - **S**caffold — Every action is scaffolded by artifacts (Spec→Plan→Task→Change→Evidence)
15
+ - **C**ontrol — Guardrails physically block dangerous actions; no "soft" suggestions
16
+ - **A**rtifact — All work products are tracked artifacts with FSM state machines
17
+ - **L**earn — Defects auto-extract to Lessons → Rules → Hooks (evolution loop)
18
+ - **E**volve — The system improves itself from mistakes
19
+
20
+ ### Physical Constraints (cannot be bypassed)
21
+ 🔴 **Dangerous commands** (rm -rf, DROP TABLE, format) are BLOCKED at the gate
22
+ 🔴 **Hardcoded secrets** (AWS keys, passwords, tokens) are BLOCKED on Edit/Write
23
+ 🔴 **Unapproved code** — Cannot implement until Spec is FROZEN and Plan is APPROVED
24
+ 🟡 **Brute retry** — 3+ identical retries detected → forced pause + context injection
25
+ 🟡 **Premature completion** — Cannot claim "done" without running tests
26
+ 🟡 **Blame shift** — Detected when AI blames environment without evidence
27
+
28
+ ### Mandatory Workflow
29
+ 1. **Explore** (role: explorer) — Read/Grep only, no edits
30
+ 2. **Plan** (role: planner) — Create Spec → refine → approve (guard: ambiguity ≤ 0.2)
31
+ 3. **Implement** (role: implementer) — Edit/Write/Bash unlocked only after Plan APPROVED
32
+ 4. **Verify** — Must run build+lint+test before marking task complete
33
+ 5. **Learn** — Defects auto-extract → lessons → rules → hooks
34
+
35
+ ### Artifact Lifecycle
36
+ - Every piece of work is an Artifact with typed FSM transitions
37
+ - Guards check quality gates at each transition (ambiguity score, test coverage, etc.)
38
+ - Artifacts form a DAG: Need→Insight→Spec→Plan→Task→Change→Evidence
39
+ - Challenging a FROZEN Spec invalidates downstream Plans and Tasks
40
+
41
+ ### Self-Evolution
42
+ - Defect → Lesson (auto-extracted from root cause)
43
+ - Lesson → Rule (promoted by access count + verification)
44
+ - Rule → Hook (auto-generated enforcement code)
45
45
  - The system gets stricter over time, not weaker`;
46
46
  // ============================================================================
47
47
  // mattpoclock/skills style: Deep Modules + Vertical Slices TDD (Phase 15)
48
48
  // ============================================================================
49
- const DEEP_MODULES_PRINCIPLE = `## Deep Modules 原则
50
-
51
- 接口深度 = 调用者杠杆 + 维护者局部性
52
-
53
- **删除测试**:如果删除这个模块,调用者需要写多少代码补偿?
54
- - 补偿代码越多 = 模块价值越大
55
- - 补偿代码越少 = 模块可删除
56
-
57
- **设计决策**:
58
- - 抓杠杆:接口应该让调用者一次调用完成复杂操作
59
- - 保局部:复杂逻辑隐藏在模块内部,不在接口暴露
60
-
61
- **判断标准**:
62
- - 好模块:简单接口,隐藏复杂性(如 fs.readFile(path) vs 手写文件系统)
63
- - 坏模块:复杂接口,暴露内部复杂性(如 10 个参数的 init 函数)
64
-
65
- **设计时问自己**:
66
- 1. 调用者需要了解多少才能使用?
67
- 2. 如果删除,调用者需要补偿多少?
49
+ const DEEP_MODULES_PRINCIPLE = `## Deep Modules 原则
50
+
51
+ 接口深度 = 调用者杠杆 + 维护者局部性
52
+
53
+ **删除测试**:如果删除这个模块,调用者需要写多少代码补偿?
54
+ - 补偿代码越多 = 模块价值越大
55
+ - 补偿代码越少 = 模块可删除
56
+
57
+ **设计决策**:
58
+ - 抓杠杆:接口应该让调用者一次调用完成复杂操作
59
+ - 保局部:复杂逻辑隐藏在模块内部,不在接口暴露
60
+
61
+ **判断标准**:
62
+ - 好模块:简单接口,隐藏复杂性(如 fs.readFile(path) vs 手写文件系统)
63
+ - 坏模块:复杂接口,暴露内部复杂性(如 10 个参数的 init 函数)
64
+
65
+ **设计时问自己**:
66
+ 1. 调用者需要了解多少才能使用?
67
+ 2. 如果删除,调用者需要补偿多少?
68
68
  3. 内部实现变更,接口需要变吗?`;
69
- const VERTICAL_SLICES_TDD = `## Vertical Slices TDD(Tracer Bullets)
70
-
71
- **Wrong(Horizontal)**:
72
- 1. 写所有测试
73
- 2. 实现所有功能
74
- 3. 运行所有测试
75
-
76
- **Right(Vertical)**:
77
- 1. 选一个行为
78
- 2. 写该行为的测试
79
- 3. 实现该行为
80
- 4. 验证测试通过
81
- 5. 下一个行为
82
-
83
- **优势**:
84
- - 每个切片独立可验证
85
- - 失败时定位精确
86
- - 避免大爆炸集成
87
- - 早期发现设计问题
88
-
89
- **Tracer Bullets 原则**:
90
- - 先打通端到端骨架(可能不完整但可运行)
91
- - 再逐层填充细节
92
- - 每一步都有可验证的产出
93
-
94
- **TDD 防幻觉铁律**:
95
- - 绝不能同时写代码和测试!
96
- - 如果先写了有 Bug 的代码,再写测试,会写出"验证错误逻辑"的测试
97
- - 正确做法:测试先行,独立验证
69
+ const VERTICAL_SLICES_TDD = `## Vertical Slices TDD(Tracer Bullets)
70
+
71
+ **Wrong(Horizontal)**:
72
+ 1. 写所有测试
73
+ 2. 实现所有功能
74
+ 3. 运行所有测试
75
+
76
+ **Right(Vertical)**:
77
+ 1. 选一个行为
78
+ 2. 写该行为的测试
79
+ 3. 实现该行为
80
+ 4. 验证测试通过
81
+ 5. 下一个行为
82
+
83
+ **优势**:
84
+ - 每个切片独立可验证
85
+ - 失败时定位精确
86
+ - 避免大爆炸集成
87
+ - 早期发现设计问题
88
+
89
+ **Tracer Bullets 原则**:
90
+ - 先打通端到端骨架(可能不完整但可运行)
91
+ - 再逐层填充细节
92
+ - 每一步都有可验证的产出
93
+
94
+ **TDD 防幻觉铁律**:
95
+ - 绝不能同时写代码和测试!
96
+ - 如果先写了有 Bug 的代码,再写测试,会写出"验证错误逻辑"的测试
97
+ - 正确做法:测试先行,独立验证
98
98
  - 测试文件一旦写完,后续实现中禁止修改测试(除非测试本身有错)`;
99
99
  // ============================================================================
100
100
  // Karpathy Guidelines (andrej-karpathy-skills style)
101
101
  // ============================================================================
102
- const KARPATHY_PRINCIPLES = `## Karpathy Guidelines — LLM 编码行为准则
103
-
104
- 源自 Andrej Karpathy 对 LLM 编码陷阱的观察。**倾向谨慎而非速度**。
105
-
106
- ### 1. Think Before Coding(编码前先思考)
107
- **不做假设。不隐藏困惑。呈现权衡。**
108
-
109
- - 显式陈述假设。不确定就问。
110
- - 存在多种解释时全部呈现 — 不要默默选择。
111
- - 如果有更简单方案,说出来。该反驳就反驳。
112
- - 不清楚时停下。命名困惑点。询问。
113
-
114
- ### 2. Simplicity First(简单优先)
115
- **解决问题的最少代码。拒绝投机性功能。**
116
-
117
- - 不写超出需求的功能。
118
- - 单用途代码不抽象化。
119
- - 不添加未请求的"灵活性"或"可配置性"。
120
- - 不处理不可能发生的错误场景。
121
- - 如果 200 行可以写成 50 行,重写它。
122
-
123
- **测试**:资深工程师会说"这过度复杂了吗?"如果是,简化。
124
-
125
- ### 3. Surgical Changes(手术式修改)
126
- **只动必须动的。只清理自己制造的垃圾。**
127
-
128
- 编辑现有代码时:
129
- - 不要"改进"相邻代码、注释或格式。
130
- - 不要重构未损坏的东西。
131
- - 匹配现有风格,即使你偏好不同写法。
132
- - 注意到无关死代码时提及 — 不要删除。
133
-
134
- 你的修改产生孤儿时:
135
- - 删除 YOUR 修改导致未使用的导入/变量/函数。
136
- - 不要删除预先存在的死代码(除非被要求)。
137
-
138
- **测试**:每行改动应能追溯到用户请求。
139
-
140
- ### 4. Goal-Driven Execution(目标驱动执行)
141
- **定义成功标准。循环直到验证。**
142
-
143
- 将任务转化为可验证目标:
144
- - "添加验证" → "为无效输入写测试,然后使测试通过"
145
- - "修复 bug" → "写一个复现它的测试,然后使测试通过"
146
- - "重构 X" → "确保前后测试都通过"
147
-
148
- 多步骤任务格式:
149
- \`\`\`
150
- 1. [步骤] → verify: [检查]
151
- 2. [步骤] → verify: [检查]
152
- 3. [步骤] → verify: [检查]
153
- \`\`\`
154
-
102
+ const KARPATHY_PRINCIPLES = `## Karpathy Guidelines — LLM 编码行为准则
103
+
104
+ 源自 Andrej Karpathy 对 LLM 编码陷阱的观察。**倾向谨慎而非速度**。
105
+
106
+ ### 1. Think Before Coding(编码前先思考)
107
+ **不做假设。不隐藏困惑。呈现权衡。**
108
+
109
+ - 显式陈述假设。不确定就问。
110
+ - 存在多种解释时全部呈现 — 不要默默选择。
111
+ - 如果有更简单方案,说出来。该反驳就反驳。
112
+ - 不清楚时停下。命名困惑点。询问。
113
+
114
+ ### 2. Simplicity First(简单优先)
115
+ **解决问题的最少代码。拒绝投机性功能。**
116
+
117
+ - 不写超出需求的功能。
118
+ - 单用途代码不抽象化。
119
+ - 不添加未请求的"灵活性"或"可配置性"。
120
+ - 不处理不可能发生的错误场景。
121
+ - 如果 200 行可以写成 50 行,重写它。
122
+
123
+ **测试**:资深工程师会说"这过度复杂了吗?"如果是,简化。
124
+
125
+ ### 3. Surgical Changes(手术式修改)
126
+ **只动必须动的。只清理自己制造的垃圾。**
127
+
128
+ 编辑现有代码时:
129
+ - 不要"改进"相邻代码、注释或格式。
130
+ - 不要重构未损坏的东西。
131
+ - 匹配现有风格,即使你偏好不同写法。
132
+ - 注意到无关死代码时提及 — 不要删除。
133
+
134
+ 你的修改产生孤儿时:
135
+ - 删除 YOUR 修改导致未使用的导入/变量/函数。
136
+ - 不要删除预先存在的死代码(除非被要求)。
137
+
138
+ **测试**:每行改动应能追溯到用户请求。
139
+
140
+ ### 4. Goal-Driven Execution(目标驱动执行)
141
+ **定义成功标准。循环直到验证。**
142
+
143
+ 将任务转化为可验证目标:
144
+ - "添加验证" → "为无效输入写测试,然后使测试通过"
145
+ - "修复 bug" → "写一个复现它的测试,然后使测试通过"
146
+ - "重构 X" → "确保前后测试都通过"
147
+
148
+ 多步骤任务格式:
149
+ \`\`\`
150
+ 1. [步骤] → verify: [检查]
151
+ 2. [步骤] → verify: [检查]
152
+ 3. [步骤] → verify: [检查]
153
+ \`\`\`
154
+
155
155
  强成功标准让你独立循环。弱标准("让它工作")需要频繁澄清。`;
156
156
  // ============================================================================
157
157
  // Scenario Mode Context Additions
158
158
  // ============================================================================
159
159
  const SCENARIO_CONTEXT = {
160
- sandbox: `### Scenario Mode: SANDBOX 🏖️
161
- - Lower detector sensitivity — exploratory work allowed
162
- - Verification NOT required before completion
163
- - Human confirmation NOT required
164
- - Audit trail disabled (lighter weight)
165
- - Max retries: 10 (freedom to experiment)
160
+ sandbox: `### Scenario Mode: SANDBOX 🏖️
161
+ - Lower detector sensitivity — exploratory work allowed
162
+ - Verification NOT required before completion
163
+ - Human confirmation NOT required
164
+ - Audit trail disabled (lighter weight)
165
+ - Max retries: 10 (freedom to experiment)
166
166
  - Use for: prototyping, exploration, learning`,
167
- standard: `### Scenario Mode: STANDARD ⚙️
168
- - Medium detector sensitivity — production-quality required
169
- - Verification REQUIRED before completion
170
- - Human confirmation NOT required (trust the process)
171
- - Audit trail ENABLED
172
- - Max retries: 5 (balanced)
167
+ standard: `### Scenario Mode: STANDARD ⚙️
168
+ - Medium detector sensitivity — production-quality required
169
+ - Verification REQUIRED before completion
170
+ - Human confirmation NOT required (trust the process)
171
+ - Audit trail ENABLED
172
+ - Max retries: 5 (balanced)
173
173
  - Use for: feature development, bug fixes, regular work`,
174
- critical: `### Scenario Mode: CRITICAL 🔒
175
- - Maximum detector sensitivity — zero tolerance for errors
176
- - Verification REQUIRED before completion
177
- - Human confirmation REQUIRED for key transitions
178
- - Audit trail ENABLED (comprehensive)
179
- - Max retries: 3 (fail fast, escalate)
174
+ critical: `### Scenario Mode: CRITICAL 🔒
175
+ - Maximum detector sensitivity — zero tolerance for errors
176
+ - Verification REQUIRED before completion
177
+ - Human confirmation REQUIRED for key transitions
178
+ - Audit trail ENABLED (comprehensive)
179
+ - Max retries: 3 (fail fast, escalate)
180
180
  - Use for: security changes, production deployments, data migrations`,
181
181
  };
182
182
  // ============================================================================
@@ -169,20 +169,20 @@ export class RuleProposer {
169
169
  mkdirSync(rulesDir, { recursive: true });
170
170
  const filename = `${rule.id}.md`;
171
171
  const path = join(rulesDir, filename);
172
- const content = `# ${rule.title}
173
-
174
- > Source: ${rule.sourceLesson}
175
- > Enforcement: ${rule.enforcement}
176
- > Approved: ${rule.approved ? `Yes (by ${rule.approvedBy})` : 'Pending'}
177
- > Created: ${new Date(rule.createdAt).toISOString()}
178
-
179
- ## Description
180
-
181
- ${rule.description}
182
-
183
- ## Pattern
184
-
185
- \`${rule.pattern}\`
172
+ const content = `# ${rule.title}
173
+
174
+ > Source: ${rule.sourceLesson}
175
+ > Enforcement: ${rule.enforcement}
176
+ > Approved: ${rule.approved ? `Yes (by ${rule.approvedBy})` : 'Pending'}
177
+ > Created: ${new Date(rule.createdAt).toISOString()}
178
+
179
+ ## Description
180
+
181
+ ${rule.description}
182
+
183
+ ## Pattern
184
+
185
+ \`${rule.pattern}\`
186
186
  `;
187
187
  writeFileSync(path, content, 'utf-8');
188
188
  return path;
@@ -212,23 +212,23 @@ export class HookGenerator {
212
212
  const scriptName = `${rule.id}.sh`;
213
213
  const scriptPath = join(hooksDir, scriptName);
214
214
  // Generate shell script
215
- const script = `#!/bin/bash
216
- # Auto-generated hook from Rule: ${rule.id}
217
- # Source lesson: ${rule.sourceLesson}
218
- # Pattern: ${rule.pattern}
219
- # Hook type: ${hookType} | Matcher: ${matcher}
220
- #
221
- # This hook was automatically promoted from a recurring lesson.
222
- # Edit with caution — it enforces a hard constraint.
223
-
224
- # Read tool input from stdin
225
- INPUT=$(cat)
226
-
227
- # Check condition
228
- # TODO: Implement specific check for pattern "${rule.pattern}"
229
- # For now, this is a placeholder that always passes.
230
- echo "Hook ${rule.id} checked (pattern: ${rule.pattern})" >&2
231
- exit 0
215
+ const script = `#!/bin/bash
216
+ # Auto-generated hook from Rule: ${rule.id}
217
+ # Source lesson: ${rule.sourceLesson}
218
+ # Pattern: ${rule.pattern}
219
+ # Hook type: ${hookType} | Matcher: ${matcher}
220
+ #
221
+ # This hook was automatically promoted from a recurring lesson.
222
+ # Edit with caution — it enforces a hard constraint.
223
+
224
+ # Read tool input from stdin
225
+ INPUT=$(cat)
226
+
227
+ # Check condition
228
+ # TODO: Implement specific check for pattern "${rule.pattern}"
229
+ # For now, this is a placeholder that always passes.
230
+ echo "Hook ${rule.id} checked (pattern: ${rule.pattern})" >&2
231
+ exit 0
232
232
  `;
233
233
  writeFileSync(scriptPath, script, 'utf-8');
234
234
  const hook = {
@@ -40,6 +40,7 @@ export declare class EvolutionEvaluator implements IEvolutionEvaluator {
40
40
  private stats?;
41
41
  private history;
42
42
  private maxHistory;
43
+ private lastSnapshotTimestamp;
43
44
  constructor(eventBus: IEventBus, _kb?: IKnowledgeBase, stats?: DetectorStatisticsTracker | undefined, opts?: {
44
45
  maxHistory?: number;
45
46
  });
@@ -51,6 +52,7 @@ export declare class EvolutionEvaluator implements IEvolutionEvaluator {
51
52
  }>;
52
53
  getRecommendations(): Promise<string[]>;
53
54
  private countEvents;
55
+ private nextSnapshotTimestamp;
54
56
  private calculateLessonQuality;
55
57
  private calculateRuleEffectiveness;
56
58
  private calculateDetectorEffectiveness;
@@ -8,6 +8,7 @@ export class EvolutionEvaluator {
8
8
  this.eventBus = eventBus;
9
9
  this.stats = stats;
10
10
  this.history = [];
11
+ this.lastSnapshotTimestamp = 0;
11
12
  this.maxHistory = opts.maxHistory ?? 30;
12
13
  }
13
14
  async evaluate() {
@@ -38,7 +39,7 @@ export class EvolutionEvaluator {
38
39
  metrics.detectorEffectivenessScore = this.calculateDetectorEffectiveness(metrics);
39
40
  metrics.overallScore = this.calculateOverallScore(metrics);
40
41
  metrics.trend = this.determineTrend(metrics);
41
- this.history.push({ timestamp: Date.now(), metrics });
42
+ this.history.push({ timestamp: this.nextSnapshotTimestamp(), metrics });
42
43
  if (this.history.length > this.maxHistory)
43
44
  this.history.shift();
44
45
  this.eventBus.emit('evolution.evaluated', { score: metrics.overallScore, trend: metrics.trend });
@@ -79,6 +80,11 @@ export class EvolutionEvaluator {
79
80
  const events = await this.eventBus.query({ types: [type], limit: 1000 });
80
81
  return events.length;
81
82
  }
83
+ nextSnapshotTimestamp() {
84
+ const now = Date.now();
85
+ this.lastSnapshotTimestamp = Math.max(now, this.lastSnapshotTimestamp + 1);
86
+ return this.lastSnapshotTimestamp;
87
+ }
82
88
  calculateLessonQuality(m) {
83
89
  if (m.lessonsProposed === 0)
84
90
  return 0;
@@ -1 +1 @@
1
- {"version":3,"file":"EvolutionEvaluator.js","sourceRoot":"","sources":["../../src/evolution/EvolutionEvaluator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EvolutionEvaluator.js","sourceRoot":"","sources":["../../src/evolution/EvolutionEvaluator.ts"],"names":[],"mappings":"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"}
@@ -174,19 +174,19 @@ export class FSMAgentBridge {
174
174
  const allowed = s.allowedTransitions.length > 0 ? s.allowedTransitions.join(', ') : 'none';
175
175
  const blocked = s.blockingReasons.length > 0 ? s.blockingReasons.slice(0, 3).join('; ') : 'none';
176
176
  const impact = s.downstreamImpact.length > 0 ? `${s.downstreamImpact.length} children` : 'none';
177
- return `### ${s.artifactId} (${s.artifactType})
178
- - Status: **${s.currentStatus}**
179
- - Allowed actions: ${allowed}
180
- - Blocked: ${blocked}
181
- - Downstream impact: ${impact}
182
- - Parent: ${s.parentStatus ?? 'none'}
177
+ return `### ${s.artifactId} (${s.artifactType})
178
+ - Status: **${s.currentStatus}**
179
+ - Allowed actions: ${allowed}
180
+ - Blocked: ${blocked}
181
+ - Downstream impact: ${impact}
182
+ - Parent: ${s.parentStatus ?? 'none'}
183
183
  - Children: ${s.childrenStatuses.length > 0 ? s.childrenStatuses.join(', ') : 'none'}`;
184
184
  });
185
- return `\n## FSM Status Constraints
186
-
187
- ${lines.join('\n\n')}
188
-
189
- > **Important**: Only execute actions listed in "Allowed actions". Blocked actions require resolving constraints first.
185
+ return `\n## FSM Status Constraints
186
+
187
+ ${lines.join('\n\n')}
188
+
189
+ > **Important**: Only execute actions listed in "Allowed actions". Blocked actions require resolving constraints first.
190
190
  `;
191
191
  }
192
192
  }