@sparkleideas/browser 3.0.0-alpha.7 → 3.0.0-alpha.9

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 (67) hide show
  1. package/.agentic-flow/intelligence.json +17 -0
  2. package/agents/architect.yaml +1 -1
  3. package/agents/coder.yaml +1 -1
  4. package/agents/reviewer.yaml +1 -1
  5. package/agents/security-architect.yaml +1 -1
  6. package/agents/tester.yaml +1 -1
  7. package/dist/agent/index.d.ts +25 -0
  8. package/dist/agent/index.d.ts.map +1 -0
  9. package/dist/agent/index.js +33 -0
  10. package/dist/agent/index.js.map +1 -0
  11. package/dist/application/browser-service.d.ts +228 -0
  12. package/dist/application/browser-service.d.ts.map +1 -0
  13. package/dist/application/browser-service.js +470 -0
  14. package/dist/application/browser-service.js.map +1 -0
  15. package/dist/domain/types.d.ts +428 -0
  16. package/dist/domain/types.d.ts.map +1 -0
  17. package/dist/domain/types.js +95 -0
  18. package/dist/domain/types.js.map +1 -0
  19. package/dist/index.d.ts +131 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +84 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/infrastructure/agent-browser-adapter.d.ts +134 -0
  24. package/dist/infrastructure/agent-browser-adapter.d.ts.map +1 -0
  25. package/dist/infrastructure/agent-browser-adapter.js +551 -0
  26. package/dist/infrastructure/agent-browser-adapter.js.map +1 -0
  27. package/dist/infrastructure/hooks-integration.d.ts +109 -0
  28. package/dist/infrastructure/hooks-integration.d.ts.map +1 -0
  29. package/dist/infrastructure/hooks-integration.js +111 -0
  30. package/dist/infrastructure/hooks-integration.js.map +1 -0
  31. package/dist/infrastructure/memory-integration.d.ts +149 -0
  32. package/dist/infrastructure/memory-integration.d.ts.map +1 -0
  33. package/dist/infrastructure/memory-integration.js +335 -0
  34. package/dist/infrastructure/memory-integration.js.map +1 -0
  35. package/dist/infrastructure/reasoningbank-adapter.d.ts +90 -0
  36. package/dist/infrastructure/reasoningbank-adapter.d.ts.map +1 -0
  37. package/dist/infrastructure/reasoningbank-adapter.js +224 -0
  38. package/dist/infrastructure/reasoningbank-adapter.js.map +1 -0
  39. package/dist/infrastructure/security-integration.d.ts +80 -0
  40. package/dist/infrastructure/security-integration.d.ts.map +1 -0
  41. package/dist/infrastructure/security-integration.js +404 -0
  42. package/dist/infrastructure/security-integration.js.map +1 -0
  43. package/dist/infrastructure/workflow-templates.d.ts +95 -0
  44. package/dist/infrastructure/workflow-templates.d.ts.map +1 -0
  45. package/dist/infrastructure/workflow-templates.js +366 -0
  46. package/dist/infrastructure/workflow-templates.js.map +1 -0
  47. package/dist/mcp-tools/browser-tools.d.ts +18 -0
  48. package/dist/mcp-tools/browser-tools.d.ts.map +1 -0
  49. package/dist/mcp-tools/browser-tools.js +1163 -0
  50. package/dist/mcp-tools/browser-tools.js.map +1 -0
  51. package/dist/mcp-tools/index.d.ts +6 -0
  52. package/dist/mcp-tools/index.d.ts.map +1 -0
  53. package/dist/mcp-tools/index.js +6 -0
  54. package/dist/mcp-tools/index.js.map +1 -0
  55. package/dist/skill/index.d.ts +15 -0
  56. package/dist/skill/index.d.ts.map +1 -0
  57. package/dist/skill/index.js +23 -0
  58. package/dist/skill/index.js.map +1 -0
  59. package/package.json +3 -4
  60. package/src/application/browser-service.ts +1 -1
  61. package/src/domain/types.ts +1 -1
  62. package/src/index.ts +2 -2
  63. package/src/infrastructure/hooks-integration.ts +1 -1
  64. package/src/infrastructure/memory-integration.ts +2 -2
  65. package/src/infrastructure/reasoningbank-adapter.ts +1 -1
  66. package/src/mcp-tools/browser-tools.ts +1 -1
  67. package/src/skill/index.ts +1 -1
