@hongmaple0820/scale-engine 0.7.2 → 0.9.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 (224) hide show
  1. package/README.en.md +220 -0
  2. package/README.md +91 -50
  3. package/dist/adapters/ClaudeCodeAdapter.d.ts +2 -0
  4. package/dist/adapters/ClaudeCodeAdapter.js +10 -3
  5. package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
  6. package/dist/adapters/CodexAdapter.d.ts +1 -0
  7. package/dist/adapters/CodexAdapter.js +10 -3
  8. package/dist/adapters/CodexAdapter.js.map +1 -1
  9. package/dist/adapters/CursorAdapter.js +5 -3
  10. package/dist/adapters/CursorAdapter.js.map +1 -1
  11. package/dist/adapters/GeminiAdapter.d.ts +1 -0
  12. package/dist/adapters/GeminiAdapter.js +9 -3
  13. package/dist/adapters/GeminiAdapter.js.map +1 -1
  14. package/dist/adapters/HermesAdapter.d.ts +1 -0
  15. package/dist/adapters/HermesAdapter.js +9 -3
  16. package/dist/adapters/HermesAdapter.js.map +1 -1
  17. package/dist/adapters/OpenClawAdapter.d.ts +1 -0
  18. package/dist/adapters/OpenClawAdapter.js +9 -3
  19. package/dist/adapters/OpenClawAdapter.js.map +1 -1
  20. package/dist/adapters/OpenCodeAdapter.js +5 -3
  21. package/dist/adapters/OpenCodeAdapter.js.map +1 -1
  22. package/dist/adapters/QCoderAdapter.d.ts +1 -0
  23. package/dist/adapters/QCoderAdapter.js +9 -3
  24. package/dist/adapters/QCoderAdapter.js.map +1 -1
  25. package/dist/adapters/TraeAdapter.d.ts +1 -0
  26. package/dist/adapters/TraeAdapter.js +9 -3
  27. package/dist/adapters/TraeAdapter.js.map +1 -1
  28. package/dist/adapters/VSCAdapter.d.ts +1 -0
  29. package/dist/adapters/VSCAdapter.js +9 -3
  30. package/dist/adapters/VSCAdapter.js.map +1 -1
  31. package/dist/adapters/WorkBuddyAdapter.d.ts +1 -0
  32. package/dist/adapters/WorkBuddyAdapter.js +9 -3
  33. package/dist/adapters/WorkBuddyAdapter.js.map +1 -1
  34. package/dist/agents/AgentChannel.d.ts +43 -0
  35. package/dist/agents/AgentChannel.js +136 -0
  36. package/dist/agents/AgentChannel.js.map +1 -0
  37. package/dist/agents/AgentCoordinator.d.ts +29 -0
  38. package/dist/agents/AgentCoordinator.js +136 -0
  39. package/dist/agents/AgentCoordinator.js.map +1 -0
  40. package/dist/agents/AgentDispatcher.d.ts +24 -0
  41. package/dist/agents/AgentDispatcher.js +112 -0
  42. package/dist/agents/AgentDispatcher.js.map +1 -0
  43. package/dist/agents/AgentManager.d.ts +14 -0
  44. package/dist/agents/AgentManager.js +85 -0
  45. package/dist/agents/AgentManager.js.map +1 -0
  46. package/dist/agents/AgentPool.d.ts +59 -0
  47. package/dist/agents/AgentPool.js +192 -0
  48. package/dist/agents/AgentPool.js.map +1 -0
  49. package/dist/agents/AgentRegistry.d.ts +20 -0
  50. package/dist/agents/AgentRegistry.js +36 -0
  51. package/dist/agents/AgentRegistry.js.map +1 -0
  52. package/dist/agents/AgentSourceLoader.d.ts +73 -0
  53. package/dist/agents/AgentSourceLoader.js +101 -0
  54. package/dist/agents/AgentSourceLoader.js.map +1 -0
  55. package/dist/agents/IAgent.d.ts +53 -0
  56. package/dist/agents/IAgent.js +4 -0
  57. package/dist/agents/IAgent.js.map +1 -0
  58. package/dist/agents/definitions/debugger.d.ts +2 -0
  59. package/dist/agents/definitions/debugger.js +6 -0
  60. package/dist/agents/definitions/debugger.js.map +1 -0
  61. package/dist/agents/definitions/doc-writer.d.ts +2 -0
  62. package/dist/agents/definitions/doc-writer.js +6 -0
  63. package/dist/agents/definitions/doc-writer.js.map +1 -0
  64. package/dist/agents/definitions/implementer.d.ts +2 -0
  65. package/dist/agents/definitions/implementer.js +6 -0
  66. package/dist/agents/definitions/implementer.js.map +1 -0
  67. package/dist/agents/definitions/planner.d.ts +2 -0
  68. package/dist/agents/definitions/planner.js +6 -0
  69. package/dist/agents/definitions/planner.js.map +1 -0
  70. package/dist/agents/definitions/researcher.d.ts +2 -0
  71. package/dist/agents/definitions/researcher.js +6 -0
  72. package/dist/agents/definitions/researcher.js.map +1 -0
  73. package/dist/agents/definitions/reviewer.d.ts +2 -0
  74. package/dist/agents/definitions/reviewer.js +6 -0
  75. package/dist/agents/definitions/reviewer.js.map +1 -0
  76. package/dist/agents/definitions/security.d.ts +2 -0
  77. package/dist/agents/definitions/security.js +6 -0
  78. package/dist/agents/definitions/security.js.map +1 -0
  79. package/dist/agents/definitions/tester.d.ts +2 -0
  80. package/dist/agents/definitions/tester.js +6 -0
  81. package/dist/agents/definitions/tester.js.map +1 -0
  82. package/dist/agents/index.d.ts +23 -0
  83. package/dist/agents/index.js +44 -0
  84. package/dist/agents/index.js.map +1 -0
  85. package/dist/agents/profiles.d.ts +26 -0
  86. package/dist/agents/profiles.js +197 -0
  87. package/dist/agents/profiles.js.map +1 -0
  88. package/dist/agents/types.d.ts +262 -0
  89. package/dist/agents/types.js +4 -0
  90. package/dist/agents/types.js.map +1 -0
  91. package/dist/api/cli.js +136 -3
  92. package/dist/api/cli.js.map +1 -1
  93. package/dist/api/doctor.js +0 -2
  94. package/dist/api/doctor.js.map +1 -1
  95. package/dist/api/mcp.js +0 -5
  96. package/dist/api/mcp.js.map +1 -1
  97. package/dist/artifact/fsm.js +3 -5
  98. package/dist/artifact/fsm.js.map +1 -1
  99. package/dist/artifact/sqliteStore.js +1 -14
  100. package/dist/artifact/sqliteStore.js.map +1 -1
  101. package/dist/artifact/store.js +2 -4
  102. package/dist/artifact/store.js.map +1 -1
  103. package/dist/artifact/types.d.ts +98 -1
  104. package/dist/artifact/types.js +0 -3
  105. package/dist/artifact/types.js.map +1 -1
  106. package/dist/cli/liteCommands.d.ts +81 -0
  107. package/dist/cli/liteCommands.js +148 -0
  108. package/dist/cli/liteCommands.js.map +1 -0
  109. package/dist/cli/phaseCommands.d.ts +129 -0
  110. package/dist/cli/phaseCommands.js +572 -0
  111. package/dist/cli/phaseCommands.js.map +1 -0
  112. package/dist/context/AntiPatternRegistry.d.ts +38 -0
  113. package/dist/context/AntiPatternRegistry.js +203 -0
  114. package/dist/context/AntiPatternRegistry.js.map +1 -0
  115. package/dist/context/CavemanCompressor.d.ts +20 -0
  116. package/dist/context/CavemanCompressor.js +14 -0
  117. package/dist/context/CavemanCompressor.js.map +1 -0
  118. package/dist/context/ContextBuilder.js +132 -4
  119. package/dist/context/ContextBuilder.js.map +1 -1
  120. package/dist/context/SessionStartSequence.d.ts +54 -0
  121. package/dist/context/SessionStartSequence.js +153 -0
  122. package/dist/context/SessionStartSequence.js.map +1 -0
  123. package/dist/core/container.js +4 -2
  124. package/dist/core/container.js.map +1 -1
  125. package/dist/core/eventBus.js +5 -6
  126. package/dist/core/eventBus.js.map +1 -1
  127. package/dist/dashboard/DashboardServer.js +3 -6
  128. package/dist/dashboard/DashboardServer.js.map +1 -1
  129. package/dist/dashboard/index.d.ts +2 -0
  130. package/dist/dashboard/index.js +2 -0
  131. package/dist/dashboard/index.js.map +1 -0
  132. package/dist/dashboard/server.d.ts +52 -0
  133. package/dist/dashboard/server.js +83 -0
  134. package/dist/dashboard/server.js.map +1 -0
  135. package/dist/evolution/AutoDefectCreator.js +2 -4
  136. package/dist/evolution/AutoDefectCreator.js.map +1 -1
  137. package/dist/evolution/BehaviorTracker.js +3 -5
  138. package/dist/evolution/BehaviorTracker.js.map +1 -1
  139. package/dist/evolution/EvolutionEngine.js +3 -14
  140. package/dist/evolution/EvolutionEngine.js.map +1 -1
  141. package/dist/evolution/EvolutionEvaluator.js +1 -4
  142. package/dist/evolution/EvolutionEvaluator.js.map +1 -1
  143. package/dist/evolution/LessonValidator.js +0 -4
  144. package/dist/evolution/LessonValidator.js.map +1 -1
  145. package/dist/evolution/PatternExtractor.d.ts +40 -0
  146. package/dist/evolution/PatternExtractor.js +83 -0
  147. package/dist/evolution/PatternExtractor.js.map +1 -0
  148. package/dist/evolution/SkillCreator.d.ts +75 -0
  149. package/dist/evolution/SkillCreator.js +219 -0
  150. package/dist/evolution/SkillCreator.js.map +1 -0
  151. package/dist/fsm/FSMAgentBridge.js +11 -13
  152. package/dist/fsm/FSMAgentBridge.js.map +1 -1
  153. package/dist/guardrails/DetectorEnhanced.js +32 -30
  154. package/dist/guardrails/DetectorEnhanced.js.map +1 -1
  155. package/dist/guardrails/GateEvaluator.d.ts +18 -0
  156. package/dist/guardrails/GateEvaluator.js +129 -0
  157. package/dist/guardrails/GateEvaluator.js.map +1 -0
  158. package/dist/guardrails/Gateway.js +6 -7
  159. package/dist/guardrails/Gateway.js.map +1 -1
  160. package/dist/guardrails/ReviewEnforcer.d.ts +52 -0
  161. package/dist/guardrails/ReviewEnforcer.js +117 -0
  162. package/dist/guardrails/ReviewEnforcer.js.map +1 -0
  163. package/dist/guardrails/advancedDetectors.js +33 -31
  164. package/dist/guardrails/advancedDetectors.js.map +1 -1
  165. package/dist/guardrails/detectors.js +76 -16
  166. package/dist/guardrails/detectors.js.map +1 -1
  167. package/dist/hooks/HookDeployer.js +2 -3
  168. package/dist/hooks/HookDeployer.js.map +1 -1
  169. package/dist/hooks/HookGeneratorEnhanced.js +2 -3
  170. package/dist/hooks/HookGeneratorEnhanced.js.map +1 -1
  171. package/dist/index.d.ts +20 -2
  172. package/dist/index.js +19 -2
  173. package/dist/index.js.map +1 -1
  174. package/dist/knowledge/KnowledgeBase.d.ts +26 -0
  175. package/dist/knowledge/KnowledgeBase.js +109 -8
  176. package/dist/knowledge/KnowledgeBase.js.map +1 -1
  177. package/dist/knowledge/SQLiteKnowledgeBase.js +1 -3
  178. package/dist/knowledge/SQLiteKnowledgeBase.js.map +1 -1
  179. package/dist/knowledge/UbiquitousLanguageManager.d.ts +49 -0
  180. package/dist/knowledge/UbiquitousLanguageManager.js +133 -0
  181. package/dist/knowledge/UbiquitousLanguageManager.js.map +1 -0
  182. package/dist/routing/ModelRouter.js +0 -2
  183. package/dist/routing/ModelRouter.js.map +1 -1
  184. package/dist/skills/ExternalSkills.d.ts +3 -0
  185. package/dist/skills/ExternalSkills.js +20 -0
  186. package/dist/skills/ExternalSkills.js.map +1 -0
  187. package/dist/skills/GrillingSessionSkill.d.ts +65 -0
  188. package/dist/skills/GrillingSessionSkill.js +113 -0
  189. package/dist/skills/GrillingSessionSkill.js.map +1 -0
  190. package/dist/skills/GrillingTemplates.d.ts +7 -0
  191. package/dist/skills/GrillingTemplates.js +38 -0
  192. package/dist/skills/GrillingTemplates.js.map +1 -0
  193. package/dist/skills/SkillDiscovery.d.ts +68 -17
  194. package/dist/skills/SkillDiscovery.js +294 -115
  195. package/dist/skills/SkillDiscovery.js.map +1 -1
  196. package/dist/skills/SkillExecutor.js +1 -3
  197. package/dist/skills/SkillExecutor.js.map +1 -1
  198. package/dist/skills/SkillInstaller.d.ts +40 -0
  199. package/dist/skills/SkillInstaller.js +112 -0
  200. package/dist/skills/SkillInstaller.js.map +1 -0
  201. package/dist/skills/SkillRegistry.js +1 -2
  202. package/dist/skills/SkillRegistry.js.map +1 -1
  203. package/dist/skills/TriggerEngine.js +3 -5
  204. package/dist/skills/TriggerEngine.js.map +1 -1
  205. package/dist/skills/index.d.ts +3 -0
  206. package/dist/skills/index.js +3 -0
  207. package/dist/skills/index.js.map +1 -1
  208. package/dist/tasks/IssueTriageFSM.d.ts +26 -0
  209. package/dist/tasks/IssueTriageFSM.js +107 -0
  210. package/dist/tasks/IssueTriageFSM.js.map +1 -0
  211. package/dist/tasks/TaskEngine.js +1 -5
  212. package/dist/tasks/TaskEngine.js.map +1 -1
  213. package/dist/workflows/DAGBuilder.d.ts +52 -0
  214. package/dist/workflows/DAGBuilder.js +169 -0
  215. package/dist/workflows/DAGBuilder.js.map +1 -0
  216. package/dist/workflows/WorkflowExecutor.js +2 -4
  217. package/dist/workflows/WorkflowExecutor.js.map +1 -1
  218. package/dist/workflows/WorkflowOrchestrator.d.ts +48 -0
  219. package/dist/workflows/WorkflowOrchestrator.js +181 -0
  220. package/dist/workflows/WorkflowOrchestrator.js.map +1 -0
  221. package/dist/workflows/index.d.ts +2 -4
  222. package/dist/workflows/index.js +4 -4
  223. package/dist/workflows/index.js.map +1 -1
  224. package/package.json +2 -2
