@brad-frost-web/eddie-brain 0.32.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 (239) hide show
  1. package/README.md +109 -0
  2. package/dist/analyze/drift-detector.d.ts +30 -0
  3. package/dist/analyze/drift-detector.d.ts.map +1 -0
  4. package/dist/analyze/drift-detector.js +310 -0
  5. package/dist/analyze/drift-detector.js.map +1 -0
  6. package/dist/analyze/health-scorer.d.ts +71 -0
  7. package/dist/analyze/health-scorer.d.ts.map +1 -0
  8. package/dist/analyze/health-scorer.js +420 -0
  9. package/dist/analyze/health-scorer.js.map +1 -0
  10. package/dist/analyze/index.d.ts +11 -0
  11. package/dist/analyze/index.d.ts.map +1 -0
  12. package/dist/analyze/index.js +11 -0
  13. package/dist/analyze/index.js.map +1 -0
  14. package/dist/analyze/naming-validator.d.ts +99 -0
  15. package/dist/analyze/naming-validator.d.ts.map +1 -0
  16. package/dist/analyze/naming-validator.js +430 -0
  17. package/dist/analyze/naming-validator.js.map +1 -0
  18. package/dist/analyze/slot-contract-validator.d.ts +68 -0
  19. package/dist/analyze/slot-contract-validator.d.ts.map +1 -0
  20. package/dist/analyze/slot-contract-validator.js +232 -0
  21. package/dist/analyze/slot-contract-validator.js.map +1 -0
  22. package/dist/analyze/token-validator.d.ts +62 -0
  23. package/dist/analyze/token-validator.d.ts.map +1 -0
  24. package/dist/analyze/token-validator.js +348 -0
  25. package/dist/analyze/token-validator.js.map +1 -0
  26. package/dist/cli/brain.d.ts +12 -0
  27. package/dist/cli/brain.d.ts.map +1 -0
  28. package/dist/cli/brain.js +641 -0
  29. package/dist/cli/brain.js.map +1 -0
  30. package/dist/cli/formatters/json.d.ts +15 -0
  31. package/dist/cli/formatters/json.d.ts.map +1 -0
  32. package/dist/cli/formatters/json.js +18 -0
  33. package/dist/cli/formatters/json.js.map +1 -0
  34. package/dist/cli/formatters/terminal.d.ts +19 -0
  35. package/dist/cli/formatters/terminal.d.ts.map +1 -0
  36. package/dist/cli/formatters/terminal.js +125 -0
  37. package/dist/cli/formatters/terminal.js.map +1 -0
  38. package/dist/cli/index.d.ts +7 -0
  39. package/dist/cli/index.d.ts.map +1 -0
  40. package/dist/cli/index.js +7 -0
  41. package/dist/cli/index.js.map +1 -0
  42. package/dist/data/governance-rules.json +94 -0
  43. package/dist/governance/audit-log.d.ts +17 -0
  44. package/dist/governance/audit-log.d.ts.map +1 -0
  45. package/dist/governance/audit-log.js +44 -0
  46. package/dist/governance/audit-log.js.map +1 -0
  47. package/dist/governance/index.d.ts +8 -0
  48. package/dist/governance/index.d.ts.map +1 -0
  49. package/dist/governance/index.js +8 -0
  50. package/dist/governance/index.js.map +1 -0
  51. package/dist/governance/permissions.d.ts +26 -0
  52. package/dist/governance/permissions.d.ts.map +1 -0
  53. package/dist/governance/permissions.js +75 -0
  54. package/dist/governance/permissions.js.map +1 -0
  55. package/dist/governance/rules-engine.d.ts +24 -0
  56. package/dist/governance/rules-engine.d.ts.map +1 -0
  57. package/dist/governance/rules-engine.js +111 -0
  58. package/dist/governance/rules-engine.js.map +1 -0
  59. package/dist/governance/trust-manager.d.ts +34 -0
  60. package/dist/governance/trust-manager.d.ts.map +1 -0
  61. package/dist/governance/trust-manager.js +148 -0
  62. package/dist/governance/trust-manager.js.map +1 -0
  63. package/dist/index.d.ts +23 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +28 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/knowledge-graph/component-index.d.ts +320 -0
  68. package/dist/knowledge-graph/component-index.d.ts.map +1 -0
  69. package/dist/knowledge-graph/component-index.js +1033 -0
  70. package/dist/knowledge-graph/component-index.js.map +1 -0
  71. package/dist/knowledge-graph/index.d.ts +134 -0
  72. package/dist/knowledge-graph/index.d.ts.map +1 -0
  73. package/dist/knowledge-graph/index.js +249 -0
  74. package/dist/knowledge-graph/index.js.map +1 -0
  75. package/dist/knowledge-graph/learning-history.d.ts +77 -0
  76. package/dist/knowledge-graph/learning-history.d.ts.map +1 -0
  77. package/dist/knowledge-graph/learning-history.js +187 -0
  78. package/dist/knowledge-graph/learning-history.js.map +1 -0
  79. package/dist/knowledge-graph/relationship-map.d.ts +55 -0
  80. package/dist/knowledge-graph/relationship-map.d.ts.map +1 -0
  81. package/dist/knowledge-graph/relationship-map.js +238 -0
  82. package/dist/knowledge-graph/relationship-map.js.map +1 -0
  83. package/dist/knowledge-graph/token-taxonomy.d.ts +127 -0
  84. package/dist/knowledge-graph/token-taxonomy.d.ts.map +1 -0
  85. package/dist/knowledge-graph/token-taxonomy.js +357 -0
  86. package/dist/knowledge-graph/token-taxonomy.js.map +1 -0
  87. package/dist/loop/fix-agent.d.ts +55 -0
  88. package/dist/loop/fix-agent.d.ts.map +1 -0
  89. package/dist/loop/fix-agent.js +344 -0
  90. package/dist/loop/fix-agent.js.map +1 -0
  91. package/dist/loop/index.d.ts +8 -0
  92. package/dist/loop/index.d.ts.map +1 -0
  93. package/dist/loop/index.js +8 -0
  94. package/dist/loop/index.js.map +1 -0
  95. package/dist/loop/issue-fetcher.d.ts +51 -0
  96. package/dist/loop/issue-fetcher.d.ts.map +1 -0
  97. package/dist/loop/issue-fetcher.js +188 -0
  98. package/dist/loop/issue-fetcher.js.map +1 -0
  99. package/dist/loop/observer.d.ts +42 -0
  100. package/dist/loop/observer.d.ts.map +1 -0
  101. package/dist/loop/observer.js +220 -0
  102. package/dist/loop/observer.js.map +1 -0
  103. package/dist/loop/pacer.d.ts +44 -0
  104. package/dist/loop/pacer.d.ts.map +1 -0
  105. package/dist/loop/pacer.js +90 -0
  106. package/dist/loop/pacer.js.map +1 -0
  107. package/dist/loop/reporter.d.ts +9 -0
  108. package/dist/loop/reporter.d.ts.map +1 -0
  109. package/dist/loop/reporter.js +119 -0
  110. package/dist/loop/reporter.js.map +1 -0
  111. package/dist/loop/runner.d.ts +57 -0
  112. package/dist/loop/runner.d.ts.map +1 -0
  113. package/dist/loop/runner.js +390 -0
  114. package/dist/loop/runner.js.map +1 -0
  115. package/dist/loop/types.d.ts +151 -0
  116. package/dist/loop/types.d.ts.map +1 -0
  117. package/dist/loop/types.js +22 -0
  118. package/dist/loop/types.js.map +1 -0
  119. package/dist/mcp/index.d.ts +7 -0
  120. package/dist/mcp/index.d.ts.map +1 -0
  121. package/dist/mcp/index.js +7 -0
  122. package/dist/mcp/index.js.map +1 -0
  123. package/dist/mcp/server.d.ts +12 -0
  124. package/dist/mcp/server.d.ts.map +1 -0
  125. package/dist/mcp/server.js +618 -0
  126. package/dist/mcp/server.js.map +1 -0
  127. package/dist/pipeline/agent-runner.d.ts +34 -0
  128. package/dist/pipeline/agent-runner.d.ts.map +1 -0
  129. package/dist/pipeline/agent-runner.js +323 -0
  130. package/dist/pipeline/agent-runner.js.map +1 -0
  131. package/dist/pipeline/agents/accessibility-auditor.d.ts +10 -0
  132. package/dist/pipeline/agents/accessibility-auditor.d.ts.map +1 -0
  133. package/dist/pipeline/agents/accessibility-auditor.js +69 -0
  134. package/dist/pipeline/agents/accessibility-auditor.js.map +1 -0
  135. package/dist/pipeline/agents/code-reviewer.d.ts +10 -0
  136. package/dist/pipeline/agents/code-reviewer.d.ts.map +1 -0
  137. package/dist/pipeline/agents/code-reviewer.js +75 -0
  138. package/dist/pipeline/agents/code-reviewer.js.map +1 -0
  139. package/dist/pipeline/agents/code-writer.d.ts +10 -0
  140. package/dist/pipeline/agents/code-writer.d.ts.map +1 -0
  141. package/dist/pipeline/agents/code-writer.js +103 -0
  142. package/dist/pipeline/agents/code-writer.js.map +1 -0
  143. package/dist/pipeline/agents/component-architect.d.ts +13 -0
  144. package/dist/pipeline/agents/component-architect.d.ts.map +1 -0
  145. package/dist/pipeline/agents/component-architect.js +81 -0
  146. package/dist/pipeline/agents/component-architect.js.map +1 -0
  147. package/dist/pipeline/agents/index.d.ts +16 -0
  148. package/dist/pipeline/agents/index.d.ts.map +1 -0
  149. package/dist/pipeline/agents/index.js +24 -0
  150. package/dist/pipeline/agents/index.js.map +1 -0
  151. package/dist/pipeline/agents/library-researcher.d.ts +12 -0
  152. package/dist/pipeline/agents/library-researcher.d.ts.map +1 -0
  153. package/dist/pipeline/agents/library-researcher.js +85 -0
  154. package/dist/pipeline/agents/library-researcher.js.map +1 -0
  155. package/dist/pipeline/agents/quality-gate.d.ts +9 -0
  156. package/dist/pipeline/agents/quality-gate.d.ts.map +1 -0
  157. package/dist/pipeline/agents/quality-gate.js +71 -0
  158. package/dist/pipeline/agents/quality-gate.js.map +1 -0
  159. package/dist/pipeline/agents/spec-analyst.d.ts +10 -0
  160. package/dist/pipeline/agents/spec-analyst.d.ts.map +1 -0
  161. package/dist/pipeline/agents/spec-analyst.js +72 -0
  162. package/dist/pipeline/agents/spec-analyst.js.map +1 -0
  163. package/dist/pipeline/agents/story-author.d.ts +9 -0
  164. package/dist/pipeline/agents/story-author.d.ts.map +1 -0
  165. package/dist/pipeline/agents/story-author.js +65 -0
  166. package/dist/pipeline/agents/story-author.js.map +1 -0
  167. package/dist/pipeline/artifact-store.d.ts +27 -0
  168. package/dist/pipeline/artifact-store.d.ts.map +1 -0
  169. package/dist/pipeline/artifact-store.js +77 -0
  170. package/dist/pipeline/artifact-store.js.map +1 -0
  171. package/dist/pipeline/conversational-gate.d.ts +26 -0
  172. package/dist/pipeline/conversational-gate.d.ts.map +1 -0
  173. package/dist/pipeline/conversational-gate.js +122 -0
  174. package/dist/pipeline/conversational-gate.js.map +1 -0
  175. package/dist/pipeline/index.d.ts +14 -0
  176. package/dist/pipeline/index.d.ts.map +1 -0
  177. package/dist/pipeline/index.js +17 -0
  178. package/dist/pipeline/index.js.map +1 -0
  179. package/dist/pipeline/iteration-tracker.d.ts +29 -0
  180. package/dist/pipeline/iteration-tracker.d.ts.map +1 -0
  181. package/dist/pipeline/iteration-tracker.js +102 -0
  182. package/dist/pipeline/iteration-tracker.js.map +1 -0
  183. package/dist/pipeline/learning-bridge.d.ts +37 -0
  184. package/dist/pipeline/learning-bridge.d.ts.map +1 -0
  185. package/dist/pipeline/learning-bridge.js +118 -0
  186. package/dist/pipeline/learning-bridge.js.map +1 -0
  187. package/dist/pipeline/orchestrator.d.ts +45 -0
  188. package/dist/pipeline/orchestrator.d.ts.map +1 -0
  189. package/dist/pipeline/orchestrator.js +473 -0
  190. package/dist/pipeline/orchestrator.js.map +1 -0
  191. package/dist/pipeline/templates/architecture.d.ts +27 -0
  192. package/dist/pipeline/templates/architecture.d.ts.map +1 -0
  193. package/dist/pipeline/templates/architecture.js +111 -0
  194. package/dist/pipeline/templates/architecture.js.map +1 -0
  195. package/dist/pipeline/templates/brief.d.ts +22 -0
  196. package/dist/pipeline/templates/brief.d.ts.map +1 -0
  197. package/dist/pipeline/templates/brief.js +121 -0
  198. package/dist/pipeline/templates/brief.js.map +1 -0
  199. package/dist/pipeline/templates/component-rules.d.ts +25 -0
  200. package/dist/pipeline/templates/component-rules.d.ts.map +1 -0
  201. package/dist/pipeline/templates/component-rules.js +93 -0
  202. package/dist/pipeline/templates/component-rules.js.map +1 -0
  203. package/dist/pipeline/templates/index.d.ts +9 -0
  204. package/dist/pipeline/templates/index.d.ts.map +1 -0
  205. package/dist/pipeline/templates/index.js +7 -0
  206. package/dist/pipeline/templates/index.js.map +1 -0
  207. package/dist/pipeline/tool-handler.d.ts +25 -0
  208. package/dist/pipeline/tool-handler.d.ts.map +1 -0
  209. package/dist/pipeline/tool-handler.js +392 -0
  210. package/dist/pipeline/tool-handler.js.map +1 -0
  211. package/dist/pipeline/types.d.ts +146 -0
  212. package/dist/pipeline/types.d.ts.map +1 -0
  213. package/dist/pipeline/types.js +27 -0
  214. package/dist/pipeline/types.js.map +1 -0
  215. package/dist/plan/action-types.d.ts +31 -0
  216. package/dist/plan/action-types.d.ts.map +1 -0
  217. package/dist/plan/action-types.js +83 -0
  218. package/dist/plan/action-types.js.map +1 -0
  219. package/dist/plan/decision-engine.d.ts +57 -0
  220. package/dist/plan/decision-engine.d.ts.map +1 -0
  221. package/dist/plan/decision-engine.js +162 -0
  222. package/dist/plan/decision-engine.js.map +1 -0
  223. package/dist/plan/index.d.ts +6 -0
  224. package/dist/plan/index.d.ts.map +1 -0
  225. package/dist/plan/index.js +6 -0
  226. package/dist/plan/index.js.map +1 -0
  227. package/dist/types.d.ts +351 -0
  228. package/dist/types.d.ts.map +1 -0
  229. package/dist/types.js +26 -0
  230. package/dist/types.js.map +1 -0
  231. package/dist/utils/anthropic.d.ts +15 -0
  232. package/dist/utils/anthropic.d.ts.map +1 -0
  233. package/dist/utils/anthropic.js +40 -0
  234. package/dist/utils/anthropic.js.map +1 -0
  235. package/dist/utils/id.d.ts +8 -0
  236. package/dist/utils/id.d.ts.map +1 -0
  237. package/dist/utils/id.js +14 -0
  238. package/dist/utils/id.js.map +1 -0
  239. package/package.json +80 -0
