@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.
- package/.agentic-flow/intelligence.json +17 -0
- package/agents/architect.yaml +1 -1
- package/agents/coder.yaml +1 -1
- package/agents/reviewer.yaml +1 -1
- package/agents/security-architect.yaml +1 -1
- package/agents/tester.yaml +1 -1
- package/dist/agent/index.d.ts +25 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +33 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/application/browser-service.d.ts +228 -0
- package/dist/application/browser-service.d.ts.map +1 -0
- package/dist/application/browser-service.js +470 -0
- package/dist/application/browser-service.js.map +1 -0
- package/dist/domain/types.d.ts +428 -0
- package/dist/domain/types.d.ts.map +1 -0
- package/dist/domain/types.js +95 -0
- package/dist/domain/types.js.map +1 -0
- package/dist/index.d.ts +131 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +84 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/agent-browser-adapter.d.ts +134 -0
- package/dist/infrastructure/agent-browser-adapter.d.ts.map +1 -0
- package/dist/infrastructure/agent-browser-adapter.js +551 -0
- package/dist/infrastructure/agent-browser-adapter.js.map +1 -0
- package/dist/infrastructure/hooks-integration.d.ts +109 -0
- package/dist/infrastructure/hooks-integration.d.ts.map +1 -0
- package/dist/infrastructure/hooks-integration.js +111 -0
- package/dist/infrastructure/hooks-integration.js.map +1 -0
- package/dist/infrastructure/memory-integration.d.ts +149 -0
- package/dist/infrastructure/memory-integration.d.ts.map +1 -0
- package/dist/infrastructure/memory-integration.js +335 -0
- package/dist/infrastructure/memory-integration.js.map +1 -0
- package/dist/infrastructure/reasoningbank-adapter.d.ts +90 -0
- package/dist/infrastructure/reasoningbank-adapter.d.ts.map +1 -0
- package/dist/infrastructure/reasoningbank-adapter.js +224 -0
- package/dist/infrastructure/reasoningbank-adapter.js.map +1 -0
- package/dist/infrastructure/security-integration.d.ts +80 -0
- package/dist/infrastructure/security-integration.d.ts.map +1 -0
- package/dist/infrastructure/security-integration.js +404 -0
- package/dist/infrastructure/security-integration.js.map +1 -0
- package/dist/infrastructure/workflow-templates.d.ts +95 -0
- package/dist/infrastructure/workflow-templates.d.ts.map +1 -0
- package/dist/infrastructure/workflow-templates.js +366 -0
- package/dist/infrastructure/workflow-templates.js.map +1 -0
- package/dist/mcp-tools/browser-tools.d.ts +18 -0
- package/dist/mcp-tools/browser-tools.d.ts.map +1 -0
- package/dist/mcp-tools/browser-tools.js +1163 -0
- package/dist/mcp-tools/browser-tools.js.map +1 -0
- package/dist/mcp-tools/index.d.ts +6 -0
- package/dist/mcp-tools/index.d.ts.map +1 -0
- package/dist/mcp-tools/index.js +6 -0
- package/dist/mcp-tools/index.js.map +1 -0
- package/dist/skill/index.d.ts +15 -0
- package/dist/skill/index.d.ts.map +1 -0
- package/dist/skill/index.js +23 -0
- package/dist/skill/index.js.map +1 -0
- package/package.json +3 -4
- package/src/application/browser-service.ts +1 -1
- package/src/domain/types.ts +1 -1
- package/src/index.ts +2 -2
- package/src/infrastructure/hooks-integration.ts +1 -1
- package/src/infrastructure/memory-integration.ts +2 -2
- package/src/infrastructure/reasoningbank-adapter.ts +1 -1
- package/src/mcp-tools/browser-tools.ts +1 -1
- 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":"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"}
|
|
@@ -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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"}
|