@@ -0,0 +1,572 @@
1
+ // SCALE Engine — Phase-Aligned Commands (v0.9.0)
2
+ // 6 阶段快捷命令:DEFINE → PLAN → BUILD → VERIFY → REVIEW → SHIP
3
+ import { defineCommand } from 'citty';
4
+ // Engine singleton (reuse from cli.ts)
5
+ import { EventBus } from '../core/eventBus.js';
6
+ import { SQLiteArtifactStore } from '../artifact/sqliteStore.js';
7
+ import { FSM } from '../artifact/fsm.js';
8
+ import { registerAllFSMs } from '../artifact/fsmDefinitions.js';
9
+ import { join } from 'node:path';
10
+ import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
11
+ const SCALE_DIR = process.env.SCALE_DIR ?? '.scale';
12
+ function getEngine() {
13
+ ensureDir(SCALE_DIR);
14
+ const eventBus = new EventBus({ eventsDir: join(SCALE_DIR, 'events') });
15
+ const store = new SQLiteArtifactStore(eventBus, {
16
+ dbPath: join(SCALE_DIR, 'scale.db'),
17
+ artifactsDir: join(SCALE_DIR, 'artifacts'),
18
+ });
19
+ const fsm = new FSM(store, eventBus);
20
+ registerAllFSMs(fsm);
21
+ return { eventBus, store, fsm };
22
+ }
23
+ function ensureDir(dir) {
24
+ if (!existsSync(dir))
25
+ mkdirSync(dir, { recursive: true });
26
+ }
27
+ // Helper: Generate spec markdown file
28
+ function generateSpecMarkdown(id, title, payload) {
29
+ return `# Spec: ${title}
30
+
31
+ **ID**: ${id}
32
+ **Status**: FROZEN
33
+ **Ambiguity Score**: ${payload.ambiguityScore ?? 0.15}
34
+
35
+ ## What
36
+ ${payload.what}
37
+
38
+ ## Success Criteria
39
+ ${payload.successCriteria.map(c => `- [ ] ${c}`).join('\n')}
40
+
41
+ ## Out of Scope
42
+ ${payload.outOfScope.map(o => `- ${o}`).join('\n') || '(none defined)'}
43
+
44
+ ## Edge Cases
45
+ ${payload.edgeCases.map(e => `- ${e}`).join('\n') || '(none defined)'}
46
+
47
+ ## North Star
48
+ ${payload.northStar || 'User value delivered'}
49
+
50
+ ---
51
+ *Generated by SCALE Engine DEFINE phase*
52
+ `;
53
+ }
54
+ // Helper: Calculate ambiguity score
55
+ function calculateAmbiguityScore(description, successCriteria) {
56
+ let score = 0.2; // Base score (maximum threshold)
57
+ // Reduce score based on completeness
58
+ if (description.length > 50)
59
+ score -= 0.05;
60
+ if (successCriteria.length >= 2)
61
+ score -= 0.03;
62
+ if (successCriteria.length >= 3)
63
+ score -= 0.02;
64
+ return Math.max(0.05, score);
65
+ }
66
+ // DEFINE Phase
67
+ export const phaseDefine = defineCommand({
68
+ meta: { name: 'define', description: 'DEFINE: Create Spec (/spec)' },
69
+ args: {
70
+ title: { type: 'positional', required: true },
71
+ description: { type: 'string', alias: 'd' },
72
+ 'success-criteria': { type: 'string', alias: 'c', description: 'Comma-separated criteria' },
73
+ json: { type: 'boolean', default: false },
74
+ },
75
+ async run({ args }) {
76
+ const { store, fsm } = getEngine();
77
+ const desc = args.description ?? args.title;
78
+ // Parse success criteria
79
+ const successCriteria = args['success-criteria']
80
+ ? args['success-criteria'].split(',').map(s => s.trim()).filter(s => s)
81
+ : ['Feature works as described', 'No regression in existing functionality'];
82
+ // Calculate ambiguity score
83
+ const ambiguityScore = calculateAmbiguityScore(desc, successCriteria);
84
+ // Create Need artifact
85
+ const need = await store.create({
86
+ type: 'Need', title: args.title,
87
+ payload: { rawText: desc },
88
+ initialStatus: 'DRAFT',
89
+ createdBy: { kind: 'human', userId: 'cli' },
90
+ });
91
+ // Create Spec artifact with proper payload
92
+ const specPayload = {
93
+ what: desc,
94
+ successCriteria,
95
+ outOfScope: [],
96
+ edgeCases: [],
97
+ northStar: 'Deliver user value',
98
+ ambiguityScore,
99
+ };
100
+ const spec = await store.create({
101
+ type: 'Spec', title: args.title,
102
+ payload: specPayload,
103
+ parents: [need.id],
104
+ initialStatus: 'DRAFT',
105
+ createdBy: { kind: 'human', userId: 'cli' },
106
+ });
107
+ // Generate spec markdown file
108
+ const specsDir = join(SCALE_DIR, 'specs');
109
+ ensureDir(specsDir);
110
+ const specPath = join(specsDir, `${spec.id}.md`);
111
+ writeFileSync(specPath, generateSpecMarkdown(spec.id, args.title, specPayload));
112
+ // FSM transitions: DRAFT -> REVIEWING -> FROZEN
113
+ try {
114
+ await fsm.transition(spec.id, 'refine', { actor: { kind: 'system', component: 'phase-define' } });
115
+ await fsm.transition(spec.id, 'approve', { actor: { kind: 'system', component: 'phase-define' } });
116
+ }
117
+ catch (e) {
118
+ // Guard may fail - report reason
119
+ const error = e;
120
+ if (!args.json)
121
+ console.log(` ⚠️ FSM transition: ${error.message}`);
122
+ }
123
+ const result = { phase: 'DEFINE', spec, specPath, ambiguityScore, successCriteria };
124
+ if (args.json)
125
+ console.log(JSON.stringify(result, null, 2));
126
+ else {
127
+ console.log(`\n✅ DEFINE: ${spec.id}`);
128
+ console.log(` Spec file: ${specPath}`);
129
+ console.log(` Ambiguity score: ${ambiguityScore.toFixed(2)}`);
130
+ console.log(` Success criteria: ${successCriteria.length}`);
131
+ console.log(`\n Next: scale plan ${spec.id}\n`);
132
+ }
133
+ },
134
+ });
135
+ // Helper: Generate plan markdown file
136
+ function generatePlanMarkdown(id, specId, payload) {
137
+ return `# Plan: ${id}
138
+
139
+ **Spec**: ${specId}
140
+ **Status**: APPROVED
141
+
142
+ ## Approach
143
+ ${payload.approach}
144
+
145
+ ## Tech Choices
146
+ ${payload.techChoices.map(t => `- **${t.decision}**: ${t.rationale}`).join('\n') || '(to be defined)'}
147
+
148
+ ## Modules
149
+ ${payload.modules.map(m => `- ${m.action} \`${m.path}\`: ${m.reason}`).join('\n') || '(to be defined)'}
150
+
151
+ ## Rollback Strategy
152
+ ${payload.rollbackStrategy}
153
+
154
+ ## Estimated Complexity
155
+ ${payload.estimatedComplexity ?? 5}/10
156
+
157
+ ---
158
+ *Generated by SCALE Engine PLAN phase*
159
+ `;
160
+ }
161
+ // PLAN Phase
162
+ export const phasePlan = defineCommand({
163
+ meta: { name: 'plan', description: 'PLAN: Create Plan (/plan)' },
164
+ args: {
165
+ 'spec-id': { type: 'positional', required: true },
166
+ approach: { type: 'string', alias: 'a', description: 'Implementation approach' },
167
+ 'rollback': { type: 'string', alias: 'r', description: 'Rollback strategy (required for FSM)' },
168
+ json: { type: 'boolean', default: false },
169
+ },
170
+ async run({ args }) {
171
+ const { store, fsm } = getEngine();
172
+ // Validate spec exists
173
+ const spec = await store.get(args['spec-id']);
174
+ if (!spec || spec.type !== 'Spec') {
175
+ console.error(`\n❌ Spec not found: ${args['spec-id']}\n`);
176
+ process.exit(1);
177
+ }
178
+ // Default rollback strategy (FSM guard requires this)
179
+ const rollbackStrategy = args.rollback ?? 'Revert git commits and restore previous version';
180
+ const approach = args.approach ?? 'Standard implementation following spec requirements';
181
+ // Create PlanPayload with rollback strategy
182
+ const planPayload = {
183
+ approach,
184
+ techChoices: [],
185
+ modules: [],
186
+ rollbackStrategy,
187
+ estimatedComplexity: 5,
188
+ };
189
+ const plan = await store.create({
190
+ type: 'Plan', title: `Plan for ${spec.title}`,
191
+ payload: planPayload,
192
+ parents: [args['spec-id']],
193
+ initialStatus: 'DRAFT',
194
+ createdBy: { kind: 'human', userId: 'cli' },
195
+ });
196
+ // Generate plan markdown file
197
+ const plansDir = join(SCALE_DIR, 'plans');
198
+ ensureDir(plansDir);
199
+ const planPath = join(plansDir, `${plan.id}.md`);
200
+ writeFileSync(planPath, generatePlanMarkdown(plan.id, args['spec-id'], planPayload));
201
+ // FSM transition: DRAFT -> APPROVED (requires rollbackStrategy)
202
+ try {
203
+ await fsm.transition(plan.id, 'review', { actor: { kind: 'system', component: 'phase-plan' } });
204
+ }
205
+ catch (e) {
206
+ const error = e;
207
+ if (!args.json)
208
+ console.log(` ⚠️ FSM transition: ${error.message}`);
209
+ }
210
+ const result = { phase: 'PLAN', plan, planPath, rollbackStrategy };
211
+ if (args.json)
212
+ console.log(JSON.stringify(result, null, 2));
213
+ else {
214
+ console.log(`\n✅ PLAN: ${plan.id}`);
215
+ console.log(` Plan file: ${planPath}`);
216
+ console.log(` Rollback: ${rollbackStrategy}`);
217
+ console.log(`\n Next: scale build ${plan.id}\n`);
218
+ }
219
+ },
220
+ });
221
+ // BUILD Phase
222
+ export const phaseBuild = defineCommand({
223
+ meta: { name: 'build', description: 'BUILD: Create Task (/build)' },
224
+ args: {
225
+ 'plan-id': { type: 'positional', required: true },
226
+ description: { type: 'string', alias: 'd', description: 'Task description' },
227
+ json: { type: 'boolean', default: false },
228
+ },
229
+ async run({ args }) {
230
+ const { store, fsm } = getEngine();
231
+ // Validate plan exists
232
+ const plan = await store.get(args['plan-id']);
233
+ if (!plan || plan.type !== 'Plan') {
234
+ console.error(`\n❌ Plan not found: ${args['plan-id']}\n`);
235
+ process.exit(1);
236
+ }
237
+ // Create TaskPayload
238
+ const taskPayload = {
239
+ description: args.description ?? `Implement ${plan.title}`,
240
+ filesInvolved: [],
241
+ dependsOn: [],
242
+ requiredRole: 'implementer',
243
+ requiredCapabilities: ['code-generation', 'file-editing'],
244
+ // Initialize quality metrics (FSM guards require these for completion)
245
+ buildStatus: 'pending',
246
+ lintStatus: 'pending',
247
+ testPassed: undefined,
248
+ testCoverage: undefined,
249
+ };
250
+ const task = await store.create({
251
+ type: 'Task', title: `Task for ${plan.title}`,
252
+ payload: taskPayload,
253
+ parents: [args['plan-id']],
254
+ initialStatus: 'PENDING',
255
+ createdBy: { kind: 'human', userId: 'cli' },
256
+ });
257
+ // FSM transitions: PENDING -> READY -> RUNNING
258
+ try {
259
+ await fsm.transition(task.id, 'schedule', { actor: { kind: 'system', component: 'phase-build' } });
260
+ await fsm.transition(task.id, 'start', { actor: { kind: 'human', userId: 'cli' } });
261
+ }
262
+ catch (e) {
263
+ const error = e;
264
+ if (!args.json)
265
+ console.log(` ⚠️ FSM transition: ${error.message}`);
266
+ }
267
+ // Update Plan status to IMPLEMENTING
268
+ try {
269
+ await fsm.transition(args['plan-id'], 'implement', { actor: { kind: 'system', component: 'phase-build' } });
270
+ }
271
+ catch { }
272
+ const result = { phase: 'BUILD', task, status: 'RUNNING' };
273
+ if (args.json)
274
+ console.log(JSON.stringify(result, null, 2));
275
+ else {
276
+ console.log(`\n✅ BUILD: ${task.id}`);
277
+ console.log(` Status: RUNNING (ready to implement)`);
278
+ console.log(` Description: ${taskPayload.description}`);
279
+ console.log(`\n Implement now, then run: scale verify ${task.id}\n`);
280
+ }
281
+ },
282
+ });
283
+ // Helper: Run command and capture result (from verify-task)
284
+ async function runVerificationCmd(cmd) {
285
+ const { spawn } = await import('node:child_process');
286
+ return new Promise((resolve) => {
287
+ const child = spawn(cmd, [], { shell: true, stdio: 'pipe' });
288
+ let output = '';
289
+ child.stdout?.on('data', (d) => (output += d.toString()));
290
+ child.stderr?.on('data', (d) => (output += d.toString()));
291
+ child.on('close', (code) => resolve({ exitCode: code ?? 1, output }));
292
+ });
293
+ }
294
+ // VERIFY Phase
295
+ export const phaseVerify = defineCommand({
296
+ meta: { name: 'verify', description: 'VERIFY: Run tests and update Task (/test)' },
297
+ args: {
298
+ 'task-id': { type: 'positional', required: true },
299
+ 'build-cmd': { type: 'string', default: 'npm run build', description: 'Build command' },
300
+ 'lint-cmd': { type: 'string', default: 'npm run lint', description: 'Lint command' },
301
+ 'test-cmd': { type: 'string', default: 'npm test', description: 'Test command' },
302
+ 'skip-build': { type: 'boolean', default: false },
303
+ 'skip-lint': { type: 'boolean', default: false },
304
+ 'skip-test': { type: 'boolean', default: false },
305
+ json: { type: 'boolean', default: false },
306
+ },
307
+ async run({ args }) {
308
+ const { store, fsm } = getEngine();
309
+ // Validate task exists
310
+ const task = await store.get(args['task-id']);
311
+ if (!task || task.type !== 'Task') {
312
+ console.error(`\n❌ Task not found: ${args['task-id']}\n`);
313
+ process.exit(1);
314
+ }
315
+ const results = {
316
+ buildStatus: 'pending',
317
+ buildExitCode: undefined,
318
+ lintStatus: 'pending',
319
+ testPassed: undefined,
320
+ testCoverage: undefined,
321
+ };
322
+ // Run build
323
+ if (!args['skip-build']) {
324
+ if (!args.json)
325
+ console.log('\n🔨 Running build...');
326
+ const build = await runVerificationCmd(args['build-cmd']);
327
+ results.buildStatus = build.exitCode === 0 ? 'success' : 'failed';
328
+ results.buildExitCode = build.exitCode;
329
+ if (!args.json) {
330
+ if (build.exitCode === 0)
331
+ console.log(' ✅ Build passed');
332
+ else
333
+ console.log(' ❌ Build failed (exit code:', build.exitCode, ')');
334
+ }
335
+ }
336
+ // Run lint
337
+ if (!args['skip-lint']) {
338
+ if (!args.json)
339
+ console.log('\n🔍 Running lint...');
340
+ const lint = await runVerificationCmd(args['lint-cmd']);
341
+ results.lintStatus = lint.exitCode === 0 ? 'success' : 'failed';
342
+ if (!args.json) {
343
+ if (lint.exitCode === 0)
344
+ console.log(' ✅ Lint passed');
345
+ else
346
+ console.log(' ❌ Lint failed (exit code:', lint.exitCode, ')');
347
+ }
348
+ }
349
+ // Run tests
350
+ if (!args['skip-test']) {
351
+ if (!args.json)
352
+ console.log('\n🧪 Running tests...');
353
+ const test = await runVerificationCmd(args['test-cmd']);
354
+ results.testPassed = test.exitCode === 0;
355
+ // Extract coverage (Jest format)
356
+ const coverageMatch = test.output.match(/All files[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|\s*(\d+\.?\d*)/);
357
+ if (coverageMatch)
358
+ results.testCoverage = parseFloat(coverageMatch[1]);
359
+ if (!args.json) {
360
+ if (test.exitCode === 0) {
361
+ console.log(' ✅ Tests passed');
362
+ if (results.testCoverage)
363
+ console.log(' Coverage:', results.testCoverage, '%');
364
+ }
365
+ else
366
+ console.log(' ❌ Tests failed (exit code:', test.exitCode, ')');
367
+ }
368
+ }
369
+ // Update Task payload with verification results
370
+ const currentPayload = task.payload;
371
+ const updatedPayload = {
372
+ ...currentPayload,
373
+ buildStatus: results.buildStatus,
374
+ buildExitCode: results.buildExitCode,
375
+ lintStatus: results.lintStatus,
376
+ testPassed: results.testPassed,
377
+ testCoverage: results.testCoverage,
378
+ };
379
+ await store.update(args['task-id'], { payload: updatedPayload });
380
+ // Attempt FSM transition to COMPLETED
381
+ const allPassed = results.buildStatus === 'success' &&
382
+ results.lintStatus === 'success' &&
383
+ results.testPassed === true;
384
+ let transitionResult = null;
385
+ if (allPassed) {
386
+ try {
387
+ transitionResult = await fsm.transition(args['task-id'], 'complete', {
388
+ actor: { kind: 'human', userId: 'cli' }
389
+ });
390
+ if (!args.json)
391
+ console.log('\n✅ Task marked COMPLETED');
392
+ }
393
+ catch (e) {
394
+ const error = e;
395
+ if (!args.json)
396
+ console.log('\n⚠️ FSM transition failed:', error.message);
397
+ }
398
+ }
399
+ const passed = allPassed && (transitionResult?.success ?? false);
400
+ const result = { phase: 'VERIFY', taskId: args['task-id'], results, passed };
401
+ if (args.json)
402
+ console.log(JSON.stringify(result, null, 2));
403
+ else {
404
+ console.log(`\n📊 VERIFY: ${passed ? '✅ PASSED' : '❌ FAILED'}`);
405
+ if (passed)
406
+ console.log(`\n Next: scale review\n`);
407
+ else
408
+ console.log(`\n Fix issues and re-run: scale verify ${args['task-id']}\n`);
409
+ }
410
+ },
411
+ });
412
+ // REVIEW Phase
413
+ export const phaseReview = defineCommand({
414
+ meta: { name: 'review', description: 'REVIEW: Code review (/review)' },
415
+ args: {
416
+ 'task-id': { type: 'positional', required: false },
417
+ 'check-security': { type: 'boolean', default: true },
418
+ 'check-style': { type: 'boolean', default: true },
419
+ json: { type: 'boolean', default: false },
420
+ },
421
+ async run({ args }) {
422
+ const { store } = getEngine();
423
+ // If task-id provided, validate task exists
424
+ let task = null;
425
+ if (args['task-id']) {
426
+ task = await store.get(args['task-id']);
427
+ if (!task || task.type !== 'Task') {
428
+ console.error(`\n❌ Task not found: ${args['task-id']}\n`);
429
+ process.exit(1);
430
+ }
431
+ }
432
+ const findings = [];
433
+ // Style checklist
434
+ if (args['check-style']) {
435
+ findings.push({ category: 'style', severity: 'MEDIUM', description: 'Check function length (<50 lines)' });
436
+ findings.push({ category: 'style', severity: 'MEDIUM', description: 'Check file size (<800 lines)' });
437
+ findings.push({ category: 'style', severity: 'LOW', description: 'Check naming conventions' });
438
+ findings.push({ category: 'style', severity: 'LOW', description: 'Check no deep nesting (>4 levels)' });
439
+ }
440
+ // Security checklist
441
+ if (args['check-security']) {
442
+ findings.push({ category: 'security', severity: 'CRITICAL', description: 'No hardcoded secrets/credentials' });
443
+ findings.push({ category: 'security', severity: 'HIGH', description: 'Input validation at boundaries' });
444
+ findings.push({ category: 'security', severity: 'HIGH', description: 'No SQL injection (parameterized queries)' });
445
+ findings.push({ category: 'security', severity: 'HIGH', description: 'No XSS (sanitized output)' });
446
+ findings.push({ category: 'security', severity: 'MEDIUM', description: 'Error messages not leak sensitive data' });
447
+ }
448
+ // Logic checklist
449
+ findings.push({ category: 'logic', severity: 'HIGH', description: 'Edge cases handled' });
450
+ findings.push({ category: 'logic', severity: 'HIGH', description: 'Error handling explicit' });
451
+ findings.push({ category: 'logic', severity: 'MEDIUM', description: 'No N+1 queries' });
452
+ // Performance checklist
453
+ findings.push({ category: 'performance', severity: 'MEDIUM', description: 'No unbounded loops/queries' });
454
+ findings.push({ category: 'performance', severity: 'LOW', description: 'Caching where appropriate' });
455
+ // Count by severity
456
+ const critical = findings.filter(f => f.severity === 'CRITICAL').length;
457
+ const high = findings.filter(f => f.severity === 'HIGH').length;
458
+ const medium = findings.filter(f => f.severity === 'MEDIUM').length;
459
+ const low = findings.filter(f => f.severity === 'LOW').length;
460
+ const passed = critical === 0; // Only block on CRITICAL issues
461
+ const result = {
462
+ phase: 'REVIEW',
463
+ taskId: args['task-id'],
464
+ findings,
465
+ summary: { critical, high, medium, low },
466
+ passed,
467
+ recommendation: passed ? 'Ready to ship' : 'Fix CRITICAL issues before shipping'
468
+ };
469
+ if (args.json)
470
+ console.log(JSON.stringify(result, null, 2));
471
+ else {
472
+ console.log('\n🔍 REVIEW Phase');
473
+ console.log('\nReview Checklist:');
474
+ console.log('┌─────────────────────────────────────────────┐');
475
+ console.log(`│ CRITICAL: ${critical} issues ${critical > 0 ? '⚠️ BLOCKED' : '✅'} │`);
476
+ console.log(`│ HIGH: ${high} issues │`);
477
+ console.log(`│ MEDIUM: ${medium} issues │`);
478
+ console.log(`│ LOW: ${low} issues │`);
479
+ console.log('└─────────────────────────────────────────────┘');
480
+ if (passed) {
481
+ console.log('\n✅ Review passed (no CRITICAL issues)');
482
+ console.log('\n Next: scale ship ' + (args['task-id'] ?? '<task-id>') + '\n');
483
+ }
484
+ else {
485
+ console.log('\n❌ Review blocked by CRITICAL issues');
486
+ console.log('\n Fix critical issues, then: scale review\n');
487
+ }
488
+ }
489
+ },
490
+ });
491
+ // SHIP Phase
492
+ export const phaseShip = defineCommand({
493
+ meta: { name: 'ship', description: 'SHIP: Commit and complete (/ship)' },
494
+ args: {
495
+ 'task-id': { type: 'positional', required: true },
496
+ message: { type: 'string', alias: 'm', description: 'Commit message' },
497
+ 'no-commit': { type: 'boolean', default: false, description: 'Skip git commit' },
498
+ json: { type: 'boolean', default: false },
499
+ },
500
+ async run({ args }) {
501
+ const { store, fsm } = getEngine();
502
+ // Validate task exists
503
+ const task = await store.get(args['task-id']);
504
+ if (!task || task.type !== 'Task') {
505
+ console.error(`\n❌ Task not found: ${args['task-id']}\n`);
506
+ process.exit(1);
507
+ }
508
+ // Check if task is completed (or attempt transition)
509
+ const payload = task.payload;
510
+ const verificationPassed = payload.buildStatus === 'success' &&
511
+ payload.lintStatus === 'success' &&
512
+ payload.testPassed === true;
513
+ if (task.status !== 'COMPLETED') {
514
+ if (!verificationPassed) {
515
+ console.error('\n❌ Task not verified. Run: scale verify ' + args['task-id'] + '\n');
516
+ process.exit(1);
517
+ }
518
+ // Attempt FSM transition
519
+ try {
520
+ await fsm.transition(args['task-id'], 'complete', {
521
+ actor: { kind: 'human', userId: 'cli' }
522
+ });
523
+ }
524
+ catch (e) {
525
+ const error = e;
526
+ console.error('\n❌ FSM transition failed:', error.message);
527
+ console.log('\n Run verification first: scale verify ' + args['task-id'] + '\n');
528
+ process.exit(1);
529
+ }
530
+ }
531
+ // Git operations
532
+ let commitHash = null;
533
+ if (!args['no-commit']) {
534
+ const { execa } = await import('execa');
535
+ const commitMessage = args.message ?? `feat: ${task.title ?? args['task-id']}`;
536
+ try {
537
+ await execa('git', ['add', '.']);
538
+ const result = await execa('git', ['commit', '-m', commitMessage]);
539
+ commitHash = result.stdout.split('\n')[0]; // First line contains hash
540
+ }
541
+ catch (e) {
542
+ const error = e;
543
+ if (!args.json)
544
+ console.log(' ⚠️ Git commit skipped:', error.message);
545
+ }
546
+ }
547
+ // Update Plan to DONE if Task completed
548
+ if (task.parents.length > 0) {
549
+ const planId = task.parents[0];
550
+ try {
551
+ await fsm.transition(planId, 'complete', { actor: { kind: 'system', component: 'phase-ship' } });
552
+ }
553
+ catch { }
554
+ }
555
+ const result = {
556
+ phase: 'SHIP',
557
+ taskId: args['task-id'],
558
+ status: 'COMPLETED',
559
+ commitHash,
560
+ };
561
+ if (args.json)
562
+ console.log(JSON.stringify(result, null, 2));
563
+ else {
564
+ console.log('\n🚀 SHIP Phase');
565
+ console.log('\n✅ Task COMPLETED: ' + args['task-id']);
566
+ if (commitHash)
567
+ console.log(' Commit: ' + commitHash);
568
+ console.log('\n🎉 Done! Feature shipped.\n');
569
+ }
570
+ },
571
+ });
572
+ //# sourceMappingURL=phaseCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phaseCommands.js","sourceRoot":"","sources":["../../src/cli/phaseCommands.ts"],"names":[],"mappings":"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"}
@@ -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;