@hongmaple0820/scale-engine 0.12.3 → 0.14.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 (157) hide show
  1. package/dist/adapters/AiderAdapter.js +1 -1
  2. package/dist/adapters/AiderAdapter.js.map +1 -1
  3. package/dist/adapters/ClaudeCodeAdapter.d.ts +1 -0
  4. package/dist/adapters/ClaudeCodeAdapter.js +5 -3
  5. package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
  6. package/dist/adapters/CodexAdapter.js +1 -1
  7. package/dist/adapters/CodexAdapter.js.map +1 -1
  8. package/dist/adapters/CursorAdapter.js +1 -1
  9. package/dist/adapters/CursorAdapter.js.map +1 -1
  10. package/dist/adapters/DeepSeekTuiAdapter.js +5 -3
  11. package/dist/adapters/DeepSeekTuiAdapter.js.map +1 -1
  12. package/dist/adapters/DoubaoAdapter.js +1 -1
  13. package/dist/adapters/DoubaoAdapter.js.map +1 -1
  14. package/dist/adapters/GeminiAdapter.js +1 -1
  15. package/dist/adapters/GeminiAdapter.js.map +1 -1
  16. package/dist/adapters/HermesAdapter.js +1 -1
  17. package/dist/adapters/HermesAdapter.js.map +1 -1
  18. package/dist/adapters/KimiAdapter.js +1 -1
  19. package/dist/adapters/KimiAdapter.js.map +1 -1
  20. package/dist/adapters/KiroAdapter.d.ts +14 -0
  21. package/dist/adapters/KiroAdapter.js +180 -0
  22. package/dist/adapters/KiroAdapter.js.map +1 -0
  23. package/dist/adapters/OpenClawAdapter.js +1 -1
  24. package/dist/adapters/OpenClawAdapter.js.map +1 -1
  25. package/dist/adapters/OpenCodeAdapter.js +1 -1
  26. package/dist/adapters/OpenCodeAdapter.js.map +1 -1
  27. package/dist/adapters/QCoderAdapter.js +1 -1
  28. package/dist/adapters/QCoderAdapter.js.map +1 -1
  29. package/dist/adapters/TraeAdapter.js +1 -1
  30. package/dist/adapters/TraeAdapter.js.map +1 -1
  31. package/dist/adapters/VSCAdapter.js +1 -1
  32. package/dist/adapters/VSCAdapter.js.map +1 -1
  33. package/dist/adapters/WindsurfAdapter.js +1 -1
  34. package/dist/adapters/WindsurfAdapter.js.map +1 -1
  35. package/dist/adapters/WorkBuddyAdapter.js +1 -1
  36. package/dist/adapters/WorkBuddyAdapter.js.map +1 -1
  37. package/dist/adapters/index.d.ts +1 -0
  38. package/dist/adapters/index.js +3 -0
  39. package/dist/adapters/index.js.map +1 -1
  40. package/dist/api/cli.js +690 -9
  41. package/dist/api/cli.js.map +1 -1
  42. package/dist/api/doctor.d.ts +13 -0
  43. package/dist/api/doctor.js +261 -5
  44. package/dist/api/doctor.js.map +1 -1
  45. package/dist/api/quickstart.d.ts +20 -1
  46. package/dist/api/quickstart.js +104 -3
  47. package/dist/api/quickstart.js.map +1 -1
  48. package/dist/artifact/types.d.ts +16 -2
  49. package/dist/artifact/types.js.map +1 -1
  50. package/dist/cli/phaseCommands.d.ts +66 -0
  51. package/dist/cli/phaseCommands.js +695 -51
  52. package/dist/cli/phaseCommands.js.map +1 -1
  53. package/dist/guardrails/detectors.d.ts +9 -0
  54. package/dist/guardrails/detectors.js +102 -0
  55. package/dist/guardrails/detectors.js.map +1 -1
  56. package/dist/hooks/HookGeneratorEnhanced.js +29 -0
  57. package/dist/hooks/HookGeneratorEnhanced.js.map +1 -1
  58. package/dist/hooks/WorkflowHooksManager.js +20 -1
  59. package/dist/hooks/WorkflowHooksManager.js.map +1 -1
  60. package/dist/index.d.ts +6 -0
  61. package/dist/index.js +4 -0
  62. package/dist/index.js.map +1 -1
  63. package/dist/output/BrandThemeLoader.d.ts +54 -0
  64. package/dist/output/BrandThemeLoader.js +340 -0
  65. package/dist/output/BrandThemeLoader.js.map +1 -0
  66. package/dist/output/HTMLDocumentRenderer.d.ts +83 -0
  67. package/dist/output/HTMLDocumentRenderer.js +717 -0
  68. package/dist/output/HTMLDocumentRenderer.js.map +1 -0
  69. package/dist/output/UIPrototypeRenderer.d.ts +61 -0
  70. package/dist/output/UIPrototypeRenderer.js +500 -0
  71. package/dist/output/UIPrototypeRenderer.js.map +1 -0
  72. package/dist/output/index.d.ts +6 -0
  73. package/dist/output/index.js +6 -0
  74. package/dist/output/index.js.map +1 -0
  75. package/dist/skills/ExternalSkills.js +2 -0
  76. package/dist/skills/ExternalSkills.js.map +1 -1
  77. package/dist/skills/SkillCatalog.d.ts +13 -0
  78. package/dist/skills/SkillCatalog.js +184 -0
  79. package/dist/skills/SkillCatalog.js.map +1 -0
  80. package/dist/skills/SkillDiscovery.js +2 -1
  81. package/dist/skills/SkillDiscovery.js.map +1 -1
  82. package/dist/skills/SkillDoctor.d.ts +37 -0
  83. package/dist/skills/SkillDoctor.js +90 -0
  84. package/dist/skills/SkillDoctor.js.map +1 -0
  85. package/dist/skills/index.d.ts +2 -0
  86. package/dist/skills/index.js +2 -0
  87. package/dist/skills/index.js.map +1 -1
  88. package/dist/skills/routing/SkillGate.d.ts +12 -0
  89. package/dist/skills/routing/SkillGate.js +93 -0
  90. package/dist/skills/routing/SkillGate.js.map +1 -0
  91. package/dist/skills/routing/SkillPlanner.d.ts +8 -0
  92. package/dist/skills/routing/SkillPlanner.js +91 -0
  93. package/dist/skills/routing/SkillPlanner.js.map +1 -0
  94. package/dist/skills/routing/SkillPolicy.d.ts +6 -0
  95. package/dist/skills/routing/SkillPolicy.js +173 -0
  96. package/dist/skills/routing/SkillPolicy.js.map +1 -0
  97. package/dist/skills/routing/SkillRoutingTypes.d.ts +72 -0
  98. package/dist/skills/routing/SkillRoutingTypes.js +2 -0
  99. package/dist/skills/routing/SkillRoutingTypes.js.map +1 -0
  100. package/dist/skills/routing/TaskIntentClassifier.d.ts +6 -0
  101. package/dist/skills/routing/TaskIntentClassifier.js +79 -0
  102. package/dist/skills/routing/TaskIntentClassifier.js.map +1 -0
  103. package/dist/skills/routing/index.d.ts +5 -0
  104. package/dist/skills/routing/index.js +6 -0
  105. package/dist/skills/routing/index.js.map +1 -0
  106. package/dist/workflow/GovernanceLock.d.ts +35 -0
  107. package/dist/workflow/GovernanceLock.js +58 -0
  108. package/dist/workflow/GovernanceLock.js.map +1 -0
  109. package/dist/workflow/GovernanceTemplatePacks.d.ts +24 -0
  110. package/dist/workflow/GovernanceTemplatePacks.js +83 -0
  111. package/dist/workflow/GovernanceTemplatePacks.js.map +1 -0
  112. package/dist/workflow/GovernanceTemplates.d.ts +17 -0
  113. package/dist/workflow/GovernanceTemplates.js +686 -0
  114. package/dist/workflow/GovernanceTemplates.js.map +1 -0
  115. package/dist/workflow/PhaseMarkerTracker.d.ts +63 -0
  116. package/dist/workflow/PhaseMarkerTracker.js +291 -0
  117. package/dist/workflow/PhaseMarkerTracker.js.map +1 -0
  118. package/dist/workflow/SessionStateTracker.d.ts +74 -0
  119. package/dist/workflow/SessionStateTracker.js +270 -0
  120. package/dist/workflow/SessionStateTracker.js.map +1 -0
  121. package/dist/workflow/TaskArtifactScaffolder.d.ts +47 -0
  122. package/dist/workflow/TaskArtifactScaffolder.js +237 -0
  123. package/dist/workflow/TaskArtifactScaffolder.js.map +1 -0
  124. package/dist/workflow/TaskMetricsStore.d.ts +49 -0
  125. package/dist/workflow/TaskMetricsStore.js +149 -0
  126. package/dist/workflow/TaskMetricsStore.js.map +1 -0
  127. package/dist/workflow/VerificationCommands.d.ts +2 -0
  128. package/dist/workflow/VerificationCommands.js +8 -12
  129. package/dist/workflow/VerificationCommands.js.map +1 -1
  130. package/dist/workflow/VerificationProfile.d.ts +56 -0
  131. package/dist/workflow/VerificationProfile.js +170 -0
  132. package/dist/workflow/VerificationProfile.js.map +1 -0
  133. package/dist/workflow/WorkflowArtifactWriter.d.ts +113 -0
  134. package/dist/workflow/WorkflowArtifactWriter.js +241 -0
  135. package/dist/workflow/WorkflowArtifactWriter.js.map +1 -0
  136. package/dist/workflow/WorkflowEngine.d.ts +26 -5
  137. package/dist/workflow/WorkflowEngine.js +38 -9
  138. package/dist/workflow/WorkflowEngine.js.map +1 -1
  139. package/dist/workflow/WorkspaceLifecycle.d.ts +51 -0
  140. package/dist/workflow/WorkspaceLifecycle.js +259 -0
  141. package/dist/workflow/WorkspaceLifecycle.js.map +1 -0
  142. package/dist/workflow/autonomous/AutonomousDevLoop.d.ts +88 -0
  143. package/dist/workflow/autonomous/AutonomousDevLoop.js +381 -0
  144. package/dist/workflow/autonomous/AutonomousDevLoop.js.map +1 -0
  145. package/dist/workflow/autonomous/WorklogManager.d.ts +50 -0
  146. package/dist/workflow/autonomous/WorklogManager.js +264 -0
  147. package/dist/workflow/autonomous/WorklogManager.js.map +1 -0
  148. package/dist/workflow/autonomous/index.d.ts +2 -0
  149. package/dist/workflow/autonomous/index.js +4 -0
  150. package/dist/workflow/autonomous/index.js.map +1 -0
  151. package/dist/workflow/gates/GateSystem.d.ts +12 -3
  152. package/dist/workflow/gates/GateSystem.js +185 -41
  153. package/dist/workflow/gates/GateSystem.js.map +1 -1
  154. package/dist/workflow/index.d.ts +10 -0
  155. package/dist/workflow/index.js +10 -0
  156. package/dist/workflow/index.js.map +1 -1
  157. package/package.json +3 -3
