@hongmaple0820/scale-engine 0.7.1 → 0.8.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 (209) hide show
  1. package/README.md +31 -5
  2. package/dist/adapters/ClaudeCodeAdapter.js +5 -3
  3. package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
  4. package/dist/adapters/CodexAdapter.js +5 -3
  5. package/dist/adapters/CodexAdapter.js.map +1 -1
  6. package/dist/adapters/CursorAdapter.js +5 -3
  7. package/dist/adapters/CursorAdapter.js.map +1 -1
  8. package/dist/adapters/GeminiAdapter.js +5 -3
  9. package/dist/adapters/GeminiAdapter.js.map +1 -1
  10. package/dist/adapters/HermesAdapter.js +5 -3
  11. package/dist/adapters/HermesAdapter.js.map +1 -1
  12. package/dist/adapters/OpenClawAdapter.js +5 -3
  13. package/dist/adapters/OpenClawAdapter.js.map +1 -1
  14. package/dist/adapters/OpenCodeAdapter.js +5 -3
  15. package/dist/adapters/OpenCodeAdapter.js.map +1 -1
  16. package/dist/adapters/QCoderAdapter.js +5 -3
  17. package/dist/adapters/QCoderAdapter.js.map +1 -1
  18. package/dist/adapters/TraeAdapter.js +5 -3
  19. package/dist/adapters/TraeAdapter.js.map +1 -1
  20. package/dist/adapters/VSCAdapter.js +5 -3
  21. package/dist/adapters/VSCAdapter.js.map +1 -1
  22. package/dist/adapters/WorkBuddyAdapter.js +5 -3
  23. package/dist/adapters/WorkBuddyAdapter.js.map +1 -1
  24. package/dist/agents/AgentChannel.d.ts +43 -0
  25. package/dist/agents/AgentChannel.js +136 -0
  26. package/dist/agents/AgentChannel.js.map +1 -0
  27. package/dist/agents/AgentCoordinator.d.ts +29 -0
  28. package/dist/agents/AgentCoordinator.js +136 -0
  29. package/dist/agents/AgentCoordinator.js.map +1 -0
  30. package/dist/agents/AgentDispatcher.d.ts +24 -0
  31. package/dist/agents/AgentDispatcher.js +112 -0
  32. package/dist/agents/AgentDispatcher.js.map +1 -0
  33. package/dist/agents/AgentManager.d.ts +14 -0
  34. package/dist/agents/AgentManager.js +85 -0
  35. package/dist/agents/AgentManager.js.map +1 -0
  36. package/dist/agents/AgentPool.d.ts +59 -0
  37. package/dist/agents/AgentPool.js +192 -0
  38. package/dist/agents/AgentPool.js.map +1 -0
  39. package/dist/agents/AgentRegistry.d.ts +20 -0
  40. package/dist/agents/AgentRegistry.js +36 -0
  41. package/dist/agents/AgentRegistry.js.map +1 -0
  42. package/dist/agents/AgentSourceLoader.d.ts +73 -0
  43. package/dist/agents/AgentSourceLoader.js +101 -0
  44. package/dist/agents/AgentSourceLoader.js.map +1 -0
  45. package/dist/agents/IAgent.d.ts +53 -0
  46. package/dist/agents/IAgent.js +4 -0
  47. package/dist/agents/IAgent.js.map +1 -0
  48. package/dist/agents/definitions/debugger.d.ts +2 -0
  49. package/dist/agents/definitions/debugger.js +6 -0
  50. package/dist/agents/definitions/debugger.js.map +1 -0
  51. package/dist/agents/definitions/doc-writer.d.ts +2 -0
  52. package/dist/agents/definitions/doc-writer.js +6 -0
  53. package/dist/agents/definitions/doc-writer.js.map +1 -0
  54. package/dist/agents/definitions/implementer.d.ts +2 -0
  55. package/dist/agents/definitions/implementer.js +6 -0
  56. package/dist/agents/definitions/implementer.js.map +1 -0
  57. package/dist/agents/definitions/planner.d.ts +2 -0
  58. package/dist/agents/definitions/planner.js +6 -0
  59. package/dist/agents/definitions/planner.js.map +1 -0
  60. package/dist/agents/definitions/researcher.d.ts +2 -0
  61. package/dist/agents/definitions/researcher.js +6 -0
  62. package/dist/agents/definitions/researcher.js.map +1 -0
  63. package/dist/agents/definitions/reviewer.d.ts +2 -0
  64. package/dist/agents/definitions/reviewer.js +6 -0
  65. package/dist/agents/definitions/reviewer.js.map +1 -0
  66. package/dist/agents/definitions/security.d.ts +2 -0
  67. package/dist/agents/definitions/security.js +6 -0
  68. package/dist/agents/definitions/security.js.map +1 -0
  69. package/dist/agents/definitions/tester.d.ts +2 -0
  70. package/dist/agents/definitions/tester.js +6 -0
  71. package/dist/agents/definitions/tester.js.map +1 -0
  72. package/dist/agents/index.d.ts +23 -0
  73. package/dist/agents/index.js +44 -0
  74. package/dist/agents/index.js.map +1 -0
  75. package/dist/agents/profiles.d.ts +26 -0
  76. package/dist/agents/profiles.js +197 -0
  77. package/dist/agents/profiles.js.map +1 -0
  78. package/dist/agents/types.d.ts +262 -0
  79. package/dist/agents/types.js +4 -0
  80. package/dist/agents/types.js.map +1 -0
  81. package/dist/api/cli.js +121 -3
  82. package/dist/api/cli.js.map +1 -1
  83. package/dist/api/doctor.js +0 -2
  84. package/dist/api/doctor.js.map +1 -1
  85. package/dist/api/mcp.js +0 -5
  86. package/dist/api/mcp.js.map +1 -1
  87. package/dist/artifact/fsm.js +3 -5
  88. package/dist/artifact/fsm.js.map +1 -1
  89. package/dist/artifact/sqliteStore.js +1 -14
  90. package/dist/artifact/sqliteStore.js.map +1 -1
  91. package/dist/artifact/store.js +2 -4
  92. package/dist/artifact/store.js.map +1 -1
  93. package/dist/artifact/types.d.ts +94 -1
  94. package/dist/artifact/types.js +0 -3
  95. package/dist/artifact/types.js.map +1 -1
  96. package/dist/context/AntiPatternRegistry.d.ts +38 -0
  97. package/dist/context/AntiPatternRegistry.js +203 -0
  98. package/dist/context/AntiPatternRegistry.js.map +1 -0
  99. package/dist/context/CavemanCompressor.d.ts +20 -0
  100. package/dist/context/CavemanCompressor.js +14 -0
  101. package/dist/context/CavemanCompressor.js.map +1 -0
  102. package/dist/context/ContextBuilder.js +132 -4
  103. package/dist/context/ContextBuilder.js.map +1 -1
  104. package/dist/context/SessionStartSequence.d.ts +54 -0
  105. package/dist/context/SessionStartSequence.js +153 -0
  106. package/dist/context/SessionStartSequence.js.map +1 -0
  107. package/dist/core/container.js +4 -2
  108. package/dist/core/container.js.map +1 -1
  109. package/dist/core/eventBus.js +5 -6
  110. package/dist/core/eventBus.js.map +1 -1
  111. package/dist/dashboard/DashboardServer.d.ts +17 -0
  112. package/dist/dashboard/DashboardServer.js +53 -7
  113. package/dist/dashboard/DashboardServer.js.map +1 -1
  114. package/dist/dashboard/index.d.ts +2 -0
  115. package/dist/dashboard/index.js +2 -0
  116. package/dist/dashboard/index.js.map +1 -0
  117. package/dist/dashboard/server.d.ts +52 -0
  118. package/dist/dashboard/server.js +83 -0
  119. package/dist/dashboard/server.js.map +1 -0
  120. package/dist/evolution/AutoDefectCreator.js +2 -4
  121. package/dist/evolution/AutoDefectCreator.js.map +1 -1
  122. package/dist/evolution/BehaviorTracker.js +3 -5
  123. package/dist/evolution/BehaviorTracker.js.map +1 -1
  124. package/dist/evolution/EvolutionEngine.js +3 -14
  125. package/dist/evolution/EvolutionEngine.js.map +1 -1
  126. package/dist/evolution/EvolutionEvaluator.js +1 -4
  127. package/dist/evolution/EvolutionEvaluator.js.map +1 -1
  128. package/dist/evolution/LessonValidator.js +0 -4
  129. package/dist/evolution/LessonValidator.js.map +1 -1
  130. package/dist/evolution/PatternExtractor.d.ts +40 -0
  131. package/dist/evolution/PatternExtractor.js +83 -0
  132. package/dist/evolution/PatternExtractor.js.map +1 -0
  133. package/dist/evolution/SkillCreator.d.ts +75 -0
  134. package/dist/evolution/SkillCreator.js +219 -0
  135. package/dist/evolution/SkillCreator.js.map +1 -0
  136. package/dist/fsm/FSMAgentBridge.js +11 -13
  137. package/dist/fsm/FSMAgentBridge.js.map +1 -1
  138. package/dist/guardrails/DetectorEnhanced.js +32 -30
  139. package/dist/guardrails/DetectorEnhanced.js.map +1 -1
  140. package/dist/guardrails/GateEvaluator.d.ts +18 -0
  141. package/dist/guardrails/GateEvaluator.js +129 -0
  142. package/dist/guardrails/GateEvaluator.js.map +1 -0
  143. package/dist/guardrails/Gateway.js +6 -7
  144. package/dist/guardrails/Gateway.js.map +1 -1
  145. package/dist/guardrails/ReviewEnforcer.d.ts +52 -0
  146. package/dist/guardrails/ReviewEnforcer.js +117 -0
  147. package/dist/guardrails/ReviewEnforcer.js.map +1 -0
  148. package/dist/guardrails/advancedDetectors.js +33 -31
  149. package/dist/guardrails/advancedDetectors.js.map +1 -1
  150. package/dist/guardrails/detectors.js +76 -16
  151. package/dist/guardrails/detectors.js.map +1 -1
  152. package/dist/hooks/HookDeployer.js +2 -3
  153. package/dist/hooks/HookDeployer.js.map +1 -1
  154. package/dist/hooks/HookGeneratorEnhanced.js +2 -3
  155. package/dist/hooks/HookGeneratorEnhanced.js.map +1 -1
  156. package/dist/index.d.ts +20 -2
  157. package/dist/index.js +19 -2
  158. package/dist/index.js.map +1 -1
  159. package/dist/knowledge/KnowledgeBase.d.ts +26 -0
  160. package/dist/knowledge/KnowledgeBase.js +109 -8
  161. package/dist/knowledge/KnowledgeBase.js.map +1 -1
  162. package/dist/knowledge/SQLiteKnowledgeBase.js +1 -3
  163. package/dist/knowledge/SQLiteKnowledgeBase.js.map +1 -1
  164. package/dist/knowledge/UbiquitousLanguageManager.d.ts +49 -0
  165. package/dist/knowledge/UbiquitousLanguageManager.js +133 -0
  166. package/dist/knowledge/UbiquitousLanguageManager.js.map +1 -0
  167. package/dist/routing/ModelRouter.js +0 -2
  168. package/dist/routing/ModelRouter.js.map +1 -1
  169. package/dist/skills/ExternalSkills.d.ts +3 -0
  170. package/dist/skills/ExternalSkills.js +20 -0
  171. package/dist/skills/ExternalSkills.js.map +1 -0
  172. package/dist/skills/GrillingSessionSkill.d.ts +65 -0
  173. package/dist/skills/GrillingSessionSkill.js +113 -0
  174. package/dist/skills/GrillingSessionSkill.js.map +1 -0
  175. package/dist/skills/GrillingTemplates.d.ts +7 -0
  176. package/dist/skills/GrillingTemplates.js +38 -0
  177. package/dist/skills/GrillingTemplates.js.map +1 -0
  178. package/dist/skills/SkillDiscovery.d.ts +45 -20
  179. package/dist/skills/SkillDiscovery.js +201 -117
  180. package/dist/skills/SkillDiscovery.js.map +1 -1
  181. package/dist/skills/SkillExecutor.js +1 -3
  182. package/dist/skills/SkillExecutor.js.map +1 -1
  183. package/dist/skills/SkillInstaller.d.ts +40 -0
  184. package/dist/skills/SkillInstaller.js +112 -0
  185. package/dist/skills/SkillInstaller.js.map +1 -0
  186. package/dist/skills/SkillRegistry.js +1 -2
  187. package/dist/skills/SkillRegistry.js.map +1 -1
  188. package/dist/skills/TriggerEngine.js +3 -5
  189. package/dist/skills/TriggerEngine.js.map +1 -1
  190. package/dist/skills/index.d.ts +3 -0
  191. package/dist/skills/index.js +3 -0
  192. package/dist/skills/index.js.map +1 -1
  193. package/dist/tasks/IssueTriageFSM.d.ts +26 -0
  194. package/dist/tasks/IssueTriageFSM.js +107 -0
  195. package/dist/tasks/IssueTriageFSM.js.map +1 -0
  196. package/dist/tasks/TaskEngine.js +1 -5
  197. package/dist/tasks/TaskEngine.js.map +1 -1
  198. package/dist/workflows/DAGBuilder.d.ts +52 -0
  199. package/dist/workflows/DAGBuilder.js +169 -0
  200. package/dist/workflows/DAGBuilder.js.map +1 -0
  201. package/dist/workflows/WorkflowExecutor.js +2 -4
  202. package/dist/workflows/WorkflowExecutor.js.map +1 -1
  203. package/dist/workflows/WorkflowOrchestrator.d.ts +48 -0
  204. package/dist/workflows/WorkflowOrchestrator.js +181 -0
  205. package/dist/workflows/WorkflowOrchestrator.js.map +1 -0
  206. package/dist/workflows/index.d.ts +2 -4
  207. package/dist/workflows/index.js +4 -4
  208. package/dist/workflows/index.js.map +1 -1
  209. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/artifact/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/artifact/store.ts"],"names":[],"mappings":"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"}