@@ -0,0 +1,390 @@
1
+ /**
2
+ * LoopRunner — Main orchestrator for the autonomous loop.
3
+ *
4
+ * Cycles through lap types (A: violation fixes, B: fidelity tests),
5
+ * manages git branches, persists state for resumability, and
6
+ * generates reports at the end.
7
+ */
8
+ import { execSync } from 'child_process';
9
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
10
+ import { join } from 'path';
11
+ import chalk from 'chalk';
12
+ import { LAP_TYPE_LABELS } from './types.js';
13
+ import { Pacer } from './pacer.js';
14
+ import { IssueFetcher } from './issue-fetcher.js';
15
+ import { FixAgent } from './fix-agent.js';
16
+ import { Observer } from './observer.js';
17
+ import { generateReport } from './reporter.js';
18
+ const STATE_FILE = 'loop-state.json';
19
+ const REPORTS_DIR = 'loop-reports';
20
+ export class LoopRunner {
21
+ config;
22
+ knowledgeGraph;
23
+ pacer;
24
+ issueFetcher;
25
+ fixAgent;
26
+ observer;
27
+ state;
28
+ brainDir;
29
+ constructor(config, knowledgeGraph) {
30
+ this.config = config;
31
+ this.knowledgeGraph = knowledgeGraph;
32
+ this.pacer = new Pacer();
33
+ this.issueFetcher = new IssueFetcher(config.rootDir);
34
+ this.fixAgent = new FixAgent(config.apiKey, config.model, config.rootDir, knowledgeGraph, this.pacer);
35
+ this.observer = new Observer(config.apiKey, config.model, config.rootDir, this.pacer);
36
+ this.brainDir = join(config.rootDir, '.eddie-brain');
37
+ this.state = this.createInitialState();
38
+ }
39
+ /**
40
+ * Run the autonomous loop.
41
+ */
42
+ /** Track fixes since last PR for chunking */
43
+ fixesSinceLastPr = 0;
44
+ prCount = 0;
45
+ async run() {
46
+ const startTime = Date.now();
47
+ // Resume from saved state if requested
48
+ if (this.config.resume) {
49
+ const loaded = this.loadState();
50
+ if (loaded) {
51
+ this.state = loaded;
52
+ console.log(chalk.blue(`Resuming from saved state (${this.state.completedLaps.length} laps completed)`));
53
+ }
54
+ }
55
+ // Print header
56
+ this.printHeader();
57
+ // Dry run — just show the plan
58
+ if (this.config.dryRun) {
59
+ await this.dryRun();
60
+ return;
61
+ }
62
+ // Create git branch
63
+ this.setupGitBranch();
64
+ // Main loop
65
+ let lapNumber = this.state.completedLaps.length + 1;
66
+ while (!this.pacer.shouldStop(startTime, this.config.maxHours)) {
67
+ const lapType = this.selectNextLapType();
68
+ if (!lapType) {
69
+ console.log(chalk.yellow('No more work to do. Stopping.'));
70
+ break;
71
+ }
72
+ console.log(chalk.blue.bold(`\n━━━ Lap ${lapNumber} — ${LAP_TYPE_LABELS[lapType]} ━━━`));
73
+ const lapStart = Date.now();
74
+ let result;
75
+ try {
76
+ result = await this.executeLap(lapType, lapNumber);
77
+ }
78
+ catch (err) {
79
+ result = {
80
+ type: lapType,
81
+ lapNumber,
82
+ durationMs: Date.now() - lapStart,
83
+ success: false,
84
+ summary: `Lap failed: ${err instanceof Error ? err.message : String(err)}`,
85
+ error: err instanceof Error ? err.message : String(err),
86
+ };
87
+ }
88
+ this.state.completedLaps.push(result);
89
+ this.saveState();
90
+ console.log(chalk.gray(` Lap ${lapNumber} completed in ${Math.round(result.durationMs / 1000)}s — ${result.summary}`));
91
+ // Stop if no more issues to process (don't spin for hours on empty laps)
92
+ if (result.summary === 'No more violation issues to process') {
93
+ console.log(chalk.yellow('\nAll issues processed. Stopping loop.'));
94
+ break;
95
+ }
96
+ // Observe files for improvement opportunities and file GitHub issues
97
+ if (result.fixes && result.fixes.some(f => f.success)) {
98
+ try {
99
+ await this.pacer.waitBetweenApiCalls();
100
+ const observations = await this.observer.observe(result.fixes);
101
+ if (observations.length > 0) {
102
+ await this.observer.fileIssues(observations);
103
+ result.observations = observations;
104
+ }
105
+ }
106
+ catch (err) {
107
+ console.log(chalk.yellow(` Observer error: ${err instanceof Error ? err.message : String(err)}`));
108
+ }
109
+ }
110
+ // Track fixes for PR chunking
111
+ const lapFixes = (result.fixes ?? []).filter(f => f.success).length;
112
+ this.fixesSinceLastPr += lapFixes;
113
+ // Create a PR chunk if we've hit the threshold
114
+ if (this.config.createPr && this.config.chunkSize > 0 && this.fixesSinceLastPr >= this.config.chunkSize) {
115
+ await this.createChunkedPr();
116
+ }
117
+ lapNumber++;
118
+ // Cooldown between laps
119
+ if (!this.pacer.shouldStop(startTime, this.config.maxHours)) {
120
+ await this.pacer.waitBetweenLaps();
121
+ }
122
+ }
123
+ // Generate report
124
+ const report = generateReport(this.state, this.config);
125
+ this.saveReport(report);
126
+ // Create final PR for any remaining fixes
127
+ if (this.config.createPr && this.fixesSinceLastPr > 0 && this.hasCommits()) {
128
+ await this.createChunkedPr();
129
+ }
130
+ // Print summary
131
+ const totalLaps = this.state.completedLaps.length;
132
+ const totalFixes = this.state.completedLaps
133
+ .flatMap(l => l.fixes ?? [])
134
+ .filter(f => f.success).length;
135
+ const durationMin = Math.round((Date.now() - startTime) / 60_000);
136
+ console.log(chalk.green.bold(`\n✓ Loop complete — ${totalLaps} laps, ${totalFixes} fixes in ${durationMin} minutes`));
137
+ }
138
+ /**
139
+ * Execute a single lap.
140
+ */
141
+ async executeLap(type, lapNumber) {
142
+ switch (type) {
143
+ case 'A':
144
+ return this.executeViolationFixLap(lapNumber);
145
+ case 'B':
146
+ return this.executeFidelityLap(lapNumber);
147
+ case 'C':
148
+ case 'D':
149
+ return {
150
+ type,
151
+ lapNumber,
152
+ durationMs: 0,
153
+ success: true,
154
+ summary: `Type ${type} (${LAP_TYPE_LABELS[type]}) not yet implemented — skipped`,
155
+ };
156
+ }
157
+ }
158
+ /**
159
+ * Type A: Fix violation issues.
160
+ */
161
+ async executeViolationFixLap(lapNumber) {
162
+ const lapStart = Date.now();
163
+ const batch = await this.issueFetcher.getNextBatch(this.config.issuesPerLap, this.state.processedIssues);
164
+ if (batch.length === 0) {
165
+ return {
166
+ type: 'A',
167
+ lapNumber,
168
+ durationMs: Date.now() - lapStart,
169
+ success: true,
170
+ summary: 'No more violation issues to process',
171
+ };
172
+ }
173
+ console.log(chalk.cyan(` Processing ${batch.length} issue(s)...`));
174
+ const fixes = [];
175
+ for (const issue of batch) {
176
+ const result = await this.fixAgent.fix(issue);
177
+ fixes.push(result);
178
+ this.state.processedIssues.push(issue.number);
179
+ // Cooldown between fixes
180
+ await this.pacer.waitBetweenApiCalls();
181
+ }
182
+ // Commit successful fixes
183
+ const successCount = fixes.filter(f => f.success).length;
184
+ if (successCount > 0) {
185
+ this.commitFixes(fixes.filter(f => f.success));
186
+ }
187
+ const summary = `${successCount}/${batch.length} violations fixed`;
188
+ return {
189
+ type: 'A',
190
+ lapNumber,
191
+ durationMs: Date.now() - lapStart,
192
+ success: successCount > 0,
193
+ summary,
194
+ fixes,
195
+ };
196
+ }
197
+ /**
198
+ * Type B: Pipeline fidelity test.
199
+ */
200
+ async executeFidelityLap(lapNumber) {
201
+ // Stub for v1 — will integrate PipelineOrchestrator later
202
+ return {
203
+ type: 'B',
204
+ lapNumber,
205
+ durationMs: 0,
206
+ success: true,
207
+ summary: 'Type B (Pipeline Fidelity) — stubbed for v1',
208
+ };
209
+ }
210
+ /**
211
+ * Select the next lap type using round-robin.
212
+ */
213
+ selectNextLapType() {
214
+ const enabled = this.config.enabledTypes;
215
+ if (enabled.length === 0)
216
+ return null;
217
+ // Simple round-robin
218
+ const type = enabled[this.state.lapTypeIndex % enabled.length];
219
+ this.state.lapTypeIndex++;
220
+ return type;
221
+ }
222
+ // ===========================================================================
223
+ // Git Operations
224
+ // ===========================================================================
225
+ setupGitBranch() {
226
+ const branch = this.state.branch;
227
+ try {
228
+ // Check if branch already exists (resume case)
229
+ const currentBranch = execSync('git branch --show-current', {
230
+ cwd: this.config.rootDir,
231
+ encoding: 'utf-8',
232
+ }).trim();
233
+ if (currentBranch === branch) {
234
+ console.log(chalk.gray(` Already on branch ${branch}`));
235
+ return;
236
+ }
237
+ // Check if branch exists
238
+ try {
239
+ execSync(`git show-ref --verify --quiet refs/heads/${branch}`, {
240
+ cwd: this.config.rootDir,
241
+ });
242
+ // Branch exists, check it out
243
+ execSync(`git checkout ${branch}`, { cwd: this.config.rootDir });
244
+ console.log(chalk.gray(` Checked out existing branch ${branch}`));
245
+ }
246
+ catch {
247
+ // Branch doesn't exist, create it
248
+ execSync(`git checkout -b ${branch}`, { cwd: this.config.rootDir });
249
+ console.log(chalk.gray(` Created branch ${branch}`));
250
+ }
251
+ }
252
+ catch (err) {
253
+ console.log(chalk.yellow(` Git branch setup warning: ${err instanceof Error ? err.message : String(err)}`));
254
+ }
255
+ }
256
+ commitFixes(fixes) {
257
+ try {
258
+ const files = fixes.map(f => f.filePath);
259
+ execSync(`git add ${files.map(f => `"${f}"`).join(' ')}`, {
260
+ cwd: this.config.rootDir,
261
+ });
262
+ const issueRefs = fixes.map(f => `#${f.issueNumber}`).join(', ');
263
+ const message = `fix(violations): resolve ${fixes.length} eddie-brain violation(s)\n\nIssues: ${issueRefs}`;
264
+ execSync(`git commit -m "${message}"`, {
265
+ cwd: this.config.rootDir,
266
+ });
267
+ console.log(chalk.green(` Committed ${fixes.length} fix(es)`));
268
+ }
269
+ catch (err) {
270
+ console.log(chalk.yellow(` Git commit warning: ${err instanceof Error ? err.message : String(err)}`));
271
+ }
272
+ }
273
+ hasCommits() {
274
+ try {
275
+ const log = execSync(`git log --oneline HEAD...HEAD~1 2>/dev/null`, {
276
+ cwd: this.config.rootDir,
277
+ encoding: 'utf-8',
278
+ });
279
+ return log.trim().length > 0;
280
+ }
281
+ catch {
282
+ return false;
283
+ }
284
+ }
285
+ /**
286
+ * Create a chunked PR: push current branch, create PR to dev, then start a new branch.
287
+ */
288
+ async createChunkedPr() {
289
+ this.prCount++;
290
+ const fixCount = this.fixesSinceLastPr;
291
+ // Collect the fix details for this chunk from recent laps
292
+ const recentFixes = this.state.completedLaps
293
+ .flatMap(l => l.fixes ?? [])
294
+ .filter(f => f.success)
295
+ .slice(-fixCount);
296
+ const issueList = recentFixes.map(f => `- #${f.issueNumber} \`${f.filePath}\``).join('\n');
297
+ try {
298
+ // Push current branch
299
+ execSync(`git push -u origin ${this.state.branch}`, {
300
+ cwd: this.config.rootDir,
301
+ stdio: 'pipe',
302
+ });
303
+ // Create PR targeting dev
304
+ const title = `fix(violations): eddie-brain loop batch ${this.prCount} (${fixCount} fixes)`;
305
+ const body = `## Automated violation fixes — Batch ${this.prCount}\n\n${fixCount} violations fixed:\n\n${issueList}\n\n🤖 Generated by eddie-brain autonomous loop`;
306
+ const prUrl = execSync(`gh pr create --base dev --title "${title}" --body "${body.replace(/"/g, '\\"')}"`, { cwd: this.config.rootDir, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
307
+ console.log(chalk.green.bold(`\n ✓ PR created: ${prUrl}`));
308
+ // Start a new branch from current HEAD for the next chunk
309
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
310
+ const newBranch = `eddie-brain/loop-${timestamp}`;
311
+ execSync(`git checkout -b ${newBranch}`, { cwd: this.config.rootDir, stdio: 'pipe' });
312
+ this.state.branch = newBranch;
313
+ this.fixesSinceLastPr = 0;
314
+ this.saveState();
315
+ console.log(chalk.gray(` Continuing on new branch ${newBranch}\n`));
316
+ }
317
+ catch (err) {
318
+ console.log(chalk.yellow(` PR creation warning: ${err instanceof Error ? err.message : String(err)}`));
319
+ }
320
+ }
321
+ // ===========================================================================
322
+ // State Persistence
323
+ // ===========================================================================
324
+ createInitialState() {
325
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
326
+ return {
327
+ startedAt: new Date().toISOString(),
328
+ branch: this.config.branch || `eddie-brain/loop-${timestamp}`,
329
+ completedLaps: [],
330
+ processedIssues: [],
331
+ testedComponents: [],
332
+ lapTypeIndex: 0,
333
+ totalApiCalls: 0,
334
+ };
335
+ }
336
+ saveState() {
337
+ const statePath = join(this.brainDir, STATE_FILE);
338
+ writeFileSync(statePath, JSON.stringify(this.state, null, 2), 'utf-8');
339
+ }
340
+ loadState() {
341
+ const statePath = join(this.brainDir, STATE_FILE);
342
+ if (!existsSync(statePath))
343
+ return null;
344
+ try {
345
+ return JSON.parse(readFileSync(statePath, 'utf-8'));
346
+ }
347
+ catch {
348
+ return null;
349
+ }
350
+ }
351
+ saveReport(report) {
352
+ const reportsDir = join(this.brainDir, REPORTS_DIR);
353
+ if (!existsSync(reportsDir)) {
354
+ mkdirSync(reportsDir, { recursive: true });
355
+ }
356
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
357
+ const reportPath = join(reportsDir, `report-${timestamp}.md`);
358
+ writeFileSync(reportPath, report, 'utf-8');
359
+ console.log(chalk.gray(` Report saved to ${reportPath}`));
360
+ }
361
+ // ===========================================================================
362
+ // Display
363
+ // ===========================================================================
364
+ printHeader() {
365
+ console.log(chalk.blue.bold('\n🧠 Eddie\'s Brain — Autonomous Loop'));
366
+ console.log(chalk.gray(` Max runtime: ${this.config.maxHours}h`));
367
+ console.log(chalk.gray(` Lap types: ${this.config.enabledTypes.map(t => `${t} (${LAP_TYPE_LABELS[t]})`).join(', ')}`));
368
+ console.log(chalk.gray(` Branch: ${this.state.branch}`));
369
+ console.log(chalk.gray(` Model: ${this.config.model}`));
370
+ if (this.config.dryRun)
371
+ console.log(chalk.yellow(' DRY RUN — no changes will be made'));
372
+ console.log('');
373
+ }
374
+ async dryRun() {
375
+ console.log(chalk.cyan('Fetching issues...'));
376
+ const issues = await this.issueFetcher.getNextBatch(50, []);
377
+ console.log(chalk.cyan(`\nFound ${issues.length} violation issues to process:\n`));
378
+ for (const issue of issues) {
379
+ const severity = issue.violations.some(v => v.severity === 'error') ? '◆' : '▲';
380
+ console.log(` ${severity} #${issue.number} — ${issue.filePath} (${issue.violations.length} violation(s))`);
381
+ for (const v of issue.violations) {
382
+ console.log(chalk.gray(` Line ${v.line}: ${v.description}`));
383
+ }
384
+ }
385
+ const estimatedLaps = Math.ceil(issues.length / this.config.issuesPerLap);
386
+ const estimatedMinutes = estimatedLaps * 2; // ~2 min per lap including cooldowns
387
+ console.log(chalk.cyan(`\nEstimate: ${estimatedLaps} laps, ~${estimatedMinutes} minutes to process all`));
388
+ }
389
+ }
390
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/loop/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Type definitions for the autonomous loop system.
3
+ */
4
+ /** Lap type determines what work a lap performs */
5
+ export type LapType = 'A' | 'B' | 'C' | 'D';
6
+ /** Human-readable descriptions for lap types */
7
+ export declare const LAP_TYPE_LABELS: Record<LapType, string>;
8
+ export interface LoopConfig {
9
+ /** Anthropic API key */
10
+ apiKey: string;
11
+ /** Model to use for fix-agent calls */
12
+ model: string;
13
+ /** Path to Eddie monorepo root */
14
+ rootDir: string;
15
+ /** Maximum runtime in hours */
16
+ maxHours: number;
17
+ /** Enabled lap types */
18
+ enabledTypes: LapType[];
19
+ /** Git branch name (auto-generated if not provided) */
20
+ branch?: string;
21
+ /** Create PR at the end */
22
+ createPr: boolean;
23
+ /** Dry run — show plan without executing */
24
+ dryRun: boolean;
25
+ /** Resume from saved state */
26
+ resume: boolean;
27
+ /** Issues per Type A lap */
28
+ issuesPerLap: number;
29
+ /** Fixes per PR chunk (0 = single PR at end) */
30
+ chunkSize: number;
31
+ }
32
+ export declare const DEFAULT_LOOP_CONFIG: Omit<LoopConfig, 'apiKey'>;
33
+ export interface Violation {
34
+ line: number;
35
+ severity: 'error' | 'warning';
36
+ description: string;
37
+ }
38
+ export interface ViolationIssue {
39
+ /** GitHub issue number */
40
+ number: number;
41
+ /** File path relative to repo root */
42
+ filePath: string;
43
+ /** Parsed violations */
44
+ violations: Violation[];
45
+ /** Fix instructions from the issue body */
46
+ fixInstructions: string[];
47
+ /** Labels on the issue */
48
+ labels: string[];
49
+ }
50
+ export interface FixAttempt {
51
+ /** GitHub issue number */
52
+ issueNumber: number;
53
+ /** File path */
54
+ filePath: string;
55
+ /** Number of violations targeted */
56
+ violationCount: number;
57
+ /** Whether the fix was successful */
58
+ success: boolean;
59
+ /** Remaining violations after fix (0 = clean) */
60
+ remainingViolations: number;
61
+ /** Error message if fix failed */
62
+ error?: string;
63
+ /** Whether this was identified as a false positive */
64
+ falsePositive?: boolean;
65
+ }
66
+ export interface Observation {
67
+ /** Short title for the GitHub issue */
68
+ title: string;
69
+ /** Detailed description */
70
+ body: string;
71
+ /** Labels to apply */
72
+ labels: string[];
73
+ /** Related file path */
74
+ filePath?: string;
75
+ /** GitHub issue number once filed */
76
+ issueFiled?: number;
77
+ }
78
+ export interface FidelityResult {
79
+ /** Component name */
80
+ componentName: string;
81
+ /** Overall fidelity score (0-5) */
82
+ score: number;
83
+ /** Per-dimension scores */
84
+ dimensions: {
85
+ imports: number;
86
+ classStructure: number;
87
+ propertyApi: number;
88
+ renderMethod: number;
89
+ scss: number;
90
+ registration: number;
91
+ };
92
+ /** Timestamp */
93
+ timestamp: string;
94
+ }
95
+ export interface LapResult {
96
+ /** Which lap type was run */
97
+ type: LapType;
98
+ /** Lap number (1-indexed) */
99
+ lapNumber: number;
100
+ /** Duration in ms */
101
+ durationMs: number;
102
+ /** Whether the lap completed successfully */
103
+ success: boolean;
104
+ /** Summary of what happened */
105
+ summary: string;
106
+ /** Fix attempts (Type A) */
107
+ fixes?: FixAttempt[];
108
+ /** Observations filed as GitHub issues */
109
+ observations?: Observation[];
110
+ /** Fidelity result (Type B) */
111
+ fidelity?: FidelityResult;
112
+ /** Error if lap failed */
113
+ error?: string;
114
+ }
115
+ export interface LoopState {
116
+ /** Start timestamp */
117
+ startedAt: string;
118
+ /** Git branch name */
119
+ branch: string;
120
+ /** Completed laps */
121
+ completedLaps: LapResult[];
122
+ /** Issue numbers that have been processed (fixed or skipped) */
123
+ processedIssues: number[];
124
+ /** Components that have been fidelity-tested */
125
+ testedComponents: string[];
126
+ /** Current lap type index for round-robin */
127
+ lapTypeIndex: number;
128
+ /** Total API calls made */
129
+ totalApiCalls: number;
130
+ }
131
+ export interface LoopReport {
132
+ /** Duration of the session */
133
+ durationMs: number;
134
+ /** Total laps completed */
135
+ totalLaps: number;
136
+ /** Laps by type */
137
+ lapsByType: Record<LapType, number>;
138
+ /** Total violations fixed */
139
+ totalFixed: number;
140
+ /** Total false positives identified */
141
+ totalFalsePositives: number;
142
+ /** Total errors encountered */
143
+ totalErrors: number;
144
+ /** Fidelity scores */
145
+ fidelityScores: FidelityResult[];
146
+ /** Issues remaining */
147
+ remainingIssueCount: number;
148
+ /** All lap results */
149
+ laps: LapResult[];
150
+ }
151
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/loop/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Type definitions for the autonomous loop system.
3
+ */
4
+ /** Human-readable descriptions for lap types */
5
+ export const LAP_TYPE_LABELS = {
6
+ A: 'Violation Fix',
7
+ B: 'Pipeline Fidelity',
8
+ C: 'Architecture Exploration',
9
+ D: 'Pipeline Self-Improvement',
10
+ };
11
+ export const DEFAULT_LOOP_CONFIG = {
12
+ model: 'claude-sonnet-4-20250514',
13
+ rootDir: '.',
14
+ maxHours: 4,
15
+ enabledTypes: ['A', 'B'],
16
+ createPr: false,
17
+ dryRun: false,
18
+ resume: false,
19
+ issuesPerLap: 5,
20
+ chunkSize: 7,
21
+ };
22
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/loop/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,gDAAgD;AAChD,MAAM,CAAC,MAAM,eAAe,GAA4B;IACtD,CAAC,EAAE,eAAe;IAClB,CAAC,EAAE,mBAAmB;IACtB,CAAC,EAAE,0BAA0B;IAC7B,CAAC,EAAE,2BAA2B;CAC/B,CAAC;AA+BF,MAAM,CAAC,MAAM,mBAAmB,GAA+B;IAC7D,KAAK,EAAE,0BAA0B;IACjC,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,CAAC;IACX,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,QAAQ,EAAE,KAAK;IACf,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,KAAK;IACb,YAAY,EAAE,CAAC;IACf,SAAS,EAAE,CAAC;CACb,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Eddie's Brain MCP Server
3
+ *
4
+ * Re-exports the MCP server for external use.
5
+ */
6
+ export { main } from './server.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Eddie's Brain MCP Server
3
+ *
4
+ * Re-exports the MCP server for external use.
5
+ */
6
+ export { main } from './server.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Eddie's Brain MCP Server
4
+ *
5
+ * Exposes Eddie's Brain capabilities to AI agents via the Model Context Protocol.
6
+ * Runs over stdio so Claude Code, Cursor, etc. can connect directly.
7
+ */
8
+ /**
9
+ * Initialize and start the MCP server
10
+ */
11
+ export declare function main(): Promise<void>;
12
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAaH;;GAEG;AACH,wBAAsB,IAAI,kBAqtBzB"}