@timmeck/brain-core 2.36.56 → 2.36.58

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 (152) hide show
  1. package/README.md +6 -0
  2. package/command-center.html +133 -2
  3. package/dist/action/__tests__/action-bridge.test.d.ts +1 -0
  4. package/dist/action/__tests__/action-bridge.test.js +145 -0
  5. package/dist/action/__tests__/action-bridge.test.js.map +1 -0
  6. package/dist/action/__tests__/content-handler.test.d.ts +1 -0
  7. package/dist/action/__tests__/content-handler.test.js +100 -0
  8. package/dist/action/__tests__/content-handler.test.js.map +1 -0
  9. package/dist/action/__tests__/trade-handler.test.d.ts +1 -0
  10. package/dist/action/__tests__/trade-handler.test.js +165 -0
  11. package/dist/action/__tests__/trade-handler.test.js.map +1 -0
  12. package/dist/action/action-bridge.d.ts +95 -0
  13. package/dist/action/action-bridge.js +242 -0
  14. package/dist/action/action-bridge.js.map +1 -0
  15. package/dist/action/handlers/content-handler.d.ts +23 -0
  16. package/dist/action/handlers/content-handler.js +30 -0
  17. package/dist/action/handlers/content-handler.js.map +1 -0
  18. package/dist/action/handlers/index.d.ts +4 -0
  19. package/dist/action/handlers/index.js +3 -0
  20. package/dist/action/handlers/index.js.map +1 -0
  21. package/dist/action/handlers/trade-handler.d.ts +43 -0
  22. package/dist/action/handlers/trade-handler.js +43 -0
  23. package/dist/action/handlers/trade-handler.js.map +1 -0
  24. package/dist/action/index.d.ts +4 -0
  25. package/dist/action/index.js +3 -0
  26. package/dist/action/index.js.map +1 -0
  27. package/dist/agent-training/__tests__/agent-trainer.test.d.ts +1 -0
  28. package/dist/agent-training/__tests__/agent-trainer.test.js +158 -0
  29. package/dist/agent-training/__tests__/agent-trainer.test.js.map +1 -0
  30. package/dist/agent-training/__tests__/sub-agent-factory.test.d.ts +1 -0
  31. package/dist/agent-training/__tests__/sub-agent-factory.test.js +100 -0
  32. package/dist/agent-training/__tests__/sub-agent-factory.test.js.map +1 -0
  33. package/dist/agent-training/__tests__/sub-agent.test.d.ts +1 -0
  34. package/dist/agent-training/__tests__/sub-agent.test.js +102 -0
  35. package/dist/agent-training/__tests__/sub-agent.test.js.map +1 -0
  36. package/dist/agent-training/index.d.ts +4 -0
  37. package/dist/agent-training/index.js +2 -0
  38. package/dist/agent-training/index.js.map +1 -1
  39. package/dist/agent-training/sub-agent-factory.d.ts +36 -0
  40. package/dist/agent-training/sub-agent-factory.js +128 -0
  41. package/dist/agent-training/sub-agent-factory.js.map +1 -0
  42. package/dist/agent-training/sub-agent.d.ts +57 -0
  43. package/dist/agent-training/sub-agent.js +135 -0
  44. package/dist/agent-training/sub-agent.js.map +1 -0
  45. package/dist/chat/__tests__/chat-engine.test.d.ts +1 -0
  46. package/dist/chat/__tests__/chat-engine.test.js +128 -0
  47. package/dist/chat/__tests__/chat-engine.test.js.map +1 -0
  48. package/dist/chat/chat-engine.d.ts +55 -0
  49. package/dist/chat/chat-engine.js +186 -0
  50. package/dist/chat/chat-engine.js.map +1 -0
  51. package/dist/chat/index.d.ts +2 -0
  52. package/dist/chat/index.js +2 -0
  53. package/dist/chat/index.js.map +1 -0
  54. package/dist/codegen/__tests__/code-forge.test.d.ts +1 -0
  55. package/dist/codegen/__tests__/code-forge.test.js +105 -0
  56. package/dist/codegen/__tests__/code-forge.test.js.map +1 -0
  57. package/dist/codegen/code-forge.d.ts +87 -0
  58. package/dist/codegen/code-forge.js +211 -0
  59. package/dist/codegen/code-forge.js.map +1 -0
  60. package/dist/codegen/index.d.ts +2 -0
  61. package/dist/codegen/index.js +1 -0
  62. package/dist/codegen/index.js.map +1 -1
  63. package/dist/content/__tests__/auto-publisher.test.d.ts +1 -0
  64. package/dist/content/__tests__/auto-publisher.test.js +125 -0
  65. package/dist/content/__tests__/auto-publisher.test.js.map +1 -0
  66. package/dist/content/__tests__/content-forge.test.d.ts +1 -0
  67. package/dist/content/__tests__/content-forge.test.js +117 -0
  68. package/dist/content/__tests__/content-forge.test.js.map +1 -0
  69. package/dist/content/auto-publisher.d.ts +51 -0
  70. package/dist/content/auto-publisher.js +147 -0
  71. package/dist/content/auto-publisher.js.map +1 -0
  72. package/dist/content/content-forge.d.ts +106 -0
  73. package/dist/content/content-forge.js +232 -0
  74. package/dist/content/content-forge.js.map +1 -0
  75. package/dist/content/index.d.ts +4 -0
  76. package/dist/content/index.js +3 -0
  77. package/dist/content/index.js.map +1 -0
  78. package/dist/creative/__tests__/creative-engine.test.d.ts +1 -0
  79. package/dist/creative/__tests__/creative-engine.test.js +151 -0
  80. package/dist/creative/__tests__/creative-engine.test.js.map +1 -0
  81. package/dist/cross-brain/__tests__/signal-router.test.d.ts +1 -0
  82. package/dist/cross-brain/__tests__/signal-router.test.js +159 -0
  83. package/dist/cross-brain/__tests__/signal-router.test.js.map +1 -0
  84. package/dist/cross-brain/signal-router.d.ts +57 -0
  85. package/dist/cross-brain/signal-router.js +148 -0
  86. package/dist/cross-brain/signal-router.js.map +1 -0
  87. package/dist/dashboard/__tests__/command-center-server.test.js +31 -0
  88. package/dist/dashboard/__tests__/command-center-server.test.js.map +1 -1
  89. package/dist/dashboard/command-center-server.d.ts +11 -0
  90. package/dist/dashboard/command-center-server.js +72 -0
  91. package/dist/dashboard/command-center-server.js.map +1 -1
  92. package/dist/dream/__tests__/dream-engine.test.d.ts +1 -0
  93. package/dist/dream/__tests__/dream-engine.test.js +184 -0
  94. package/dist/dream/__tests__/dream-engine.test.js.map +1 -0
  95. package/dist/feedback/__tests__/feedback-router.test.d.ts +1 -0
  96. package/dist/feedback/__tests__/feedback-router.test.js +173 -0
  97. package/dist/feedback/__tests__/feedback-router.test.js.map +1 -0
  98. package/dist/feedback/feedback-router.d.ts +53 -0
  99. package/dist/feedback/feedback-router.js +193 -0
  100. package/dist/feedback/feedback-router.js.map +1 -0
  101. package/dist/feedback/index.d.ts +2 -0
  102. package/dist/feedback/index.js +1 -0
  103. package/dist/feedback/index.js.map +1 -1
  104. package/dist/goals/__tests__/goal-engine.test.d.ts +1 -0
  105. package/dist/goals/__tests__/goal-engine.test.js +203 -0
  106. package/dist/goals/__tests__/goal-engine.test.js.map +1 -0
  107. package/dist/guardrails/__tests__/guardrail-engine.test.d.ts +1 -0
  108. package/dist/guardrails/__tests__/guardrail-engine.test.js +343 -0
  109. package/dist/guardrails/__tests__/guardrail-engine.test.js.map +1 -0
  110. package/dist/index.d.ts +16 -0
  111. package/dist/index.js +13 -0
  112. package/dist/index.js.map +1 -1
  113. package/dist/metacognition/__tests__/auto-experiment-engine.test.d.ts +1 -0
  114. package/dist/metacognition/__tests__/auto-experiment-engine.test.js +218 -0
  115. package/dist/metacognition/__tests__/auto-experiment-engine.test.js.map +1 -0
  116. package/dist/metacognition/__tests__/evolution-engine.test.d.ts +1 -0
  117. package/dist/metacognition/__tests__/evolution-engine.test.js +473 -0
  118. package/dist/metacognition/__tests__/evolution-engine.test.js.map +1 -0
  119. package/dist/metacognition/__tests__/parameter-registry.test.d.ts +1 -0
  120. package/dist/metacognition/__tests__/parameter-registry.test.js +223 -0
  121. package/dist/metacognition/__tests__/parameter-registry.test.js.map +1 -0
  122. package/dist/prediction/__tests__/prediction-engine.test.d.ts +1 -0
  123. package/dist/prediction/__tests__/prediction-engine.test.js +244 -0
  124. package/dist/prediction/__tests__/prediction-engine.test.js.map +1 -0
  125. package/dist/research/research-orchestrator.d.ts +12 -0
  126. package/dist/research/research-orchestrator.js +109 -0
  127. package/dist/research/research-orchestrator.js.map +1 -1
  128. package/dist/sandbox/__tests__/code-sandbox.test.d.ts +1 -0
  129. package/dist/sandbox/__tests__/code-sandbox.test.js +182 -0
  130. package/dist/sandbox/__tests__/code-sandbox.test.js.map +1 -0
  131. package/dist/scanner/__tests__/signal-scanner.test.d.ts +1 -0
  132. package/dist/scanner/__tests__/signal-scanner.test.js +142 -0
  133. package/dist/scanner/__tests__/signal-scanner.test.js.map +1 -0
  134. package/dist/self-modification/__tests__/self-modification-engine.test.d.ts +1 -0
  135. package/dist/self-modification/__tests__/self-modification-engine.test.js +255 -0
  136. package/dist/self-modification/__tests__/self-modification-engine.test.js.map +1 -0
  137. package/dist/strategy/__tests__/strategy-forge.test.d.ts +1 -0
  138. package/dist/strategy/__tests__/strategy-forge.test.js +190 -0
  139. package/dist/strategy/__tests__/strategy-forge.test.js.map +1 -0
  140. package/dist/strategy/__tests__/strategy-mutator.test.d.ts +1 -0
  141. package/dist/strategy/__tests__/strategy-mutator.test.js +141 -0
  142. package/dist/strategy/__tests__/strategy-mutator.test.js.map +1 -0
  143. package/dist/strategy/index.d.ts +4 -0
  144. package/dist/strategy/index.js +3 -0
  145. package/dist/strategy/index.js.map +1 -0
  146. package/dist/strategy/strategy-forge.d.ts +114 -0
  147. package/dist/strategy/strategy-forge.js +296 -0
  148. package/dist/strategy/strategy-forge.js.map +1 -0
  149. package/dist/strategy/strategy-mutator.d.ts +42 -0
  150. package/dist/strategy/strategy-mutator.js +140 -0
  151. package/dist/strategy/strategy-mutator.js.map +1 -0
  152. package/package.json +1 -1