@@ -63,6 +63,26 @@ export interface Gate {
63
63
  passed: boolean;
64
64
  checkedAt?: Timestamp;
65
65
  checkedBy?: Actor;
66
+ automatedCheck?: string;
67
+ conditions?: GateCondition[];
68
+ }
69
+ /** Harness Engineering: 可程序化验证的条件 */
70
+ export interface GateCondition {
71
+ field: string;
72
+ operator: '==' | '!=' | '>=' | '<=' | '>' | '<' | 'includes' | 'matches';
73
+ value: number | string | boolean | RegExp;
74
+ description?: string;
75
+ }
76
+ /** Harness Engineering: TaskPayload 质量字段(防止 Premature Done) */
77
+ export interface TaskQualityMetrics {
78
+ buildStatus?: 'pending' | 'success' | 'failed';
79
+ buildExitCode?: number;
80
+ lintStatus?: 'pending' | 'success' | 'failed';
81
+ testPassed?: boolean;
82
+ testCoverage?: number;
83
+ testTotal?: number;
84
+ testFailed?: number;
85
+ e2ePassed?: boolean;
66
86
  }
67
87
  /** Need —— 用户原始诉求 */
68
88
  export interface NeedPayload {
@@ -135,6 +155,10 @@ export interface TaskPayload {
135
155
  lintStatus?: 'pending' | 'success' | 'failed';
136
156
  testPassed?: boolean;
137
157
  testCoverage?: number;
158
+ testTotal?: number;
159
+ testFailed?: number;
160
+ e2ePassed?: boolean;
161
+ reviewPassed?: boolean;
138
162
  }
139
163
  /** Change —— 实际代码变更 */
140
164
  export interface ChangePayload {
@@ -188,7 +212,7 @@ export interface ReleasePayload {
188
212
  }
189
213
  /** 类型映射:根据 ArtifactType 推断 Payload 类型 */
190
214
  export type PayloadOf<T extends ArtifactType> = T extends 'Need' ? NeedPayload : T extends 'Insight' ? InsightPayload : T extends 'Spec' ? SpecPayload : T extends 'Plan' ? PlanPayload : T extends 'TestPlan' ? TestPlanPayload : T extends 'Task' ? TaskPayload : T extends 'Change' ? ChangePayload : T extends 'Evidence' ? EvidencePayload : T extends 'Defect' ? DefectPayload : T extends 'Lesson' ? LessonPayload : T extends 'Release' ? ReleasePayload : never;
191
- export type EventType = 'artifact.created' | 'artifact.updated' | 'artifact.transitioned' | 'artifact.gate_checked' | 'artifact.deleted' | 'tool.called' | 'tool.completed' | 'tool.failed' | 'tool.blocked' | 'gate.checked' | 'gate.passed' | 'gate.failed' | 'behavior.brute_retry' | 'behavior.idle_tool' | 'behavior.busy_loop' | 'behavior.premature_done' | 'behavior.blame_shift' | 'behavior.ai_slop' | 'behavior.hallucination' | 'behavior.duplicate_edit' | 'role.activated' | 'role.denied' | 'session.started' | 'session.ended' | 'session.compacted' | 'session.cleared' | 'lesson.proposed' | 'lesson.validated' | 'lesson.approved' | 'lesson.rejected' | 'lesson.recalled' | 'lesson.helpful' | 'lesson.useless' | 'task.scheduled' | 'task.started' | 'task.checkpointed' | 'task.paused' | 'task.resumed' | 'task.restored' | 'task.completed' | 'task.failed' | 'task.cancelled' | 'task.drift_detected' | 'task.step_started' | 'task.step_completed' | 'task.step_failed' | 'task.step_retrying' | 'task.decomposed' | `task.custom.${string}` | 'defect.auto_created' | 'rule.proposed' | 'rule.enforced' | 'hook.generated' | 'hook.deployed' | 'hook.rollback' | 'evolution.cycle_completed' | 'evolution.evaluated' | 'context.built' | 'skill.registered' | 'skill.unregistered' | 'skill.recommended' | 'skill.executed' | 'skill.installation_changed' | 'skills.cleared' | 'workflow.started' | 'workflow.paused' | 'workflow.resumed' | 'workflow.completed' | 'workflow.failed' | 'workflow.step_started' | 'workflow.step_completed' | 'workflow.step_failed' | 'tool.used' | 'detector.triggered' | 'phase.changed' | 'context.inject';
215
+ export type EventType = 'artifact.created' | 'artifact.updated' | 'artifact.transitioned' | 'artifact.gate_checked' | 'artifact.deleted' | 'tool.called' | 'tool.completed' | 'tool.failed' | 'tool.blocked' | 'gate.checked' | 'gate.passed' | 'gate.failed' | 'behavior.brute_retry' | 'behavior.idle_tool' | 'behavior.busy_loop' | 'behavior.premature_done' | 'behavior.blame_shift' | 'behavior.ai_slop' | 'behavior.hallucination' | 'behavior.duplicate_edit' | 'role.activated' | 'role.denied' | 'session.started' | 'session.ended' | 'session.compacted' | 'session.cleared' | 'lesson.proposed' | 'lesson.validated' | 'lesson.approved' | 'lesson.rejected' | 'lesson.recalled' | 'lesson.helpful' | 'lesson.useless' | 'task.scheduled' | 'task.started' | 'task.checkpointed' | 'task.paused' | 'task.resumed' | 'task.restored' | 'task.completed' | 'task.failed' | 'task.cancelled' | 'task.drift_detected' | 'task.step_started' | 'task.step_completed' | 'task.step_failed' | 'task.step_retrying' | 'task.decomposed' | `task.custom.${string}` | 'defect.auto_created' | 'rule.proposed' | 'rule.enforced' | 'hook.generated' | 'hook.deployed' | 'hook.rollback' | 'evolution.cycle_completed' | 'evolution.evaluated' | 'context.built' | 'skill.registered' | 'skill.unregistered' | 'skill.recommended' | 'skill.executed' | 'skill.installation_changed' | 'skills.cleared' | 'external-skills.registered' | 'skills.install-prompt' | 'skill.install-started' | 'skill.installed' | 'skill.install-failed' | 'skills.batch-installed' | 'workflow.started' | 'workflow.paused' | 'workflow.resumed' | 'workflow.completed' | 'workflow.failed' | 'workflow.step_started' | 'workflow.step_completed' | 'workflow.step_failed' | 'tool.used' | 'detector.triggered' | 'phase.changed' | 'context.inject' | 'agent.spawned' | 'agent.task_assigned' | 'agent.running' | 'agent.completed' | 'agent.failed' | 'agent.recycled' | 'agent.message_sent' | 'agent.message_received' | 'agent.dispatched' | 'agent.dispatch_blocked' | 'agent.blocked' | 'agent.unblocked' | 'agent.subscribed' | 'team.formed' | 'team.dissolved' | 'team.progress_updated' | 'team.completed' | 'team.failed' | 'review.required' | 'review.passed' | 'review.failed' | 'task.review_failed' | 'pattern.extracted' | 'pattern.verified' | 'skill.proposed' | 'skill.published' | 'term.discovered' | 'term.updated' | 'term.ambiguity_detected' | 'adr.proposed' | 'adr.accepted' | 'adr.deprecated' | 'adr.superseded' | 'issue.triaged' | 'issue.state_changed' | 'issue.escalated' | 'issue.info_requested' | 'grilling.session_started' | 'grilling.session_ended' | 'grilling.concluded' | 'grilling.answer_received' | 'antipattern.detected' | 'antipattern.registered';
192
216
  export interface Event<TPayload = unknown> {
193
217
  id: EventId;
194
218
  type: EventType;
@@ -392,3 +416,72 @@ export interface WorkflowPreset {
392
416
  }
393
417
  /** Agent 类型扩展(支持所有 11 种 Agent) */
394
418
  export type AgentType = AgentPlatform;
419
+ /** 术语定义来源 */
420
+ export type TermSource = 'user-defined' | 'inferred-from-code' | 'extracted-from-docs';
421
+ /** 术语定义(CONTEXT.md 条目) */
422
+ export interface TermDefinition {
423
+ term: string;
424
+ definition: string;
425
+ examples: string[];
426
+ aliases: string[];
427
+ lastUpdated: Timestamp;
428
+ source: TermSource;
429
+ }
430
+ /** ADR 状态 */
431
+ export type ADRStatus = 'proposed' | 'accepted' | 'deprecated' | 'superseded';
432
+ /** ADR 记录(架构决策记录) */
433
+ export interface ADRRecord {
434
+ id: string;
435
+ title: string;
436
+ status: ADRStatus;
437
+ context: string;
438
+ decision: string;
439
+ consequences: string;
440
+ alternatives?: string[];
441
+ supersededBy?: string;
442
+ createdAt: Timestamp;
443
+ updatedAt: Timestamp;
444
+ }
445
+ /** ADR 状态变更事件 Payload */
446
+ export interface ADRStatusChangePayload {
447
+ adrId: string;
448
+ previousStatus: ADRStatus;
449
+ newStatus: ADRStatus;
450
+ reason?: string;
451
+ supersededBy?: string;
452
+ }
453
+ /** 术语歧义报告 */
454
+ export interface AmbiguityReport {
455
+ term: string;
456
+ definitions: string[];
457
+ sources: TermSource[];
458
+ suggestedResolution?: string;
459
+ }
460
+ /** Issue 角色:bug 修复或新功能 */
461
+ export type IssueRole = 'bug' | 'enhancement';
462
+ /** Issue Triage 状态 */
463
+ export type IssueState = 'needs-triage' | 'needs-info' | 'ready-for-agent' | 'ready-for-human' | 'in-progress' | 'blocked' | 'completed' | 'wontfix';
464
+ /** Issue Triage 状态流转 */
465
+ export interface IssueTriageTransition {
466
+ from: IssueState;
467
+ to: IssueState;
468
+ condition: string;
469
+ auto?: boolean;
470
+ agentAction?: string;
471
+ }
472
+ /** Issue Triage 评估结果 */
473
+ export interface TriageResult {
474
+ state: IssueState;
475
+ action?: string;
476
+ reason?: string;
477
+ }
478
+ /** Issue 输入 */
479
+ export interface IssueInput {
480
+ title: string;
481
+ description: string;
482
+ type?: IssueRole;
483
+ complexity?: number;
484
+ riskLevel?: 'low' | 'medium' | 'high';
485
+ filesInvolved?: string[];
486
+ dependsOn?: ArtifactId[];
487
+ }
@@ -11,8 +11,6 @@
11
11
  // 11. 错误类型
12
12
  // ============================================================================
13
13
  export class ScaleError extends Error {
14
- code;
15
- details;
16
14
  constructor(message, code, details) {
17
15
  super(message);
18
16
  this.code = code;
@@ -29,7 +27,6 @@ export class InvalidTransitionError extends ScaleError {
29
27
  }
30
28
  }
31
29
  export class GuardFailedError extends ScaleError {
32
- failures;
33
30
  constructor(failures) {
34
31
  super(`Transition blocked by guards: ${failures.map((f) => f.guard).join(', ')}`, 'GUARD_FAILED', {
35
32
  failures,
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/artifact/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAqgBH,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,MAAM,OAAO,UAAW,SAAQ,KAAK;IACC;IAAqB;IAAzD,YAAY,OAAe,EAAS,IAAY,EAAS,OAAiB;QACxE,KAAK,CAAC,OAAO,CAAC,CAAA;QADoB,SAAI,GAAJ,IAAI,CAAQ;QAAS,YAAO,GAAP,OAAO,CAAU;QAExE,IAAI,CAAC,IAAI,GAAG,YAAY,CAAA;IAC1B,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,UAAU;IACpD,YAAY,IAAY,EAAE,MAAc;QACtC,KAAK,CAAC,UAAU,IAAI,8BAA8B,MAAM,GAAG,EAAE,oBAAoB,EAAE;YACjF,IAAI;YACJ,MAAM;SACP,CAAC,CAAA;IACJ,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAC3B;IAAnB,YAAmB,QAAwB;QACzC,KAAK,CAAC,iCAAiC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,EAAE;YAChG,QAAQ;SACT,CAAC,CAAA;QAHe,aAAQ,GAAR,QAAQ,CAAgB;IAI3C,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC7C,YAAY,IAAY,EAAE,MAAc;QACtC,KAAK,CAAC,SAAS,IAAI,aAAa,MAAM,EAAE,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;IAC5E,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,UAAU;IACnD,YAAY,EAAU;QACpB,KAAK,CAAC,aAAa,EAAE,aAAa,EAAE,oBAAoB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;IACnE,CAAC;CACF;AAmBD,eAAe;AACf,MAAM,CAAC,MAAM,qBAAqB,GAA6C;IAC7E,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,mBAAmB,EAAE,KAAK;QAC1B,oBAAoB,EAAE,KAAK;QAC3B,yBAAyB,EAAE,KAAK;QAChC,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,EAAE;KACf;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,mBAAmB,EAAE,QAAQ;QAC7B,oBAAoB,EAAE,IAAI;QAC1B,yBAAyB,EAAE,KAAK;QAChC,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,CAAC;KACd;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,mBAAmB,EAAE,MAAM;QAC3B,oBAAoB,EAAE,IAAI;QAC1B,yBAAyB,EAAE,IAAI;QAC/B,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,CAAC;KACd;CACF,CAAA"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/artifact/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA2lBH,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,YAAY,OAAe,EAAS,IAAY,EAAS,OAAiB;QACxE,KAAK,CAAC,OAAO,CAAC,CAAA;QADoB,SAAI,GAAJ,IAAI,CAAQ;QAAS,YAAO,GAAP,OAAO,CAAU;QAExE,IAAI,CAAC,IAAI,GAAG,YAAY,CAAA;IAC1B,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,UAAU;IACpD,YAAY,IAAY,EAAE,MAAc;QACtC,KAAK,CAAC,UAAU,IAAI,8BAA8B,MAAM,GAAG,EAAE,oBAAoB,EAAE;YACjF,IAAI;YACJ,MAAM;SACP,CAAC,CAAA;IACJ,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAC9C,YAAmB,QAAwB;QACzC,KAAK,CAAC,iCAAiC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,EAAE;YAChG,QAAQ;SACT,CAAC,CAAA;QAHe,aAAQ,GAAR,QAAQ,CAAgB;IAI3C,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC7C,YAAY,IAAY,EAAE,MAAc;QACtC,KAAK,CAAC,SAAS,IAAI,aAAa,MAAM,EAAE,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;IAC5E,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,UAAU;IACnD,YAAY,EAAU;QACpB,KAAK,CAAC,aAAa,EAAE,aAAa,EAAE,oBAAoB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;IACnE,CAAC;CACF;AAmBD,eAAe;AACf,MAAM,CAAC,MAAM,qBAAqB,GAA6C;IAC7E,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,mBAAmB,EAAE,KAAK;QAC1B,oBAAoB,EAAE,KAAK;QAC3B,yBAAyB,EAAE,KAAK;QAChC,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,EAAE;KACf;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,mBAAmB,EAAE,QAAQ;QAC7B,oBAAoB,EAAE,IAAI;QAC1B,yBAAyB,EAAE,KAAK;QAChC,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,CAAC;KACd;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,mBAAmB,EAAE,MAAM;QAC3B,oBAAoB,EAAE,IAAI;QAC1B,yBAAyB,EAAE,IAAI;QAC/B,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,CAAC;KACd;CACF,CAAA"}
@@ -0,0 +1,38 @@
1
+ import type { IEventBus } from '../core/eventBus.js';
2
+ export interface AntiPattern {
3
+ id: string;
4
+ principle: 'think-before-coding' | 'simplicity-first' | 'surgical-changes' | 'goal-driven-execution';
5
+ category: string;
6
+ title: string;
7
+ userRequest: string;
8
+ wrongCode: string;
9
+ wrongDescription: string;
10
+ correctApproach: string | string[];
11
+ correctCode?: string;
12
+ correctDescription: string;
13
+ testQuestion?: string;
14
+ tags: string[];
15
+ }
16
+ export interface AntiPatternMatch {
17
+ patternId: string;
18
+ detectedIn: string;
19
+ severity: 'high' | 'medium' | 'low';
20
+ suggestion: string;
21
+ }
22
+ export interface IAntiPatternRegistry {
23
+ getAntiPatterns(principle?: string): AntiPattern[];
24
+ searchAntiPatterns(query: string): AntiPattern[];
25
+ detectInCode(code: string): AntiPatternMatch[];
26
+ getExample(principle: string, category: string): AntiPattern | undefined;
27
+ }
28
+ export declare class AntiPatternRegistry implements IAntiPatternRegistry {
29
+ private patterns;
30
+ private eventBus;
31
+ constructor(eventBus?: IEventBus);
32
+ getAntiPatterns(principle?: string): AntiPattern[];
33
+ searchAntiPatterns(query: string): AntiPattern[];
34
+ detectInCode(code: string): AntiPatternMatch[];
35
+ getExample(principle: string, category: string): AntiPattern | undefined;
36
+ register(pattern: AntiPattern): void;
37
+ }
38
+ export declare function createAntiPatternRegistry(eventBus?: IEventBus): IAntiPatternRegistry;
@@ -0,0 +1,203 @@
1
+ // SCALE Engine - Anti-Pattern Registry (andrej-karpathy-skills style)
2
+ // Repository of common LLM coding mistakes with corrections
3
+ import { logger } from '../core/logger.js';
4
+ // ============================================================================
5
+ // Anti-Pattern Database (from Karpathy EXAMPLES.md)
6
+ // ============================================================================
7
+ const KARPATHY_ANTIPATTERNS = [
8
+ // === Think Before Coding ===
9
+ {
10
+ id: 'AP-001',
11
+ principle: 'think-before-coding',
12
+ category: 'hidden-assumptions',
13
+ title: 'Hidden Assumptions',
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)
20
+ return f"Exported {len(users)} users"`,
21
+ wrongDescription: 'Assumed export ALL users, assumed file location, assumed no pagination or privacy concerns',
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?'],
23
+ correctDescription: 'Surface assumptions explicitly, ask for clarification on ambiguous requirements',
24
+ testQuestion: 'Did you clarify scope, format, fields, and volume before implementing?',
25
+ tags: ['assumptions', 'privacy', 'scope', 'requirements']
26
+ },
27
+ {
28
+ id: 'AP-002',
29
+ principle: 'think-before-coding',
30
+ category: 'multiple-interpretations',
31
+ title: 'Multiple Interpretations Picked Silently',
32
+ userRequest: 'Make the search faster',
33
+ wrongCode: `@lru_cache(maxsize=1000)
34
+ async def search(query: str) -> List[Result]:
35
+ # 200 lines of optimization without asking which "faster" matters`,
36
+ wrongDescription: 'Picked one interpretation of "faster" silently - could mean response time, throughput, or perceived UX',
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.'],
38
+ correctDescription: 'Present multiple interpretations when ambiguity exists, do not pick silently',
39
+ testQuestion: 'Did you list all possible interpretations of the request?',
40
+ tags: ['ambiguity', 'interpretations', 'optimization']
41
+ },
42
+ // === Simplicity First ===
43
+ {
44
+ id: 'AP-003',
45
+ principle: 'simplicity-first',
46
+ category: 'over-abstraction',
47
+ title: 'Over-Abstraction',
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:
55
+ def __init__(self, config: DiscountConfig): ...`,
56
+ wrongDescription: 'Created Strategy pattern, abstract base class, config class for a simple percentage calculation',
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:
59
+ return amount * (percent / 100)`,
60
+ correctDescription: 'One function until complexity is actually needed. Add classes when multiple discount types are required.',
61
+ testQuestion: 'Would a senior engineer say this is overcomplicated?',
62
+ tags: ['abstraction', 'design-patterns', 'overengineering']
63
+ },
64
+ {
65
+ id: 'AP-004',
66
+ principle: 'simplicity-first',
67
+ category: 'speculative-features',
68
+ title: 'Speculative Features',
69
+ userRequest: 'Save user preferences to database',
70
+ wrongCode: `class PreferenceManager:
71
+ def save(self, user_id, prefs, merge=True, validate=True, notify=False):
72
+ # Added caching, validation, merging, notifications - nobody asked`,
73
+ wrongDescription: 'Added caching, validation, merging, notifications - features nobody asked for',
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):
76
+ db.execute("UPDATE users SET preferences = ? WHERE id = ?", (json.dumps(preferences), user_id))`,
77
+ correctDescription: 'Add later if needed: caching (when performance matters), validation (when bad data appears)',
78
+ testQuestion: 'Did you add features beyond what was asked?',
79
+ tags: ['speculative', 'features', 'yagni']
80
+ },
81
+ // === Surgical Changes ===
82
+ {
83
+ id: 'AP-005',
84
+ principle: 'surgical-changes',
85
+ category: 'drive-by-refactoring',
86
+ title: 'Drive-by Refactoring',
87
+ userRequest: 'Fix the bug where empty emails crash the validator',
88
+ wrongCode: `# Changed comments, added docstring, improved email validation beyond bug,
89
+ # added username validation nobody asked for`,
90
+ wrongDescription: 'Improved email validation beyond the bug, added username validation, changed comments, added docstring',
91
+ correctApproach: 'Only fix the empty email handling. Do not change comments, add docstrings, or improve adjacent code.',
92
+ correctDescription: 'Only changed the specific lines that fix empty email handling. No style changes, no extra validation.',
93
+ testQuestion: 'Does every changed line trace directly to the user request?',
94
+ tags: ['refactoring', 'surgical', 'minimal']
95
+ },
96
+ {
97
+ id: 'AP-006',
98
+ principle: 'surgical-changes',
99
+ category: 'style-drift',
100
+ title: 'Style Drift',
101
+ userRequest: 'Add logging to the upload function',
102
+ wrongCode: `# Changed quote style (' to "), added type hints, added docstring,
103
+ # reformatted whitespace, changed boolean return logic`,
104
+ wrongDescription: 'Changed quote style, added type hints, added docstring, reformatted whitespace',
105
+ correctApproach: 'Match existing code style. Only add the logging statements without changing quotes, types, or formatting.',
106
+ correctDescription: 'Match existing style: single quotes, no type hints, existing boolean pattern, spacing style',
107
+ testQuestion: 'Did you match existing code style?',
108
+ tags: ['style', 'formatting', 'consistency']
109
+ },
110
+ // === Goal-Driven Execution ===
111
+ {
112
+ id: 'AP-007',
113
+ principle: 'goal-driven-execution',
114
+ category: 'vague-approach',
115
+ title: 'Vague Approach Without Success Criteria',
116
+ userRequest: 'Fix the authentication system',
117
+ wrongCode: `I'll fix auth by: 1. Review code 2. Identify issues 3. Make improvements 4. Test
118
+ [Proceeds without clear success criteria]`,
119
+ wrongDescription: 'No verifiable success criteria, no reproduction test, vague steps',
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)'],
121
+ correctDescription: 'Transform vague tasks into verifiable goals with success criteria',
122
+ testQuestion: 'Can each step be independently verified?',
123
+ tags: ['goals', 'verification', 'success-criteria']
124
+ },
125
+ {
126
+ id: 'AP-008',
127
+ principle: 'goal-driven-execution',
128
+ category: 'fix-without-reproducing',
129
+ title: 'Fix Without Reproducing',
130
+ userRequest: 'The sorting breaks when there are duplicate scores',
131
+ wrongCode: `# Immediately changes sort logic without writing a reproduction test first`,
132
+ wrongDescription: 'Fixed without writing a test that reproduces the issue first',
133
+ correctApproach: ['1. Write test: sort_scores with duplicates -> verify consistent ordering. 2. Verify: run 10 times -> fails inconsistently. 3. Now fix with stable sort'],
134
+ correctDescription: 'Write test first that reproduces bug, verify test fails, then fix',
135
+ testQuestion: 'Did you write a test that reproduces the bug before fixing?',
136
+ tags: ['testing', 'tdd', 'reproduction']
137
+ }
138
+ ];
139
+ // ============================================================================
140
+ // AntiPatternRegistry Implementation
141
+ // ============================================================================
142
+ export class AntiPatternRegistry {
143
+ constructor(eventBus) {
144
+ this.patterns = new Map();
145
+ this.eventBus = eventBus ?? null;
146
+ for (const pattern of KARPATHY_ANTIPATTERNS) {
147
+ this.patterns.set(pattern.id, pattern);
148
+ }
149
+ logger.info({ count: this.patterns.size }, 'AntiPatternRegistry initialized');
150
+ }
151
+ getAntiPatterns(principle) {
152
+ const all = Array.from(this.patterns.values());
153
+ if (!principle)
154
+ return all;
155
+ return all.filter(p => p.principle === principle);
156
+ }
157
+ searchAntiPatterns(query) {
158
+ const lowerQuery = query.toLowerCase();
159
+ return Array.from(this.patterns.values()).filter(p => p.title.toLowerCase().includes(lowerQuery) ||
160
+ p.category.toLowerCase().includes(lowerQuery) ||
161
+ p.tags.some(t => t.includes(lowerQuery)) ||
162
+ p.userRequest.toLowerCase().includes(lowerQuery));
163
+ }
164
+ detectInCode(code) {
165
+ const matches = [];
166
+ const detectionRules = [
167
+ { pattern: 'AP-003', check: /class\s+\w+Strategy\s*\(/ },
168
+ { pattern: 'AP-003', check: /@abstractmethod/ },
169
+ { pattern: 'AP-004', check: /merge:\s*bool\s*=/ },
170
+ { pattern: 'AP-004', check: /validate:\s*bool\s*=/ },
171
+ { pattern: 'AP-004', check: /notify:\s*bool\s*=/ },
172
+ ];
173
+ for (const rule of detectionRules) {
174
+ if (rule.check.test(code)) {
175
+ const pattern = this.patterns.get(rule.pattern);
176
+ if (pattern) {
177
+ matches.push({
178
+ patternId: rule.pattern,
179
+ detectedIn: 'code-structure',
180
+ severity: 'high',
181
+ suggestion: `Potential ${pattern.title}: ${pattern.correctDescription}`
182
+ });
183
+ }
184
+ }
185
+ }
186
+ if (matches.length > 0) {
187
+ this.eventBus?.emit('antipattern.detected', { matches });
188
+ }
189
+ return matches;
190
+ }
191
+ getExample(principle, category) {
192
+ return Array.from(this.patterns.values()).find(p => p.principle === principle && p.category === category);
193
+ }
194
+ register(pattern) {
195
+ this.patterns.set(pattern.id, pattern);
196
+ this.eventBus?.emit('antipattern.registered', { patternId: pattern.id });
197
+ logger.info({ patternId: pattern.id }, 'Custom anti-pattern registered');
198
+ }
199
+ }
200
+ export function createAntiPatternRegistry(eventBus) {
201
+ return new AntiPatternRegistry(eventBus);
202
+ }
203
+ //# sourceMappingURL=AntiPatternRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AntiPatternRegistry.js","sourceRoot":"","sources":["../../src/context/AntiPatternRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface CavemanConfig {
2
+ enabled: boolean;
3
+ preserveTerms: string[];
4
+ symbolMap: Record<string, string>;
5
+ maxCompressionRatio: number;
6
+ }
7
+ export declare const DEFAULT_SYMBOL_MAP: Record<string, string>;
8
+ export declare const DEFAULT_PRESERVE_TERMS: string[];
9
+ export interface ICavemanCompressor {
10
+ compress(text: string, config: CavemanConfig): string;
11
+ shouldActivate(tokenUsage: number, tokenLimit: number): boolean;
12
+ }
13
+ export declare class CavemanCompressor implements ICavemanCompressor {
14
+ compress(text: string, config: CavemanConfig): string;
15
+ shouldActivate(tokenUsage: number, tokenLimit: number): boolean;
16
+ private removeFillerWords;
17
+ private applySymbols;
18
+ }
19
+ export declare function createCavemanCompressor(): ICavemanCompressor;
20
+ export declare const DEFAULT_CAVEMAN_CONFIG: CavemanConfig;
@@ -0,0 +1,14 @@
1
+ export const DEFAULT_SYMBOL_MAP = { "->": "switch to", "v": "verified", "x": "failed", "?": "unknown", "!": "critical", "+": "add", "-": "remove" };
2
+ export const DEFAULT_PRESERVE_TERMS = ["TypeScript", "JavaScript", "React", "Vue", "Node.js", "PostgreSQL", "API", "async", "await", "Promise", "interface", "type"];
3
+ export class CavemanCompressor {
4
+ compress(text, config) { if (!config.enabled)
5
+ return text; let r = this.removeFillerWords(text); r = this.applySymbols(r); return r; }
6
+ shouldActivate(tokenUsage, tokenLimit) { return (tokenLimit - tokenUsage) < 50000; }
7
+ removeFillerWords(text) { const f = ["I", "have", "analyzed", "the", "a", "is", "that"]; let r = text; for (const w of f)
8
+ r = r.replace(new RegExp("\b" + w + "\b", "gi"), ""); return r.replace(/\s+/g, " ").trim(); }
9
+ applySymbols(text) { const m = { "switch to": "->", "verified": "v", "failed": "x", "add": "+", "remove": "-" }; let r = text; for (const [p, s] of Object.entries(m))
10
+ r = r.replace(new RegExp(p, "gi"), s); return r; }
11
+ }
12
+ export function createCavemanCompressor() { return new CavemanCompressor(); }
13
+ export const DEFAULT_CAVEMAN_CONFIG = { enabled: false, preserveTerms: DEFAULT_PRESERVE_TERMS, symbolMap: DEFAULT_SYMBOL_MAP, maxCompressionRatio: 0.25 };
14
+ //# sourceMappingURL=CavemanCompressor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CavemanCompressor.js","sourceRoot":"","sources":["../../src/context/CavemanCompressor.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,kBAAkB,GAA2B,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAA;AAC3K,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;AAEpK,MAAM,OAAO,iBAAiB;IAC5B,QAAQ,CAAC,IAAY,EAAE,MAAqB,IAAY,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC;IACpK,cAAc,CAAC,UAAkB,EAAE,UAAkB,IAAa,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,KAAK,CAAA,CAAC,CAAC;IACpG,iBAAiB,CAAC,IAAY,IAAY,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC;QAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA,CAAC,CAAC;IACtO,YAAY,CAAC,IAAY,IAAY,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC;CACjP;AACD,MAAM,UAAU,uBAAuB,KAAyB,OAAO,IAAI,iBAAiB,EAAE,CAAA,CAAC,CAAC;AAChG,MAAM,CAAC,MAAM,sBAAsB,GAAkB,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,SAAS,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAA"}
@@ -42,6 +42,116 @@ You are operating under SCALE Engine governance. These rules are PHYSICALLY ENFO
42
42
  - Rule → Hook (auto-generated enforcement code)
43
43
  - The system gets stricter over time, not weaker`;
44
44
  // ============================================================================
45
+ // mattpoclock/skills style: Deep Modules + Vertical Slices TDD (Phase 15)
46
+ // ============================================================================
47
+ const DEEP_MODULES_PRINCIPLE = `## Deep Modules 原则
48
+
49
+ 接口深度 = 调用者杠杆 + 维护者局部性
50
+
51
+ **删除测试**:如果删除这个模块,调用者需要写多少代码补偿?
52
+ - 补偿代码越多 = 模块价值越大
53
+ - 补偿代码越少 = 模块可删除
54
+
55
+ **设计决策**:
56
+ - 抓杠杆:接口应该让调用者一次调用完成复杂操作
57
+ - 保局部:复杂逻辑隐藏在模块内部,不在接口暴露
58
+
59
+ **判断标准**:
60
+ - 好模块:简单接口,隐藏复杂性(如 fs.readFile(path) vs 手写文件系统)
61
+ - 坏模块:复杂接口,暴露内部复杂性(如 10 个参数的 init 函数)
62
+
63
+ **设计时问自己**:
64
+ 1. 调用者需要了解多少才能使用?
65
+ 2. 如果删除,调用者需要补偿多少?
66
+ 3. 内部实现变更,接口需要变吗?`;
67
+ const VERTICAL_SLICES_TDD = `## Vertical Slices TDD(Tracer Bullets)
68
+
69
+ **Wrong(Horizontal)**:
70
+ 1. 写所有测试
71
+ 2. 实现所有功能
72
+ 3. 运行所有测试
73
+
74
+ **Right(Vertical)**:
75
+ 1. 选一个行为
76
+ 2. 写该行为的测试
77
+ 3. 实现该行为
78
+ 4. 验证测试通过
79
+ 5. 下一个行为
80
+
81
+ **优势**:
82
+ - 每个切片独立可验证
83
+ - 失败时定位精确
84
+ - 避免大爆炸集成
85
+ - 早期发现设计问题
86
+
87
+ **Tracer Bullets 原则**:
88
+ - 先打通端到端骨架(可能不完整但可运行)
89
+ - 再逐层填充细节
90
+ - 每一步都有可验证的产出
91
+
92
+ **TDD 防幻觉铁律**:
93
+ - 绝不能同时写代码和测试!
94
+ - 如果先写了有 Bug 的代码,再写测试,会写出"验证错误逻辑"的测试
95
+ - 正确做法:测试先行,独立验证
96
+ - 测试文件一旦写完,后续实现中禁止修改测试(除非测试本身有错)`;
97
+ // ============================================================================
98
+ // Karpathy Guidelines (andrej-karpathy-skills style)
99
+ // ============================================================================
100
+ const KARPATHY_PRINCIPLES = `## Karpathy Guidelines — LLM 编码行为准则
101
+
102
+ 源自 Andrej Karpathy 对 LLM 编码陷阱的观察。**倾向谨慎而非速度**。
103
+
104
+ ### 1. Think Before Coding(编码前先思考)
105
+ **不做假设。不隐藏困惑。呈现权衡。**
106
+
107
+ - 显式陈述假设。不确定就问。
108
+ - 存在多种解释时全部呈现 — 不要默默选择。
109
+ - 如果有更简单方案,说出来。该反驳就反驳。
110
+ - 不清楚时停下。命名困惑点。询问。
111
+
112
+ ### 2. Simplicity First(简单优先)
113
+ **解决问题的最少代码。拒绝投机性功能。**
114
+
115
+ - 不写超出需求的功能。
116
+ - 单用途代码不抽象化。
117
+ - 不添加未请求的"灵活性"或"可配置性"。
118
+ - 不处理不可能发生的错误场景。
119
+ - 如果 200 行可以写成 50 行,重写它。
120
+
121
+ **测试**:资深工程师会说"这过度复杂了吗?"如果是,简化。
122
+
123
+ ### 3. Surgical Changes(手术式修改)
124
+ **只动必须动的。只清理自己制造的垃圾。**
125
+
126
+ 编辑现有代码时:
127
+ - 不要"改进"相邻代码、注释或格式。
128
+ - 不要重构未损坏的东西。
129
+ - 匹配现有风格,即使你偏好不同写法。
130
+ - 注意到无关死代码时提及 — 不要删除。
131
+
132
+ 你的修改产生孤儿时:
133
+ - 删除 YOUR 修改导致未使用的导入/变量/函数。
134
+ - 不要删除预先存在的死代码(除非被要求)。
135
+
136
+ **测试**:每行改动应能追溯到用户请求。
137
+
138
+ ### 4. Goal-Driven Execution(目标驱动执行)
139
+ **定义成功标准。循环直到验证。**
140
+
141
+ 将任务转化为可验证目标:
142
+ - "添加验证" → "为无效输入写测试,然后使测试通过"
143
+ - "修复 bug" → "写一个复现它的测试,然后使测试通过"
144
+ - "重构 X" → "确保前后测试都通过"
145
+
146
+ 多步骤任务格式:
147
+ \`\`\`
148
+ 1. [步骤] → verify: [检查]
149
+ 2. [步骤] → verify: [检查]
150
+ 3. [步骤] → verify: [检查]
151
+ \`\`\`
152
+
153
+ 强成功标准让你独立循环。弱标准("让它工作")需要频繁澄清。`;
154
+ // ============================================================================
45
155
  // Scenario Mode Context Additions
46
156
  // ============================================================================
47
157
  const SCENARIO_CONTEXT = {
@@ -71,14 +181,11 @@ const SCENARIO_CONTEXT = {
71
181
  // ContextBuilder
72
182
  // ============================================================================
73
183
  export class ContextBuilder {
74
- store;
75
- kb;
76
- eventBus;
77
- budget = { total: 200_000, reserved: 30_000 };
78
184
  constructor(store, kb, eventBus) {
79
185
  this.store = store;
80
186
  this.kb = kb;
81
187
  this.eventBus = eventBus;
188
+ this.budget = { total: 200_000, reserved: 30_000 };
82
189
  }
83
190
  async build(opts) {
84
191
  const scenarioMode = opts.scenarioMode ?? 'standard';
@@ -97,6 +204,27 @@ export class ContextBuilder {
97
204
  priority: 1,
98
205
  estimatedTokens: 800,
99
206
  });
207
+ // P1.6: Deep Modules Principle (mattpoclock/skills style)
208
+ layers.push({
209
+ name: 'deep_modules',
210
+ content: DEEP_MODULES_PRINCIPLE,
211
+ priority: 1,
212
+ estimatedTokens: 1200,
213
+ });
214
+ // P1.7: Vertical Slices TDD (mattpoclock/skills style)
215
+ layers.push({
216
+ name: 'vertical_slices_tdd',
217
+ content: VERTICAL_SLICES_TDD,
218
+ priority: 1,
219
+ estimatedTokens: 1500,
220
+ });
221
+ // P1.8: Karpathy Guidelines (andrej-karpathy-skills style)
222
+ layers.push({
223
+ name: 'karpathy_guidelines',
224
+ content: KARPATHY_PRINCIPLES,
225
+ priority: 1,
226
+ estimatedTokens: 2000,
227
+ });
100
228
  // P2: Role prompt
101
229
  if (opts.roleId) {
102
230
  layers.push({ name: 'role_prompt', content: `## Active Role: ${opts.roleId}\n...`, priority: 2, estimatedTokens: 1500 });