agentdb 3.0.0-alpha.11 → 3.0.0-alpha.13
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/dist/src/backends/graph/GraphDatabaseAdapter.d.ts +54 -0
- package/dist/src/backends/graph/GraphDatabaseAdapter.d.ts.map +1 -1
- package/dist/src/backends/graph/GraphDatabaseAdapter.js +125 -0
- package/dist/src/backends/graph/GraphDatabaseAdapter.js.map +1 -1
- package/dist/src/cli/agentdb-cli.js +0 -0
- package/dist/src/controllers/ReflexionMemory.d.ts +50 -0
- package/dist/src/controllers/ReflexionMemory.d.ts.map +1 -1
- package/dist/src/controllers/ReflexionMemory.js +258 -0
- package/dist/src/controllers/ReflexionMemory.js.map +1 -1
- package/dist/src/controllers/index.d.ts +2 -0
- package/dist/src/controllers/index.d.ts.map +1 -1
- package/dist/src/controllers/index.js +2 -0
- package/dist/src/controllers/index.js.map +1 -1
- package/dist/src/controllers/prerequisites.d.ts +76 -0
- package/dist/src/controllers/prerequisites.d.ts.map +1 -0
- package/dist/src/controllers/prerequisites.js +235 -0
- package/dist/src/controllers/prerequisites.js.map +1 -0
- package/dist/src/db-fallback.d.ts.map +1 -1
- package/dist/src/db-fallback.js +55 -45
- package/dist/src/db-fallback.js.map +1 -1
- package/package.json +1 -1
- package/dist/schemas/frontier-schema.sql +0 -378
- package/dist/schemas/schema.sql +0 -382
- package/dist/src/backends/index.cjs +0 -6
- package/dist/src/backends/ruvector/GuardedVectorBackend.d.ts +0 -93
- package/dist/src/backends/ruvector/GuardedVectorBackend.d.ts.map +0 -1
- package/dist/src/backends/ruvector/GuardedVectorBackend.js +0 -182
- package/dist/src/backends/ruvector/GuardedVectorBackend.js.map +0 -1
- package/dist/src/consensus/RaftConsensus.d.ts +0 -220
- package/dist/src/consensus/RaftConsensus.d.ts.map +0 -1
- package/dist/src/consensus/RaftConsensus.js +0 -762
- package/dist/src/consensus/RaftConsensus.js.map +0 -1
- package/dist/src/controllers/HierarchicalMemory.d.ts +0 -197
- package/dist/src/controllers/HierarchicalMemory.d.ts.map +0 -1
- package/dist/src/controllers/HierarchicalMemory.js +0 -519
- package/dist/src/controllers/HierarchicalMemory.js.map +0 -1
- package/dist/src/controllers/MemoryConsolidation.d.ts +0 -142
- package/dist/src/controllers/MemoryConsolidation.d.ts.map +0 -1
- package/dist/src/controllers/MemoryConsolidation.js +0 -479
- package/dist/src/controllers/MemoryConsolidation.js.map +0 -1
- package/dist/src/controllers/QUICConnection.d.ts +0 -122
- package/dist/src/controllers/QUICConnection.d.ts.map +0 -1
- package/dist/src/controllers/QUICConnection.js +0 -329
- package/dist/src/controllers/QUICConnection.js.map +0 -1
- package/dist/src/controllers/QUICConnectionPool.d.ts +0 -83
- package/dist/src/controllers/QUICConnectionPool.d.ts.map +0 -1
- package/dist/src/controllers/QUICConnectionPool.js +0 -256
- package/dist/src/controllers/QUICConnectionPool.js.map +0 -1
- package/dist/src/controllers/QUICStreamManager.d.ts +0 -114
- package/dist/src/controllers/QUICStreamManager.d.ts.map +0 -1
- package/dist/src/controllers/QUICStreamManager.js +0 -267
- package/dist/src/controllers/QUICStreamManager.js.map +0 -1
- package/dist/src/controllers/StreamingEmbeddingService.d.ts +0 -82
- package/dist/src/controllers/StreamingEmbeddingService.d.ts.map +0 -1
- package/dist/src/controllers/StreamingEmbeddingService.js +0 -243
- package/dist/src/controllers/StreamingEmbeddingService.js.map +0 -1
- package/dist/src/controllers/index.cjs +0 -6
- package/dist/src/coordination/MultiDatabaseCoordinator.d.ts +0 -348
- package/dist/src/coordination/MultiDatabaseCoordinator.d.ts.map +0 -1
- package/dist/src/coordination/MultiDatabaseCoordinator.js +0 -803
- package/dist/src/coordination/MultiDatabaseCoordinator.js.map +0 -1
- package/dist/src/coordination/index.d.ts +0 -10
- package/dist/src/coordination/index.d.ts.map +0 -1
- package/dist/src/coordination/index.js +0 -10
- package/dist/src/coordination/index.js.map +0 -1
- package/dist/src/index.cjs +0 -6
- package/dist/src/optimizations/RVFOptimizer.d.ts +0 -226
- package/dist/src/optimizations/RVFOptimizer.d.ts.map +0 -1
- package/dist/src/optimizations/RVFOptimizer.js +0 -541
- package/dist/src/optimizations/RVFOptimizer.js.map +0 -1
- package/dist/src/security/AttestationLog.d.ts +0 -70
- package/dist/src/security/AttestationLog.d.ts.map +0 -1
- package/dist/src/security/AttestationLog.js +0 -174
- package/dist/src/security/AttestationLog.js.map +0 -1
- package/dist/src/security/MutationGuard.d.ts +0 -83
- package/dist/src/security/MutationGuard.d.ts.map +0 -1
- package/dist/src/security/MutationGuard.js +0 -364
- package/dist/src/security/MutationGuard.js.map +0 -1
- package/dist/src/security/index.cjs +0 -6
- package/dist/src/security/index.d.ts +0 -15
- package/dist/src/security/index.d.ts.map +0 -1
- package/dist/src/security/index.js +0 -18
- package/dist/src/security/index.js.map +0 -1
- package/dist/src/services/GNNService.d.ts +0 -173
- package/dist/src/services/GNNService.d.ts.map +0 -1
- package/dist/src/services/GNNService.js +0 -639
- package/dist/src/services/GNNService.js.map +0 -1
- package/dist/src/services/GraphTransformerService.d.ts +0 -80
- package/dist/src/services/GraphTransformerService.d.ts.map +0 -1
- package/dist/src/services/GraphTransformerService.js +0 -369
- package/dist/src/services/GraphTransformerService.js.map +0 -1
- package/dist/src/services/SemanticRouter.d.ts +0 -83
- package/dist/src/services/SemanticRouter.d.ts.map +0 -1
- package/dist/src/services/SemanticRouter.js +0 -160
- package/dist/src/services/SemanticRouter.js.map +0 -1
- package/dist/src/services/SonaTrajectoryService.d.ts +0 -224
- package/dist/src/services/SonaTrajectoryService.d.ts.map +0 -1
- package/dist/src/services/SonaTrajectoryService.js +0 -539
- package/dist/src/services/SonaTrajectoryService.js.map +0 -1
- package/dist/src/utils/LegacyAttentionAdapter.d.ts +0 -93
- package/dist/src/utils/LegacyAttentionAdapter.d.ts.map +0 -1
- package/dist/src/utils/LegacyAttentionAdapter.js +0 -241
- package/dist/src/utils/LegacyAttentionAdapter.js.map +0 -1
- package/dist/src/utils/vector-math.d.ts +0 -29
- package/dist/src/utils/vector-math.d.ts.map +0 -1
- package/dist/src/utils/vector-math.js +0 -66
- package/dist/src/utils/vector-math.js.map +0 -1
|
@@ -122,6 +122,60 @@ export declare class GraphDatabaseAdapter {
|
|
|
122
122
|
* Generic createEdge method for graph traversal scenarios
|
|
123
123
|
*/
|
|
124
124
|
createEdge(edge: JsEdge): Promise<void>;
|
|
125
|
+
/**
|
|
126
|
+
* Delete a node by id. With `cascade: true` (default) all incident edges
|
|
127
|
+
* are removed in the same transaction (`DETACH DELETE`); with
|
|
128
|
+
* `cascade: false` the call refuses when incident edges exist (matching
|
|
129
|
+
* the spec from RuVector#427).
|
|
130
|
+
*
|
|
131
|
+
* @returns `deletedNode`: whether the node existed and was removed.
|
|
132
|
+
* `deletedEdges`: count of incident edges removed (only meaningful
|
|
133
|
+
* when `cascade: true`).
|
|
134
|
+
*/
|
|
135
|
+
deleteNode(id: string, opts?: {
|
|
136
|
+
cascade?: boolean;
|
|
137
|
+
}): Promise<{
|
|
138
|
+
deletedNode: boolean;
|
|
139
|
+
deletedEdges: number;
|
|
140
|
+
}>;
|
|
141
|
+
/**
|
|
142
|
+
* Delete a single edge by id. Endpoints stay intact.
|
|
143
|
+
*/
|
|
144
|
+
deleteEdge(id: string): Promise<{
|
|
145
|
+
deleted: boolean;
|
|
146
|
+
}>;
|
|
147
|
+
/**
|
|
148
|
+
* Delete a hyperedge by id. Member nodes stay intact.
|
|
149
|
+
*
|
|
150
|
+
* Hyperedges are stored as relationship-like entities in RuVector's graph;
|
|
151
|
+
* we use the same Cypher pattern as `deleteEdge` but match `:HYPEREDGE`
|
|
152
|
+
* to disambiguate when the storage represents both as relationships.
|
|
153
|
+
*/
|
|
154
|
+
deleteHyperedge(id: string): Promise<{
|
|
155
|
+
deleted: boolean;
|
|
156
|
+
}>;
|
|
157
|
+
/**
|
|
158
|
+
* Delete every edge between two endpoints, optionally filtered by label.
|
|
159
|
+
* Saves callers the cost of materialising edge ids first when they want to
|
|
160
|
+
* scrub a `(source, target [, label])` tuple wholesale.
|
|
161
|
+
*/
|
|
162
|
+
deleteEdgesByEndpoints(from: string, to: string, label?: string): Promise<{
|
|
163
|
+
deleted: number;
|
|
164
|
+
}>;
|
|
165
|
+
/**
|
|
166
|
+
* Cypher escaping for ids/strings. We single-quote the value, so any
|
|
167
|
+
* embedded single quote needs doubling, and backslashes are escaped to
|
|
168
|
+
* keep the binding's parser happy.
|
|
169
|
+
*/
|
|
170
|
+
private escapeId;
|
|
171
|
+
private escapeLabel;
|
|
172
|
+
/**
|
|
173
|
+
* Pull the first numeric value of column `col` out of a JsQueryResult.
|
|
174
|
+
* Different binding versions package row data slightly differently
|
|
175
|
+
* (`rows`, `nodes`, `edges`, `data`); this is the lowest-common-denominator
|
|
176
|
+
* extractor.
|
|
177
|
+
*/
|
|
178
|
+
private firstNumeric;
|
|
125
179
|
/**
|
|
126
180
|
* Get graph statistics
|
|
127
181
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphDatabaseAdapter.d.ts","sourceRoot":"","sources":["../../../../src/backends/graph/GraphDatabaseAdapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"GraphDatabaseAdapter.d.ts","sourceRoot":"","sources":["../../../../src/backends/graph/GraphDatabaseAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,KAAK,MAAM,GAAG;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC,CAAC;AAEF,KAAK,MAAM,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,YAAY,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,CAAC;AAUF,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,KAAK,CAAC,EAAE,GAAG,CAAC;CACb,CAAC;AAOF,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,WAAW,CAAC;CACtE;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,EAAE,CAAgB;IAC1B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,QAAQ,CAAM;gBAEV,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,GAAG;IAMtD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuCjC;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAsBlF;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAoB5E;;OAEG;IACG,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBlF;;;;;;;OAOG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAInD;;OAEG;IACG,qBAAqB,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAiBpF;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,GAAE,MAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAmBjF;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/C;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7C;;;;;;;;;OASG;IACG,UAAU,CACd,EAAE,EAAE,MAAM,EACV,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GAC/B,OAAO,CAAC;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IA4B1D;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAS3D;;;;;;OAMG;IACG,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAShE;;;;OAIG;IACG,sBAAsB,CAC1B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAW/B;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,WAAW;IAOnB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAyBpB;;OAEG;IACG,QAAQ;IAId;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIzC;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD;;OAEG;IACG,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;IAIlD;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -183,6 +183,131 @@ export class GraphDatabaseAdapter {
|
|
|
183
183
|
async createEdge(edge) {
|
|
184
184
|
await this.db.createEdge(edge);
|
|
185
185
|
}
|
|
186
|
+
// ==========================================================================
|
|
187
|
+
// Delete API (issue #150 — closes the gap from ruflo#1784 / RuVector#427)
|
|
188
|
+
//
|
|
189
|
+
// The native @ruvector/graph-node binding (currently 2.0.4) doesn't expose
|
|
190
|
+
// direct deleteNode / deleteEdge / deleteHyperedge methods, but `query()`
|
|
191
|
+
// accepts arbitrary Cypher. We implement deletes by routing through Cypher
|
|
192
|
+
// so downstream consumers (ruflo's adr-index, agent decommissioning, etc.)
|
|
193
|
+
// can keep the graph in sync with external sources of truth without
|
|
194
|
+
// rebuilding the whole database.
|
|
195
|
+
// ==========================================================================
|
|
196
|
+
/**
|
|
197
|
+
* Delete a node by id. With `cascade: true` (default) all incident edges
|
|
198
|
+
* are removed in the same transaction (`DETACH DELETE`); with
|
|
199
|
+
* `cascade: false` the call refuses when incident edges exist (matching
|
|
200
|
+
* the spec from RuVector#427).
|
|
201
|
+
*
|
|
202
|
+
* @returns `deletedNode`: whether the node existed and was removed.
|
|
203
|
+
* `deletedEdges`: count of incident edges removed (only meaningful
|
|
204
|
+
* when `cascade: true`).
|
|
205
|
+
*/
|
|
206
|
+
async deleteNode(id, opts = {}) {
|
|
207
|
+
const cascade = opts.cascade !== false;
|
|
208
|
+
const escaped = this.escapeId(id);
|
|
209
|
+
// Count incident edges before delete so we can return an accurate count
|
|
210
|
+
// regardless of whether the binding's stats include it.
|
|
211
|
+
const before = await this.db.query(`MATCH ({id: '${escaped}'})-[r]-() RETURN count(r) AS edgeCount`);
|
|
212
|
+
const edgeCount = this.firstNumeric(before, 'edgeCount') ?? 0;
|
|
213
|
+
if (!cascade && edgeCount > 0) {
|
|
214
|
+
throw new Error(`deleteNode('${id}', { cascade: false }): node has ${edgeCount} incident edge(s); ` +
|
|
215
|
+
`pass cascade: true to remove them in the same transaction.`);
|
|
216
|
+
}
|
|
217
|
+
const cypher = cascade
|
|
218
|
+
? `MATCH (n {id: '${escaped}'}) DETACH DELETE n RETURN count(n) AS deleted`
|
|
219
|
+
: `MATCH (n {id: '${escaped}'}) DELETE n RETURN count(n) AS deleted`;
|
|
220
|
+
const result = await this.db.query(cypher);
|
|
221
|
+
const deletedNode = (this.firstNumeric(result, 'deleted') ?? 0) > 0;
|
|
222
|
+
return { deletedNode, deletedEdges: cascade ? edgeCount : 0 };
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Delete a single edge by id. Endpoints stay intact.
|
|
226
|
+
*/
|
|
227
|
+
async deleteEdge(id) {
|
|
228
|
+
const escaped = this.escapeId(id);
|
|
229
|
+
const result = await this.db.query(`MATCH ()-[r {id: '${escaped}'}]-() DELETE r RETURN count(r) AS deleted`);
|
|
230
|
+
const deleted = (this.firstNumeric(result, 'deleted') ?? 0) > 0;
|
|
231
|
+
return { deleted };
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Delete a hyperedge by id. Member nodes stay intact.
|
|
235
|
+
*
|
|
236
|
+
* Hyperedges are stored as relationship-like entities in RuVector's graph;
|
|
237
|
+
* we use the same Cypher pattern as `deleteEdge` but match `:HYPEREDGE`
|
|
238
|
+
* to disambiguate when the storage represents both as relationships.
|
|
239
|
+
*/
|
|
240
|
+
async deleteHyperedge(id) {
|
|
241
|
+
const escaped = this.escapeId(id);
|
|
242
|
+
const result = await this.db.query(`MATCH ()-[r:HYPEREDGE {id: '${escaped}'}]-() DELETE r RETURN count(r) AS deleted`);
|
|
243
|
+
const deleted = (this.firstNumeric(result, 'deleted') ?? 0) > 0;
|
|
244
|
+
return { deleted };
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Delete every edge between two endpoints, optionally filtered by label.
|
|
248
|
+
* Saves callers the cost of materialising edge ids first when they want to
|
|
249
|
+
* scrub a `(source, target [, label])` tuple wholesale.
|
|
250
|
+
*/
|
|
251
|
+
async deleteEdgesByEndpoints(from, to, label) {
|
|
252
|
+
const f = this.escapeId(from);
|
|
253
|
+
const t = this.escapeId(to);
|
|
254
|
+
const labelClause = label ? `:${this.escapeLabel(label)}` : '';
|
|
255
|
+
const result = await this.db.query(`MATCH ({id: '${f}'})-[r${labelClause}]->({id: '${t}'}) DELETE r RETURN count(r) AS deleted`);
|
|
256
|
+
const deleted = this.firstNumeric(result, 'deleted') ?? 0;
|
|
257
|
+
return { deleted };
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Cypher escaping for ids/strings. We single-quote the value, so any
|
|
261
|
+
* embedded single quote needs doubling, and backslashes are escaped to
|
|
262
|
+
* keep the binding's parser happy.
|
|
263
|
+
*/
|
|
264
|
+
escapeId(value) {
|
|
265
|
+
return String(value).replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
|
266
|
+
}
|
|
267
|
+
escapeLabel(label) {
|
|
268
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(label)) {
|
|
269
|
+
throw new Error(`Invalid graph label: ${label}`);
|
|
270
|
+
}
|
|
271
|
+
return label;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Pull the first numeric value of column `col` out of a JsQueryResult.
|
|
275
|
+
* Different binding versions package row data slightly differently
|
|
276
|
+
* (`rows`, `nodes`, `edges`, `data`); this is the lowest-common-denominator
|
|
277
|
+
* extractor.
|
|
278
|
+
*/
|
|
279
|
+
firstNumeric(result, col) {
|
|
280
|
+
if (!result)
|
|
281
|
+
return null;
|
|
282
|
+
const candidates = [];
|
|
283
|
+
if (Array.isArray(result.rows))
|
|
284
|
+
candidates.push(...result.rows);
|
|
285
|
+
if (Array.isArray(result.data))
|
|
286
|
+
candidates.push(...result.data);
|
|
287
|
+
if (Array.isArray(result.nodes))
|
|
288
|
+
candidates.push(...result.nodes);
|
|
289
|
+
if (Array.isArray(result.edges))
|
|
290
|
+
candidates.push(...result.edges);
|
|
291
|
+
if (Array.isArray(result))
|
|
292
|
+
candidates.push(...result);
|
|
293
|
+
for (const row of candidates) {
|
|
294
|
+
if (row == null)
|
|
295
|
+
continue;
|
|
296
|
+
if (typeof row === 'object' && col in row) {
|
|
297
|
+
const v = row[col];
|
|
298
|
+
const n = typeof v === 'string' ? Number(v) : v;
|
|
299
|
+
if (typeof n === 'number' && !Number.isNaN(n))
|
|
300
|
+
return n;
|
|
301
|
+
}
|
|
302
|
+
if (typeof row === 'object' && row.properties && col in row.properties) {
|
|
303
|
+
const v = row.properties[col];
|
|
304
|
+
const n = typeof v === 'string' ? Number(v) : v;
|
|
305
|
+
if (typeof n === 'number' && !Number.isNaN(n))
|
|
306
|
+
return n;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
186
311
|
/**
|
|
187
312
|
* Get graph statistics
|
|
188
313
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphDatabaseAdapter.js","sourceRoot":"","sources":["../../../../src/backends/graph/GraphDatabaseAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAkFH;;;;;GAKG;AACH,MAAM,OAAO,oBAAoB;IACvB,EAAE,CAAgB;IAClB,MAAM,CAAsB;IAC5B,QAAQ,CAAM,CAAC,mBAAmB;IAE1C,YAAY,MAA2B,EAAE,QAAa;QACpD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,EAAE,GAAG,IAAW,CAAC,CAAC,sBAAsB;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,mCAAmC;YACnC,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAC7D,MAAM,aAAa,GAAI,eAAuB,CAAC,aAAa,CAAC;YAE7D,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;YAC3E,CAAC;YAED,sCAAsC;YACtC,IAAI,CAAC;gBACH,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;oBACtD,IAAI,CAAC,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;oBACtD,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;oBACzD,OAAO;gBACT,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,uDAAuD;YACzD,CAAC;YAED,sBAAsB;YACtB,IAAI,CAAC,EAAE,GAAG,IAAI,aAAa,CAAC;gBAC1B,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,QAAQ;gBACtD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,GAAG,EAAE,6CAA6C;gBACxF,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;aACrC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QAEvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,iDAAiD;gBACjD,oDAAoD;gBACpD,UAAW,KAAe,CAAC,OAAO,EAAE,CACrC,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,OAAoB,EAAE,SAAuB;QAC9D,MAAM,IAAI,GAAW;YACnB,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,WAAW,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YAChF,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,CAAC,SAAS,CAAC;YACnB,UAAU,EAAE;gBACV,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACjC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;gBACnC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;gBAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;gBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE;gBAChC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE;gBACvC,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,GAAG;gBACjD,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,GAAG;aAChD;SACF,CAAC;QAEF,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,KAAgB,EAAE,SAAuB;QACxD,MAAM,IAAI,GAAW;YACnB,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,SAAS,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YAC5E,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,CAAC,OAAO,CAAC;YACjB,UAAU,EAAE;gBACV,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE;gBACvC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE;gBACrC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE;gBACrC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE;gBACrC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;aACvB;SACF,CAAC;QAEF,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,IAAgB,EAAE,SAAuB;QAC9D,MAAM,SAAS,GAAW;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,WAAW,EAAE,IAAI,CAAC,SAAS;YAC3B,SAAS,EAAE,SAAS;YACpB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE;gBACR,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC9B,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;aACvC;SACF,CAAC;QAEF,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,CAAC,MAAc;QACxB,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,SAAuB,EAAE,IAAY,EAAE;QACjE,oCAAoC;QACpC,uEAAuE;QACvE,4CAA4C;QAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B,6FAA6F,CAAC,EAAE,CACjG,CAAC;QAEF,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,GAAG,IAAI,CAAC,UAAU;YAClB,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAC1C,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,MAAM;YAC3C,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;SAC/C,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,SAAuB,EAAE,IAAY,EAAE;QACxD,0CAA0C;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B,kCAAkC,CAAC,EAAE,CACtC,CAAC;QAEF,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE;YAChC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,EAAE;YAC9C,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE;YAChC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;YACrD,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC;YACrD,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC;YACnD,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC;YACnD,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;SAC3B,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB;QACpB,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,IAAY;QAClC,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,IAAY;QACpC,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,KAAe,EAAE,KAAe;QAChD,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK;QACH,mDAAmD;QACnD,2BAA2B;IAC7B,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"GraphDatabaseAdapter.js","sourceRoot":"","sources":["../../../../src/backends/graph/GraphDatabaseAdapter.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
@@ -52,6 +52,13 @@ export declare class ReflexionMemory {
|
|
|
52
52
|
/**
|
|
53
53
|
* Store a new episode with its critique and outcome
|
|
54
54
|
* Invalidates relevant cache entries
|
|
55
|
+
*
|
|
56
|
+
* Persistence guarantee (issue #128 fix):
|
|
57
|
+
* storeEpisode() always writes to the SQLite `episodes` and
|
|
58
|
+
* `episode_embeddings` tables when a SQL-capable connection is present,
|
|
59
|
+
* even when a graph or vector backend handles the primary index. This
|
|
60
|
+
* ensures data survives process restarts (graph/vector backends are
|
|
61
|
+
* often in-memory or rebuildable from SQL).
|
|
55
62
|
*/
|
|
56
63
|
storeEpisode(episode: Episode): Promise<number>;
|
|
57
64
|
/**
|
|
@@ -193,5 +200,48 @@ export declare class ReflexionMemory {
|
|
|
193
200
|
* Warm cache with common queries
|
|
194
201
|
*/
|
|
195
202
|
warmCache(sessionId?: string): Promise<void>;
|
|
203
|
+
/**
|
|
204
|
+
* Delete an episode by id. Closes the gap from issue #150 (downstream:
|
|
205
|
+
* ruflo#1784, RuVector#427) — once an episode is written there was no
|
|
206
|
+
* first-class way to remove it through any backend.
|
|
207
|
+
*
|
|
208
|
+
* Strategy mirrors storeEpisode: when a graph backend is present we go
|
|
209
|
+
* through it (`graphAdapter.deleteNode` / `graphBackend.deleteNode` —
|
|
210
|
+
* both Cypher-backed under the hood), and we ALWAYS also purge the SQL
|
|
211
|
+
* `episodes` and `episode_embeddings` rows so durable storage stays in
|
|
212
|
+
* sync. Vector backend entries are removed too when present.
|
|
213
|
+
*
|
|
214
|
+
* @returns True if the episode existed in any backend and was removed.
|
|
215
|
+
*/
|
|
216
|
+
deleteEpisode(id: number | string): Promise<boolean>;
|
|
217
|
+
/**
|
|
218
|
+
* Dual-write helper for issue #128.
|
|
219
|
+
*
|
|
220
|
+
* Inserts the given episode into the SQLite `episodes` and
|
|
221
|
+
* `episode_embeddings` tables when the underlying connection supports it.
|
|
222
|
+
* Used when a graph or vector backend handles the primary index but the
|
|
223
|
+
* caller still wants restart-safe persistence.
|
|
224
|
+
*
|
|
225
|
+
* Errors are swallowed and logged — the primary write to the graph/vector
|
|
226
|
+
* backend has already succeeded, and we don't want to fail the caller if
|
|
227
|
+
* SQL persistence is unavailable (e.g. read-only DB, schema not present).
|
|
228
|
+
*/
|
|
229
|
+
private dualWriteEpisodeToSQL;
|
|
230
|
+
/**
|
|
231
|
+
* Rebuild the in-memory vector index from the SQLite `episodes` /
|
|
232
|
+
* `episode_embeddings` tables, going through the proper backend channels
|
|
233
|
+
* so `retrieveRelevant()` sees the data afterwards.
|
|
234
|
+
*
|
|
235
|
+
* Fixes the user's recovery use-case from issue #129: rather than calling
|
|
236
|
+
* `vectorBackend.getInner().insert()` directly (which bypasses the
|
|
237
|
+
* GuardedBackend wrapper and confuses retrieveRelevant), call this method
|
|
238
|
+
* to re-hydrate the vector and graph indices from durable storage.
|
|
239
|
+
*
|
|
240
|
+
* Returns the number of episodes re-indexed. No-ops cleanly when the SQL
|
|
241
|
+
* tables are empty or absent.
|
|
242
|
+
*/
|
|
243
|
+
rebuildIndex(options?: {
|
|
244
|
+
fromTimestamp?: number;
|
|
245
|
+
}): Promise<number>;
|
|
196
246
|
}
|
|
197
247
|
//# sourceMappingURL=ReflexionMemory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReflexionMemory.d.ts","sourceRoot":"","sources":["../../../src/controllers/ReflexionMemory.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAgB,MAAM,4BAA4B,CAAC;AAEpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,6BAA6B,CAAC;AAG3E,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE1E,MAAM,WAAW,OAAO;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,oBAAqB,SAAQ,OAAO;IACnD,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAsB;IAChC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,UAAU,CAAa;gBAG7B,EAAE,EAAE,mBAAmB,EACvB,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,CAAC,EAAE,aAAa,EAC7B,eAAe,CAAC,EAAE,eAAe,EACjC,YAAY,CAAC,EAAE,YAAY,EAC3B,WAAW,CAAC,EAAE,gBAAgB;IAUhC
|
|
1
|
+
{"version":3,"file":"ReflexionMemory.d.ts","sourceRoot":"","sources":["../../../src/controllers/ReflexionMemory.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAgB,MAAM,4BAA4B,CAAC;AAEpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,6BAA6B,CAAC;AAG3E,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE1E,MAAM,WAAW,OAAO;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,oBAAqB,SAAQ,OAAO;IACnD,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAsB;IAChC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,UAAU,CAAa;gBAG7B,EAAE,EAAE,mBAAmB,EACvB,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,CAAC,EAAE,aAAa,EAC7B,eAAe,CAAC,EAAE,eAAe,EACjC,YAAY,CAAC,EAAE,YAAY,EAC3B,WAAW,CAAC,EAAE,gBAAgB;IAUhC;;;;;;;;;;OAUG;IACG,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAkJrD;;;OAGG;IACG,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IA4C9E;;OAEG;YACW,qBAAqB;IAgBnC;;OAEG;YACW,wBAAwB;IAsBtC;;OAEG;YACW,wBAAwB;IAatC;;OAEG;YACW,yBAAyB;IA0CvC;;OAEG;YACW,uBAAuB;IA6BrC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiB5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2BvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAwB5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwB9B;;OAEG;IACH,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,cAAc,CAAC,EAAE,MAAM,GACtB;QACD,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;KAC1B;IA0ED;;OAEG;IACG,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAkChE;;OAEG;IACG,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAqClE;;OAEG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA2BlF;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GAAG,MAAM;IAmCV,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;YACW,sBAAsB;IA4EpC;;OAEG;YACW,mBAAmB;IAoDjC;;OAEG;IACG,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QACxD,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IA4BF;;OAEG;IACG,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB5D;;OAEG;IACH,gBAAgB;IAOhB;;OAEG;IACH,aAAa;IAOb;;OAEG;IACH,aAAa;IAIb;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACG,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlD;;;;;;;;;;;;OAYG;IACG,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgF1D;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,qBAAqB;IAwC7B;;;;;;;;;;;;OAYG;IACG,YAAY,CAAC,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC;CAwG9E"}
|
|
@@ -28,6 +28,13 @@ export class ReflexionMemory {
|
|
|
28
28
|
/**
|
|
29
29
|
* Store a new episode with its critique and outcome
|
|
30
30
|
* Invalidates relevant cache entries
|
|
31
|
+
*
|
|
32
|
+
* Persistence guarantee (issue #128 fix):
|
|
33
|
+
* storeEpisode() always writes to the SQLite `episodes` and
|
|
34
|
+
* `episode_embeddings` tables when a SQL-capable connection is present,
|
|
35
|
+
* even when a graph or vector backend handles the primary index. This
|
|
36
|
+
* ensures data survives process restarts (graph/vector backends are
|
|
37
|
+
* often in-memory or rebuildable from SQL).
|
|
31
38
|
*/
|
|
32
39
|
async storeEpisode(episode) {
|
|
33
40
|
// Invalidate episode caches on write
|
|
@@ -57,6 +64,9 @@ export class ReflexionMemory {
|
|
|
57
64
|
const numericId = parseInt(nodeId.split('-').pop() || '0', 36);
|
|
58
65
|
// Register mapping for later use by CausalMemoryGraph
|
|
59
66
|
NodeIdMapper.getInstance().register(numericId, nodeId);
|
|
67
|
+
// #128: dual-write to SQL for restart-safe persistence. Graph adapter
|
|
68
|
+
// index is typically in-memory; SQL is the durable record.
|
|
69
|
+
this.dualWriteEpisodeToSQL(episode, taskEmbedding);
|
|
60
70
|
return numericId;
|
|
61
71
|
}
|
|
62
72
|
// Use generic GraphBackend if available
|
|
@@ -89,6 +99,8 @@ export class ReflexionMemory {
|
|
|
89
99
|
const numericId = parseInt(nodeId.split('-').pop() || '0', 36);
|
|
90
100
|
// Register mapping for later use by CausalMemoryGraph
|
|
91
101
|
NodeIdMapper.getInstance().register(numericId, nodeId);
|
|
102
|
+
// #128: dual-write to SQL for restart-safe persistence.
|
|
103
|
+
this.dualWriteEpisodeToSQL(episode, taskEmbedding);
|
|
92
104
|
return numericId;
|
|
93
105
|
}
|
|
94
106
|
// Fallback to SQLite (v1 compatibility)
|
|
@@ -812,5 +824,251 @@ export class ReflexionMemory {
|
|
|
812
824
|
}
|
|
813
825
|
});
|
|
814
826
|
}
|
|
827
|
+
/**
|
|
828
|
+
* Delete an episode by id. Closes the gap from issue #150 (downstream:
|
|
829
|
+
* ruflo#1784, RuVector#427) — once an episode is written there was no
|
|
830
|
+
* first-class way to remove it through any backend.
|
|
831
|
+
*
|
|
832
|
+
* Strategy mirrors storeEpisode: when a graph backend is present we go
|
|
833
|
+
* through it (`graphAdapter.deleteNode` / `graphBackend.deleteNode` —
|
|
834
|
+
* both Cypher-backed under the hood), and we ALWAYS also purge the SQL
|
|
835
|
+
* `episodes` and `episode_embeddings` rows so durable storage stays in
|
|
836
|
+
* sync. Vector backend entries are removed too when present.
|
|
837
|
+
*
|
|
838
|
+
* @returns True if the episode existed in any backend and was removed.
|
|
839
|
+
*/
|
|
840
|
+
async deleteEpisode(id) {
|
|
841
|
+
const numericId = typeof id === 'number' ? id : parseInt(String(id), 10);
|
|
842
|
+
const stringId = String(id);
|
|
843
|
+
// Invalidate caches up front — failures below shouldn't leave stale reads.
|
|
844
|
+
this.queryCache.invalidateCategory('episodes');
|
|
845
|
+
this.queryCache.invalidateCategory('task-stats');
|
|
846
|
+
let removed = false;
|
|
847
|
+
// 1. Graph adapter (AgentDB v2 fast path)
|
|
848
|
+
if (this.graphBackend && 'storeEpisode' in this.graphBackend) {
|
|
849
|
+
const adapter = this.graphBackend;
|
|
850
|
+
if (typeof adapter.deleteNode === 'function') {
|
|
851
|
+
try {
|
|
852
|
+
// Adapter accepts either the canonical "episode-<id>" key or a raw
|
|
853
|
+
// id; try the canonical form first since that's what storeEpisode
|
|
854
|
+
// emits.
|
|
855
|
+
const r = await adapter.deleteNode(`episode-${numericId}`, { cascade: true });
|
|
856
|
+
if (r?.deletedNode)
|
|
857
|
+
removed = true;
|
|
858
|
+
if (!removed) {
|
|
859
|
+
const r2 = await adapter.deleteNode(stringId, { cascade: true });
|
|
860
|
+
if (r2?.deletedNode)
|
|
861
|
+
removed = true;
|
|
862
|
+
}
|
|
863
|
+
}
|
|
864
|
+
catch (err) {
|
|
865
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
866
|
+
// eslint-disable-next-line no-console
|
|
867
|
+
console.warn(`[ReflexionMemory] deleteEpisode: graph adapter delete failed: ${msg}`);
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
// 2. Generic graph backend
|
|
872
|
+
else if (this.graphBackend && typeof this.graphBackend.deleteNode === 'function') {
|
|
873
|
+
try {
|
|
874
|
+
const r = await this.graphBackend.deleteNode(stringId);
|
|
875
|
+
if (r === true)
|
|
876
|
+
removed = true;
|
|
877
|
+
}
|
|
878
|
+
catch (err) {
|
|
879
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
880
|
+
// eslint-disable-next-line no-console
|
|
881
|
+
console.warn(`[ReflexionMemory] deleteEpisode: graph backend delete failed: ${msg}`);
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
// 3. Vector backend (HNSW/RuVector); some implementations don't expose
|
|
885
|
+
// delete — guard with a feature check.
|
|
886
|
+
if (this.vectorBackend && typeof this.vectorBackend.delete === 'function') {
|
|
887
|
+
try {
|
|
888
|
+
const r = await this.vectorBackend.delete(String(numericId));
|
|
889
|
+
if (r === true)
|
|
890
|
+
removed = true;
|
|
891
|
+
}
|
|
892
|
+
catch (err) {
|
|
893
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
894
|
+
// eslint-disable-next-line no-console
|
|
895
|
+
console.warn(`[ReflexionMemory] deleteEpisode: vector backend delete failed: ${msg}`);
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
// 4. SQL durable storage — always attempt so persistence stays clean
|
|
899
|
+
// even when the primary backend was a no-op.
|
|
900
|
+
if (this.db && typeof this.db.prepare === 'function' && Number.isFinite(numericId)) {
|
|
901
|
+
try {
|
|
902
|
+
const embStmt = this.db.prepare(`DELETE FROM episode_embeddings WHERE episode_id = ?`);
|
|
903
|
+
embStmt.run(numericId);
|
|
904
|
+
const stmt = this.db.prepare(`DELETE FROM episodes WHERE id = ?`);
|
|
905
|
+
const r = stmt.run(numericId);
|
|
906
|
+
const changes = r?.changes ?? 0;
|
|
907
|
+
if (changes > 0)
|
|
908
|
+
removed = true;
|
|
909
|
+
}
|
|
910
|
+
catch (err) {
|
|
911
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
912
|
+
if (!/no such table/i.test(msg)) {
|
|
913
|
+
// eslint-disable-next-line no-console
|
|
914
|
+
console.warn(`[ReflexionMemory] deleteEpisode: SQL delete failed: ${msg}`);
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
}
|
|
918
|
+
return removed;
|
|
919
|
+
}
|
|
920
|
+
/**
|
|
921
|
+
* Dual-write helper for issue #128.
|
|
922
|
+
*
|
|
923
|
+
* Inserts the given episode into the SQLite `episodes` and
|
|
924
|
+
* `episode_embeddings` tables when the underlying connection supports it.
|
|
925
|
+
* Used when a graph or vector backend handles the primary index but the
|
|
926
|
+
* caller still wants restart-safe persistence.
|
|
927
|
+
*
|
|
928
|
+
* Errors are swallowed and logged — the primary write to the graph/vector
|
|
929
|
+
* backend has already succeeded, and we don't want to fail the caller if
|
|
930
|
+
* SQL persistence is unavailable (e.g. read-only DB, schema not present).
|
|
931
|
+
*/
|
|
932
|
+
dualWriteEpisodeToSQL(episode, embedding) {
|
|
933
|
+
if (!this.db || typeof this.db.prepare !== 'function')
|
|
934
|
+
return;
|
|
935
|
+
try {
|
|
936
|
+
const stmt = this.db.prepare(`
|
|
937
|
+
INSERT INTO episodes (
|
|
938
|
+
session_id, task, input, output, critique, reward, success,
|
|
939
|
+
latency_ms, tokens_used, tags, metadata
|
|
940
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
941
|
+
`);
|
|
942
|
+
const tags = episode.tags ? JSON.stringify(episode.tags) : null;
|
|
943
|
+
const metadata = episode.metadata ? JSON.stringify(episode.metadata) : null;
|
|
944
|
+
const result = stmt.run(episode.sessionId, episode.task, episode.input ?? null, episode.output ?? null, episode.critique ?? null, episode.reward, episode.success ? 1 : 0, episode.latencyMs ?? null, episode.tokensUsed ?? null, tags, metadata);
|
|
945
|
+
if (embedding) {
|
|
946
|
+
const episodeId = normalizeRowId(result.lastInsertRowid);
|
|
947
|
+
this.storeEmbedding(episodeId, embedding);
|
|
948
|
+
}
|
|
949
|
+
}
|
|
950
|
+
catch (err) {
|
|
951
|
+
// The expected failure here is "no such table: episodes" on databases
|
|
952
|
+
// that intentionally don't carry the v1 schema. Don't escalate — the
|
|
953
|
+
// primary backend already has the data.
|
|
954
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
955
|
+
if (!/no such table/i.test(msg)) {
|
|
956
|
+
// eslint-disable-next-line no-console
|
|
957
|
+
console.warn('[ReflexionMemory] dualWriteEpisodeToSQL failed:', msg);
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
/**
|
|
962
|
+
* Rebuild the in-memory vector index from the SQLite `episodes` /
|
|
963
|
+
* `episode_embeddings` tables, going through the proper backend channels
|
|
964
|
+
* so `retrieveRelevant()` sees the data afterwards.
|
|
965
|
+
*
|
|
966
|
+
* Fixes the user's recovery use-case from issue #129: rather than calling
|
|
967
|
+
* `vectorBackend.getInner().insert()` directly (which bypasses the
|
|
968
|
+
* GuardedBackend wrapper and confuses retrieveRelevant), call this method
|
|
969
|
+
* to re-hydrate the vector and graph indices from durable storage.
|
|
970
|
+
*
|
|
971
|
+
* Returns the number of episodes re-indexed. No-ops cleanly when the SQL
|
|
972
|
+
* tables are empty or absent.
|
|
973
|
+
*/
|
|
974
|
+
async rebuildIndex(options = {}) {
|
|
975
|
+
if (!this.db || typeof this.db.prepare !== 'function')
|
|
976
|
+
return 0;
|
|
977
|
+
const where = options.fromTimestamp !== undefined ? 'WHERE e.ts >= ?' : '';
|
|
978
|
+
const params = options.fromTimestamp !== undefined ? [options.fromTimestamp] : [];
|
|
979
|
+
let rows = [];
|
|
980
|
+
try {
|
|
981
|
+
const stmt = this.db.prepare(`
|
|
982
|
+
SELECT
|
|
983
|
+
e.id, e.ts, e.session_id, e.task, e.input, e.output, e.critique,
|
|
984
|
+
e.reward, e.success, e.latency_ms, e.tokens_used, e.tags, e.metadata,
|
|
985
|
+
ee.embedding
|
|
986
|
+
FROM episodes e
|
|
987
|
+
LEFT JOIN episode_embeddings ee ON ee.episode_id = e.id
|
|
988
|
+
${where}
|
|
989
|
+
ORDER BY e.id ASC
|
|
990
|
+
`);
|
|
991
|
+
rows = stmt.all(...params);
|
|
992
|
+
}
|
|
993
|
+
catch (err) {
|
|
994
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
995
|
+
if (/no such table/i.test(msg))
|
|
996
|
+
return 0;
|
|
997
|
+
throw err;
|
|
998
|
+
}
|
|
999
|
+
let reindexed = 0;
|
|
1000
|
+
for (const row of rows) {
|
|
1001
|
+
const episode = {
|
|
1002
|
+
id: row.id,
|
|
1003
|
+
ts: row.ts,
|
|
1004
|
+
sessionId: row.session_id,
|
|
1005
|
+
task: row.task,
|
|
1006
|
+
input: row.input ?? undefined,
|
|
1007
|
+
output: row.output ?? undefined,
|
|
1008
|
+
critique: row.critique ?? undefined,
|
|
1009
|
+
reward: row.reward,
|
|
1010
|
+
success: row.success === 1,
|
|
1011
|
+
latencyMs: row.latency_ms ?? undefined,
|
|
1012
|
+
tokensUsed: row.tokens_used ?? undefined,
|
|
1013
|
+
tags: row.tags ? JSON.parse(row.tags) : undefined,
|
|
1014
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
|
|
1015
|
+
};
|
|
1016
|
+
// Prefer the stored embedding; fall back to recomputing if missing.
|
|
1017
|
+
let embedding;
|
|
1018
|
+
if (row.embedding) {
|
|
1019
|
+
const buf = row.embedding;
|
|
1020
|
+
embedding = new Float32Array(buf.buffer, buf.byteOffset, buf.length / 4);
|
|
1021
|
+
}
|
|
1022
|
+
else {
|
|
1023
|
+
embedding = await this.embedder.embed(this.buildEpisodeText(episode));
|
|
1024
|
+
}
|
|
1025
|
+
// Re-insert through the proper public APIs so the GuardedBackend
|
|
1026
|
+
// wrapper, graph adapter, and HNSW all stay in sync.
|
|
1027
|
+
if (this.vectorBackend) {
|
|
1028
|
+
try {
|
|
1029
|
+
this.vectorBackend.insert(String(row.id), embedding, {
|
|
1030
|
+
type: 'episode',
|
|
1031
|
+
sessionId: episode.sessionId,
|
|
1032
|
+
reward: episode.reward,
|
|
1033
|
+
success: episode.success,
|
|
1034
|
+
});
|
|
1035
|
+
}
|
|
1036
|
+
catch (err) {
|
|
1037
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
1038
|
+
// eslint-disable-next-line no-console
|
|
1039
|
+
console.warn(`[ReflexionMemory] rebuildIndex: vector insert failed for ${row.id}: ${msg}`);
|
|
1040
|
+
}
|
|
1041
|
+
}
|
|
1042
|
+
if (this.graphBackend && 'storeEpisode' in this.graphBackend) {
|
|
1043
|
+
const adapter = this.graphBackend;
|
|
1044
|
+
try {
|
|
1045
|
+
await adapter.storeEpisode({
|
|
1046
|
+
id: `episode-${row.id}`,
|
|
1047
|
+
sessionId: episode.sessionId,
|
|
1048
|
+
task: episode.task,
|
|
1049
|
+
reward: episode.reward,
|
|
1050
|
+
success: episode.success,
|
|
1051
|
+
input: episode.input,
|
|
1052
|
+
output: episode.output,
|
|
1053
|
+
critique: episode.critique,
|
|
1054
|
+
createdAt: (episode.ts ?? Date.now() / 1000) * 1000,
|
|
1055
|
+
tokensUsed: episode.tokensUsed,
|
|
1056
|
+
latencyMs: episode.latencyMs,
|
|
1057
|
+
}, embedding);
|
|
1058
|
+
}
|
|
1059
|
+
catch (err) {
|
|
1060
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
1061
|
+
// eslint-disable-next-line no-console
|
|
1062
|
+
console.warn(`[ReflexionMemory] rebuildIndex: graph store failed for ${row.id}: ${msg}`);
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
1065
|
+
reindexed++;
|
|
1066
|
+
}
|
|
1067
|
+
// Bust any stale read caches so the next retrieveRelevant sees the
|
|
1068
|
+
// freshly-rebuilt index.
|
|
1069
|
+
this.queryCache.invalidateCategory('episodes');
|
|
1070
|
+
this.queryCache.invalidateCategory('task-stats');
|
|
1071
|
+
return reindexed;
|
|
1072
|
+
}
|
|
815
1073
|
}
|
|
816
1074
|
//# sourceMappingURL=ReflexionMemory.js.map
|