@windagency/valora-plugin-memory-vault 1.0.0

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.

Potentially problematic release.


This version of @windagency/valora-plugin-memory-vault might be problematic. Click here for more details.

Files changed (94) hide show
  1. package/dist/config-schema.d.ts +134 -0
  2. package/dist/config-schema.d.ts.map +1 -0
  3. package/dist/config-schema.js +61 -0
  4. package/dist/config-schema.js.map +1 -0
  5. package/dist/consolidation/cluster.d.ts +17 -0
  6. package/dist/consolidation/cluster.d.ts.map +1 -0
  7. package/dist/consolidation/cluster.js +59 -0
  8. package/dist/consolidation/cluster.js.map +1 -0
  9. package/dist/consolidation-service.d.ts +75 -0
  10. package/dist/consolidation-service.d.ts.map +1 -0
  11. package/dist/consolidation-service.js +373 -0
  12. package/dist/consolidation-service.js.map +1 -0
  13. package/dist/constants.d.ts +30 -0
  14. package/dist/constants.d.ts.map +1 -0
  15. package/dist/constants.js +30 -0
  16. package/dist/constants.js.map +1 -0
  17. package/dist/decay.d.ts +51 -0
  18. package/dist/decay.d.ts.map +1 -0
  19. package/dist/decay.js +59 -0
  20. package/dist/decay.js.map +1 -0
  21. package/dist/embeddings/embedder.port.d.ts +9 -0
  22. package/dist/embeddings/embedder.port.d.ts.map +1 -0
  23. package/dist/embeddings/embedder.port.js +2 -0
  24. package/dist/embeddings/embedder.port.js.map +1 -0
  25. package/dist/embeddings/llm-provider-embedder.d.ts +26 -0
  26. package/dist/embeddings/llm-provider-embedder.d.ts.map +1 -0
  27. package/dist/embeddings/llm-provider-embedder.js +34 -0
  28. package/dist/embeddings/llm-provider-embedder.js.map +1 -0
  29. package/dist/embeddings/resolve-embedder.d.ts +27 -0
  30. package/dist/embeddings/resolve-embedder.d.ts.map +1 -0
  31. package/dist/embeddings/resolve-embedder.js +38 -0
  32. package/dist/embeddings/resolve-embedder.js.map +1 -0
  33. package/dist/embeddings/vector-store.d.ts +35 -0
  34. package/dist/embeddings/vector-store.d.ts.map +1 -0
  35. package/dist/embeddings/vector-store.js +174 -0
  36. package/dist/embeddings/vector-store.js.map +1 -0
  37. package/dist/extraction-service.d.ts +33 -0
  38. package/dist/extraction-service.d.ts.map +1 -0
  39. package/dist/extraction-service.js +168 -0
  40. package/dist/extraction-service.js.map +1 -0
  41. package/dist/index.d.ts +42 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +6498 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/manager.d.ts +62 -0
  46. package/dist/manager.d.ts.map +1 -0
  47. package/dist/manager.js +377 -0
  48. package/dist/manager.js.map +1 -0
  49. package/dist/migration/auto-migrate.d.ts +20 -0
  50. package/dist/migration/auto-migrate.d.ts.map +1 -0
  51. package/dist/migration/auto-migrate.js +49 -0
  52. package/dist/migration/auto-migrate.js.map +1 -0
  53. package/dist/migration/json-to-vault.d.ts +10 -0
  54. package/dist/migration/json-to-vault.d.ts.map +1 -0
  55. package/dist/migration/json-to-vault.js +88 -0
  56. package/dist/migration/json-to-vault.js.map +1 -0
  57. package/dist/migration/vault-version.d.ts +4 -0
  58. package/dist/migration/vault-version.d.ts.map +1 -0
  59. package/dist/migration/vault-version.js +19 -0
  60. package/dist/migration/vault-version.js.map +1 -0
  61. package/dist/retrieval/cosine-ann.d.ts +13 -0
  62. package/dist/retrieval/cosine-ann.d.ts.map +1 -0
  63. package/dist/retrieval/cosine-ann.js +26 -0
  64. package/dist/retrieval/cosine-ann.js.map +1 -0
  65. package/dist/retrieval/spreading-activation.d.ts +12 -0
  66. package/dist/retrieval/spreading-activation.d.ts.map +1 -0
  67. package/dist/retrieval/spreading-activation.js +70 -0
  68. package/dist/retrieval/spreading-activation.js.map +1 -0
  69. package/dist/store.d.ts +38 -0
  70. package/dist/store.d.ts.map +1 -0
  71. package/dist/store.js +192 -0
  72. package/dist/store.js.map +1 -0
  73. package/dist/vault/default-vault-dir.d.ts +17 -0
  74. package/dist/vault/default-vault-dir.d.ts.map +1 -0
  75. package/dist/vault/default-vault-dir.js +23 -0
  76. package/dist/vault/default-vault-dir.js.map +1 -0
  77. package/dist/vault/file-format.d.ts +44 -0
  78. package/dist/vault/file-format.d.ts.map +1 -0
  79. package/dist/vault/file-format.js +214 -0
  80. package/dist/vault/file-format.js.map +1 -0
  81. package/dist/vault/vault-index.d.ts +28 -0
  82. package/dist/vault/vault-index.d.ts.map +1 -0
  83. package/dist/vault/vault-index.js +98 -0
  84. package/dist/vault/vault-index.js.map +1 -0
  85. package/dist/vault/vault-store.d.ts +75 -0
  86. package/dist/vault/vault-store.d.ts.map +1 -0
  87. package/dist/vault/vault-store.js +369 -0
  88. package/dist/vault/vault-store.js.map +1 -0
  89. package/dist/vault-memory-provider.d.ts +53 -0
  90. package/dist/vault-memory-provider.d.ts.map +1 -0
  91. package/dist/vault-memory-provider.js +139 -0
  92. package/dist/vault-memory-provider.js.map +1 -0
  93. package/package.json +58 -0
  94. package/valora-plugin.json +10 -0
