@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.
- package/README.md +109 -0
- package/dist/analyze/drift-detector.d.ts +30 -0
- package/dist/analyze/drift-detector.d.ts.map +1 -0
- package/dist/analyze/drift-detector.js +310 -0
- package/dist/analyze/drift-detector.js.map +1 -0
- package/dist/analyze/health-scorer.d.ts +71 -0
- package/dist/analyze/health-scorer.d.ts.map +1 -0
- package/dist/analyze/health-scorer.js +420 -0
- package/dist/analyze/health-scorer.js.map +1 -0
- package/dist/analyze/index.d.ts +11 -0
- package/dist/analyze/index.d.ts.map +1 -0
- package/dist/analyze/index.js +11 -0
- package/dist/analyze/index.js.map +1 -0
- package/dist/analyze/naming-validator.d.ts +99 -0
- package/dist/analyze/naming-validator.d.ts.map +1 -0
- package/dist/analyze/naming-validator.js +430 -0
- package/dist/analyze/naming-validator.js.map +1 -0
- package/dist/analyze/slot-contract-validator.d.ts +68 -0
- package/dist/analyze/slot-contract-validator.d.ts.map +1 -0
- package/dist/analyze/slot-contract-validator.js +232 -0
- package/dist/analyze/slot-contract-validator.js.map +1 -0
- package/dist/analyze/token-validator.d.ts +62 -0
- package/dist/analyze/token-validator.d.ts.map +1 -0
- package/dist/analyze/token-validator.js +348 -0
- package/dist/analyze/token-validator.js.map +1 -0
- package/dist/cli/brain.d.ts +12 -0
- package/dist/cli/brain.d.ts.map +1 -0
- package/dist/cli/brain.js +641 -0
- package/dist/cli/brain.js.map +1 -0
- package/dist/cli/formatters/json.d.ts +15 -0
- package/dist/cli/formatters/json.d.ts.map +1 -0
- package/dist/cli/formatters/json.js +18 -0
- package/dist/cli/formatters/json.js.map +1 -0
- package/dist/cli/formatters/terminal.d.ts +19 -0
- package/dist/cli/formatters/terminal.d.ts.map +1 -0
- package/dist/cli/formatters/terminal.js +125 -0
- package/dist/cli/formatters/terminal.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +7 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/data/governance-rules.json +94 -0
- package/dist/governance/audit-log.d.ts +17 -0
- package/dist/governance/audit-log.d.ts.map +1 -0
- package/dist/governance/audit-log.js +44 -0
- package/dist/governance/audit-log.js.map +1 -0
- package/dist/governance/index.d.ts +8 -0
- package/dist/governance/index.d.ts.map +1 -0
- package/dist/governance/index.js +8 -0
- package/dist/governance/index.js.map +1 -0
- package/dist/governance/permissions.d.ts +26 -0
- package/dist/governance/permissions.d.ts.map +1 -0
- package/dist/governance/permissions.js +75 -0
- package/dist/governance/permissions.js.map +1 -0
- package/dist/governance/rules-engine.d.ts +24 -0
- package/dist/governance/rules-engine.d.ts.map +1 -0
- package/dist/governance/rules-engine.js +111 -0
- package/dist/governance/rules-engine.js.map +1 -0
- package/dist/governance/trust-manager.d.ts +34 -0
- package/dist/governance/trust-manager.d.ts.map +1 -0
- package/dist/governance/trust-manager.js +148 -0
- package/dist/governance/trust-manager.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge-graph/component-index.d.ts +320 -0
- package/dist/knowledge-graph/component-index.d.ts.map +1 -0
- package/dist/knowledge-graph/component-index.js +1033 -0
- package/dist/knowledge-graph/component-index.js.map +1 -0
- package/dist/knowledge-graph/index.d.ts +134 -0
- package/dist/knowledge-graph/index.d.ts.map +1 -0
- package/dist/knowledge-graph/index.js +249 -0
- package/dist/knowledge-graph/index.js.map +1 -0
- package/dist/knowledge-graph/learning-history.d.ts +77 -0
- package/dist/knowledge-graph/learning-history.d.ts.map +1 -0
- package/dist/knowledge-graph/learning-history.js +187 -0
- package/dist/knowledge-graph/learning-history.js.map +1 -0
- package/dist/knowledge-graph/relationship-map.d.ts +55 -0
- package/dist/knowledge-graph/relationship-map.d.ts.map +1 -0
- package/dist/knowledge-graph/relationship-map.js +238 -0
- package/dist/knowledge-graph/relationship-map.js.map +1 -0
- package/dist/knowledge-graph/token-taxonomy.d.ts +127 -0
- package/dist/knowledge-graph/token-taxonomy.d.ts.map +1 -0
- package/dist/knowledge-graph/token-taxonomy.js +357 -0
- package/dist/knowledge-graph/token-taxonomy.js.map +1 -0
- package/dist/loop/fix-agent.d.ts +55 -0
- package/dist/loop/fix-agent.d.ts.map +1 -0
- package/dist/loop/fix-agent.js +344 -0
- package/dist/loop/fix-agent.js.map +1 -0
- package/dist/loop/index.d.ts +8 -0
- package/dist/loop/index.d.ts.map +1 -0
- package/dist/loop/index.js +8 -0
- package/dist/loop/index.js.map +1 -0
- package/dist/loop/issue-fetcher.d.ts +51 -0
- package/dist/loop/issue-fetcher.d.ts.map +1 -0
- package/dist/loop/issue-fetcher.js +188 -0
- package/dist/loop/issue-fetcher.js.map +1 -0
- package/dist/loop/observer.d.ts +42 -0
- package/dist/loop/observer.d.ts.map +1 -0
- package/dist/loop/observer.js +220 -0
- package/dist/loop/observer.js.map +1 -0
- package/dist/loop/pacer.d.ts +44 -0
- package/dist/loop/pacer.d.ts.map +1 -0
- package/dist/loop/pacer.js +90 -0
- package/dist/loop/pacer.js.map +1 -0
- package/dist/loop/reporter.d.ts +9 -0
- package/dist/loop/reporter.d.ts.map +1 -0
- package/dist/loop/reporter.js +119 -0
- package/dist/loop/reporter.js.map +1 -0
- package/dist/loop/runner.d.ts +57 -0
- package/dist/loop/runner.d.ts.map +1 -0
- package/dist/loop/runner.js +390 -0
- package/dist/loop/runner.js.map +1 -0
- package/dist/loop/types.d.ts +151 -0
- package/dist/loop/types.d.ts.map +1 -0
- package/dist/loop/types.js +22 -0
- package/dist/loop/types.js.map +1 -0
- package/dist/mcp/index.d.ts +7 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +7 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +12 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +618 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/pipeline/agent-runner.d.ts +34 -0
- package/dist/pipeline/agent-runner.d.ts.map +1 -0
- package/dist/pipeline/agent-runner.js +323 -0
- package/dist/pipeline/agent-runner.js.map +1 -0
- package/dist/pipeline/agents/accessibility-auditor.d.ts +10 -0
- package/dist/pipeline/agents/accessibility-auditor.d.ts.map +1 -0
- package/dist/pipeline/agents/accessibility-auditor.js +69 -0
- package/dist/pipeline/agents/accessibility-auditor.js.map +1 -0
- package/dist/pipeline/agents/code-reviewer.d.ts +10 -0
- package/dist/pipeline/agents/code-reviewer.d.ts.map +1 -0
- package/dist/pipeline/agents/code-reviewer.js +75 -0
- package/dist/pipeline/agents/code-reviewer.js.map +1 -0
- package/dist/pipeline/agents/code-writer.d.ts +10 -0
- package/dist/pipeline/agents/code-writer.d.ts.map +1 -0
- package/dist/pipeline/agents/code-writer.js +103 -0
- package/dist/pipeline/agents/code-writer.js.map +1 -0
- package/dist/pipeline/agents/component-architect.d.ts +13 -0
- package/dist/pipeline/agents/component-architect.d.ts.map +1 -0
- package/dist/pipeline/agents/component-architect.js +81 -0
- package/dist/pipeline/agents/component-architect.js.map +1 -0
- package/dist/pipeline/agents/index.d.ts +16 -0
- package/dist/pipeline/agents/index.d.ts.map +1 -0
- package/dist/pipeline/agents/index.js +24 -0
- package/dist/pipeline/agents/index.js.map +1 -0
- package/dist/pipeline/agents/library-researcher.d.ts +12 -0
- package/dist/pipeline/agents/library-researcher.d.ts.map +1 -0
- package/dist/pipeline/agents/library-researcher.js +85 -0
- package/dist/pipeline/agents/library-researcher.js.map +1 -0
- package/dist/pipeline/agents/quality-gate.d.ts +9 -0
- package/dist/pipeline/agents/quality-gate.d.ts.map +1 -0
- package/dist/pipeline/agents/quality-gate.js +71 -0
- package/dist/pipeline/agents/quality-gate.js.map +1 -0
- package/dist/pipeline/agents/spec-analyst.d.ts +10 -0
- package/dist/pipeline/agents/spec-analyst.d.ts.map +1 -0
- package/dist/pipeline/agents/spec-analyst.js +72 -0
- package/dist/pipeline/agents/spec-analyst.js.map +1 -0
- package/dist/pipeline/agents/story-author.d.ts +9 -0
- package/dist/pipeline/agents/story-author.d.ts.map +1 -0
- package/dist/pipeline/agents/story-author.js +65 -0
- package/dist/pipeline/agents/story-author.js.map +1 -0
- package/dist/pipeline/artifact-store.d.ts +27 -0
- package/dist/pipeline/artifact-store.d.ts.map +1 -0
- package/dist/pipeline/artifact-store.js +77 -0
- package/dist/pipeline/artifact-store.js.map +1 -0
- package/dist/pipeline/conversational-gate.d.ts +26 -0
- package/dist/pipeline/conversational-gate.d.ts.map +1 -0
- package/dist/pipeline/conversational-gate.js +122 -0
- package/dist/pipeline/conversational-gate.js.map +1 -0
- package/dist/pipeline/index.d.ts +14 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +17 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/iteration-tracker.d.ts +29 -0
- package/dist/pipeline/iteration-tracker.d.ts.map +1 -0
- package/dist/pipeline/iteration-tracker.js +102 -0
- package/dist/pipeline/iteration-tracker.js.map +1 -0
- package/dist/pipeline/learning-bridge.d.ts +37 -0
- package/dist/pipeline/learning-bridge.d.ts.map +1 -0
- package/dist/pipeline/learning-bridge.js +118 -0
- package/dist/pipeline/learning-bridge.js.map +1 -0
- package/dist/pipeline/orchestrator.d.ts +45 -0
- package/dist/pipeline/orchestrator.d.ts.map +1 -0
- package/dist/pipeline/orchestrator.js +473 -0
- package/dist/pipeline/orchestrator.js.map +1 -0
- package/dist/pipeline/templates/architecture.d.ts +27 -0
- package/dist/pipeline/templates/architecture.d.ts.map +1 -0
- package/dist/pipeline/templates/architecture.js +111 -0
- package/dist/pipeline/templates/architecture.js.map +1 -0
- package/dist/pipeline/templates/brief.d.ts +22 -0
- package/dist/pipeline/templates/brief.d.ts.map +1 -0
- package/dist/pipeline/templates/brief.js +121 -0
- package/dist/pipeline/templates/brief.js.map +1 -0
- package/dist/pipeline/templates/component-rules.d.ts +25 -0
- package/dist/pipeline/templates/component-rules.d.ts.map +1 -0
- package/dist/pipeline/templates/component-rules.js +93 -0
- package/dist/pipeline/templates/component-rules.js.map +1 -0
- package/dist/pipeline/templates/index.d.ts +9 -0
- package/dist/pipeline/templates/index.d.ts.map +1 -0
- package/dist/pipeline/templates/index.js +7 -0
- package/dist/pipeline/templates/index.js.map +1 -0
- package/dist/pipeline/tool-handler.d.ts +25 -0
- package/dist/pipeline/tool-handler.d.ts.map +1 -0
- package/dist/pipeline/tool-handler.js +392 -0
- package/dist/pipeline/tool-handler.js.map +1 -0
- package/dist/pipeline/types.d.ts +146 -0
- package/dist/pipeline/types.d.ts.map +1 -0
- package/dist/pipeline/types.js +27 -0
- package/dist/pipeline/types.js.map +1 -0
- package/dist/plan/action-types.d.ts +31 -0
- package/dist/plan/action-types.d.ts.map +1 -0
- package/dist/plan/action-types.js +83 -0
- package/dist/plan/action-types.js.map +1 -0
- package/dist/plan/decision-engine.d.ts +57 -0
- package/dist/plan/decision-engine.d.ts.map +1 -0
- package/dist/plan/decision-engine.js +162 -0
- package/dist/plan/decision-engine.js.map +1 -0
- package/dist/plan/index.d.ts +6 -0
- package/dist/plan/index.d.ts.map +1 -0
- package/dist/plan/index.js +6 -0
- package/dist/plan/index.js.map +1 -0
- package/dist/types.d.ts +351 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +26 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/anthropic.d.ts +15 -0
- package/dist/utils/anthropic.d.ts.map +1 -0
- package/dist/utils/anthropic.js +40 -0
- package/dist/utils/anthropic.js.map +1 -0
- package/dist/utils/id.d.ts +8 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +14 -0
- package/dist/utils/id.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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"}
|