@@ -0,0 +1,186 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ // ── Migration ──────────────────────────────────────────────
3
+ export function runChatMigration(db) {
4
+ db.exec(`
5
+ CREATE TABLE IF NOT EXISTS chat_messages (
6
+ id TEXT PRIMARY KEY,
7
+ session_id TEXT NOT NULL,
8
+ role TEXT NOT NULL,
9
+ content TEXT NOT NULL,
10
+ tool_calls TEXT,
11
+ timestamp INTEGER NOT NULL
12
+ );
13
+ CREATE INDEX IF NOT EXISTS idx_chat_session ON chat_messages(session_id);
14
+ CREATE INDEX IF NOT EXISTS idx_chat_timestamp ON chat_messages(timestamp);
15
+ `);
16
+ }
17
+ // ── Engine ──────────────────────────────────────────────────
18
+ const log = getLogger();
19
+ /**
20
+ * ChatEngine — processes natural language messages and routes them to IPC endpoints.
21
+ * Uses simple keyword matching for NLU (LLM-powered NLU is optional enhancement).
22
+ */
23
+ export class ChatEngine {
24
+ db;
25
+ config;
26
+ ipcHandler = null;
27
+ availableRoutes = [];
28
+ stmtInsert;
29
+ stmtGetSession;
30
+ stmtCountSessions;
31
+ stmtCountMessages;
32
+ constructor(db, config) {
33
+ this.db = db;
34
+ this.config = {
35
+ brainName: config.brainName,
36
+ maxHistoryPerSession: config.maxHistoryPerSession ?? 50,
37
+ };
38
+ runChatMigration(db);
39
+ this.stmtInsert = db.prepare(`INSERT INTO chat_messages (id, session_id, role, content, tool_calls, timestamp) VALUES (?, ?, ?, ?, ?, ?)`);
40
+ this.stmtGetSession = db.prepare(`SELECT * FROM chat_messages WHERE session_id = ? ORDER BY timestamp ASC LIMIT ?`);
41
+ this.stmtCountSessions = db.prepare(`SELECT COUNT(DISTINCT session_id) as count FROM chat_messages`);
42
+ this.stmtCountMessages = db.prepare(`SELECT COUNT(*) as count FROM chat_messages`);
43
+ }
44
+ /** Set the IPC handler for routing commands */
45
+ setIpcHandler(handler) {
46
+ this.ipcHandler = handler;
47
+ }
48
+ /** Set the list of available IPC routes for NLU matching */
49
+ setAvailableRoutes(routes) {
50
+ this.availableRoutes = routes;
51
+ }
52
+ /** Process a user message and generate a response */
53
+ async processMessage(sessionId, content) {
54
+ // Store user message
55
+ const userMsg = {
56
+ id: `msg-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,
57
+ sessionId,
58
+ role: 'user',
59
+ content,
60
+ timestamp: Date.now(),
61
+ };
62
+ this.storeMessage(userMsg);
63
+ // Route to IPC
64
+ let responseContent;
65
+ let toolCalls;
66
+ try {
67
+ const route = this.matchRoute(content);
68
+ if (route && this.ipcHandler) {
69
+ const params = this.extractParams(content, route);
70
+ const result = await this.ipcHandler(route, params);
71
+ toolCalls = JSON.stringify({ route, params, result });
72
+ responseContent = this.formatResult(route, result);
73
+ }
74
+ else {
75
+ responseContent = this.generateFallback(content);
76
+ }
77
+ }
78
+ catch (err) {
79
+ responseContent = `Fehler: ${err.message}`;
80
+ }
81
+ // Store assistant response
82
+ const assistantMsg = {
83
+ id: `msg-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,
84
+ sessionId,
85
+ role: 'assistant',
86
+ content: responseContent,
87
+ toolCalls,
88
+ timestamp: Date.now(),
89
+ };
90
+ this.storeMessage(assistantMsg);
91
+ return assistantMsg;
92
+ }
93
+ /** Get chat history for a session */
94
+ getHistory(sessionId, limit) {
95
+ const rows = this.stmtGetSession.all(sessionId, limit ?? this.config.maxHistoryPerSession);
96
+ return rows.map(deserializeMessage);
97
+ }
98
+ /** Get status */
99
+ getStatus() {
100
+ return {
101
+ sessions: this.stmtCountSessions.get().count,
102
+ totalMessages: this.stmtCountMessages.get().count,
103
+ routesAvailable: this.availableRoutes.length,
104
+ };
105
+ }
106
+ // ── Private ──────────────────────────────────────────────
107
+ storeMessage(msg) {
108
+ this.stmtInsert.run(msg.id, msg.sessionId, msg.role, msg.content, msg.toolCalls ?? null, msg.timestamp);
109
+ }
110
+ /** Simple keyword-based NLU: match user input to IPC routes */
111
+ matchRoute(input) {
112
+ const lower = input.toLowerCase();
113
+ // Direct route mention
114
+ for (const route of this.availableRoutes) {
115
+ if (lower.includes(route))
116
+ return route;
117
+ }
118
+ // Keyword mapping — ordered specific-first (longer routes before generic)
119
+ const keywords = [
120
+ ['signal.cross.status', ['signal', 'cross-brain', 'cross brain']],
121
+ ['paper.status', ['paper', 'trading', 'positionen', 'positions']],
122
+ ['paper.portfolio', ['portfolio', 'balance', 'equity', 'guthaben']],
123
+ ['action.status', ['action', 'bridge', 'queue', 'aktionen']],
124
+ ['content.status', ['content', 'forge', 'draft', 'publish', 'inhalt']],
125
+ ['strategy.status', ['strateg', 'rules', 'regeln']],
126
+ ['insight.list', ['insight', 'erkenntnisse', 'einsichten']],
127
+ ['rule.list', ['rules', 'regeln', 'learned']],
128
+ ['memory.stats', ['memory', 'gedächtnis', 'speicher']],
129
+ ['ecosystem.status', ['ecosystem', 'peers', 'ökosystem']],
130
+ ['status', ['status', 'wie geht', 'how are', 'overview', 'übersicht']],
131
+ ];
132
+ for (const [route, kws] of keywords) {
133
+ if (this.availableRoutes.includes(route) && kws.some(kw => lower.includes(kw)))
134
+ return route;
135
+ }
136
+ return null;
137
+ }
138
+ /** Extract parameters from user input */
139
+ extractParams(input, _route) {
140
+ const params = {};
141
+ // Extract numbers
142
+ const numbers = input.match(/\d+/g);
143
+ if (numbers)
144
+ params.limit = parseInt(numbers[0], 10);
145
+ return params;
146
+ }
147
+ /** Format IPC result as human-readable text */
148
+ formatResult(route, result) {
149
+ if (result === null || result === undefined)
150
+ return 'Keine Daten verfügbar.';
151
+ try {
152
+ if (typeof result === 'object') {
153
+ const obj = result;
154
+ // Paper status formatting
155
+ if (route === 'paper.status' || route === 'paper.portfolio') {
156
+ const balance = obj.balance?.toFixed(2) ?? '?';
157
+ const equity = obj.equity?.toFixed(2) ?? '?';
158
+ const positions = Array.isArray(obj.positions) ? obj.positions.length : 0;
159
+ return `Paper Trading: Balance $${balance}, Equity $${equity}, ${positions} Position(en)`;
160
+ }
161
+ // Generic status formatting
162
+ return JSON.stringify(result, null, 2).substring(0, 1000);
163
+ }
164
+ return String(result);
165
+ }
166
+ catch {
167
+ return JSON.stringify(result).substring(0, 500);
168
+ }
169
+ }
170
+ /** Fallback response when no route matches */
171
+ generateFallback(input) {
172
+ log.info(`[chat] No route matched for: ${input}`);
173
+ return `Ich konnte deine Frage nicht zuordnen. Verfügbare Themen: status, paper trading, portfolio, strategies, signals, insights, rules, memory. Versuche es mit konkreteren Begriffen.`;
174
+ }
175
+ }
176
+ function deserializeMessage(row) {
177
+ return {
178
+ id: row.id,
179
+ sessionId: row.session_id,
180
+ role: row.role,
181
+ content: row.content,
182
+ toolCalls: row.tool_calls ?? undefined,
183
+ timestamp: row.timestamp,
184
+ };
185
+ }
186
+ //# sourceMappingURL=chat-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-engine.js","sourceRoot":"","sources":["../../src/chat/chat-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { ChatEngine, runChatMigration } from './chat-engine.js';
2
+ export type { ChatMessage, ChatEngineConfig, ChatEngineStatus } from './chat-engine.js';
@@ -0,0 +1,2 @@
1
+ export { ChatEngine, runChatMigration } from './chat-engine.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chat/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,105 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import Database from 'better-sqlite3';
3
+ vi.mock('../../utils/logger.js', () => ({
4
+ getLogger: () => ({ info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn() }),
5
+ }));
6
+ import { CodeForge, runCodeForgeMigration } from '../code-forge.js';
7
+ describe('CodeForge', () => {
8
+ let db;
9
+ beforeEach(() => { db = new Database(':memory:'); });
10
+ afterEach(() => { db.close(); });
11
+ it('adds a pattern and retrieves it', () => {
12
+ const forge = new CodeForge(db, { brainName: 'test' });
13
+ const id = forge.addPattern('retry logic', 4, ['a.ts', 'b.ts', 'c.ts', 'd.ts'], 0.85);
14
+ expect(id).toBeGreaterThan(0);
15
+ const patterns = forge.extractPatterns();
16
+ expect(patterns).toHaveLength(1);
17
+ expect(patterns[0].pattern).toBe('retry logic');
18
+ expect(patterns[0].occurrences).toBe(4);
19
+ });
20
+ it('generates a utility from a pattern', () => {
21
+ const forge = new CodeForge(db, { brainName: 'test' });
22
+ const pattern = { id: 1, pattern: 'error handler', occurrences: 3, files: ['a.ts', 'b.ts'], similarity: 0.7 };
23
+ const product = forge.generateUtility(pattern);
24
+ expect(product.id).toBeGreaterThan(0);
25
+ expect(product.type).toBe('utility');
26
+ expect(product.status).toBe('generated');
27
+ expect(product.files).toHaveLength(1);
28
+ });
29
+ it('scaffolds a project', () => {
30
+ const forge = new CodeForge(db, { brainName: 'test' });
31
+ const product = forge.scaffoldProject('brain-plugin', { name: 'my-plugin' });
32
+ expect(product.type).toBe('scaffold');
33
+ expect(product.files.length).toBeGreaterThanOrEqual(3);
34
+ expect(product.files.some(f => f.path.includes('package.json'))).toBe(true);
35
+ });
36
+ it('generates a test file', () => {
37
+ const forge = new CodeForge(db, { brainName: 'test' });
38
+ const product = forge.generateTest('src/utils/retry.ts');
39
+ expect(product.type).toBe('test');
40
+ expect(product.files).toHaveLength(1);
41
+ expect(product.files[0].path).toContain('__tests__');
42
+ });
43
+ it('applies a product', () => {
44
+ const forge = new CodeForge(db, { brainName: 'test' });
45
+ const product = forge.scaffoldProject('template', { name: 'test-proj' });
46
+ const result = forge.applyProduct(product.id);
47
+ expect(result.success).toBe(true);
48
+ const products = forge.getProducts('applied');
49
+ expect(products).toHaveLength(1);
50
+ });
51
+ it('blocks apply on protected paths', () => {
52
+ const forge = new CodeForge(db, { brainName: 'test' });
53
+ forge.setGuardrailEngine({ isProtectedPath: (path) => path.includes('package.json') });
54
+ const product = forge.scaffoldProject('template', { name: 'protected-proj' });
55
+ const result = forge.applyProduct(product.id);
56
+ expect(result.success).toBe(false);
57
+ });
58
+ it('rolls back a product', () => {
59
+ const forge = new CodeForge(db, { brainName: 'test' });
60
+ const product = forge.scaffoldProject('template', { name: 'rollback-test' });
61
+ forge.applyProduct(product.id);
62
+ forge.rollback(product.id);
63
+ const products = forge.getProducts('rolled_back');
64
+ expect(products).toHaveLength(1);
65
+ });
66
+ it('auto-applies a selfmod proposal', () => {
67
+ const forge = new CodeForge(db, { brainName: 'test' });
68
+ const mockSelfMod = { proposeModification: vi.fn(), applyModification: vi.fn() };
69
+ forge.setSelfModificationEngine(mockSelfMod);
70
+ const result = forge.autoApplyProposal(42);
71
+ expect(result.success).toBe(true);
72
+ expect(result.productId).toBeGreaterThan(0);
73
+ expect(mockSelfMod.applyModification).toHaveBeenCalledWith(42);
74
+ });
75
+ it('handles auto-apply failure', () => {
76
+ const forge = new CodeForge(db, { brainName: 'test' });
77
+ forge.setSelfModificationEngine({
78
+ proposeModification: vi.fn(),
79
+ applyModification: vi.fn().mockImplementation(() => { throw new Error('Tests failed'); }),
80
+ });
81
+ const result = forge.autoApplyProposal(42);
82
+ expect(result.success).toBe(false);
83
+ });
84
+ it('returns empty when no selfmod engine', () => {
85
+ const forge = new CodeForge(db, { brainName: 'test' });
86
+ const result = forge.autoApplyProposal(42);
87
+ expect(result.success).toBe(false);
88
+ });
89
+ it('getStatus returns overview', () => {
90
+ const forge = new CodeForge(db, { brainName: 'test' });
91
+ forge.scaffoldProject('t1', { name: 'p1' });
92
+ forge.generateTest('src/foo.ts');
93
+ const status = forge.getStatus();
94
+ expect(status.products).toBe(2);
95
+ expect(status.applied).toBe(0);
96
+ });
97
+ it('migration is idempotent', () => {
98
+ const forge = new CodeForge(db, { brainName: 'test' });
99
+ forge.scaffoldProject('t1', { name: 'persist-test' });
100
+ runCodeForgeMigration(db);
101
+ const products = forge.getProducts();
102
+ expect(products.length).toBeGreaterThanOrEqual(1);
103
+ });
104
+ });
105
+ //# sourceMappingURL=code-forge.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-forge.test.js","sourceRoot":"","sources":["../../../src/codegen/__tests__/code-forge.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import type Database from 'better-sqlite3';
2
+ export interface CodeProduct {
3
+ id: number;
4
+ type: 'utility' | 'refactor' | 'scaffold' | 'fix' | 'test';
5
+ name: string;
6
+ description: string;
7
+ files: Array<{
8
+ path: string;
9
+ content: string;
10
+ action: 'create' | 'modify';
11
+ }>;
12
+ sourcePattern?: string;
13
+ testsPassed?: boolean;
14
+ status: 'generated' | 'tested' | 'applied' | 'failed' | 'rolled_back';
15
+ createdAt?: string;
16
+ }
17
+ export interface CodePattern {
18
+ id: number;
19
+ pattern: string;
20
+ occurrences: number;
21
+ files: string[];
22
+ similarity: number;
23
+ }
24
+ export interface CodeForgeConfig {
25
+ brainName: string;
26
+ autoApplyEnabled?: boolean;
27
+ minSimilarityForPattern?: number;
28
+ }
29
+ export interface CodeForgeStatus {
30
+ patterns: number;
31
+ products: number;
32
+ applied: number;
33
+ successRate: number;
34
+ }
35
+ export declare function runCodeForgeMigration(db: Database.Database): void;
36
+ export declare class CodeForge {
37
+ private readonly db;
38
+ private readonly config;
39
+ private readonly log;
40
+ private actionBridge;
41
+ private codeHealthMonitor;
42
+ private selfModificationEngine;
43
+ private guardrailEngine;
44
+ private readonly stmtInsertProduct;
45
+ private readonly stmtInsertPattern;
46
+ private readonly stmtGetProduct;
47
+ private readonly stmtUpdateProductStatus;
48
+ private readonly stmtGetProducts;
49
+ private readonly stmtGetPatterns;
50
+ private readonly stmtCountByStatus;
51
+ private readonly stmtSuccessRate;
52
+ constructor(db: Database.Database, config: CodeForgeConfig);
53
+ setActionBridge(bridge: import('../action/action-bridge.js').ActionBridgeEngine): void;
54
+ setCodeHealthMonitor(monitor: {
55
+ scan: (path: string) => unknown;
56
+ }): void;
57
+ setSelfModificationEngine(engine: any): void;
58
+ setGuardrailEngine(engine: {
59
+ isProtectedPath: (path: string) => boolean;
60
+ }): void;
61
+ /** Extract recurring code patterns from codebase analysis */
62
+ extractPatterns(): CodePattern[];
63
+ /** Record a discovered pattern */
64
+ addPattern(pattern: string, occurrences: number, files: string[], similarity: number): number;
65
+ /** Generate a utility from a recurring pattern */
66
+ generateUtility(pattern: CodePattern): CodeProduct;
67
+ /** Auto-apply a self-modification proposal */
68
+ autoApplyProposal(proposalId: number): {
69
+ success: boolean;
70
+ productId?: number;
71
+ };
72
+ /** Scaffold a new project from a template */
73
+ scaffoldProject(template: string, config: Record<string, unknown>): CodeProduct;
74
+ /** Generate tests for a target file */
75
+ generateTest(targetFile: string): CodeProduct;
76
+ /** Apply a code product (mark as applied) */
77
+ applyProduct(productId: number): {
78
+ success: boolean;
79
+ };
80
+ /** Rollback a product */
81
+ rollback(productId: number): void;
82
+ /** Get products by status */
83
+ getProducts(status?: string): CodeProduct[];
84
+ /** Get status overview */
85
+ getStatus(): CodeForgeStatus;
86
+ private storeProduct;
87
+ }
@@ -0,0 +1,211 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ // ── Migration ──────────────────────────────────────────────
3
+ export function runCodeForgeMigration(db) {
4
+ db.exec(`
5
+ CREATE TABLE IF NOT EXISTS code_products (
6
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
7
+ type TEXT NOT NULL,
8
+ name TEXT NOT NULL,
9
+ description TEXT,
10
+ files TEXT DEFAULT '[]',
11
+ source_pattern TEXT,
12
+ tests_passed INTEGER,
13
+ status TEXT DEFAULT 'generated',
14
+ created_at TEXT DEFAULT (datetime('now'))
15
+ );
16
+ CREATE INDEX IF NOT EXISTS idx_codeproduct_status ON code_products(status);
17
+ CREATE INDEX IF NOT EXISTS idx_codeproduct_type ON code_products(type);
18
+
19
+ CREATE TABLE IF NOT EXISTS code_patterns (
20
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
21
+ pattern TEXT NOT NULL,
22
+ occurrences INTEGER DEFAULT 1,
23
+ files TEXT DEFAULT '[]',
24
+ similarity REAL DEFAULT 0,
25
+ created_at TEXT DEFAULT (datetime('now'))
26
+ );
27
+ CREATE INDEX IF NOT EXISTS idx_codepattern_similarity ON code_patterns(similarity);
28
+ `);
29
+ }
30
+ // ── Engine ──────────────────────────────────────────────────
31
+ export class CodeForge {
32
+ db;
33
+ config;
34
+ log = getLogger();
35
+ actionBridge = null;
36
+ codeHealthMonitor = null;
37
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
+ selfModificationEngine = null;
39
+ guardrailEngine = null;
40
+ // Prepared statements
41
+ stmtInsertProduct;
42
+ stmtInsertPattern;
43
+ stmtGetProduct;
44
+ stmtUpdateProductStatus;
45
+ stmtGetProducts;
46
+ stmtGetPatterns;
47
+ stmtCountByStatus;
48
+ stmtSuccessRate;
49
+ constructor(db, config) {
50
+ this.db = db;
51
+ this.config = {
52
+ brainName: config.brainName,
53
+ autoApplyEnabled: config.autoApplyEnabled ?? false,
54
+ minSimilarityForPattern: config.minSimilarityForPattern ?? 0.6,
55
+ };
56
+ runCodeForgeMigration(db);
57
+ this.stmtInsertProduct = db.prepare(`
58
+ INSERT INTO code_products (type, name, description, files, source_pattern, status)
59
+ VALUES (?, ?, ?, ?, ?, 'generated')
60
+ `);
61
+ this.stmtInsertPattern = db.prepare(`
62
+ INSERT INTO code_patterns (pattern, occurrences, files, similarity)
63
+ VALUES (?, ?, ?, ?)
64
+ `);
65
+ this.stmtGetProduct = db.prepare(`SELECT * FROM code_products WHERE id = ?`);
66
+ this.stmtUpdateProductStatus = db.prepare(`UPDATE code_products SET status = ?, tests_passed = ? WHERE id = ?`);
67
+ this.stmtGetProducts = db.prepare(`SELECT * FROM code_products WHERE status = ? ORDER BY created_at DESC LIMIT ?`);
68
+ this.stmtGetPatterns = db.prepare(`SELECT * FROM code_patterns ORDER BY similarity DESC, occurrences DESC LIMIT ?`);
69
+ this.stmtCountByStatus = db.prepare(`SELECT status, COUNT(*) as count FROM code_products GROUP BY status`);
70
+ this.stmtSuccessRate = db.prepare(`SELECT COUNT(*) as total, SUM(CASE WHEN status = 'applied' THEN 1 ELSE 0 END) as successes FROM code_products WHERE status IN ('applied', 'failed', 'rolled_back')`);
71
+ }
72
+ setActionBridge(bridge) { this.actionBridge = bridge; }
73
+ setCodeHealthMonitor(monitor) { this.codeHealthMonitor = monitor; }
74
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
+ setSelfModificationEngine(engine) { this.selfModificationEngine = engine; }
76
+ setGuardrailEngine(engine) { this.guardrailEngine = engine; }
77
+ /** Extract recurring code patterns from codebase analysis */
78
+ extractPatterns() {
79
+ // This is a placeholder — in production this would scan via CodeHealthMonitor
80
+ const rows = this.stmtGetPatterns.all(50);
81
+ return rows.map(r => ({
82
+ id: r.id,
83
+ pattern: r.pattern,
84
+ occurrences: r.occurrences,
85
+ files: JSON.parse(r.files || '[]'),
86
+ similarity: r.similarity,
87
+ }));
88
+ }
89
+ /** Record a discovered pattern */
90
+ addPattern(pattern, occurrences, files, similarity) {
91
+ const result = this.stmtInsertPattern.run(pattern, occurrences, JSON.stringify(files), similarity);
92
+ return Number(result.lastInsertRowid);
93
+ }
94
+ /** Generate a utility from a recurring pattern */
95
+ generateUtility(pattern) {
96
+ const name = `util-${pattern.pattern.replace(/\s+/g, '-').substring(0, 30)}`;
97
+ const description = `Utility extracted from pattern "${pattern.pattern}" (${pattern.occurrences} occurrences)`;
98
+ const files = [{ path: `src/utils/${name}.ts`, content: `// Auto-generated utility from pattern: ${pattern.pattern}\n`, action: 'create' }];
99
+ return this.storeProduct('utility', name, description, files, pattern.pattern);
100
+ }
101
+ /** Auto-apply a self-modification proposal */
102
+ autoApplyProposal(proposalId) {
103
+ if (!this.selfModificationEngine) {
104
+ return { success: false };
105
+ }
106
+ try {
107
+ this.selfModificationEngine.applyModification(proposalId);
108
+ const product = this.storeProduct('refactor', `selfmod-${proposalId}`, `Auto-applied SelfMod proposal #${proposalId}`, [], undefined);
109
+ this.stmtUpdateProductStatus.run('applied', 1, product.id);
110
+ this.log.info(`[code-forge] Auto-applied SelfMod proposal #${proposalId}`);
111
+ return { success: true, productId: product.id };
112
+ }
113
+ catch (err) {
114
+ this.log.warn(`[code-forge] Auto-apply failed for proposal #${proposalId}: ${err.message}`);
115
+ return { success: false };
116
+ }
117
+ }
118
+ /** Scaffold a new project from a template */
119
+ scaffoldProject(template, config) {
120
+ const name = config.name ?? template;
121
+ const description = `Scaffolded from template: ${template}`;
122
+ const files = [
123
+ { path: `${name}/package.json`, content: JSON.stringify({ name, version: '1.0.0' }, null, 2), action: 'create' },
124
+ { path: `${name}/src/index.ts`, content: `// ${name} — scaffolded from ${template}\nexport {};\n`, action: 'create' },
125
+ { path: `${name}/tsconfig.json`, content: JSON.stringify({ compilerOptions: { target: 'ES2022', module: 'NodeNext' } }, null, 2), action: 'create' },
126
+ ];
127
+ return this.storeProduct('scaffold', name, description, files, template);
128
+ }
129
+ /** Generate tests for a target file */
130
+ generateTest(targetFile) {
131
+ const testPath = targetFile.replace(/\.ts$/, '.test.ts').replace('src/', 'src/__tests__/');
132
+ const name = `test-${targetFile.split('/').pop()?.replace('.ts', '')}`;
133
+ const content = `import { describe, it, expect } from 'vitest';\n\ndescribe('${name}', () => {\n it('should work', () => {\n expect(true).toBe(true);\n });\n});\n`;
134
+ const files = [{ path: testPath, content, action: 'create' }];
135
+ return this.storeProduct('test', name, `Auto-generated test for ${targetFile}`, files, undefined);
136
+ }
137
+ /** Apply a code product (mark as applied) */
138
+ applyProduct(productId) {
139
+ const row = this.stmtGetProduct.get(productId);
140
+ if (!row)
141
+ throw new Error(`Product #${productId} not found`);
142
+ if (row.status !== 'generated' && row.status !== 'tested') {
143
+ throw new Error(`Product #${productId} cannot be applied (status=${row.status})`);
144
+ }
145
+ // Check guardrails
146
+ const product = deserializeProduct(row);
147
+ for (const f of product.files) {
148
+ if (this.guardrailEngine?.isProtectedPath(f.path)) {
149
+ this.log.warn(`[code-forge] Cannot apply #${productId}: ${f.path} is protected`);
150
+ this.stmtUpdateProductStatus.run('failed', null, productId);
151
+ return { success: false };
152
+ }
153
+ }
154
+ this.stmtUpdateProductStatus.run('applied', null, productId);
155
+ this.log.info(`[code-forge] Applied product #${productId}: ${row.name}`);
156
+ return { success: true };
157
+ }
158
+ /** Rollback a product */
159
+ rollback(productId) {
160
+ const row = this.stmtGetProduct.get(productId);
161
+ if (!row)
162
+ throw new Error(`Product #${productId} not found`);
163
+ this.stmtUpdateProductStatus.run('rolled_back', null, productId);
164
+ this.log.info(`[code-forge] Rolled back product #${productId}`);
165
+ }
166
+ /** Get products by status */
167
+ getProducts(status) {
168
+ const rows = (status
169
+ ? this.stmtGetProducts.all(status, 100)
170
+ : this.db.prepare(`SELECT * FROM code_products ORDER BY created_at DESC LIMIT 100`).all());
171
+ return rows.map(deserializeProduct);
172
+ }
173
+ /** Get status overview */
174
+ getStatus() {
175
+ const counts = this.stmtCountByStatus.all();
176
+ const countMap = {};
177
+ let total = 0;
178
+ for (const c of counts) {
179
+ countMap[c.status] = c.count;
180
+ total += c.count;
181
+ }
182
+ const sr = this.stmtSuccessRate.get();
183
+ return {
184
+ patterns: this.stmtGetPatterns.all(1000).length,
185
+ products: total,
186
+ applied: countMap['applied'] ?? 0,
187
+ successRate: sr.total > 0 ? sr.successes / sr.total : 0,
188
+ };
189
+ }
190
+ // ── Private ──────────────────────────────────────────────
191
+ storeProduct(type, name, description, files, sourcePattern) {
192
+ const result = this.stmtInsertProduct.run(type, name, description, JSON.stringify(files), sourcePattern ?? null);
193
+ const id = Number(result.lastInsertRowid);
194
+ this.log.info(`[code-forge] Created product #${id}: ${name} (${type})`);
195
+ return { id, type, name, description, files, sourcePattern, status: 'generated' };
196
+ }
197
+ }
198
+ function deserializeProduct(row) {
199
+ return {
200
+ id: row.id,
201
+ type: row.type,
202
+ name: row.name,
203
+ description: row.description,
204
+ files: JSON.parse(row.files || '[]'),
205
+ sourcePattern: row.source_pattern ?? undefined,
206
+ testsPassed: row.tests_passed !== null ? row.tests_passed === 1 : undefined,
207
+ status: row.status,
208
+ createdAt: row.created_at,
209
+ };
210
+ }
211
+ //# sourceMappingURL=code-forge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-forge.js","sourceRoot":"","sources":["../../src/codegen/code-forge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAqC/C,8DAA8D;AAE9D,MAAM,UAAU,qBAAqB,CAAC,EAAqB;IACzD,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;GAwBP,CAAC,CAAC;AACL,CAAC;AAED,+DAA+D;AAE/D,MAAM,OAAO,SAAS;IACH,EAAE,CAAoB;IACtB,MAAM,CAA4B;IAClC,GAAG,GAAG,SAAS,EAAE,CAAC;IAE3B,YAAY,GAAmE,IAAI,CAAC;IACpF,iBAAiB,GAA+C,IAAI,CAAC;IAC7E,8DAA8D;IACtD,sBAAsB,GAAQ,IAAI,CAAC;IACnC,eAAe,GAA0D,IAAI,CAAC;IAEtF,sBAAsB;IACL,iBAAiB,CAAC;IAClB,iBAAiB,CAAC;IAClB,cAAc,CAAC;IACf,uBAAuB,CAAC;IACxB,eAAe,CAAC;IAChB,eAAe,CAAC;IAChB,iBAAiB,CAAC;IAClB,eAAe,CAAC;IAEjC,YAAY,EAAqB,EAAE,MAAuB;QACxD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,GAAG;YACZ,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,KAAK;YAClD,uBAAuB,EAAE,MAAM,CAAC,uBAAuB,IAAI,GAAG;SAC/D,CAAC;QACF,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAE1B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAGnC,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAGnC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;QAC7E,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC,OAAO,CAAC,oEAAoE,CAAC,CAAC;QAChH,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,CAAC,+EAA+E,CAAC,CAAC;QACnH,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,CAAC,gFAAgF,CAAC,CAAC;QACpH,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,CAAC,qEAAqE,CAAC,CAAC;QAC3G,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,CAAC,oKAAoK,CAAC,CAAC;IAC1M,CAAC;IAED,eAAe,CAAC,MAA+D,IAAU,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC;IACtH,oBAAoB,CAAC,OAA4C,IAAU,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC;IAC9G,8DAA8D;IAC9D,yBAAyB,CAAC,MAAW,IAAU,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,CAAC,CAAC;IACtF,kBAAkB,CAAC,MAAsD,IAAU,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC;IAEnH,6DAA6D;IAC7D,eAAe;QACb,8EAA8E;QAC9E,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAEtC,CAAC;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC;YAClC,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,kCAAkC;IAClC,UAAU,CAAC,OAAe,EAAE,WAAmB,EAAE,KAAe,EAAE,UAAkB;QAClF,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;QACnG,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;IAED,kDAAkD;IAClD,eAAe,CAAC,OAAoB;QAClC,MAAM,IAAI,GAAG,QAAQ,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAC7E,MAAM,WAAW,GAAG,mCAAmC,OAAO,CAAC,OAAO,MAAM,OAAO,CAAC,WAAW,eAAe,CAAC;QAC/G,MAAM,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,IAAI,KAAK,EAAE,OAAO,EAAE,2CAA2C,OAAO,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,QAAiB,EAAE,CAAC,CAAC;QACrJ,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACjF,CAAC;IAED,8CAA8C;IAC9C,iBAAiB,CAAC,UAAkB;QAClC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACjC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,WAAW,UAAU,EAAE,EAAE,kCAAkC,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;YACtI,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+CAA+C,UAAU,EAAE,CAAC,CAAC;YAC3E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;QAClD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gDAAgD,UAAU,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACvG,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,eAAe,CAAC,QAAgB,EAAE,MAA+B;QAC/D,MAAM,IAAI,GAAI,MAAM,CAAC,IAAe,IAAI,QAAQ,CAAC;QACjD,MAAM,WAAW,GAAG,6BAA6B,QAAQ,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG;YACZ,EAAE,IAAI,EAAE,GAAG,IAAI,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAiB,EAAE;YACzH,EAAE,IAAI,EAAE,GAAG,IAAI,eAAe,EAAE,OAAO,EAAE,MAAM,IAAI,sBAAsB,QAAQ,gBAAgB,EAAE,MAAM,EAAE,QAAiB,EAAE;YAC9H,EAAE,IAAI,EAAE,GAAG,IAAI,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAiB,EAAE;SAC9J,CAAC;QACF,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC3E,CAAC;IAED,uCAAuC;IACvC,YAAY,CAAC,UAAkB;QAC7B,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC3F,MAAM,IAAI,GAAG,QAAQ,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;QACvE,MAAM,OAAO,GAAG,+DAA+D,IAAI,qFAAqF,CAAC;QACzK,MAAM,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAiB,EAAE,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,2BAA2B,UAAU,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACpG,CAAC;IAED,6CAA6C;IAC7C,YAAY,CAAC,SAAiB;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAA2B,CAAC;QACzE,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,SAAS,YAAY,CAAC,CAAC;QAC7D,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,YAAY,SAAS,8BAA8B,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QACpF,CAAC;QAED,mBAAmB;QACnB,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,8BAA8B,SAAS,KAAK,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC;gBACjF,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC5D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAC7D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,SAAS,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACzE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,yBAAyB;IACzB,QAAQ,CAAC,SAAiB;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAA2B,CAAC;QACzE,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,SAAS,YAAY,CAAC,CAAC;QAC7D,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACjE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qCAAqC,SAAS,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,6BAA6B;IAC7B,WAAW,CAAC,MAAe;QACzB,MAAM,IAAI,GAAG,CAAC,MAAM;YAClB,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;YACvC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,gEAAgE,CAAC,CAAC,GAAG,EAAE,CAC1E,CAAC;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IAED,0BAA0B;IAC1B,SAAS;QACP,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAA8C,CAAC;QACxF,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAC5C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC;QAAC,CAAC;QAE3E,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAA0C,CAAC;QAE9E,OAAO;YACL,QAAQ,EAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAe,CAAC,MAAM;YAC9D,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;YACjC,WAAW,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACxD,CAAC;IACJ,CAAC;IAED,4DAA4D;IAEpD,YAAY,CAAC,IAAyB,EAAE,IAAY,EAAE,WAAmB,EAAE,KAA2B,EAAE,aAAsB;QACpI,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,aAAa,IAAI,IAAI,CAAC,CAAC;QACjH,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,CAAC;QACxE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACpF,CAAC;CACF;AAgBD,SAAS,kBAAkB,CAAC,GAAe;IACzC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAA2B;QACrC,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC;QACpC,aAAa,EAAE,GAAG,CAAC,cAAc,IAAI,SAAS;QAC9C,WAAW,EAAE,GAAG,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QAC3E,MAAM,EAAE,GAAG,CAAC,MAA+B;QAC3C,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC"}
@@ -11,4 +11,6 @@ export { FeatureExtractor } from './feature-extractor.js';
11
11
  export type { ExtractedFeature, FeatureCategory, FeatureExtractionResult, FeatureSearchOptions, FeatureStats } from './feature-extractor.js';
12
12
  export { FeatureRecommender } from './feature-recommender.js';
13
13
  export type { FeatureWish, FeatureConnection, RecommendationResult, FeatureRecommenderStatus } from './feature-recommender.js';
14
+ export { CodeForge, runCodeForgeMigration } from './code-forge.js';
15
+ export type { CodeProduct, CodePattern, CodeForgeConfig, CodeForgeStatus } from './code-forge.js';
14
16
  export type { CodeMinerConfig, RepoContent, CodeMinerSummary, ExtractedPattern, DependencyPattern, TechStack, ProjectStructure, ReadmePattern, ContextBuilderConfig, BuiltContext, CodeGeneratorConfig, GenerationTrigger, GenerationStatus, GenerationRequest, GenerationResult, GenerationRecord, CodeGeneratorSummary, } from './types.js';