@@ -0,0 +1,335 @@
1
+ /**
2
+ * @sparkleideas/browser - Memory Integration
3
+ * Persistent memory storage with HNSW semantic search for browser patterns
4
+ */
5
+ // ============================================================================
6
+ // Claude Flow Memory Adapter
7
+ // ============================================================================
8
+ /**
9
+ * Adapter for claude-flow memory system with HNSW indexing
10
+ */
11
+ export class ClaudeFlowMemoryAdapter {
12
+ namespace;
13
+ cache = new Map();
14
+ embeddingCache = new Map();
15
+ constructor(namespace = 'browser') {
16
+ this.namespace = namespace;
17
+ }
18
+ /**
19
+ * Store a browser memory entry with optional embedding
20
+ */
21
+ async store(entry) {
22
+ const key = `${this.namespace}:${entry.type}:${entry.key}`;
23
+ // Generate text for embedding
24
+ const embeddingText = this.generateEmbeddingText(entry);
25
+ // Store in memory via MCP (when available)
26
+ try {
27
+ // This would call claude-flow memory_store MCP tool
28
+ // For now, store in local cache
29
+ this.cache.set(key, {
30
+ ...entry,
31
+ metadata: {
32
+ ...entry.metadata,
33
+ timestamp: entry.metadata.timestamp || new Date().toISOString(),
34
+ },
35
+ });
36
+ // Store embedding text for search
37
+ if (embeddingText) {
38
+ this.embeddingCache.set(key, this.simpleHash(embeddingText));
39
+ }
40
+ }
41
+ catch (error) {
42
+ console.error('[memory] Failed to store entry:', error);
43
+ throw error;
44
+ }
45
+ }
46
+ /**
47
+ * Retrieve a specific memory entry
48
+ */
49
+ async retrieve(key) {
50
+ const fullKey = key.includes(':') ? key : `${this.namespace}:${key}`;
51
+ return this.cache.get(fullKey) || null;
52
+ }
53
+ /**
54
+ * Semantic search using HNSW index (falls back to keyword search)
55
+ */
56
+ async search(query, options = {}) {
57
+ const { topK = 10, minScore = 0.3, type, sessionId } = options;
58
+ const results = [];
59
+ const queryTerms = query.toLowerCase().split(/\s+/);
60
+ for (const [key, entry] of this.cache.entries()) {
61
+ // Apply filters
62
+ if (type && entry.type !== type)
63
+ continue;
64
+ if (sessionId && entry.metadata.sessionId !== sessionId)
65
+ continue;
66
+ // Calculate relevance score
67
+ const entryText = this.generateEmbeddingText(entry).toLowerCase();
68
+ let matches = 0;
69
+ for (const term of queryTerms) {
70
+ if (entryText.includes(term))
71
+ matches++;
72
+ }
73
+ const score = matches / queryTerms.length;
74
+ if (score >= minScore) {
75
+ results.push({
76
+ entry,
77
+ score,
78
+ distance: 1 - score,
79
+ });
80
+ }
81
+ }
82
+ // Sort by score and limit
83
+ return results
84
+ .sort((a, b) => b.score - a.score)
85
+ .slice(0, topK);
86
+ }
87
+ /**
88
+ * Delete a memory entry
89
+ */
90
+ async delete(key) {
91
+ const fullKey = key.includes(':') ? key : `${this.namespace}:${key}`;
92
+ const deleted = this.cache.delete(fullKey);
93
+ this.embeddingCache.delete(fullKey);
94
+ return deleted;
95
+ }
96
+ /**
97
+ * List entries with optional filters
98
+ */
99
+ async list(filter = {}) {
100
+ const entries = [];
101
+ for (const entry of this.cache.values()) {
102
+ if (filter.type && entry.type !== filter.type)
103
+ continue;
104
+ if (filter.sessionId && entry.metadata.sessionId !== filter.sessionId)
105
+ continue;
106
+ if (filter.success !== undefined && entry.metadata.success !== filter.success)
107
+ continue;
108
+ if (filter.startTime && entry.metadata.timestamp < filter.startTime)
109
+ continue;
110
+ if (filter.endTime && entry.metadata.timestamp > filter.endTime)
111
+ continue;
112
+ entries.push(entry);
113
+ }
114
+ return entries;
115
+ }
116
+ /**
117
+ * Get memory statistics
118
+ */
119
+ async getStats() {
120
+ const byType = {};
121
+ const bySession = {};
122
+ for (const entry of this.cache.values()) {
123
+ byType[entry.type] = (byType[entry.type] || 0) + 1;
124
+ bySession[entry.metadata.sessionId] = (bySession[entry.metadata.sessionId] || 0) + 1;
125
+ }
126
+ return {
127
+ totalEntries: this.cache.size,
128
+ byType,
129
+ bySession,
130
+ avgEmbeddingDim: 0, // Would be calculated from actual embeddings
131
+ indexSize: this.embeddingCache.size,
132
+ };
133
+ }
134
+ /**
135
+ * Generate text for embedding from entry
136
+ */
137
+ generateEmbeddingText(entry) {
138
+ const parts = [];
139
+ if (entry.metadata.goal)
140
+ parts.push(entry.metadata.goal);
141
+ if (entry.metadata.url)
142
+ parts.push(entry.metadata.url);
143
+ if (entry.type === 'trajectory') {
144
+ const trajectory = entry.value;
145
+ parts.push(trajectory.goal);
146
+ trajectory.steps?.forEach((step) => {
147
+ parts.push(`${step.action} ${JSON.stringify(step.input)}`);
148
+ });
149
+ }
150
+ if (entry.type === 'error') {
151
+ parts.push(String(entry.value.message || ''));
152
+ parts.push(String(entry.value.stack || ''));
153
+ }
154
+ return parts.join(' ');
155
+ }
156
+ /**
157
+ * Simple hash for embedding placeholder (real implementation would use ONNX)
158
+ */
159
+ simpleHash(text) {
160
+ const hash = new Array(128).fill(0);
161
+ for (let i = 0; i < text.length; i++) {
162
+ hash[i % 128] += text.charCodeAt(i);
163
+ }
164
+ const max = Math.max(...hash);
165
+ return hash.map((v) => v / max);
166
+ }
167
+ }
168
+ // ============================================================================
169
+ // Browser Memory Manager
170
+ // ============================================================================
171
+ /**
172
+ * High-level memory manager for browser automation
173
+ */
174
+ export class BrowserMemoryManager {
175
+ adapter;
176
+ sessionId;
177
+ constructor(sessionId, adapter) {
178
+ this.sessionId = sessionId;
179
+ this.adapter = adapter || new ClaudeFlowMemoryAdapter();
180
+ }
181
+ /**
182
+ * Store a completed trajectory
183
+ */
184
+ async storeTrajectory(trajectory) {
185
+ await this.adapter.store({
186
+ id: trajectory.id,
187
+ type: 'trajectory',
188
+ key: trajectory.id,
189
+ value: trajectory,
190
+ metadata: {
191
+ sessionId: this.sessionId,
192
+ url: trajectory.steps[0]?.input?.url,
193
+ goal: trajectory.goal,
194
+ success: trajectory.success,
195
+ duration: this.calculateDuration(trajectory),
196
+ timestamp: trajectory.completedAt || new Date().toISOString(),
197
+ },
198
+ });
199
+ }
200
+ /**
201
+ * Store a learned pattern
202
+ */
203
+ async storePattern(patternId, goal, steps, success) {
204
+ await this.adapter.store({
205
+ id: patternId,
206
+ type: 'pattern',
207
+ key: patternId,
208
+ value: { goal, steps, success },
209
+ metadata: {
210
+ sessionId: this.sessionId,
211
+ goal,
212
+ success,
213
+ timestamp: new Date().toISOString(),
214
+ },
215
+ });
216
+ }
217
+ /**
218
+ * Store a snapshot for later retrieval
219
+ */
220
+ async storeSnapshot(snapshotId, snapshot) {
221
+ await this.adapter.store({
222
+ id: snapshotId,
223
+ type: 'snapshot',
224
+ key: snapshotId,
225
+ value: snapshot,
226
+ metadata: {
227
+ sessionId: this.sessionId,
228
+ url: snapshot.url,
229
+ timestamp: snapshot.timestamp,
230
+ },
231
+ });
232
+ }
233
+ /**
234
+ * Store an error for learning
235
+ */
236
+ async storeError(errorId, error, context) {
237
+ await this.adapter.store({
238
+ id: errorId,
239
+ type: 'error',
240
+ key: errorId,
241
+ value: {
242
+ message: error.message,
243
+ stack: error.stack,
244
+ name: error.name,
245
+ ...context,
246
+ },
247
+ metadata: {
248
+ sessionId: this.sessionId,
249
+ url: context.url,
250
+ success: false,
251
+ timestamp: new Date().toISOString(),
252
+ },
253
+ });
254
+ }
255
+ /**
256
+ * Find similar trajectories for a given goal
257
+ */
258
+ async findSimilarTrajectories(goal, topK = 5) {
259
+ const results = await this.adapter.search(goal, {
260
+ topK,
261
+ type: 'trajectory',
262
+ minScore: 0.3,
263
+ });
264
+ return results.map((r) => r.entry.value);
265
+ }
266
+ /**
267
+ * Find patterns for a given goal
268
+ */
269
+ async findPatterns(goal, successfulOnly = true) {
270
+ const results = await this.adapter.search(goal, {
271
+ topK: 10,
272
+ type: 'pattern',
273
+ minScore: 0.2,
274
+ });
275
+ if (successfulOnly) {
276
+ return results.filter((r) => r.entry.metadata.success === true);
277
+ }
278
+ return results;
279
+ }
280
+ /**
281
+ * Get session memory stats
282
+ */
283
+ async getSessionStats() {
284
+ const entries = await this.adapter.list({ sessionId: this.sessionId });
285
+ let trajectories = 0;
286
+ let patterns = 0;
287
+ let snapshots = 0;
288
+ let errors = 0;
289
+ let successCount = 0;
290
+ for (const entry of entries) {
291
+ switch (entry.type) {
292
+ case 'trajectory':
293
+ trajectories++;
294
+ if (entry.metadata.success)
295
+ successCount++;
296
+ break;
297
+ case 'pattern':
298
+ patterns++;
299
+ break;
300
+ case 'snapshot':
301
+ snapshots++;
302
+ break;
303
+ case 'error':
304
+ errors++;
305
+ break;
306
+ }
307
+ }
308
+ return {
309
+ trajectories,
310
+ patterns,
311
+ snapshots,
312
+ errors,
313
+ successRate: trajectories > 0 ? successCount / trajectories : 0,
314
+ };
315
+ }
316
+ calculateDuration(trajectory) {
317
+ if (!trajectory.startedAt || !trajectory.completedAt)
318
+ return 0;
319
+ return new Date(trajectory.completedAt).getTime() - new Date(trajectory.startedAt).getTime();
320
+ }
321
+ }
322
+ // ============================================================================
323
+ // Singleton Factory
324
+ // ============================================================================
325
+ let defaultAdapter = null;
326
+ export function getMemoryAdapter() {
327
+ if (!defaultAdapter) {
328
+ defaultAdapter = new ClaudeFlowMemoryAdapter();
329
+ }
330
+ return defaultAdapter;
331
+ }
332
+ export function createMemoryManager(sessionId) {
333
+ return new BrowserMemoryManager(sessionId, getMemoryAdapter());
334
+ }
335
+ //# sourceMappingURL=memory-integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-integration.js","sourceRoot":"","sources":["../../src/infrastructure/memory-integration.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmEH,+EAA+E;AAC/E,6BAA6B;AAC7B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,uBAAuB;IAC1B,SAAS,CAAS;IAClB,KAAK,GAAoC,IAAI,GAAG,EAAE,CAAC;IACnD,cAAc,GAA0B,IAAI,GAAG,EAAE,CAAC;IAE1D,YAAY,SAAS,GAAG,SAAS;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,KAAyB;QACnC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QAE3D,8BAA8B;QAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAExD,2CAA2C;QAC3C,IAAI,CAAC;YACH,oDAAoD;YACpD,gCAAgC;YAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;gBAClB,GAAG,KAAK;gBACR,QAAQ,EAAE;oBACR,GAAG,KAAK,CAAC,QAAQ;oBACjB,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBAChE;aACF,CAAC,CAAC;YAEH,kCAAkC;YAClC,IAAI,aAAa,EAAE,CAAC;gBAClB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;YACxD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,UAA+B,EAAE;QAC3D,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,GAAG,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAE/D,MAAM,OAAO,GAAyB,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAChD,gBAAgB;YAChB,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;gBAAE,SAAS;YAC1C,IAAI,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS;gBAAE,SAAS;YAElE,4BAA4B;YAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YAClE,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,OAAO,EAAE,CAAC;YAC1C,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC;YAE1C,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK;oBACL,KAAK;oBACL,QAAQ,EAAE,CAAC,GAAG,KAAK;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,OAAO,OAAO;aACX,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC;QACrE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,SAAuB,EAAE;QAClC,MAAM,OAAO,GAAyB,EAAE,CAAC;QAEzC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,IAAI,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;gBAAE,SAAS;YACxD,IAAI,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS;gBAAE,SAAS;YAChF,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO;gBAAE,SAAS;YACxF,IAAI,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS;gBAAE,SAAS;YAC9E,IAAI,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO;gBAAE,SAAS;YAE1E,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,MAAM,SAAS,GAA2B,EAAE,CAAC;QAE7C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACnD,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACvF,CAAC;QAED,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YAC7B,MAAM;YACN,SAAS;YACT,eAAe,EAAE,CAAC,EAAE,6CAA6C;YACjE,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;SACpC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,KAAyB;QACrD,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEvD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAqC,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC5B,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACjC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,IAAY;QAC7B,MAAM,IAAI,GAAa,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAClC,CAAC;CACF;AAED,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,oBAAoB;IACvB,OAAO,CAAiB;IACxB,SAAS,CAAS;IAE1B,YAAY,SAAiB,EAAE,OAAwB;QACrD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,uBAAuB,EAAE,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,UAA6B;QACjD,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACvB,EAAE,EAAE,UAAU,CAAC,EAAE;YACjB,IAAI,EAAE,YAAY;YAClB,GAAG,EAAE,UAAU,CAAC,EAAE;YAClB,KAAK,EAAE,UAAgD;YACvD,QAAQ,EAAE;gBACR,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAa;gBAC9C,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,OAAO,EAAE,UAAU,CAAC,OAAO;gBAC3B,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;gBAC5C,SAAS,EAAE,UAAU,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aAC9D;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,SAAiB,EACjB,IAAY,EACZ,KAAmE,EACnE,OAAgB;QAEhB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACvB,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;YAC/B,QAAQ,EAAE;gBACR,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,IAAI;gBACJ,OAAO;gBACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,UAAkB,EAAE,QAAkB;QACxD,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACvB,EAAE,EAAE,UAAU;YACd,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,QAA8C;YACrD,QAAQ,EAAE;gBACR,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,GAAG,EAAE,QAAQ,CAAC,GAAG;gBACjB,SAAS,EAAE,QAAQ,CAAC,SAAS;aAC9B;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CACd,OAAe,EACf,KAAY,EACZ,OAA6D;QAE7D,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACvB,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,OAAO;YACZ,KAAK,EAAE;gBACL,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,GAAG,OAAO;aACX;YACD,QAAQ,EAAE;gBACR,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,uBAAuB,CAAC,IAAY,EAAE,IAAI,GAAG,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;YAC9C,IAAI;YACJ,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,GAAG;SACd,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAqC,CAAC,CAAC;IAC3E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,cAAc,GAAG,IAAI;QACpD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;YAC9C,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,GAAG;SACd,CAAC,CAAC;QAEH,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QAOnB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAEvE,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,YAAY;oBACf,YAAY,EAAE,CAAC;oBACf,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO;wBAAE,YAAY,EAAE,CAAC;oBAC3C,MAAM;gBACR,KAAK,SAAS;oBACZ,QAAQ,EAAE,CAAC;oBACX,MAAM;gBACR,KAAK,UAAU;oBACb,SAAS,EAAE,CAAC;oBACZ,MAAM;gBACR,KAAK,OAAO;oBACV,MAAM,EAAE,CAAC;oBACT,MAAM;YACV,CAAC;QACH,CAAC;QAED,OAAO;YACL,YAAY;YACZ,QAAQ;YACR,SAAS;YACT,MAAM;YACN,WAAW,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;SAChE,CAAC;IACJ,CAAC;IAEO,iBAAiB,CAAC,UAA6B;QACrD,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,WAAW;YAAE,OAAO,CAAC,CAAC;QAC/D,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IAC/F,CAAC;CACF;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,IAAI,cAAc,GAA0B,IAAI,CAAC;AAEjD,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,cAAc,GAAG,IAAI,uBAAuB,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,OAAO,IAAI,oBAAoB,CAAC,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * @sparkleideas/browser - ReasoningBank Integration
3
+ * Connects browser trajectories to agentic-flow's learning system
4
+ */
5
+ import type { BrowserTrajectory } from '../domain/types.js';
6
+ export interface BrowserPattern {
7
+ id: string;
8
+ type: 'navigation' | 'interaction' | 'extraction' | 'form' | 'auth' | 'test';
9
+ goal: string;
10
+ steps: PatternStep[];
11
+ successRate: number;
12
+ avgDuration: number;
13
+ lastUsed: string;
14
+ usageCount: number;
15
+ embedding?: number[];
16
+ }
17
+ export interface PatternStep {
18
+ action: string;
19
+ selector?: string;
20
+ value?: string;
21
+ condition?: string;
22
+ }
23
+ export declare class ReasoningBankAdapter {
24
+ private patterns;
25
+ private trajectoryBuffer;
26
+ private readonly maxBufferSize;
27
+ /**
28
+ * Store a completed trajectory for learning
29
+ */
30
+ storeTrajectory(trajectory: BrowserTrajectory): Promise<void>;
31
+ /**
32
+ * Extract a reusable pattern from a trajectory
33
+ */
34
+ private extractPattern;
35
+ /**
36
+ * Infer pattern type from trajectory
37
+ */
38
+ private inferPatternType;
39
+ /**
40
+ * Normalize selector for pattern matching
41
+ */
42
+ private normalizeSelector;
43
+ /**
44
+ * Generate pattern ID from goal
45
+ */
46
+ private generatePatternId;
47
+ /**
48
+ * Process buffered trajectories (batch learning)
49
+ */
50
+ private processBuffer;
51
+ /**
52
+ * Analyze a failed trajectory to learn what went wrong
53
+ */
54
+ private analyzeFailure;
55
+ /**
56
+ * Find similar patterns for a goal
57
+ */
58
+ findSimilarPatterns(goal: string, limit?: number): Promise<BrowserPattern[]>;
59
+ /**
60
+ * Simple text similarity
61
+ */
62
+ private textSimilarity;
63
+ /**
64
+ * Get recommended steps for a goal
65
+ */
66
+ getRecommendedSteps(goal: string): Promise<PatternStep[]>;
67
+ /**
68
+ * Record verdict for SONA learning
69
+ */
70
+ recordVerdict(trajectoryId: string, success: boolean, feedback?: string): Promise<void>;
71
+ /**
72
+ * Get pattern stats
73
+ */
74
+ getStats(): {
75
+ totalPatterns: number;
76
+ avgSuccessRate: number;
77
+ bufferedTrajectories: number;
78
+ };
79
+ /**
80
+ * Export patterns for persistence
81
+ */
82
+ exportPatterns(): BrowserPattern[];
83
+ /**
84
+ * Import patterns from storage
85
+ */
86
+ importPatterns(patterns: BrowserPattern[]): void;
87
+ }
88
+ export declare function getReasoningBank(): ReasoningBankAdapter;
89
+ export default ReasoningBankAdapter;
90
+ //# sourceMappingURL=reasoningbank-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoningbank-adapter.d.ts","sourceRoot":"","sources":["../../src/infrastructure/reasoningbank-adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAmC,MAAM,oBAAoB,CAAC;AAM7F,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,GAAG,aAAa,GAAG,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAO;IAErC;;OAEG;IACG,eAAe,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBnE;;OAEG;IACH,OAAO,CAAC,cAAc;IAsCtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;YACW,aAAa;IAa3B;;OAEG;YACW,cAAc;IAS5B;;OAEG;IACG,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAiB7E;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACG,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAO/D;;OAEG;IACG,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7F;;OAEG;IACH,QAAQ,IAAI;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAA;KAAE;IAa3F;;OAEG;IACH,cAAc,IAAI,cAAc,EAAE;IAIlC;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI;CAKjD;AAQD,wBAAgB,gBAAgB,IAAI,oBAAoB,CAKvD;AAED,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,224 @@
1
+ /**
2
+ * @sparkleideas/browser - ReasoningBank Integration
3
+ * Connects browser trajectories to agentic-flow's learning system
4
+ */
5
+ // ============================================================================
6
+ // ReasoningBank Adapter
7
+ // ============================================================================
8
+ export class ReasoningBankAdapter {
9
+ patterns = new Map();
10
+ trajectoryBuffer = [];
11
+ maxBufferSize = 100;
12
+ /**
13
+ * Store a completed trajectory for learning
14
+ */
15
+ async storeTrajectory(trajectory) {
16
+ this.trajectoryBuffer.push(trajectory);
17
+ // Process buffer when full
18
+ if (this.trajectoryBuffer.length >= this.maxBufferSize) {
19
+ await this.processBuffer();
20
+ }
21
+ // Extract pattern from successful trajectories
22
+ if (trajectory.success) {
23
+ const pattern = this.extractPattern(trajectory);
24
+ if (pattern) {
25
+ this.patterns.set(pattern.id, pattern);
26
+ }
27
+ }
28
+ }
29
+ /**
30
+ * Extract a reusable pattern from a trajectory
31
+ */
32
+ extractPattern(trajectory) {
33
+ if (trajectory.steps.length < 2)
34
+ return null;
35
+ const patternId = this.generatePatternId(trajectory.goal);
36
+ const existing = this.patterns.get(patternId);
37
+ const steps = trajectory.steps.map(step => ({
38
+ action: step.action,
39
+ selector: this.normalizeSelector(step.input.target),
40
+ value: step.input.value,
41
+ condition: step.input.waitUntil || step.input.text,
42
+ }));
43
+ const avgDuration = trajectory.steps.reduce((sum, s) => sum + (s.result.duration || 0), 0) / trajectory.steps.length;
44
+ if (existing) {
45
+ // Update existing pattern
46
+ return {
47
+ ...existing,
48
+ successRate: (existing.successRate * existing.usageCount + 1) / (existing.usageCount + 1),
49
+ avgDuration: (existing.avgDuration * existing.usageCount + avgDuration) / (existing.usageCount + 1),
50
+ lastUsed: new Date().toISOString(),
51
+ usageCount: existing.usageCount + 1,
52
+ };
53
+ }
54
+ return {
55
+ id: patternId,
56
+ type: this.inferPatternType(trajectory),
57
+ goal: trajectory.goal,
58
+ steps,
59
+ successRate: 1,
60
+ avgDuration,
61
+ lastUsed: new Date().toISOString(),
62
+ usageCount: 1,
63
+ };
64
+ }
65
+ /**
66
+ * Infer pattern type from trajectory
67
+ */
68
+ inferPatternType(trajectory) {
69
+ const actions = trajectory.steps.map(s => s.action);
70
+ const goal = trajectory.goal.toLowerCase();
71
+ if (goal.includes('login') || goal.includes('auth') || actions.includes('state-save')) {
72
+ return 'auth';
73
+ }
74
+ if (goal.includes('test') || goal.includes('verify') || goal.includes('assert')) {
75
+ return 'test';
76
+ }
77
+ if (goal.includes('extract') || goal.includes('scrape') || actions.filter(a => a === 'getText').length > 3) {
78
+ return 'extraction';
79
+ }
80
+ if (goal.includes('form') || goal.includes('submit') || actions.filter(a => a === 'fill').length > 2) {
81
+ return 'form';
82
+ }
83
+ if (actions.filter(a => a === 'click').length > 3) {
84
+ return 'interaction';
85
+ }
86
+ return 'navigation';
87
+ }
88
+ /**
89
+ * Normalize selector for pattern matching
90
+ */
91
+ normalizeSelector(selector) {
92
+ if (!selector)
93
+ return undefined;
94
+ // Keep refs as-is (they're from snapshots)
95
+ if (selector.startsWith('@e')) {
96
+ return '{ref}'; // Placeholder for any ref
97
+ }
98
+ // Keep semantic locators
99
+ if (selector.startsWith('text=') || selector.startsWith('role=')) {
100
+ return selector;
101
+ }
102
+ // Generalize CSS selectors
103
+ return selector
104
+ .replace(/\[data-testid="[^"]+"\]/g, '[data-testid="{testid}"]')
105
+ .replace(/#\w+/g, '#{id}')
106
+ .replace(/\.\w+/g, '.{class}');
107
+ }
108
+ /**
109
+ * Generate pattern ID from goal
110
+ */
111
+ generatePatternId(goal) {
112
+ return `pattern-${goal
113
+ .toLowerCase()
114
+ .replace(/[^a-z0-9]+/g, '-')
115
+ .slice(0, 50)}-${Date.now().toString(36)}`;
116
+ }
117
+ /**
118
+ * Process buffered trajectories (batch learning)
119
+ */
120
+ async processBuffer() {
121
+ const successful = this.trajectoryBuffer.filter(t => t.success);
122
+ const failed = this.trajectoryBuffer.filter(t => !t.success);
123
+ // Learn from failures
124
+ for (const failure of failed) {
125
+ await this.analyzeFailure(failure);
126
+ }
127
+ // Clear buffer
128
+ this.trajectoryBuffer = [];
129
+ }
130
+ /**
131
+ * Analyze a failed trajectory to learn what went wrong
132
+ */
133
+ async analyzeFailure(trajectory) {
134
+ const failedStep = trajectory.steps.find(s => !s.result.success);
135
+ if (!failedStep)
136
+ return;
137
+ // Store failure pattern for avoidance
138
+ const failureId = `failure-${failedStep.action}-${Date.now().toString(36)}`;
139
+ console.log(`[ReasoningBank] Learned from failure: ${failureId} - ${failedStep.result.error}`);
140
+ }
141
+ /**
142
+ * Find similar patterns for a goal
143
+ */
144
+ async findSimilarPatterns(goal, limit = 5) {
145
+ const patterns = Array.from(this.patterns.values());
146
+ // Simple text similarity for now
147
+ // In production, use HNSW with embeddings
148
+ const scored = patterns.map(p => ({
149
+ pattern: p,
150
+ score: this.textSimilarity(goal.toLowerCase(), p.goal.toLowerCase()),
151
+ }));
152
+ return scored
153
+ .filter(s => s.score > 0.3)
154
+ .sort((a, b) => b.score - a.score)
155
+ .slice(0, limit)
156
+ .map(s => s.pattern);
157
+ }
158
+ /**
159
+ * Simple text similarity
160
+ */
161
+ textSimilarity(a, b) {
162
+ const wordsA = new Set(a.split(/\s+/));
163
+ const wordsB = new Set(b.split(/\s+/));
164
+ const intersection = new Set([...wordsA].filter(w => wordsB.has(w)));
165
+ const union = new Set([...wordsA, ...wordsB]);
166
+ return intersection.size / union.size;
167
+ }
168
+ /**
169
+ * Get recommended steps for a goal
170
+ */
171
+ async getRecommendedSteps(goal) {
172
+ const similar = await this.findSimilarPatterns(goal, 1);
173
+ if (similar.length === 0)
174
+ return [];
175
+ return similar[0].steps;
176
+ }
177
+ /**
178
+ * Record verdict for SONA learning
179
+ */
180
+ async recordVerdict(trajectoryId, success, feedback) {
181
+ // In production, this would update SONA weights
182
+ console.log(`[ReasoningBank] Verdict for ${trajectoryId}: ${success ? 'SUCCESS' : 'FAILURE'}${feedback ? ` - ${feedback}` : ''}`);
183
+ }
184
+ /**
185
+ * Get pattern stats
186
+ */
187
+ getStats() {
188
+ const patterns = Array.from(this.patterns.values());
189
+ const avgSuccessRate = patterns.length > 0
190
+ ? patterns.reduce((sum, p) => sum + p.successRate, 0) / patterns.length
191
+ : 0;
192
+ return {
193
+ totalPatterns: patterns.length,
194
+ avgSuccessRate,
195
+ bufferedTrajectories: this.trajectoryBuffer.length,
196
+ };
197
+ }
198
+ /**
199
+ * Export patterns for persistence
200
+ */
201
+ exportPatterns() {
202
+ return Array.from(this.patterns.values());
203
+ }
204
+ /**
205
+ * Import patterns from storage
206
+ */
207
+ importPatterns(patterns) {
208
+ for (const pattern of patterns) {
209
+ this.patterns.set(pattern.id, pattern);
210
+ }
211
+ }
212
+ }
213
+ // ============================================================================
214
+ // Singleton Instance
215
+ // ============================================================================
216
+ let instance = null;
217
+ export function getReasoningBank() {
218
+ if (!instance) {
219
+ instance = new ReasoningBankAdapter();
220
+ }
221
+ return instance;
222
+ }
223
+ export default ReasoningBankAdapter;
224
+ //# sourceMappingURL=reasoningbank-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoningbank-adapter.js","sourceRoot":"","sources":["../../src/infrastructure/reasoningbank-adapter.ts"],"names":[],"mappings":"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"}