@@ -0,0 +1,381 @@
1
+ // SCALE Engine — Autonomous Development Loop
2
+ // Cron 触发的自主开发循环:读取 worklog → QA → 修复 → 开发 → 更新
3
+ // 设计参考:z.ai 模式 + Baton System + SelfImproveEngine
4
+ // 灵感来源:用户分享的 z.ai 自主开发循环模式(cron 每 15 分钟)
5
+ import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ import { execSync } from 'node:child_process';
8
+ import { logger } from '../../core/logger.js';
9
+ import { WorklogManager } from './WorklogManager.js';
10
+ // ============================================================================
11
+ // Default Config
12
+ // ============================================================================
13
+ export function createDefaultConfig(overrides) {
14
+ return {
15
+ scaleDir: '.scale',
16
+ worklogPath: '.scale/worklog.md',
17
+ batonPath: '.scale/baton',
18
+ maxDefectsPerRun: 3,
19
+ maxFeaturesPerRun: 1,
20
+ qaCommand: 'npx vitest run',
21
+ cwd: process.cwd(),
22
+ ...overrides,
23
+ };
24
+ }
25
+ // ============================================================================
26
+ // Autonomous Dev Loop
27
+ // ============================================================================
28
+ export class AutonomousDevLoop {
29
+ constructor(eventBus, config) {
30
+ this.config = createDefaultConfig(config);
31
+ this.eventBus = eventBus;
32
+ this.worklogManager = new WorklogManager(this.config.worklogPath);
33
+ }
34
+ // ─────────────────────────────────────────────────────────────
35
+ // Main Loop
36
+ // ─────────────────────────────────────────────────────────────
37
+ /** Execute the autonomous development loop */
38
+ async run() {
39
+ const runId = `AUTO-${Date.now()}`;
40
+ const startedAt = Date.now();
41
+ const state = {
42
+ runId,
43
+ startedAt: new Date(startedAt).toISOString(),
44
+ phase: 'read_worklog',
45
+ fixResults: [],
46
+ errors: [],
47
+ };
48
+ logger.info({ runId }, 'Autonomous dev loop started');
49
+ this.eventBus.emit('autonomous.loop.start', { runId, timestamp: state.startedAt });
50
+ try {
51
+ // Step 1: Read worklog
52
+ state.worklogState = this.readWorklog();
53
+ this.eventBus.emit('autonomous.worklog.read', {
54
+ runId,
55
+ total: state.worklogState.entries.length,
56
+ pending: state.worklogState.totalPending,
57
+ });
58
+ // Step 2: Run QA
59
+ state.phase = 'run_qa';
60
+ state.qaResult = this.runQA();
61
+ // Step 3: Fix defects (if QA failed)
62
+ if (!state.qaResult.passed) {
63
+ state.phase = 'fix_defects';
64
+ state.fixResults = await this.fixDefects(state.qaResult);
65
+ }
66
+ // Step 4: Develop next feature (if QA passed or defects fixed)
67
+ const qaPassing = state.qaResult.passed || state.fixResults.some(r => r.success);
68
+ if (qaPassing) {
69
+ state.phase = 'develop_features';
70
+ const pending = this.worklogManager.getByStatus(state.worklogState, 'pending');
71
+ if (pending.length > 0) {
72
+ state.devResult = await this.developFeatures(pending);
73
+ }
74
+ }
75
+ // Step 5: Update worklog
76
+ state.phase = 'update_worklog';
77
+ state.worklogState = this.updateWorklogState(state);
78
+ // Step 6: Write baton
79
+ state.phase = 'write_baton';
80
+ this.writeBaton(state);
81
+ state.phase = 'complete';
82
+ }
83
+ catch (err) {
84
+ const msg = err instanceof Error ? err.message : String(err);
85
+ state.errors.push(msg);
86
+ logger.error({ runId, error: msg, phase: state.phase }, 'Loop error');
87
+ this.eventBus.emit('autonomous.loop.error', { runId, error: msg, phase: state.phase });
88
+ // Still write baton on error for recovery
89
+ try {
90
+ this.writeBaton(state);
91
+ }
92
+ catch {
93
+ // swallow baton write error
94
+ }
95
+ }
96
+ const duration = Date.now() - startedAt;
97
+ const result = this.buildResult(state, duration);
98
+ logger.info({ runId, duration, phase: result.phase }, 'Autonomous dev loop finished');
99
+ this.eventBus.emit('autonomous.loop.end', { runId, result });
100
+ return result;
101
+ }
102
+ // ─────────────────────────────────────────────────────────────
103
+ // Step 1: Read Worklog
104
+ // ─────────────────────────────────────────────────────────────
105
+ readWorklog() {
106
+ const state = this.worklogManager.read();
107
+ logger.info({ pending: state.totalPending, done: state.totalDone }, 'Worklog loaded');
108
+ return state;
109
+ }
110
+ // ─────────────────────────────────────────────────────────────
111
+ // Step 2: Run QA
112
+ // ─────────────────────────────────────────────────────────────
113
+ runQA() {
114
+ const startTime = Date.now();
115
+ try {
116
+ const output = execSync(this.config.qaCommand, {
117
+ cwd: this.config.cwd,
118
+ encoding: 'utf-8',
119
+ timeout: 120_000, // 2 minute timeout
120
+ stdio: ['pipe', 'pipe', 'pipe'],
121
+ });
122
+ return this.parseQAOutput(output, Date.now() - startTime);
123
+ }
124
+ catch (err) {
125
+ // execSync throws on non-zero exit code
126
+ const execErr = err;
127
+ const output = (execErr.stdout || '') + '\n' + (execErr.stderr || '');
128
+ const result = this.parseQAOutput(output, Date.now() - startTime);
129
+ result.passed = false;
130
+ return result;
131
+ }
132
+ }
133
+ /** Parse QA output into structured result */
134
+ parseQAOutput(output, duration) {
135
+ const failures = [];
136
+ // Vitest output pattern: "FAIL tests/path.test.ts > test name"
137
+ const failPattern = /FAIL\s+(.+?\.test\.\w+).*?>\s*(.+?)(?:\n|$)/g;
138
+ let match;
139
+ while ((match = failPattern.exec(output)) !== null) {
140
+ failures.push({
141
+ file: match[1].trim(),
142
+ testName: match[2].trim(),
143
+ error: '', // detailed error extracted below
144
+ });
145
+ }
146
+ // Extract test counts from vitest summary
147
+ // Pattern: "Tests 2 failed | 44 passed (46)"
148
+ const countMatch = output.match(/Tests\s+(?:(\d+)\s+failed\s*[|])?\s*(\d+)\s+passed\s*\((\d+)\)/);
149
+ let totalTests = 0;
150
+ let passedTests = 0;
151
+ let failedTests = 0;
152
+ if (countMatch) {
153
+ failedTests = parseInt(countMatch[1] || '0', 10);
154
+ passedTests = parseInt(countMatch[2], 10);
155
+ totalTests = parseInt(countMatch[3], 10);
156
+ }
157
+ // Also match: "✓ N tests" / "✗ N tests" / "↓ N tests"
158
+ const passMatch = output.match(/[✓✔]\s*(\d+)\s+passed/);
159
+ const failMatch = output.match(/[✗✘✕]\s*(\d+)\s+failed/);
160
+ if (passMatch && !countMatch)
161
+ passedTests = parseInt(passMatch[1], 10);
162
+ if (failMatch && !countMatch)
163
+ failedTests = parseInt(failMatch[1], 10);
164
+ if (!countMatch && (passMatch || failMatch)) {
165
+ totalTests = passedTests + failedTests;
166
+ }
167
+ return {
168
+ passed: failedTests === 0 && totalTests > 0,
169
+ totalTests,
170
+ passedTests,
171
+ failedTests,
172
+ failures,
173
+ duration,
174
+ rawOutput: output.slice(0, 2000), // cap output size
175
+ };
176
+ }
177
+ // ─────────────────────────────────────────────────────────────
178
+ // Step 3: Fix Defects
179
+ // ─────────────────────────────────────────────────────────────
180
+ async fixDefects(qa) {
181
+ const results = [];
182
+ const maxFixes = Math.min(qa.failures.length, this.config.maxDefectsPerRun);
183
+ for (let i = 0; i < maxFixes; i++) {
184
+ const failure = qa.failures[i];
185
+ logger.info({ file: failure.file, test: failure.testName }, 'Attempting defect fix');
186
+ this.eventBus.emit('autonomous.defect.detected', {
187
+ file: failure.file,
188
+ testName: failure.testName,
189
+ error: failure.error,
190
+ });
191
+ // Record defect for SelfImproveEngine integration
192
+ const fixResult = {
193
+ entryId: `DEFECT-${i + 1}`,
194
+ success: false,
195
+ description: `Fix failing test: ${failure.testName} in ${failure.file}`,
196
+ filesChanged: [],
197
+ };
198
+ // In a real autonomous loop, this would invoke an AI agent to fix the defect.
199
+ // For the framework, we record the defect and emit events for external handlers.
200
+ this.eventBus.emit('autonomous.defect.fix_requested', {
201
+ file: failure.file,
202
+ testName: failure.testName,
203
+ runId: qa.rawOutput.slice(0, 100),
204
+ });
205
+ results.push(fixResult);
206
+ }
207
+ return results;
208
+ }
209
+ // ─────────────────────────────────────────────────────────────
210
+ // Step 4: Develop Features
211
+ // ─────────────────────────────────────────────────────────────
212
+ async developFeatures(pending) {
213
+ const nextTask = this.worklogManager.getNextTask({ entries: pending });
214
+ if (!nextTask)
215
+ return undefined;
216
+ logger.info({ taskId: nextTask.id, desc: nextTask.description }, 'Feature development started');
217
+ this.eventBus.emit('autonomous.feature.start', {
218
+ taskId: nextTask.id,
219
+ description: nextTask.description,
220
+ priority: nextTask.priority,
221
+ });
222
+ // In a real autonomous loop, this would invoke an AI agent.
223
+ // For the framework, we record the task and emit events.
224
+ const devResult = {
225
+ entryId: nextTask.id,
226
+ success: false,
227
+ description: nextTask.description,
228
+ filesChanged: [],
229
+ };
230
+ this.eventBus.emit('autonomous.feature.delegated', {
231
+ taskId: nextTask.id,
232
+ description: nextTask.description,
233
+ });
234
+ return devResult;
235
+ }
236
+ // ─────────────────────────────────────────────────────────────
237
+ // Step 5: Update Worklog
238
+ // ─────────────────────────────────────────────────────────────
239
+ updateWorklogState(state) {
240
+ let worklog = state.worklogState ?? this.worklogManager.read();
241
+ // Mark fixed defects
242
+ for (const fix of state.fixResults) {
243
+ if (fix.success) {
244
+ // Find matching entry by description
245
+ const match = worklog.entries.find(e => e.type === 'bug' && e.status === 'pending' && fix.description.includes(e.description));
246
+ if (match) {
247
+ worklog = this.worklogManager.markDone(worklog, match.id, 'Fixed by autonomous loop');
248
+ }
249
+ }
250
+ }
251
+ // Update feature status
252
+ if (state.devResult) {
253
+ if (state.devResult.success) {
254
+ worklog = this.worklogManager.markDone(worklog, state.devResult.entryId, 'Completed by autonomous loop');
255
+ }
256
+ else {
257
+ worklog = this.worklogManager.markInProgress(worklog, state.devResult.entryId);
258
+ }
259
+ }
260
+ // Write updated worklog
261
+ this.worklogManager.write(worklog);
262
+ return worklog;
263
+ }
264
+ // ─────────────────────────────────────────────────────────────
265
+ // Step 6: Write Baton (Cross-Session Persistence)
266
+ // ─────────────────────────────────────────────────────────────
267
+ writeBaton(state) {
268
+ const batonDir = this.config.batonPath;
269
+ if (!existsSync(batonDir)) {
270
+ mkdirSync(batonDir, { recursive: true });
271
+ }
272
+ // Write current-session.md
273
+ const sessionContent = this.buildBatonSession(state);
274
+ writeFileSync(join(batonDir, 'current-session.md'), sessionContent, 'utf-8');
275
+ // Write next-prompt.md — the critical continuation file
276
+ const nextPrompt = this.buildNextPrompt(state);
277
+ writeFileSync(join(batonDir, 'next-prompt.md'), nextPrompt, 'utf-8');
278
+ logger.info({ runId: state.runId, phase: state.phase }, 'Baton written');
279
+ this.eventBus.emit('autonomous.baton.written', { runId: state.runId });
280
+ }
281
+ buildBatonSession(state) {
282
+ const worklog = state.worklogState;
283
+ return `---
284
+ session_id: ${state.runId}
285
+ status: ${state.phase}
286
+ started: ${state.startedAt}
287
+ updated: ${new Date().toISOString()}
288
+ qa_passed: ${state.qaResult?.passed ?? 'unknown'}
289
+ fixes_attempted: ${state.fixResults.length}
290
+ fixes_succeeded: ${state.fixResults.filter(r => r.success).length}
291
+ errors: ${state.errors.length}
292
+ ---
293
+
294
+ # Autonomous Dev Loop: ${state.runId}
295
+
296
+ Phase: ${state.phase}
297
+ QA: ${state.qaResult?.passed ? 'PASSED' : 'FAILED'} (${state.qaResult?.passedTests}/${state.qaResult?.totalTests})
298
+ Defects Fixed: ${state.fixResults.filter(r => r.success).length}/${state.fixResults.length}
299
+ Feature: ${state.devResult ? (state.devResult.success ? 'DONE' : 'IN_PROGRESS') : 'none'}
300
+ ${worklog ? `Worklog: ${worklog.totalPending} pending, ${worklog.totalDone} done` : ''}
301
+ ${state.errors.length > 0 ? `\nErrors:\n${state.errors.map(e => `- ${e}`).join('\n')}` : ''}
302
+ `;
303
+ }
304
+ buildNextPrompt(state) {
305
+ const qaStatus = state.qaResult?.passed ? 'PASS' : 'FAIL';
306
+ const hasErrors = state.errors.length > 0;
307
+ let prompt = `---
308
+ session_id: ${state.runId}
309
+ status: ${state.phase}
310
+ next_action: ${this.determineNextAction(state)}
311
+ ---
312
+
313
+ # Autonomous Dev Loop — Next Step
314
+
315
+ Run: ${state.runId}
316
+ Phase: ${state.phase}
317
+ QA: ${qaStatus} (${state.qaResult?.passedTests ?? 0}/${state.qaResult?.totalTests ?? 0})
318
+
319
+ `;
320
+ if (hasErrors) {
321
+ prompt += `## Errors from Last Run\n${state.errors.map(e => `- ${e}`).join('\n')}\n\n`;
322
+ }
323
+ if (!state.qaResult?.passed && state.qaResult?.failures.length) {
324
+ prompt += `## Failing Tests\n`;
325
+ for (const f of state.qaResult.failures.slice(0, 5)) {
326
+ prompt += `- ${f.testName} (${f.file})\n`;
327
+ }
328
+ prompt += '\n';
329
+ }
330
+ const nextAction = this.determineNextAction(state);
331
+ prompt += `## Recommended Action\n`;
332
+ switch (nextAction) {
333
+ case 'FIX_DEFECTS':
334
+ prompt += 'QA is failing. Fix the failing tests listed above, then re-run QA.\n';
335
+ break;
336
+ case 'DEVELOP_FEATURE':
337
+ prompt += 'QA is passing. Pick the next pending task from the worklog and implement it.\n';
338
+ break;
339
+ case 'REVIEW_AND_EVOLVE':
340
+ prompt += 'Tasks complete. Run evolution loop to extract lessons from this session.\n';
341
+ break;
342
+ case 'RECOVER':
343
+ prompt += 'Last run had errors. Investigate and retry.\n';
344
+ break;
345
+ default:
346
+ prompt += 'Check worklog for next action.\n';
347
+ }
348
+ return prompt;
349
+ }
350
+ determineNextAction(state) {
351
+ if (state.errors.length > 0)
352
+ return 'RECOVER';
353
+ if (!state.qaResult?.passed)
354
+ return 'FIX_DEFECTS';
355
+ if (state.worklogState && state.worklogState.totalPending > 0)
356
+ return 'DEVELOP_FEATURE';
357
+ return 'REVIEW_AND_EVOLVE';
358
+ }
359
+ // ─────────────────────────────────────────────────────────────
360
+ // Result Builder
361
+ // ─────────────────────────────────────────────────────────────
362
+ buildResult(state, duration) {
363
+ return {
364
+ runId: state.runId,
365
+ success: state.errors.length === 0,
366
+ duration,
367
+ phase: state.phase,
368
+ qaPassed: state.qaResult?.passed ?? false,
369
+ defectsFixed: state.fixResults.filter(r => r.success).length,
370
+ featureProgressed: state.devResult?.success ?? false,
371
+ errors: state.errors,
372
+ nextAction: this.determineNextAction(state),
373
+ };
374
+ }
375
+ // ─────────────────────────────────────────────────────────────
376
+ // Accessors
377
+ // ─────────────────────────────────────────────────────────────
378
+ getConfig() { return this.config; }
379
+ getWorklogManager() { return this.worklogManager; }
380
+ }
381
+ //# sourceMappingURL=AutonomousDevLoop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutonomousDevLoop.js","sourceRoot":"","sources":["../../../src/workflow/autonomous/AutonomousDevLoop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ export type TaskType = 'bug' | 'feature' | 'refactor' | 'test' | 'fix';
2
+ export type TaskStatus = 'pending' | 'in_progress' | 'done' | 'blocked';
3
+ export type TaskPriority = 'P0' | 'P1' | 'P2';
4
+ export interface WorklogEntry {
5
+ id: string;
6
+ type: TaskType;
7
+ description: string;
8
+ status: TaskStatus;
9
+ priority: TaskPriority;
10
+ files?: string[];
11
+ notes?: string;
12
+ }
13
+ export interface WorklogState {
14
+ entries: WorklogEntry[];
15
+ lastUpdated: string;
16
+ totalDone: number;
17
+ totalPending: number;
18
+ }
19
+ export declare class WorklogManager {
20
+ private worklogPath;
21
+ constructor(worklogPath: string);
22
+ /** Read and parse the worklog file */
23
+ read(): WorklogState;
24
+ /** Parse markdown content into WorklogState */
25
+ parse(content: string): WorklogState;
26
+ /** Get next pending task by priority */
27
+ getNextTask(state: WorklogState): WorklogEntry | undefined;
28
+ /** Get all entries with a specific status */
29
+ getByStatus(state: WorklogState, status: TaskStatus): WorklogEntry[];
30
+ /** Get entries by type */
31
+ getByType(state: WorklogState, type: TaskType): WorklogEntry[];
32
+ /** Update entry status */
33
+ updateEntryStatus(state: WorklogState, entryId: string, newStatus: TaskStatus, notes?: string): WorklogState;
34
+ /** Mark entry as in_progress */
35
+ markInProgress(state: WorklogState, entryId: string): WorklogState;
36
+ /** Mark entry as done */
37
+ markDone(state: WorklogState, entryId: string, notes?: string): WorklogState;
38
+ /** Mark entry as blocked */
39
+ markBlocked(state: WorklogState, entryId: string, reason: string): WorklogState;
40
+ /** Add a new entry */
41
+ addEntry(state: WorklogState, entry: Omit<WorklogEntry, 'id'>): WorklogState;
42
+ /** Write worklog state back to markdown file */
43
+ write(state: WorklogState): void;
44
+ /** Convert state to markdown format */
45
+ toMarkdown(state: WorklogState): string;
46
+ private normalizeType;
47
+ private priorityWeight;
48
+ private recomputeState;
49
+ private createEmptyState;
50
+ }