@@ -0,0 +1,369 @@
1
+ import { getLogger } from '@windagency/valora-runtime';
2
+ import { existsSync, readFileSync, rmSync } from 'node:fs';
3
+ import * as path from 'node:path';
4
+ import {
5
+ DEFAULT_MEMORY_PRUNE_THRESHOLD,
6
+ DEFAULT_MEMORY_RECALL_SEED_K,
7
+ DEFAULT_MEMORY_RECALL_WALK_DECAY,
8
+ DEFAULT_MEMORY_RECALL_WALK_DEPTH,
9
+ MEMORY_STORE_VERSION
10
+ } from '../constants.js';
11
+ import { computeStrength } from '../decay.js';
12
+ import { openVectorStore } from '../embeddings/vector-store.js';
13
+ import { readVaultVersion, writeVaultVersion } from '../migration/vault-version.js';
14
+ import { topKCosine } from '../retrieval/cosine-ann.js';
15
+ import { spreadActivation } from '../retrieval/spreading-activation.js';
16
+ import { atomicWriteFile, parseVaultLinks, serialiseMemoryFile } from './file-format.js';
17
+ import {
18
+ addRecord,
19
+ buildVaultIndex,
20
+ createEmptyIndex,
21
+ removeRecord,
22
+ synthesiseCoAccessedEdges
23
+ } from './vault-index.js';
24
+ const ALL_CATEGORIES = ['episodic', 'semantic', 'decisions'];
25
+ const META_FILENAME = 'meta.json';
26
+ export class VaultStore {
27
+ index;
28
+ indexLoaded = false;
29
+ meta = new Map();
30
+ vaultDir;
31
+ constructor(vaultDir) {
32
+ this.vaultDir = vaultDir;
33
+ this.index = createEmptyIndex();
34
+ }
35
+ async appendEntry(category, entry, links = []) {
36
+ return this.appendEntryWithLinks(category, entry, links);
37
+ }
38
+ appendEntryWithLinks(category, entry, links) {
39
+ this.ensureIndex();
40
+ const mdPath = this.mdPath(category, entry.id);
41
+ atomicWriteFile(mdPath, serialiseMemoryFile(entry, links));
42
+ addRecord(this.index, { entry, links, mdPath });
43
+ this.touchMeta(category);
44
+ return Promise.resolve();
45
+ }
46
+ async flush() {
47
+ // writes are immediate — nothing to flush
48
+ }
49
+ getEntries(category) {
50
+ this.ensureIndex();
51
+ const ids = this.index.byCategory.get(category);
52
+ if (!ids) return Promise.resolve([]);
53
+ return Promise.resolve([...ids].map((id) => this.index.byId.get(id)?.entry).filter((e) => e !== undefined));
54
+ }
55
+ getMetadata(category) {
56
+ this.ensureIndex();
57
+ const meta = this.meta.get(category) ?? { lastWrittenAt: new Date().toISOString() };
58
+ return Promise.resolve({
59
+ lastConsolidatedAt: meta.lastConsolidatedAt,
60
+ lastWrittenAt: meta.lastWrittenAt,
61
+ version: MEMORY_STORE_VERSION
62
+ });
63
+ }
64
+ getVaultDir() {
65
+ return this.vaultDir;
66
+ }
67
+ getVaultIndex() {
68
+ this.ensureIndex();
69
+ return Promise.resolve(this.index);
70
+ }
71
+ /** Additional stat surface for the `valora memory info` command. */
72
+ getVaultStats() {
73
+ this.ensureIndex();
74
+ const entryCount = this.index.byId.size;
75
+ let edgeCount = 0;
76
+ for (const [, edges] of this.index.outEdges) edgeCount += edges.length;
77
+ let embeddedCount = 0;
78
+ for (const [, record] of this.index.byId) {
79
+ if (record.entry.embeddingModel !== undefined) embeddedCount++;
80
+ }
81
+ const embeddingCoverage = entryCount === 0 ? 0 : embeddedCount / entryCount;
82
+ return { edgeCount, embeddingCoverage, entryCount };
83
+ }
84
+ async removeEntries(category, ids) {
85
+ this.ensureIndex();
86
+ let count = 0;
87
+ for (const id of ids) {
88
+ if (await this.removeEntry(category, id)) count++;
89
+ }
90
+ return count;
91
+ }
92
+ removeEntry(category, id) {
93
+ this.ensureIndex();
94
+ const record = this.index.byId.get(id);
95
+ if (record?.entry.category !== category) return Promise.resolve(false);
96
+ try {
97
+ rmSync(record.mdPath);
98
+ } catch (err) {
99
+ getLogger().warn(`Vault: could not delete ${record.mdPath}: ${String(err)}`);
100
+ }
101
+ removeRecord(this.index, id);
102
+ return Promise.resolve(true);
103
+ }
104
+ save(_category, _immediate) {
105
+ // no-op: vault writes are atomic and immediate
106
+ }
107
+ async semanticRecall(options, limit, embedder, recallConfig = {}) {
108
+ const text = options.text;
109
+ if (text === undefined || text.length === 0) return null;
110
+ const index = await this.getVaultIndex();
111
+ const embedResult = await embedder.embed({ input: [text] });
112
+ const queryVec = new Float32Array(embedResult.vectors[0] ?? []);
113
+ const vs = openVectorStore(this.vaultDir, embedResult.model, embedResult.dim);
114
+ const minStrength = options.minStrength ?? DEFAULT_MEMORY_PRUNE_THRESHOLD;
115
+ const candidateIds = collectVaultCandidates(index, options, minStrength);
116
+ // Skip entries whose body has drifted from their stored content_hash — their
117
+ // embedding vector reflects the old content and would mis-seed activation.
118
+ // Detection happens at parse time (file-format.ts); the entry is reincluded
119
+ // once a future reembed updates the hash.
120
+ const freshCandidateIds = candidateIds.filter((id) => index.byId.get(id)?.entry.embeddingStale !== true);
121
+ const seedK = recallConfig.seed_k ?? DEFAULT_MEMORY_RECALL_SEED_K;
122
+ const seeds = buildVaultSeeds(queryVec, vs, freshCandidateIds, seedK);
123
+ // Empty seeds → null signals the caller (manager) should fall back to lexical.
124
+ if (seeds.size === 0) return null;
125
+ const walkDepth = recallConfig.walk_depth ?? DEFAULT_MEMORY_RECALL_WALK_DEPTH;
126
+ const walkDecay = recallConfig.walk_decay ?? DEFAULT_MEMORY_RECALL_WALK_DECAY;
127
+ const scores = spreadActivation(seeds, index.byId, index.outEdges, index.inEdges, walkDepth, walkDecay);
128
+ return rankVaultResults(scores, index, limit);
129
+ }
130
+ async setEntries(category, entries) {
131
+ this.ensureIndex();
132
+ // Snapshot the full VaultRecord (entry + programmatic links) so rollback
133
+ // can restore edges that are not embedded in the content body.
134
+ const beforeRecords = this.snapshotCategory(category);
135
+ const beforeIds = new Set(beforeRecords.map((r) => r.entry.id));
136
+ const newIds = new Set(entries.map((e) => e.id));
137
+ try {
138
+ for (const id of beforeIds) {
139
+ if (!newIds.has(id)) await this.removeEntry(category, id);
140
+ }
141
+ for (const entry of entries) {
142
+ if (beforeIds.has(entry.id)) {
143
+ await this.updateEntry(category, entry.id, entry);
144
+ } else {
145
+ await this.appendEntry(category, entry);
146
+ }
147
+ }
148
+ } catch (err) {
149
+ getLogger().warn(`Vault.setEntries: rolling back due to error: ${String(err)}`);
150
+ await this.rollbackSetEntries(category, beforeRecords);
151
+ throw err;
152
+ }
153
+ }
154
+ setLastConsolidatedAt(timestamp) {
155
+ this.ensureIndex();
156
+ for (const category of ALL_CATEGORIES) {
157
+ const meta = this.meta.get(category) ?? { lastWrittenAt: new Date().toISOString() };
158
+ meta.lastConsolidatedAt = timestamp;
159
+ this.meta.set(category, meta);
160
+ }
161
+ this.persistMeta();
162
+ return Promise.resolve();
163
+ }
164
+ updateEntry(category, id, patch) {
165
+ this.ensureIndex();
166
+ const record = this.index.byId.get(id);
167
+ if (record?.entry.category !== category) return Promise.resolve(false);
168
+ const updated = { ...record.entry, ...patch };
169
+ // If the patch changed `content`, re-derive any wikilinks embedded in
170
+ // the new body so they are not lost. Inline links from the previous
171
+ // content are dropped; links not present in the new body should not
172
+ // appear in the file. Frontmatter-managed `coAccess` is unaffected.
173
+ const links = patch.content !== undefined ? parseVaultLinks(id, patch.content) : record.links;
174
+ atomicWriteFile(record.mdPath, serialiseMemoryFile(updated, links));
175
+ this.index.byId.set(id, { ...record, entry: updated, links });
176
+ this.refreshSecondaryIndexes(record.entry, updated);
177
+ // Compute the full edge set (explicit links + synthesised co_accessed)
178
+ // for both the previous and updated record so the in-memory inEdges/outEdges
179
+ // stay consistent with what addRecord would build on a fresh reload.
180
+ const previousOut = this.index.outEdges.get(id) ?? [];
181
+ const nextOut = [...links, ...synthesiseCoAccessedEdges(updated)];
182
+ for (const edge of previousOut) this.index.inEdges.get(edge.toId)?.delete(id);
183
+ this.index.outEdges.set(id, nextOut);
184
+ for (const edge of nextOut) {
185
+ let inSet = this.index.inEdges.get(edge.toId);
186
+ if (!inSet) {
187
+ inSet = new Set();
188
+ this.index.inEdges.set(edge.toId, inSet);
189
+ }
190
+ inSet.add(id);
191
+ }
192
+ this.touchMeta(category);
193
+ return Promise.resolve(true);
194
+ }
195
+ ensureIndex() {
196
+ if (this.indexLoaded) return;
197
+ this.indexLoaded = true;
198
+ this.index = buildVaultIndex(this.vaultDir);
199
+ this.loadMeta();
200
+ // Stamp the schema version on first use so future migrations can
201
+ // detect the format generation that wrote the vault.
202
+ if (readVaultVersion(this.vaultDir) === null) {
203
+ try {
204
+ writeVaultVersion(this.vaultDir);
205
+ } catch (err) {
206
+ getLogger().warn(`Vault: could not write version file: ${String(err)}`);
207
+ }
208
+ }
209
+ }
210
+ loadMeta() {
211
+ const persisted = this.readPersistedMeta();
212
+ for (const category of ALL_CATEGORIES) {
213
+ const fallback = { lastWrittenAt: new Date().toISOString() };
214
+ this.meta.set(category, persisted[category] ?? fallback);
215
+ }
216
+ }
217
+ mdPath(category, id) {
218
+ return path.join(this.vaultDir, category, `${id}.md`);
219
+ }
220
+ persistMeta() {
221
+ try {
222
+ const metaPath = path.join(this.vaultDir, META_FILENAME);
223
+ const serialized = {};
224
+ for (const [cat, m] of this.meta) serialized[cat] = m;
225
+ atomicWriteFile(metaPath, JSON.stringify(serialized, null, 2));
226
+ } catch (err) {
227
+ getLogger().warn(`Vault: could not persist meta: ${String(err)}`);
228
+ }
229
+ }
230
+ readPersistedMeta() {
231
+ const metaPath = path.join(this.vaultDir, META_FILENAME);
232
+ if (!existsSync(metaPath)) return {};
233
+ try {
234
+ const raw = readFileSync(metaPath, 'utf-8');
235
+ const parsed = JSON.parse(raw);
236
+ return parsed;
237
+ } catch (err) {
238
+ getLogger().warn(`Vault: could not read meta.json: ${String(err)}`);
239
+ return {};
240
+ }
241
+ }
242
+ async rollbackSetEntries(category, before) {
243
+ const beforeIds = new Set(before.map((r) => r.entry.id));
244
+ const current = await this.getEntries(category);
245
+ for (const entry of current) {
246
+ if (!beforeIds.has(entry.id)) await this.removeEntry(category, entry.id);
247
+ }
248
+ for (const record of before) {
249
+ const stillThere = current.find((e) => e.id === record.entry.id);
250
+ // Use appendEntryWithLinks to preserve programmatic edges (supersedes,
251
+ // decays_from, co_accessed) that are not embedded in the content body.
252
+ if (!stillThere) await this.appendEntryWithLinks(category, record.entry, record.links);
253
+ else await this.updateEntry(category, record.entry.id, record.entry);
254
+ }
255
+ }
256
+ snapshotCategory(category) {
257
+ const ids = this.index.byCategory.get(category);
258
+ if (!ids) return [];
259
+ const records = [];
260
+ for (const id of ids) {
261
+ const rec = this.index.byId.get(id);
262
+ if (rec) records.push({ entry: { ...rec.entry }, links: [...rec.links], mdPath: rec.mdPath });
263
+ }
264
+ return records;
265
+ }
266
+ touchMeta(category) {
267
+ const meta = this.meta.get(category) ?? {};
268
+ this.meta.set(category, { ...meta, lastWrittenAt: new Date().toISOString() });
269
+ }
270
+ /**
271
+ * Diff-update the secondary indexes (byTag/byPath/byAgent/byCategory) so
272
+ * lookups by those keys stay consistent with the current entry state. Without
273
+ * this, an updateEntry that changes tags/paths/agentRole/category leaves
274
+ * stale references under the old keys and never registers under the new ones.
275
+ */
276
+ refreshSecondaryIndexes(previous, next) {
277
+ const id = next.id;
278
+ if (previous.category !== next.category) {
279
+ this.index.byCategory.get(previous.category)?.delete(id);
280
+ let nextCat = this.index.byCategory.get(next.category);
281
+ if (!nextCat) {
282
+ nextCat = new Set();
283
+ this.index.byCategory.set(next.category, nextCat);
284
+ }
285
+ nextCat.add(id);
286
+ }
287
+ if (previous.agentRole !== next.agentRole) {
288
+ this.index.byAgent.get(previous.agentRole)?.delete(id);
289
+ let nextAgent = this.index.byAgent.get(next.agentRole);
290
+ if (!nextAgent) {
291
+ nextAgent = new Set();
292
+ this.index.byAgent.set(next.agentRole, nextAgent);
293
+ }
294
+ nextAgent.add(id);
295
+ }
296
+ diffSet(this.index.byTag, previous.tags, next.tags, id);
297
+ diffSet(this.index.byPath, previous.relatedPaths, next.relatedPaths, id);
298
+ }
299
+ }
300
+ function diffSet(map, before, after, id) {
301
+ const beforeSet = new Set(before);
302
+ const afterSet = new Set(after);
303
+ for (const key of beforeSet) {
304
+ if (!afterSet.has(key)) map.get(key)?.delete(id);
305
+ }
306
+ for (const key of afterSet) {
307
+ if (beforeSet.has(key)) continue;
308
+ let bucket = map.get(key);
309
+ if (!bucket) {
310
+ bucket = new Set();
311
+ map.set(key, bucket);
312
+ }
313
+ bucket.add(id);
314
+ }
315
+ }
316
+ /**
317
+ * Rebuild an in-memory VaultStore from disk, re-parsing all `.md` files.
318
+ * Used by the migration and info CLI commands.
319
+ */
320
+ export function openVaultStore(vaultDir) {
321
+ return new VaultStore(vaultDir);
322
+ }
323
+ /** Parse a single `.md` file from an already-known path and update the index. */
324
+ export function importFileIntoStore(store, category, entry) {
325
+ return store.appendEntry(category, entry);
326
+ }
327
+ /**
328
+ * Filter the index to entries that are eligible to seed semantic recall:
329
+ * non-stale, above the strength threshold, and matching any agent / category
330
+ * filters supplied in the query options. Tag/path filters are NOT applied
331
+ * here — they would over-constrain the seed set and starve spreading
332
+ * activation; the manager applies them at lexical-recall time.
333
+ */
334
+ function collectVaultCandidates(index, options, minStrength) {
335
+ const candidates = [];
336
+ for (const [id, record] of index.byId) {
337
+ const { entry } = record;
338
+ if (entry.confidence === 'stale') continue;
339
+ const strength = computeStrength(entry.createdAt, entry.halfLifeDays);
340
+ if (strength < minStrength) continue;
341
+ if (options.agentRole !== undefined && entry.agentRole !== options.agentRole) continue;
342
+ if (options.category !== undefined && entry.category !== options.category) continue;
343
+ candidates.push(id);
344
+ }
345
+ return candidates;
346
+ }
347
+ /**
348
+ * Run cosine ANN on the candidate set and return the top-K with positive
349
+ * scores as activation seeds. Non-positive (orthogonal/antipodal) seeds are
350
+ * excluded — they would occupy a slot without spreading useful activation.
351
+ */
352
+ function buildVaultSeeds(queryVec, vs, candidateIds, seedK) {
353
+ const seeds = new Map();
354
+ for (const { id, score } of topKCosine(queryVec, vs, candidateIds, seedK)) {
355
+ if (score > 0) seeds.set(id, score);
356
+ }
357
+ return seeds;
358
+ }
359
+ function rankVaultResults(scores, index, limit) {
360
+ const sorted = [...scores.entries()].sort((a, b) => b[1] - a[1]).slice(0, limit);
361
+ const results = [];
362
+ for (const [id, score] of sorted) {
363
+ const record = index.byId.get(id);
364
+ if (!record) continue;
365
+ results.push({ entry: record.entry, strength: score });
366
+ }
367
+ return results;
368
+ }
369
+ //# sourceMappingURL=vault-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-store.js","sourceRoot":"","sources":["../../src/vault/vault-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Bundled memory provider that wraps Valora's vault implementation in a
3
+ * {@link MemoryProvider} adapter. Registered as `'vault'` at boot via this
4
+ * package's `register(api)` entry point in `./index.ts`.
5
+ *
6
+ * Each host consumer (executor, CLI, MCP shutdown) reaches the active
7
+ * provider via `getMemoryRegistry().getActive()` rather than instantiating
8
+ * concrete vault classes.
9
+ */
10
+ import type {
11
+ ConsolidationOptions,
12
+ ConsolidationResult,
13
+ ExtractionContext,
14
+ MemoryCategory,
15
+ MemoryCreateOptions,
16
+ MemoryEntry,
17
+ MemoryProvider,
18
+ MemoryProviderInfo,
19
+ MemoryQueryOptions,
20
+ MemoryQueryResult,
21
+ MemoryVerifyReport,
22
+ PurgeCriteria,
23
+ PurgeResult
24
+ } from '@windagency/valora-plugin-api';
25
+ export declare class VaultMemoryProvider implements MemoryProvider {
26
+ private embedderPromise?;
27
+ private embedderResolved;
28
+ private readonly manager;
29
+ private readonly memoryConfig?;
30
+ private readonly onConsolidationComplete?;
31
+ private readonly providerLookup?;
32
+ private readonly store;
33
+ private readonly vaultDir;
34
+ constructor(config: Record<string, unknown>);
35
+ consolidate(options?: ConsolidationOptions): Promise<ConsolidationResult>;
36
+ create(category: MemoryCategory, options: MemoryCreateOptions): Promise<MemoryEntry>;
37
+ delete(category: MemoryCategory, id: string): Promise<boolean>;
38
+ extractFromAgentOutput(_output: string, _ctx: ExtractionContext): Promise<MemoryEntry[]>;
39
+ findByPaths(paths: string[]): Promise<MemoryQueryResult[]>;
40
+ flush(): Promise<void>;
41
+ get(category: MemoryCategory, id: string, strengthen?: boolean): Promise<MemoryQueryResult | null>;
42
+ getVaultDir(): string;
43
+ info(): Promise<MemoryProviderInfo>;
44
+ invalidateByPaths(paths: string[]): Promise<number>;
45
+ markStaleByPaths(paths: string[]): Promise<number>;
46
+ prune(_threshold?: number): Promise<number>;
47
+ purge(criteria: PurgeCriteria): Promise<PurgeResult>;
48
+ query(options: MemoryQueryOptions): Promise<MemoryQueryResult[]>;
49
+ update(category: MemoryCategory, id: string, patch: Partial<MemoryEntry>): Promise<boolean>;
50
+ verify(): Promise<MemoryVerifyReport>;
51
+ private getEmbedder;
52
+ }
53
+ //# sourceMappingURL=vault-memory-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-memory-provider.d.ts","sourceRoot":"","sources":["../src/vault-memory-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACX,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EAEjB,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,MAAM,+BAA+B,CAAC;AAqCvC,qBAAa,mBAAoB,YAAW,cAAc;IACzD,OAAO,CAAC,eAAe,CAAC,CAAoC;IAC5D,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAgC;IACzE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAWrC,WAAW,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAW7E,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IAIpF,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpE,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IASlF,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAI1D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAIxG,WAAW,IAAI,MAAM;IAIf,IAAI,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAuBnC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAInD,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlD,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM3C,KAAK,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;IAIpD,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAWhE,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAI3F,MAAM,IAAI,OAAO,CAAC,kBAAkB,CAAC;YAc7B,WAAW;CAOzB"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Bundled memory provider that wraps Valora's vault implementation in a
3
+ * {@link MemoryProvider} adapter. Registered as `'vault'` at boot via this
4
+ * package's `register(api)` entry point in `./index.ts`.
5
+ *
6
+ * Each host consumer (executor, CLI, MCP shutdown) reaches the active
7
+ * provider via `getMemoryRegistry().getActive()` rather than instantiating
8
+ * concrete vault classes.
9
+ */
10
+ import { resolveEmbedder } from './embeddings/resolve-embedder.js';
11
+ import { MemoryManager } from './manager.js';
12
+ import { runAutoMigrationIfNeeded } from './migration/auto-migrate.js';
13
+ import { readVaultVersion } from './migration/vault-version.js';
14
+ import { getDefaultVaultDir, getLegacyJsonDir } from './vault/default-vault-dir.js';
15
+ import { VaultStore } from './vault/vault-store.js';
16
+ const VAULT_PROVIDER_NAME = 'vault';
17
+ const VAULT_PROVIDER_LABEL = 'Valora Vault';
18
+ const VAULT_CAPABILITIES = ['consolidation', 'embeddings', 'extraction', 'graph-edges', 'reembed'];
19
+ const ALL_CATEGORIES = ['episodic', 'semantic', 'decisions'];
20
+ export class VaultMemoryProvider {
21
+ embedderPromise;
22
+ embedderResolved = false;
23
+ manager;
24
+ memoryConfig;
25
+ onConsolidationComplete;
26
+ providerLookup;
27
+ store;
28
+ vaultDir;
29
+ constructor(config) {
30
+ const cfg = config;
31
+ this.vaultDir = cfg.vaultDir ?? getDefaultVaultDir();
32
+ this.memoryConfig = cfg.memoryConfig;
33
+ this.providerLookup = cfg.providerLookup;
34
+ this.onConsolidationComplete = cfg.onConsolidationComplete;
35
+ runAutoMigrationIfNeeded(getLegacyJsonDir(), this.vaultDir);
36
+ this.store = new VaultStore(this.vaultDir);
37
+ this.manager = new MemoryManager(this.store, this.memoryConfig);
38
+ }
39
+ async consolidate(options = {}) {
40
+ const { MemoryConsolidationService } = await import('./consolidation-service');
41
+ const embedder = await this.getEmbedder();
42
+ const service = new MemoryConsolidationService(this.store, embedder, {
43
+ onComplete: this.onConsolidationComplete,
44
+ providerLookup: this.providerLookup,
45
+ semanticHalfLifeDays: this.memoryConfig?.semantic_half_life_days
46
+ });
47
+ return service.consolidate(options);
48
+ }
49
+ async create(category, options) {
50
+ return this.manager.create(category, options);
51
+ }
52
+ async delete(category, id) {
53
+ return this.manager.delete(category, id);
54
+ }
55
+ extractFromAgentOutput(_output, _ctx) {
56
+ // Provider-level extraction is a deliberate no-op. The vault backend's
57
+ // extraction path is `MemoryExtractionService`, which operates on the
58
+ // pipeline-specific `FeedbackOutputs` shape and is invoked directly by
59
+ // the post-session hook in `executor/pipeline.ts`. Callers reaching
60
+ // this method get the documented empty result by contract.
61
+ return Promise.resolve([]);
62
+ }
63
+ async findByPaths(paths) {
64
+ return this.manager.findByPaths(paths);
65
+ }
66
+ async flush() {
67
+ return this.manager.flush();
68
+ }
69
+ async get(category, id, strengthen) {
70
+ return this.manager.get(category, id, strengthen);
71
+ }
72
+ getVaultDir() {
73
+ return this.vaultDir;
74
+ }
75
+ async info() {
76
+ // Touch every category to populate the lazy index before reading stats.
77
+ const fetched = await Promise.all(ALL_CATEGORIES.map((c) => this.store.getEntries(c)));
78
+ const stats = this.store.getVaultStats();
79
+ const counts = Object.fromEntries(ALL_CATEGORIES.map((c, i) => [c, fetched[i].length]));
80
+ const schemaVersion = readVaultVersion(this.vaultDir) ?? undefined;
81
+ return {
82
+ capabilities: VAULT_CAPABILITIES,
83
+ counts,
84
+ edgeCount: stats.edgeCount,
85
+ embeddingCoverage: stats.embeddingCoverage,
86
+ label: VAULT_PROVIDER_LABEL,
87
+ name: VAULT_PROVIDER_NAME,
88
+ ...(schemaVersion !== undefined ? { schemaVersion } : {})
89
+ };
90
+ }
91
+ async invalidateByPaths(paths) {
92
+ return this.manager.invalidateByPaths(paths);
93
+ }
94
+ async markStaleByPaths(paths) {
95
+ return this.manager.markStaleByPaths(paths);
96
+ }
97
+ async prune(_threshold) {
98
+ // `_threshold` is on the contract for future use; the vault implementation
99
+ // reads its threshold from `memoryConfig.prune_threshold`.
100
+ return this.manager.prune();
101
+ }
102
+ async purge(criteria) {
103
+ return this.manager.purge(criteria);
104
+ }
105
+ async query(options) {
106
+ // Ensure the embedder is resolved before queries that include free-text
107
+ // recall. Lexical queries do not depend on it, but the resolution is
108
+ // idempotent and cheap after the first call.
109
+ const embedder = await this.getEmbedder();
110
+ if (embedder !== undefined) {
111
+ this.manager.setEmbedder(embedder);
112
+ }
113
+ return this.manager.query(options);
114
+ }
115
+ async update(category, id, patch) {
116
+ return this.manager.update(category, id, patch);
117
+ }
118
+ async verify() {
119
+ const counts = { decisions: 0, episodic: 0, semantic: 0 };
120
+ const issues = [];
121
+ for (const category of ALL_CATEGORIES) {
122
+ try {
123
+ const entries = await this.store.getEntries(category);
124
+ counts[category] = entries.length;
125
+ } catch (err) {
126
+ issues.push(`${category}: ${err instanceof Error ? err.message : String(err)}`);
127
+ }
128
+ }
129
+ return { counts, issues, ok: issues.length === 0 };
130
+ }
131
+ async getEmbedder() {
132
+ if (this.embedderResolved) return this.embedderPromise;
133
+ this.embedderPromise ??= resolveEmbedder(this.memoryConfig, this.providerLookup);
134
+ const embedder = await this.embedderPromise;
135
+ this.embedderResolved = true;
136
+ return embedder;
137
+ }
138
+ }
139
+ //# sourceMappingURL=vault-memory-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-memory-provider.js","sourceRoot":"","sources":["../src/vault-memory-provider.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@windagency/valora-plugin-memory-vault",
3
+ "version": "1.0.0",
4
+ "description": "Bundled vault memory backend for Valora — biologically-inspired decay, graph retrieval, cosine + Jaccard consolidation. The default `memory.provider`.",
5
+ "keywords": [
6
+ "valora",
7
+ "valora-plugin",
8
+ "memory",
9
+ "vault",
10
+ "embeddings",
11
+ "semantic-recall",
12
+ "typescript"
13
+ ],
14
+ "author": "Damien TIVELET <damien@wind-agency.com>",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/windagency/valora.ai"
18
+ },
19
+ "license": "MIT",
20
+ "type": "module",
21
+ "main": "./dist/index.js",
22
+ "types": "./dist/index.d.ts",
23
+ "exports": {
24
+ ".": {
25
+ "types": "./dist/index.d.ts",
26
+ "import": "./dist/index.js"
27
+ }
28
+ },
29
+ "engines": {
30
+ "node": ">=22.0.0"
31
+ },
32
+ "volta": {
33
+ "node": "22.21.0",
34
+ "pnpm": "10.19.0"
35
+ },
36
+ "files": [
37
+ "valora-plugin.json",
38
+ "dist"
39
+ ],
40
+ "peerDependencies": {
41
+ "@windagency/valora": ">=0.1.0",
42
+ "@windagency/valora-plugin-api": "1.0.0",
43
+ "@windagency/valora-runtime": "1.0.0"
44
+ },
45
+ "devDependencies": {
46
+ "esbuild": "^0.28.0"
47
+ },
48
+ "scripts": {
49
+ "build": "tsc -b && esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/index.js --external:@windagency/valora-runtime --external:@windagency/valora-plugin-api --banner:js=\"import { createRequire } from 'module'; const require = createRequire(import.meta.url);\"",
50
+ "clean": "rm -rf ./dist",
51
+ "lint": "eslint --color",
52
+ "lint:fix": "eslint --color --fix",
53
+ "beautify": "prettier --check \"**/*.+(js|jsx|ts|tsx|json|md|yml|yaml)\"",
54
+ "beautify:fix": "prettier --write \"**/*.+(js|jsx|ts|tsx|json|md|yml|yaml)\"",
55
+ "format": "pnpm beautify:fix && pnpm lint:fix",
56
+ "test": "vitest run"
57
+ }
58
+ }