agentic-flow 3.4.1 → 3.4.3
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/CHANGELOG.md +18 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/config/claudeFlow.d.ts +1 -1
- package/dist/core/agentdb-fast.d.ts +9 -0
- package/dist/core/agentdb-fast.d.ts.map +1 -1
- package/dist/core/agentdb-fast.js +62 -31
- package/dist/core/agentdb-fast.js.map +1 -1
- package/dist/core/agentdb-filtered-search.d.ts +54 -0
- package/dist/core/agentdb-filtered-search.d.ts.map +1 -0
- package/dist/core/agentdb-filtered-search.js +111 -0
- package/dist/core/agentdb-filtered-search.js.map +1 -0
- package/dist/optimizations/configuration-tuning.d.ts +1 -1
- package/dist/services/agentdb-service.d.ts +17 -0
- package/dist/services/agentdb-service.d.ts.map +1 -1
- package/dist/services/agentdb-service.js +55 -4
- package/dist/services/agentdb-service.js.map +1 -1
- package/package.json +5 -5
- package/wasm/reasoningbank/reasoningbank_wasm_bg.js +186 -179
- package/wasm/reasoningbank/reasoningbank_wasm_bg.wasm +0 -0
- package/wasm/reasoningbank/reasoningbank_wasm_bg.wasm.d.ts +12 -15
|
@@ -144,11 +144,14 @@ export class AgentDBService {
|
|
|
144
144
|
return String(this.episodeStore.add({ ...episode, ts: Date.now(), id: 0 }));
|
|
145
145
|
}
|
|
146
146
|
async recallEpisodes(query, limit = 5, filters) {
|
|
147
|
-
|
|
147
|
+
// ReflexionMemory filters reward/success/age itself; only the rest is
|
|
148
|
+
// applied here, after an over-fetch.
|
|
149
|
+
const { native, rest } = splitEpisodeFilters(filters);
|
|
150
|
+
const hasFilters = Object.keys(rest).length > 0;
|
|
148
151
|
if (this.reflexionMemory) {
|
|
149
152
|
try {
|
|
150
153
|
const fetchCount = hasFilters ? limit * 2 : limit;
|
|
151
|
-
const results = await this.reflexionMemory.retrieveRelevant({ task: query, k: fetchCount });
|
|
154
|
+
const results = await this.reflexionMemory.retrieveRelevant({ task: query, k: fetchCount, ...native });
|
|
152
155
|
let episodes = (results ?? []).map((r) => ({
|
|
153
156
|
id: r.id ?? 0, ts: r.ts ?? 0, sessionId: r.sessionId ?? '',
|
|
154
157
|
task: r.task ?? '', input: r.input, output: r.output, critique: r.critique,
|
|
@@ -157,7 +160,7 @@ export class AgentDBService {
|
|
|
157
160
|
}));
|
|
158
161
|
if (hasFilters && this.agentdb?.MetadataFilter) {
|
|
159
162
|
try {
|
|
160
|
-
episodes = this.agentdb.MetadataFilter.apply(episodes,
|
|
163
|
+
episodes = this.agentdb.MetadataFilter.apply(episodes, rest);
|
|
161
164
|
}
|
|
162
165
|
catch { /* invalid filter — return unfiltered */ }
|
|
163
166
|
}
|
|
@@ -168,7 +171,7 @@ export class AgentDBService {
|
|
|
168
171
|
}
|
|
169
172
|
}
|
|
170
173
|
const q = query.toLowerCase();
|
|
171
|
-
return this.episodeStore.search((ep) => ep.task.toLowerCase().includes(q), limit);
|
|
174
|
+
return this.episodeStore.search((ep) => ep.task.toLowerCase().includes(q) && matchesNativeEpisodeFilters(ep, native), limit);
|
|
172
175
|
}
|
|
173
176
|
// -- Patterns -------------------------------------------------------------
|
|
174
177
|
async storePattern(pattern) {
|
|
@@ -312,4 +315,52 @@ export class AgentDBService {
|
|
|
312
315
|
export async function getAgentDBService() {
|
|
313
316
|
return await AgentDBService.getInstance();
|
|
314
317
|
}
|
|
318
|
+
/**
|
|
319
|
+
* Split recallEpisodes filters into the part agentdb's ReflexionMemory
|
|
320
|
+
* answers itself (`minReward`, `reward: {$gte}`, `success: true|false`,
|
|
321
|
+
* `onlySuccesses`, `onlyFailures`, `timeWindowDays`) and the rest, which is
|
|
322
|
+
* applied with MetadataFilter after retrieval.
|
|
323
|
+
*/
|
|
324
|
+
export function splitEpisodeFilters(filters) {
|
|
325
|
+
const native = {};
|
|
326
|
+
const rest = {};
|
|
327
|
+
for (const [key, value] of Object.entries(filters ?? {})) {
|
|
328
|
+
if (key === 'minReward' && typeof value === 'number')
|
|
329
|
+
native.minReward = value;
|
|
330
|
+
else if (key === 'timeWindowDays' && typeof value === 'number')
|
|
331
|
+
native.timeWindowDays = value;
|
|
332
|
+
else if (key === 'onlySuccesses' && typeof value === 'boolean')
|
|
333
|
+
native.onlySuccesses = value;
|
|
334
|
+
else if (key === 'onlyFailures' && typeof value === 'boolean')
|
|
335
|
+
native.onlyFailures = value;
|
|
336
|
+
else if (key === 'success' && typeof value === 'boolean') {
|
|
337
|
+
if (value)
|
|
338
|
+
native.onlySuccesses = true;
|
|
339
|
+
else
|
|
340
|
+
native.onlyFailures = true;
|
|
341
|
+
}
|
|
342
|
+
else if (key === 'reward' && value && typeof value === 'object' && !Array.isArray(value) &&
|
|
343
|
+
typeof value.$gte === 'number') {
|
|
344
|
+
native.minReward = Math.max(native.minReward ?? -Infinity, value.$gte);
|
|
345
|
+
const { $gte, ...others } = value;
|
|
346
|
+
if (Object.keys(others).length > 0)
|
|
347
|
+
rest.reward = others;
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
rest[key] = value;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return { native, rest };
|
|
354
|
+
}
|
|
355
|
+
function matchesNativeEpisodeFilters(ep, f) {
|
|
356
|
+
if (f.minReward !== undefined && !(ep.reward >= f.minReward))
|
|
357
|
+
return false;
|
|
358
|
+
if (f.onlySuccesses && !ep.success)
|
|
359
|
+
return false;
|
|
360
|
+
if (f.onlyFailures && ep.success)
|
|
361
|
+
return false;
|
|
362
|
+
if (f.timeWindowDays !== undefined && ep.ts < Date.now() - f.timeWindowDays * 86_400_000)
|
|
363
|
+
return false;
|
|
364
|
+
return true;
|
|
365
|
+
}
|
|
315
366
|
//# sourceMappingURL=agentdb-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentdb-service.js","sourceRoot":"","sources":["../../src/services/agentdb-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AA0DzB,gFAAgF;AAChF,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAE1D,8EAA8E;AAE9E,MAAM,aAAa;IACT,KAAK,GAAG,IAAI,GAAG,EAAa,CAAC;IAC7B,MAAM,GAAG,CAAC,CAAC;IAEnB,GAAG,CAAC,IAAmB;QACrB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAkB,CAAC,CAAC;QACpD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,CAAC,SAA+B,EAAE,KAAa;QACnD,MAAM,GAAG,GAAQ,EAAE,CAAC;QACpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,SAAS,CAAC,IAAI,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK;gBAAE,MAAM;QACjC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;CAC/C;AAED,8EAA8E;AAE9E,MAAM,OAAO,cAAc;IACjB,MAAM,CAAC,QAAQ,GAA0B,IAAI,CAAC;IAE9C,OAAO,GAAQ,IAAI,CAAC;IACpB,EAAE,GAAQ,IAAI,CAAC;IACf,eAAe,GAAQ,IAAI,CAAC;IAC5B,aAAa,GAAQ,IAAI,CAAC;IAC1B,cAAc,GAAQ,IAAI,CAAC;IAC3B,gBAAgB,GAAQ,IAAI,CAAC;IAC7B,iBAAiB,GAAkB,IAAI,CAAC;IACxC,QAAQ,GAAwB,IAAI,CAAC;IAErC,YAAY,GAAG,IAAI,aAAa,EAAW,CAAC;IAC5C,YAAY,GAAG,IAAI,aAAa,EAAW,CAAC;IAC5C,YAAY,GAAuD,EAAE,CAAC;IAEtE,WAAW,GAAG,WAAW,CAAC;IAC1B,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,WAAW,GAAG,KAAK,CAAC;IAE5B,gBAAuB,CAAC;IAExB,MAAM,CAAC,KAAK,CAAC,WAAW;QACtB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC7B,cAAc,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;YAC/C,MAAM,cAAc,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC7C,CAAC;QACD,OAAO,cAAc,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,aAAa,KAAW,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;IAEhE,gFAAgF;IAChF,cAAc,KAAa,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAErD,4EAA4E;IAEpE,KAAK,CAAC,UAAU;QACtB,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,IAAI,OAAY,CAAC;QACjB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,6CAA6C;QACvD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;YAClG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;gBAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;YAElD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;YACnD,IAAI,CAAC,EAAE,GAAG,IAAI,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YAClC,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;YAE3B,IAAI,CAAC,gBAAgB,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC;gBACnD,KAAK,EAAE,yBAAyB,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc;aAC3E,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;YAEzC,iEAAiE;YACjE,uEAAuE;YACvE,qEAAqE;YACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;YAClC,IAAI,CAAC,eAAe,GAAG,IAAI,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACpF,IAAI,CAAC,aAAa,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAChF,IAAI,CAAC,cAAc,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAClF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC7B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,yCAAyC,GAAG,6BAA6B,CAAC,CAAC;YACxF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QACjC,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACK,UAAU,CAAC,QAAa;QAC9B,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO;QAC7D,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC;gBAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,gCAAgC,CAAC,CAAC;QACrE,CAAC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,4EAA4E;IAE5E,KAAK,CAAC,YAAY,CAAC,OAAoB;QACrC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;YAClE,CAAC;YAAC,MAAM,CAAC;gBAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAAC,CAAC;QAC1C,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAa,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,KAAK,GAAG,CAAC,EAAE,OAA6B;QAC1E,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAChE,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAClD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;gBAC5F,IAAI,QAAQ,GAAc,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;oBACzD,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;oBAC1D,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBAC1E,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU;oBAC5E,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ;iBACnC,CAAC,CAAC,CAAC;gBACJ,IAAI,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC;oBAC/C,IAAI,CAAC;wBACH,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBAClE,CAAC;oBAAC,MAAM,CAAC,CAAC,wCAAwC,CAAC,CAAC;gBACtD,CAAC;gBACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;YAAC,MAAM,CAAC;gBAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAAC,CAAC;QAC1C,CAAC;QACD,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACpF,CAAC;IAED,4EAA4E;IAE5E,KAAK,CAAC,YAAY,CAAC,OAAoB;QACrC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;oBAClD,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBACtD,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBACjF,CAAC,CAAC,CAAC;YACN,CAAC;YAAC,MAAM,CAAC;gBAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAAC,CAAC;QACxC,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAa,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,KAAK,GAAG,CAAC;QAC3C,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBACnF,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;oBACtD,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE;oBACrE,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;oBAClD,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU;iBAC7D,CAAC,CAAC,CAAC;YACN,CAAC;YAAC,MAAM,CAAC;gBAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAAC,CAAC;QACxC,CAAC;QACD,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EACnF,KAAK,CACN,CAAC;IACJ,CAAC;IAED,4EAA4E;IAE5E;;;OAGG;IACH,KAAK,CAAC,gBAAgB,CAAC,KAAuB,EAAE,MAAc;QAC5D,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAC5B,IAAI,CAAC,iBAAiB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAC7D,SAAS,EAAE,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CACtE,CAAC;gBACJ,CAAC;gBACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;wBACvC,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK;wBACzE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;wBACxE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;qBACtB,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO;YACT,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC3B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAChC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa,CAAC,KAAU;QAC5B,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAClD,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC3E,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;gBAC9E,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;oBACd,OAAO;wBACL,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,CAAC;wBAC7B,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,CAAC;qBAC5G,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC7D,CAAC;IAED,4EAA4E;IAE5E;;;;OAIG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACtC,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACtC,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,GAAG,EAAE,CAAC;gBACjF,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ;oBAAE,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC;YACzD,CAAC;YAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;gBACnD,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ;oBAAE,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC;YACvF,CAAC;YAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChG,CAAC;IAED,4EAA4E;IAE5E,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAClD,IAAI,CAAC;gBAAC,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC9F,CAAC;QACD,IAAI,IAAI,CAAC,EAAE,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACnD,IAAI,CAAC;gBAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACf,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,cAAc,CAAC,QAAQ,KAAK,IAAI;YAAE,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvE,CAAC;;AAGH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,OAAO,MAAM,cAAc,CAAC,WAAW,EAAE,CAAC;AAC5C,CAAC","sourcesContent":["/**\n * AgentDB Integration Service\n *\n * Singleton service providing a unified interface to the AgentDB controllers\n * (ReflexionMemory, ReasoningBank, LearningSystem). AgentDB is loaded with a\n * dynamic import; when it is missing or fails to initialize, the service keeps\n * working on an in-memory store and reports `getBackendName() === 'in-memory'`.\n *\n * Ported from agentic-flow 3.0.0-alpha.2 and trimmed to the surface used by\n * AutopilotLearning. The alpha line imported AgentDB through monorepo-relative\n * paths (`../../../packages/agentdb/src/...`) that never resolved from an\n * installed package, so it always ran on the in-memory fallback. This version\n * resolves the published `agentdb` package instead.\n *\n * Nothing here writes to stdout: callers such as ruflo's MCP server use stdout\n * as their JSON-RPC channel.\n */\nimport * as path from 'path';\nimport * as fs from 'fs';\n\n// -- Public interfaces ------------------------------------------------------\n\nexport interface EpisodeData {\n sessionId: string;\n task: string;\n input?: string;\n output?: string;\n critique?: string;\n reward: number;\n success: boolean;\n latencyMs?: number;\n tokensUsed?: number;\n tags?: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface Episode extends EpisodeData {\n id: number;\n ts: number;\n similarity?: number;\n}\n\nexport interface PatternData {\n taskType: string;\n approach: string;\n successRate: number;\n tags?: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface Pattern extends PatternData {\n id: number;\n uses: number;\n similarity?: number;\n}\n\nexport interface TrajectoryStep {\n state: string;\n action: string;\n reward: number;\n nextState?: string;\n}\n\nexport interface PredictedAction {\n action: string;\n confidence: number;\n alternatives: Array<{ action: string; confidence: number }>;\n}\n\nexport interface ServiceMetrics {\n backend: string;\n episodes: number;\n patterns: number;\n uptime: number;\n}\n\n/** Directory that holds agentdb.sqlite. Overridable for tests and embedders. */\nexport const AGENTDB_DIR_ENV = 'AGENTIC_FLOW_AGENTDB_DIR';\n\n// -- In-memory fallback store -----------------------------------------------\n\nclass InMemoryStore<T extends { id: number }> {\n private items = new Map<number, T>();\n private nextId = 1;\n\n add(item: Omit<T, 'id'>): number {\n const id = this.nextId++;\n this.items.set(id, { ...item, id } as unknown as T);\n return id;\n }\n\n search(predicate: (item: T) => boolean, limit: number): T[] {\n const out: T[] = [];\n for (const item of this.items.values()) {\n if (predicate(item)) out.push(item);\n if (out.length >= limit) break;\n }\n return out;\n }\n\n get size(): number { return this.items.size; }\n}\n\n// -- Service ----------------------------------------------------------------\n\nexport class AgentDBService {\n private static instance: AgentDBService | null = null;\n\n private agentdb: any = null;\n private db: any = null;\n private reflexionMemory: any = null;\n private reasoningBank: any = null;\n private learningSystem: any = null;\n private embeddingService: any = null;\n private learningSessionId: string | null = null;\n private exitHook: (() => void) | null = null;\n\n private episodeStore = new InMemoryStore<Episode>();\n private patternStore = new InMemoryStore<Pattern>();\n private trajectories: Array<{ steps: TrajectoryStep[]; reward: number }> = [];\n\n private backendName = 'in-memory';\n private startTime = Date.now();\n private initialized = false;\n\n private constructor() {}\n\n static async getInstance(): Promise<AgentDBService> {\n if (!AgentDBService.instance) {\n AgentDBService.instance = new AgentDBService();\n await AgentDBService.instance.initialize();\n }\n return AgentDBService.instance;\n }\n\n static resetInstance(): void { AgentDBService.instance = null; }\n\n /** 'agentdb' when the real AgentDB backend is active, otherwise 'in-memory'. */\n getBackendName(): string { return this.backendName; }\n\n // -- Init -----------------------------------------------------------------\n\n private async initialize(): Promise<void> {\n if (this.initialized) return;\n this.initialized = true;\n\n let agentdb: any;\n try {\n agentdb = await import(/* webpackIgnore: true */ 'agentdb');\n } catch {\n return; // AgentDB not installed — in-memory fallback\n }\n\n try {\n const dbDir = process.env[AGENTDB_DIR_ENV] || path.join(process.cwd(), '.claude-flow', 'agentdb');\n if (!fs.existsSync(dbDir)) fs.mkdirSync(dbDir, { recursive: true });\n const dbPath = path.join(dbDir, 'agentdb.sqlite');\n\n const AgentDB = agentdb.AgentDB ?? agentdb.default;\n this.db = new AgentDB({ dbPath });\n await this.db.initialize();\n\n this.embeddingService = new agentdb.EmbeddingService({\n model: 'Xenova/all-MiniLM-L6-v2', dimension: 384, provider: 'transformers',\n });\n await this.embeddingService.initialize();\n\n // AgentDB builds its own vector backend during initialize(); the\n // controllers here use the SQL-backed embedding search so they need no\n // separate backend (the alpha line's MutationGuard wrapper is gone).\n const database = this.db.database;\n this.reflexionMemory = new agentdb.ReflexionMemory(database, this.embeddingService);\n this.reasoningBank = new agentdb.ReasoningBank(database, this.embeddingService);\n this.learningSystem = new agentdb.LearningSystem(database, this.embeddingService);\n this.agentdb = agentdb;\n this.backendName = 'agentdb';\n this.saveOnExit(database);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[AgentDBService] AgentDB unavailable (${msg}), using in-memory fallback`);\n this.reflexionMemory = null;\n this.reasoningBank = null;\n this.learningSystem = null;\n this.backendName = 'in-memory';\n }\n }\n\n /**\n * better-sqlite3 writes through to disk. The sql.js WASM fallback (used when\n * the native module is not built) keeps everything in memory until save()\n * or close(), and a long-lived host such as an MCP server never calls\n * shutdown(). Saving after each write is not an option: in agentdb\n * 3.0.0-alpha.20, save() frees the cached prepared statements and the next\n * insert throws. So flush once, when the process exits.\n */\n private saveOnExit(database: any): void {\n if (!database || typeof database.save !== 'function') return;\n this.exitHook = () => {\n try { database.save(); } catch { /* nothing left to do at exit */ }\n };\n process.once('exit', this.exitHook);\n }\n\n // -- Episodes -------------------------------------------------------------\n\n async storeEpisode(episode: EpisodeData): Promise<string> {\n if (this.reflexionMemory) {\n try {\n return String(await this.reflexionMemory.storeEpisode(episode));\n } catch { this.reflexionMemory = null; }\n }\n return String(this.episodeStore.add({ ...episode, ts: Date.now(), id: 0 } as Episode));\n }\n\n async recallEpisodes(query: string, limit = 5, filters?: Record<string, any>): Promise<Episode[]> {\n const hasFilters = !!filters && Object.keys(filters).length > 0;\n if (this.reflexionMemory) {\n try {\n const fetchCount = hasFilters ? limit * 2 : limit;\n const results = await this.reflexionMemory.retrieveRelevant({ task: query, k: fetchCount });\n let episodes: Episode[] = (results ?? []).map((r: any) => ({\n id: r.id ?? 0, ts: r.ts ?? 0, sessionId: r.sessionId ?? '',\n task: r.task ?? '', input: r.input, output: r.output, critique: r.critique,\n reward: r.reward ?? 0, success: r.success ?? false, similarity: r.similarity,\n tags: r.tags, metadata: r.metadata,\n }));\n if (hasFilters && this.agentdb?.MetadataFilter) {\n try {\n episodes = this.agentdb.MetadataFilter.apply(episodes, filters);\n } catch { /* invalid filter — return unfiltered */ }\n }\n return episodes.slice(0, limit);\n } catch { this.reflexionMemory = null; }\n }\n const q = query.toLowerCase();\n return this.episodeStore.search((ep) => ep.task.toLowerCase().includes(q), limit);\n }\n\n // -- Patterns -------------------------------------------------------------\n\n async storePattern(pattern: PatternData): Promise<string> {\n if (this.reasoningBank) {\n try {\n return String(await this.reasoningBank.storePattern({\n taskType: pattern.taskType, approach: pattern.approach,\n successRate: pattern.successRate, tags: pattern.tags, metadata: pattern.metadata,\n }));\n } catch { this.reasoningBank = null; }\n }\n return String(this.patternStore.add({ ...pattern, id: 0, uses: 0 } as Pattern));\n }\n\n async searchPatterns(query: string, limit = 5): Promise<Pattern[]> {\n if (this.reasoningBank) {\n try {\n const results = await this.reasoningBank.searchPatterns({ task: query, k: limit });\n return (results ?? []).slice(0, limit).map((r: any) => ({\n id: r.id ?? 0, taskType: r.taskType ?? '', approach: r.approach ?? '',\n successRate: r.successRate ?? 0, uses: r.uses ?? 0,\n tags: r.tags, metadata: r.metadata, similarity: r.similarity,\n }));\n } catch { this.reasoningBank = null; }\n }\n const q = query.toLowerCase();\n return this.patternStore.search(\n (p) => p.taskType.toLowerCase().includes(q) || p.approach.toLowerCase().includes(q),\n limit,\n );\n }\n\n // -- Learning -------------------------------------------------------------\n\n /**\n * Record an agent trajectory into one long-lived Q-learning session, which\n * predictAction() then queries.\n */\n async recordTrajectory(steps: TrajectoryStep[], reward: number): Promise<void> {\n if (this.learningSystem) {\n try {\n if (!this.learningSessionId) {\n this.learningSessionId = await this.learningSystem.startSession(\n 'default', 'q-learning', { learningRate: 0.01, discountFactor: 0.99 },\n );\n }\n for (const step of steps) {\n await this.learningSystem.submitFeedback({\n sessionId: this.learningSessionId, action: step.action, state: step.state,\n reward: step.reward, nextState: step.nextState, success: step.reward > 0,\n timestamp: Date.now(),\n });\n }\n return;\n } catch {\n this.learningSystem = null;\n this.learningSessionId = null;\n }\n }\n this.trajectories.push({ steps, reward });\n }\n\n /**\n * Predict the next action for a state. AgentDB 3 exposes\n * `LearningSystem.predict(sessionId, state)`; the alpha line called a\n * `predictAction()` method that no longer exists and always fell through.\n */\n async predictAction(state: any): Promise<PredictedAction> {\n if (this.learningSystem && this.learningSessionId) {\n try {\n const stateStr = typeof state === 'string' ? state : JSON.stringify(state);\n const p = await this.learningSystem.predict(this.learningSessionId, stateStr);\n if (p?.action) {\n return {\n action: p.action,\n confidence: p.confidence ?? 0,\n alternatives: (p.alternatives ?? []).map((a: any) => ({ action: a.action, confidence: a.confidence ?? 0 })),\n };\n }\n } catch { /* fall through */ }\n }\n return { action: 'noop', confidence: 0, alternatives: [] };\n }\n\n // -- Metrics --------------------------------------------------------------\n\n /**\n * Counts come from the persistent store. AgentDB 3 has no\n * getEpisodeCount()/getPatternCount(), so episodes are counted in SQL and\n * patterns through ReasoningBank.getPatternStats().\n */\n async getMetrics(): Promise<ServiceMetrics> {\n let episodes = this.episodeStore.size;\n let patterns = this.patternStore.size;\n if (this.reflexionMemory && this.db) {\n try {\n const row = this.db.database.prepare('SELECT COUNT(*) AS c FROM episodes').get();\n if (row && typeof row.c === 'number') episodes = row.c;\n } catch { /* use in-memory count */ }\n }\n if (this.reasoningBank) {\n try {\n const stats = this.reasoningBank.getPatternStats();\n if (stats && typeof stats.totalPatterns === 'number') patterns = stats.totalPatterns;\n } catch { /* use in-memory count */ }\n }\n return { backend: this.backendName, episodes, patterns, uptime: Date.now() - this.startTime };\n }\n\n // -- Cleanup --------------------------------------------------------------\n\n async shutdown(): Promise<void> {\n if (this.exitHook) {\n process.removeListener('exit', this.exitHook);\n this.exitHook = null;\n }\n if (this.learningSystem && this.learningSessionId) {\n try { await this.learningSystem.endSession(this.learningSessionId); } catch { /* ignore */ }\n }\n if (this.db && typeof this.db.close === 'function') {\n try { await this.db.close(); } catch { /* ignore cleanup errors */ }\n }\n this.db = null;\n this.reflexionMemory = null;\n this.reasoningBank = null;\n this.learningSystem = null;\n this.learningSessionId = null;\n this.initialized = false;\n if (AgentDBService.instance === this) AgentDBService.instance = null;\n }\n}\n\n/**\n * Get or create the singleton AgentDBService instance\n */\nexport async function getAgentDBService(): Promise<AgentDBService> {\n return await AgentDBService.getInstance();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agentdb-service.js","sourceRoot":"","sources":["../../src/services/agentdb-service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AgentDB Integration Service\n *\n * Singleton service providing a unified interface to the AgentDB controllers\n * (ReflexionMemory, ReasoningBank, LearningSystem). AgentDB is loaded with a\n * dynamic import; when it is missing or fails to initialize, the service keeps\n * working on an in-memory store and reports `getBackendName() === 'in-memory'`.\n *\n * Ported from agentic-flow 3.0.0-alpha.2 and trimmed to the surface used by\n * AutopilotLearning. The alpha line imported AgentDB through monorepo-relative\n * paths (`../../../packages/agentdb/src/...`) that never resolved from an\n * installed package, so it always ran on the in-memory fallback. This version\n * resolves the published `agentdb` package instead.\n *\n * Nothing here writes to stdout: callers such as ruflo's MCP server use stdout\n * as their JSON-RPC channel.\n */\nimport * as path from 'path';\nimport * as fs from 'fs';\n\n// -- Public interfaces ------------------------------------------------------\n\nexport interface EpisodeData {\n sessionId: string;\n task: string;\n input?: string;\n output?: string;\n critique?: string;\n reward: number;\n success: boolean;\n latencyMs?: number;\n tokensUsed?: number;\n tags?: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface Episode extends EpisodeData {\n id: number;\n ts: number;\n similarity?: number;\n}\n\nexport interface PatternData {\n taskType: string;\n approach: string;\n successRate: number;\n tags?: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface Pattern extends PatternData {\n id: number;\n uses: number;\n similarity?: number;\n}\n\nexport interface TrajectoryStep {\n state: string;\n action: string;\n reward: number;\n nextState?: string;\n}\n\nexport interface PredictedAction {\n action: string;\n confidence: number;\n alternatives: Array<{ action: string; confidence: number }>;\n}\n\nexport interface ServiceMetrics {\n backend: string;\n episodes: number;\n patterns: number;\n uptime: number;\n}\n\n/** Directory that holds agentdb.sqlite. Overridable for tests and embedders. */\nexport const AGENTDB_DIR_ENV = 'AGENTIC_FLOW_AGENTDB_DIR';\n\n// -- In-memory fallback store -----------------------------------------------\n\nclass InMemoryStore<T extends { id: number }> {\n private items = new Map<number, T>();\n private nextId = 1;\n\n add(item: Omit<T, 'id'>): number {\n const id = this.nextId++;\n this.items.set(id, { ...item, id } as unknown as T);\n return id;\n }\n\n search(predicate: (item: T) => boolean, limit: number): T[] {\n const out: T[] = [];\n for (const item of this.items.values()) {\n if (predicate(item)) out.push(item);\n if (out.length >= limit) break;\n }\n return out;\n }\n\n get size(): number { return this.items.size; }\n}\n\n// -- Service ----------------------------------------------------------------\n\nexport class AgentDBService {\n private static instance: AgentDBService | null = null;\n\n private agentdb: any = null;\n private db: any = null;\n private reflexionMemory: any = null;\n private reasoningBank: any = null;\n private learningSystem: any = null;\n private embeddingService: any = null;\n private learningSessionId: string | null = null;\n private exitHook: (() => void) | null = null;\n\n private episodeStore = new InMemoryStore<Episode>();\n private patternStore = new InMemoryStore<Pattern>();\n private trajectories: Array<{ steps: TrajectoryStep[]; reward: number }> = [];\n\n private backendName = 'in-memory';\n private startTime = Date.now();\n private initialized = false;\n\n private constructor() {}\n\n static async getInstance(): Promise<AgentDBService> {\n if (!AgentDBService.instance) {\n AgentDBService.instance = new AgentDBService();\n await AgentDBService.instance.initialize();\n }\n return AgentDBService.instance;\n }\n\n static resetInstance(): void { AgentDBService.instance = null; }\n\n /** 'agentdb' when the real AgentDB backend is active, otherwise 'in-memory'. */\n getBackendName(): string { return this.backendName; }\n\n // -- Init -----------------------------------------------------------------\n\n private async initialize(): Promise<void> {\n if (this.initialized) return;\n this.initialized = true;\n\n let agentdb: any;\n try {\n agentdb = await import(/* webpackIgnore: true */ 'agentdb');\n } catch {\n return; // AgentDB not installed — in-memory fallback\n }\n\n try {\n const dbDir = process.env[AGENTDB_DIR_ENV] || path.join(process.cwd(), '.claude-flow', 'agentdb');\n if (!fs.existsSync(dbDir)) fs.mkdirSync(dbDir, { recursive: true });\n const dbPath = path.join(dbDir, 'agentdb.sqlite');\n\n const AgentDB = agentdb.AgentDB ?? agentdb.default;\n this.db = new AgentDB({ dbPath });\n await this.db.initialize();\n\n this.embeddingService = new agentdb.EmbeddingService({\n model: 'Xenova/all-MiniLM-L6-v2', dimension: 384, provider: 'transformers',\n });\n await this.embeddingService.initialize();\n\n // AgentDB builds its own vector backend during initialize(); the\n // controllers here use the SQL-backed embedding search so they need no\n // separate backend (the alpha line's MutationGuard wrapper is gone).\n const database = this.db.database;\n this.reflexionMemory = new agentdb.ReflexionMemory(database, this.embeddingService);\n this.reasoningBank = new agentdb.ReasoningBank(database, this.embeddingService);\n this.learningSystem = new agentdb.LearningSystem(database, this.embeddingService);\n this.agentdb = agentdb;\n this.backendName = 'agentdb';\n this.saveOnExit(database);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[AgentDBService] AgentDB unavailable (${msg}), using in-memory fallback`);\n this.reflexionMemory = null;\n this.reasoningBank = null;\n this.learningSystem = null;\n this.backendName = 'in-memory';\n }\n }\n\n /**\n * better-sqlite3 writes through to disk. The sql.js WASM fallback (used when\n * the native module is not built) keeps everything in memory until save()\n * or close(), and a long-lived host such as an MCP server never calls\n * shutdown(). Saving after each write is not an option: in agentdb\n * 3.0.0-alpha.20, save() frees the cached prepared statements and the next\n * insert throws. So flush once, when the process exits.\n */\n private saveOnExit(database: any): void {\n if (!database || typeof database.save !== 'function') return;\n this.exitHook = () => {\n try { database.save(); } catch { /* nothing left to do at exit */ }\n };\n process.once('exit', this.exitHook);\n }\n\n // -- Episodes -------------------------------------------------------------\n\n async storeEpisode(episode: EpisodeData): Promise<string> {\n if (this.reflexionMemory) {\n try {\n return String(await this.reflexionMemory.storeEpisode(episode));\n } catch { this.reflexionMemory = null; }\n }\n return String(this.episodeStore.add({ ...episode, ts: Date.now(), id: 0 } as Episode));\n }\n\n async recallEpisodes(query: string, limit = 5, filters?: Record<string, any>): Promise<Episode[]> {\n // ReflexionMemory filters reward/success/age itself; only the rest is\n // applied here, after an over-fetch.\n const { native, rest } = splitEpisodeFilters(filters);\n const hasFilters = Object.keys(rest).length > 0;\n if (this.reflexionMemory) {\n try {\n const fetchCount = hasFilters ? limit * 2 : limit;\n const results = await this.reflexionMemory.retrieveRelevant({ task: query, k: fetchCount, ...native });\n let episodes: Episode[] = (results ?? []).map((r: any) => ({\n id: r.id ?? 0, ts: r.ts ?? 0, sessionId: r.sessionId ?? '',\n task: r.task ?? '', input: r.input, output: r.output, critique: r.critique,\n reward: r.reward ?? 0, success: r.success ?? false, similarity: r.similarity,\n tags: r.tags, metadata: r.metadata,\n }));\n if (hasFilters && this.agentdb?.MetadataFilter) {\n try {\n episodes = this.agentdb.MetadataFilter.apply(episodes, rest);\n } catch { /* invalid filter — return unfiltered */ }\n }\n return episodes.slice(0, limit);\n } catch { this.reflexionMemory = null; }\n }\n const q = query.toLowerCase();\n return this.episodeStore.search(\n (ep) => ep.task.toLowerCase().includes(q) && matchesNativeEpisodeFilters(ep, native),\n limit\n );\n }\n\n // -- Patterns -------------------------------------------------------------\n\n async storePattern(pattern: PatternData): Promise<string> {\n if (this.reasoningBank) {\n try {\n return String(await this.reasoningBank.storePattern({\n taskType: pattern.taskType, approach: pattern.approach,\n successRate: pattern.successRate, tags: pattern.tags, metadata: pattern.metadata,\n }));\n } catch { this.reasoningBank = null; }\n }\n return String(this.patternStore.add({ ...pattern, id: 0, uses: 0 } as Pattern));\n }\n\n async searchPatterns(query: string, limit = 5): Promise<Pattern[]> {\n if (this.reasoningBank) {\n try {\n const results = await this.reasoningBank.searchPatterns({ task: query, k: limit });\n return (results ?? []).slice(0, limit).map((r: any) => ({\n id: r.id ?? 0, taskType: r.taskType ?? '', approach: r.approach ?? '',\n successRate: r.successRate ?? 0, uses: r.uses ?? 0,\n tags: r.tags, metadata: r.metadata, similarity: r.similarity,\n }));\n } catch { this.reasoningBank = null; }\n }\n const q = query.toLowerCase();\n return this.patternStore.search(\n (p) => p.taskType.toLowerCase().includes(q) || p.approach.toLowerCase().includes(q),\n limit,\n );\n }\n\n // -- Learning -------------------------------------------------------------\n\n /**\n * Record an agent trajectory into one long-lived Q-learning session, which\n * predictAction() then queries.\n */\n async recordTrajectory(steps: TrajectoryStep[], reward: number): Promise<void> {\n if (this.learningSystem) {\n try {\n if (!this.learningSessionId) {\n this.learningSessionId = await this.learningSystem.startSession(\n 'default', 'q-learning', { learningRate: 0.01, discountFactor: 0.99 },\n );\n }\n for (const step of steps) {\n await this.learningSystem.submitFeedback({\n sessionId: this.learningSessionId, action: step.action, state: step.state,\n reward: step.reward, nextState: step.nextState, success: step.reward > 0,\n timestamp: Date.now(),\n });\n }\n return;\n } catch {\n this.learningSystem = null;\n this.learningSessionId = null;\n }\n }\n this.trajectories.push({ steps, reward });\n }\n\n /**\n * Predict the next action for a state. AgentDB 3 exposes\n * `LearningSystem.predict(sessionId, state)`; the alpha line called a\n * `predictAction()` method that no longer exists and always fell through.\n */\n async predictAction(state: any): Promise<PredictedAction> {\n if (this.learningSystem && this.learningSessionId) {\n try {\n const stateStr = typeof state === 'string' ? state : JSON.stringify(state);\n const p = await this.learningSystem.predict(this.learningSessionId, stateStr);\n if (p?.action) {\n return {\n action: p.action,\n confidence: p.confidence ?? 0,\n alternatives: (p.alternatives ?? []).map((a: any) => ({ action: a.action, confidence: a.confidence ?? 0 })),\n };\n }\n } catch { /* fall through */ }\n }\n return { action: 'noop', confidence: 0, alternatives: [] };\n }\n\n // -- Metrics --------------------------------------------------------------\n\n /**\n * Counts come from the persistent store. AgentDB 3 has no\n * getEpisodeCount()/getPatternCount(), so episodes are counted in SQL and\n * patterns through ReasoningBank.getPatternStats().\n */\n async getMetrics(): Promise<ServiceMetrics> {\n let episodes = this.episodeStore.size;\n let patterns = this.patternStore.size;\n if (this.reflexionMemory && this.db) {\n try {\n const row = this.db.database.prepare('SELECT COUNT(*) AS c FROM episodes').get();\n if (row && typeof row.c === 'number') episodes = row.c;\n } catch { /* use in-memory count */ }\n }\n if (this.reasoningBank) {\n try {\n const stats = this.reasoningBank.getPatternStats();\n if (stats && typeof stats.totalPatterns === 'number') patterns = stats.totalPatterns;\n } catch { /* use in-memory count */ }\n }\n return { backend: this.backendName, episodes, patterns, uptime: Date.now() - this.startTime };\n }\n\n // -- Cleanup --------------------------------------------------------------\n\n async shutdown(): Promise<void> {\n if (this.exitHook) {\n process.removeListener('exit', this.exitHook);\n this.exitHook = null;\n }\n if (this.learningSystem && this.learningSessionId) {\n try { await this.learningSystem.endSession(this.learningSessionId); } catch { /* ignore */ }\n }\n if (this.db && typeof this.db.close === 'function') {\n try { await this.db.close(); } catch { /* ignore cleanup errors */ }\n }\n this.db = null;\n this.reflexionMemory = null;\n this.reasoningBank = null;\n this.learningSystem = null;\n this.learningSessionId = null;\n this.initialized = false;\n if (AgentDBService.instance === this) AgentDBService.instance = null;\n }\n}\n\n/**\n * Get or create the singleton AgentDBService instance\n */\nexport async function getAgentDBService(): Promise<AgentDBService> {\n return await AgentDBService.getInstance();\n}\n\n/** Filters ReflexionMemory.retrieveRelevant applies natively */\nexport interface NativeEpisodeFilters {\n minReward?: number;\n onlySuccesses?: boolean;\n onlyFailures?: boolean;\n timeWindowDays?: number;\n}\n\n/**\n * Split recallEpisodes filters into the part agentdb's ReflexionMemory\n * answers itself (`minReward`, `reward: {$gte}`, `success: true|false`,\n * `onlySuccesses`, `onlyFailures`, `timeWindowDays`) and the rest, which is\n * applied with MetadataFilter after retrieval.\n */\nexport function splitEpisodeFilters(filters?: Record<string, any>): {\n native: NativeEpisodeFilters;\n rest: Record<string, any>;\n} {\n const native: NativeEpisodeFilters = {};\n const rest: Record<string, any> = {};\n for (const [key, value] of Object.entries(filters ?? {})) {\n if (key === 'minReward' && typeof value === 'number') native.minReward = value;\n else if (key === 'timeWindowDays' && typeof value === 'number') native.timeWindowDays = value;\n else if (key === 'onlySuccesses' && typeof value === 'boolean') native.onlySuccesses = value;\n else if (key === 'onlyFailures' && typeof value === 'boolean') native.onlyFailures = value;\n else if (key === 'success' && typeof value === 'boolean') {\n if (value) native.onlySuccesses = true;\n else native.onlyFailures = true;\n } else if (\n key === 'reward' && value && typeof value === 'object' && !Array.isArray(value) &&\n typeof value.$gte === 'number'\n ) {\n native.minReward = Math.max(native.minReward ?? -Infinity, value.$gte);\n const { $gte, ...others } = value;\n if (Object.keys(others).length > 0) rest.reward = others;\n } else {\n rest[key] = value;\n }\n }\n return { native, rest };\n}\n\nfunction matchesNativeEpisodeFilters(ep: Episode, f: NativeEpisodeFilters): boolean {\n if (f.minReward !== undefined && !(ep.reward >= f.minReward)) return false;\n if (f.onlySuccesses && !ep.success) return false;\n if (f.onlyFailures && ep.success) return false;\n if (f.timeWindowDays !== undefined && ep.ts < Date.now() - f.timeWindowDays * 86_400_000) return false;\n return true;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentic-flow",
|
|
3
|
-
"version": "3.4.
|
|
3
|
+
"version": "3.4.3",
|
|
4
4
|
"description": "The agentic meta-harness — freeze the model, evolve the harness. An open runtime that routes each query to the cost-optimal model, evolves its own harness (planner/context/reviewer/retry/tool/memory/score policy) and autonomously repairs code, then orchestrates 66 specialized agents, 213 MCP tools, ReasoningBank memory, and multi-agent swarms on top. Built by @ruvnet on the Claude Agent SDK.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -176,7 +176,7 @@
|
|
|
176
176
|
"@ruvector/router": "^0.1.30",
|
|
177
177
|
"@ruvector/tiny-dancer": "^0.1.17",
|
|
178
178
|
"@supabase/supabase-js": "^2.78.0",
|
|
179
|
-
"agentdb": "^3.
|
|
179
|
+
"agentdb": "^3.7.2",
|
|
180
180
|
"axios": "^1.12.2",
|
|
181
181
|
"dotenv": "^16.4.5",
|
|
182
182
|
"express": "^5.1.0",
|
|
@@ -184,7 +184,7 @@
|
|
|
184
184
|
"glob": "^14.0.4",
|
|
185
185
|
"gun": "^0.2020.1241",
|
|
186
186
|
"http-proxy-middleware": "^3.0.5",
|
|
187
|
-
"ruvector": "^0.3.
|
|
187
|
+
"ruvector": "^0.3.14",
|
|
188
188
|
"ruvector-onnx-embeddings-wasm": "^0.1.2",
|
|
189
189
|
"tiktoken": "^1.0.22",
|
|
190
190
|
"ulid": "^3.0.1",
|
|
@@ -194,10 +194,10 @@
|
|
|
194
194
|
},
|
|
195
195
|
"optionalDependencies": {
|
|
196
196
|
"@rollup/rollup-darwin-arm64": "^4.59.0",
|
|
197
|
-
"@ruvector/attention": "^2.
|
|
197
|
+
"@ruvector/attention": "^2.3.0",
|
|
198
198
|
"@ruvector/mincut-wasm": "^2.3.0",
|
|
199
199
|
"@ruvector/sona": "^0.1.11",
|
|
200
|
-
"@ruvnet/sublinear-core": "^1.0.
|
|
200
|
+
"@ruvnet/sublinear-core": "^1.0.1",
|
|
201
201
|
"agent-booster": "^0.2.2",
|
|
202
202
|
"aidefence": "^3.0.2",
|
|
203
203
|
"better-sqlite3": "^11.10.0",
|