@dharma-ai-labs/agent-fabric-local-vault 0.1.0 → 0.1.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/dist/index.d.ts CHANGED
@@ -2,6 +2,28 @@ import { type SecureSecretStore } from '@dharma-ai-labs/agent-fabric-secure-stor
2
2
  export interface VaultOptions {
3
3
  root: string;
4
4
  masterKey: Buffer;
5
+ rawLocalDays?: number;
6
+ }
7
+ export interface VaultCaptureInput {
8
+ raw: {
9
+ plaintext: Uint8Array;
10
+ kind: string;
11
+ expectedContentId: string;
12
+ };
13
+ capsule: {
14
+ plaintext: Uint8Array;
15
+ trajectoryId: string;
16
+ revision: number;
17
+ capsuleHash: string;
18
+ };
19
+ session: {
20
+ sessionId: string;
21
+ provider: string;
22
+ workspaceId: string;
23
+ sourceLocator: string;
24
+ status: string;
25
+ observedAt: string;
26
+ };
5
27
  }
6
28
  export declare class LocalVault {
7
29
  #private;
@@ -23,9 +45,38 @@ export declare class LocalVault {
23
45
  observedAt: string;
24
46
  }): void;
25
47
  recordCapsule(trajectoryId: string, revision: number, capsuleHash: string, blobContentId: string): void;
48
+ getLatestCapsuleMetadata(trajectoryId: string): {
49
+ revision: number;
50
+ capsuleHash: string;
51
+ blobContentId: string;
52
+ } | null;
53
+ commitCapture(input: VaultCaptureInput): Promise<{
54
+ rawContentId: string;
55
+ capsuleContentId: string;
56
+ }>;
26
57
  getLatestCapsule<T = Record<string, unknown>>(trajectoryId: string): Promise<T>;
58
+ listPendingCapsuleSyncs<T = Record<string, unknown>>(limit?: number): Promise<Array<{
59
+ trajectoryId: string;
60
+ revision: number;
61
+ capsule: T;
62
+ }>>;
63
+ markCapsuleSynced(trajectoryId: string, revision: number): void;
27
64
  recordDisclosure(disclosureId: string, receiptHash: string, bytesUploaded: number): void;
28
65
  listSessions(): unknown[];
66
+ stats(): {
67
+ blobs: number;
68
+ sessions: number;
69
+ capsules: number;
70
+ };
71
+ enforceRawEvidenceRetention(input?: {
72
+ retentionDays?: number;
73
+ now?: Date;
74
+ limit?: number;
75
+ }): Promise<{
76
+ examined: number;
77
+ deleted: number;
78
+ cutoff: string;
79
+ }>;
29
80
  close(): void;
30
81
  }
31
82
  export declare function loadExplicitTestKey(env: NodeJS.ProcessEnv): Buffer;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAI5G,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,UAAU;;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAItB,OAAO;WAMM,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;IAsCvD,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqB7D,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAyCxF,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAajD,aAAa,CAAC,KAAK,EAAE;QACnB,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QACzD,aAAa,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;KAC3D,GAAG,IAAI;IASR,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAejG,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAQrF,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAaxF,YAAY,IAAI,OAAO,EAAE;IAMzB,KAAK,IAAI,IAAI;CASd;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAOlE;AAED,wBAAsB,0BAA0B,CAAC,KAAK,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAe3F"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,8 +1,9 @@
1
1
  import { createCipheriv, createDecipheriv, createHash, randomBytes } from 'node:crypto';
2
2
  import { createReadStream } from 'node:fs';
3
- import { mkdir, open, readFile, rename, rm, stat, writeFile } from 'node:fs/promises';
4
- import { dirname, resolve } from 'node:path';
3
+ import { mkdir, open, readFile, readdir, rename, rm, stat, writeFile } from 'node:fs/promises';
4
+ import { basename, dirname, resolve } from 'node:path';
5
5
  import { DatabaseSync } from 'node:sqlite';
6
+ import { canonicalize, sha256 } from '@dharma-ai-labs/agent-fabric-contracts';
6
7
  import { createSystemSecureStore } from '@dharma-ai-labs/agent-fabric-secure-store';
7
8
  const BLOB_VERSION = 1;
8
9
  export class LocalVault {
@@ -49,15 +50,38 @@ export class LocalVault {
49
50
  bytes_uploaded integer not null,
50
51
  created_at text not null
51
52
  );
53
+ create table if not exists capsule_sync_queue (
54
+ trajectory_id text not null,
55
+ revision integer not null,
56
+ blob_content_id text not null,
57
+ created_at text not null,
58
+ primary key (trajectory_id, revision)
59
+ );
60
+ create table if not exists capsule_content_refs (
61
+ trajectory_id text not null,
62
+ revision integer not null,
63
+ content_id text not null,
64
+ available_locally integer not null,
65
+ primary key (trajectory_id, revision, content_id)
66
+ );
67
+ create index if not exists blobs_raw_retention_idx on blobs(kind, created_at, content_id);
68
+ create index if not exists capsules_blob_content_id_idx on capsules(blob_content_id);
69
+ create index if not exists capsules_latest_revision_idx on capsules(trajectory_id, revision desc);
70
+ create index if not exists capsule_content_refs_lookup_idx
71
+ on capsule_content_refs(content_id, available_locally, trajectory_id, revision);
52
72
  `);
53
- return new LocalVault(options, database);
73
+ const vault = new LocalVault(options, database);
74
+ await vault.#recoverRetentionQuarantine();
75
+ await vault.#backfillCapsuleContentRefs();
76
+ await vault.enforceRawEvidenceRetention({ retentionDays: options.rawLocalDays ?? 30 });
77
+ return vault;
54
78
  }
55
- async putBlob(plaintext, kind) {
79
+ async #putBlob(plaintext, kind) {
56
80
  const contentId = `sha256:${createHash('sha256').update(plaintext).digest('hex')}`;
57
81
  const path = this.#blobPath(contentId);
58
82
  const existing = this.#database.prepare('select content_id from blobs where content_id = ?').get(contentId);
59
83
  if (existing)
60
- return contentId;
84
+ return { contentId, created: false };
61
85
  await mkdir(dirname(path), { recursive: true, mode: 0o700 });
62
86
  const nonce = randomBytes(12);
63
87
  const cipher = createCipheriv('aes-256-gcm', this.#masterKey, nonce);
@@ -67,8 +91,17 @@ export class LocalVault {
67
91
  const temporary = `${path}.${process.pid}.${randomBytes(4).toString('hex')}.tmp`;
68
92
  await writeFile(temporary, envelope, { mode: 0o600, flag: 'wx' });
69
93
  await rename(temporary, path);
70
- this.#database.prepare('insert into blobs(content_id, bytes, kind, created_at) values (?, ?, ?, ?)').run(contentId, plaintext.byteLength, kind, new Date().toISOString());
71
- return contentId;
94
+ try {
95
+ this.#database.prepare('insert into blobs(content_id, bytes, kind, created_at) values (?, ?, ?, ?)').run(contentId, plaintext.byteLength, kind, new Date().toISOString());
96
+ return { contentId, created: true };
97
+ }
98
+ catch (error) {
99
+ await rm(path, { force: true });
100
+ throw error;
101
+ }
102
+ }
103
+ async putBlob(plaintext, kind) {
104
+ return (await this.#putBlob(plaintext, kind)).contentId;
72
105
  }
73
106
  async putFile(sourcePath, kind) {
74
107
  const source = await stat(sourcePath);
@@ -148,6 +181,44 @@ export class LocalVault {
148
181
  throw new Error('Trajectory capsule revision hash conflict.');
149
182
  }
150
183
  }
184
+ getLatestCapsuleMetadata(trajectoryId) {
185
+ const record = this.#database.prepare(`
186
+ select revision, capsule_hash, blob_content_id
187
+ from capsules where trajectory_id = ? order by revision desc limit 1
188
+ `).get(trajectoryId);
189
+ return record ? {
190
+ revision: record.revision,
191
+ capsuleHash: record.capsule_hash,
192
+ blobContentId: record.blob_content_id,
193
+ } : null;
194
+ }
195
+ async commitCapture(input) {
196
+ const created = new Set();
197
+ this.#database.exec('begin immediate');
198
+ try {
199
+ const raw = await this.#putBlob(input.raw.plaintext, input.raw.kind);
200
+ if (raw.contentId !== input.raw.expectedContentId)
201
+ throw new Error('Raw evidence content hash changed before vault commit.');
202
+ if (raw.created)
203
+ created.add(raw.contentId);
204
+ const capsule = await this.#putBlob(input.capsule.plaintext, 'trajectory-capsule');
205
+ if (capsule.created)
206
+ created.add(capsule.contentId);
207
+ this.recordSession(input.session);
208
+ this.recordCapsule(input.capsule.trajectoryId, input.capsule.revision, input.capsule.capsuleHash, capsule.contentId);
209
+ this.#recordCapsuleContentRefs(input.capsule.trajectoryId, input.capsule.revision, JSON.parse(Buffer.from(input.capsule.plaintext).toString('utf8')));
210
+ this.#database.exec('commit');
211
+ return { rawContentId: raw.contentId, capsuleContentId: capsule.contentId };
212
+ }
213
+ catch (error) {
214
+ try {
215
+ this.#database.exec('rollback');
216
+ }
217
+ catch { }
218
+ await Promise.all([...created].map((contentId) => rm(this.#blobPath(contentId), { force: true })));
219
+ throw error;
220
+ }
221
+ }
151
222
  async getLatestCapsule(trajectoryId) {
152
223
  const record = this.#database.prepare(`
153
224
  select blob_content_id from capsules where trajectory_id = ? order by revision desc limit 1
@@ -156,6 +227,27 @@ export class LocalVault {
156
227
  throw new Error('Trajectory capsule is not available in the local vault.');
157
228
  return JSON.parse((await this.getBlob(record.blob_content_id)).toString('utf8'));
158
229
  }
230
+ async listPendingCapsuleSyncs(limit = 100) {
231
+ if (!Number.isSafeInteger(limit) || limit < 1 || limit > 1_000) {
232
+ throw new Error('Pending capsule sync limit must be between 1 and 1000.');
233
+ }
234
+ const records = this.#database.prepare(`
235
+ select trajectory_id, revision, blob_content_id
236
+ from capsule_sync_queue
237
+ order by created_at asc, trajectory_id asc, revision asc
238
+ limit ?
239
+ `).all(limit);
240
+ return Promise.all(records.map(async (record) => ({
241
+ trajectoryId: record.trajectory_id,
242
+ revision: record.revision,
243
+ capsule: JSON.parse((await this.getBlob(record.blob_content_id)).toString('utf8')),
244
+ })));
245
+ }
246
+ markCapsuleSynced(trajectoryId, revision) {
247
+ this.#database.prepare(`
248
+ delete from capsule_sync_queue where trajectory_id = ? and revision = ?
249
+ `).run(trajectoryId, revision);
250
+ }
159
251
  recordDisclosure(disclosureId, receiptHash, bytesUploaded) {
160
252
  if (!/^sha256:[a-f0-9]{64}$/.test(receiptHash) || !Number.isSafeInteger(bytesUploaded) || bytesUploaded < 0) {
161
253
  throw new Error('Disclosure receipt is invalid.');
@@ -173,6 +265,49 @@ export class LocalVault {
173
265
  select session_id, provider, workspace_id, status, observed_at from sessions order by observed_at desc
174
266
  `).all();
175
267
  }
268
+ stats() {
269
+ const count = (table) => {
270
+ const row = this.#database.prepare(`select count(*) as count from ${table}`).get();
271
+ return row.count;
272
+ };
273
+ return { blobs: count('blobs'), sessions: count('sessions'), capsules: count('capsules') };
274
+ }
275
+ async enforceRawEvidenceRetention(input = {}) {
276
+ const retentionDays = input.retentionDays ?? 30;
277
+ const limit = input.limit ?? 10_000;
278
+ if (!Number.isSafeInteger(retentionDays) || retentionDays < 1 || retentionDays > 3_650) {
279
+ throw new Error('Raw evidence retention must be between 1 and 3650 days.');
280
+ }
281
+ if (!Number.isSafeInteger(limit) || limit < 1 || limit > 10_000) {
282
+ throw new Error('Raw evidence retention limit must be between 1 and 10000.');
283
+ }
284
+ const now = input.now ?? new Date();
285
+ if (!Number.isFinite(now.getTime()))
286
+ throw new Error('Raw evidence retention time is invalid.');
287
+ const cutoff = new Date(now.getTime() - retentionDays * 86_400_000).toISOString();
288
+ await this.#backfillCapsuleContentRefs();
289
+ let examined = 0;
290
+ let deleted = 0;
291
+ for (;;) {
292
+ const expired = this.#database.prepare(`
293
+ select content_id
294
+ from blobs
295
+ where kind in ('raw-provider-turn', 'raw-provider-session')
296
+ and created_at < ?
297
+ and not exists (
298
+ select 1 from capsules where capsules.blob_content_id = blobs.content_id
299
+ )
300
+ order by created_at asc, content_id asc
301
+ limit ?
302
+ `).all(cutoff, limit);
303
+ if (expired.length === 0)
304
+ break;
305
+ examined += expired.length;
306
+ await this.#expireRawEvidenceBatch(expired.map((row) => row.content_id), now.toISOString());
307
+ deleted += expired.length;
308
+ }
309
+ return { examined, deleted, cutoff };
310
+ }
176
311
  close() {
177
312
  this.#database.close();
178
313
  }
@@ -182,6 +317,157 @@ export class LocalVault {
182
317
  const digest = contentId.slice('sha256:'.length);
183
318
  return resolve(this.root, 'blobs', digest.slice(0, 2), `${digest}.blob`);
184
319
  }
320
+ async #expireRawEvidenceBatch(contentIds, createdAt) {
321
+ const quarantined = [];
322
+ const createdCapsuleIds = new Set();
323
+ this.#database.exec('begin immediate');
324
+ try {
325
+ for (const contentId of contentIds) {
326
+ const original = this.#blobPath(contentId);
327
+ const quarantine = `${original}.expired-${process.pid}-${randomBytes(4).toString('hex')}`;
328
+ await rename(original, quarantine);
329
+ quarantined.push({ original, quarantine });
330
+ const capsuleRows = this.#database.prepare(`
331
+ select c.trajectory_id, c.revision, c.capsule_hash, c.blob_content_id
332
+ from capsules c
333
+ join capsule_content_refs refs
334
+ on refs.trajectory_id = c.trajectory_id and refs.revision = c.revision
335
+ where c.revision = (
336
+ select max(latest.revision) from capsules latest where latest.trajectory_id = c.trajectory_id
337
+ )
338
+ and refs.content_id = ?
339
+ and refs.available_locally = 1
340
+ order by c.trajectory_id asc
341
+ `).all(contentId);
342
+ for (const row of capsuleRows) {
343
+ const current = JSON.parse((await this.getBlob(row.blob_content_id)).toString('utf8'));
344
+ const contentIndex = Array.isArray(current.contentIndex) ? current.contentIndex : [];
345
+ const referencesExpired = contentIndex.some((item) => item && typeof item === 'object'
346
+ && !Array.isArray(item) && item.contentId === contentId
347
+ && item.availableLocally === true);
348
+ if (!referencesExpired)
349
+ continue;
350
+ const nextBase = {
351
+ ...current,
352
+ revision: row.revision + 1,
353
+ previousRevisionHash: row.capsule_hash,
354
+ contentIndex: contentIndex.map((item) => item && typeof item === 'object' && !Array.isArray(item)
355
+ && item.contentId === contentId
356
+ ? { ...item, availableLocally: false }
357
+ : item),
358
+ localEvidenceAvailable: Array.isArray(current.localEvidenceAvailable)
359
+ ? current.localEvidenceAvailable.filter((item) => !item || typeof item !== 'object'
360
+ || Array.isArray(item) || item.contentId !== contentId)
361
+ : [],
362
+ createdAt,
363
+ };
364
+ delete nextBase.capsuleHash;
365
+ const revised = { ...nextBase, capsuleHash: sha256(canonicalize(nextBase)) };
366
+ const capsuleBlob = await this.#putBlob(Buffer.from(JSON.stringify(revised)), 'trajectory-capsule');
367
+ if (capsuleBlob.created)
368
+ createdCapsuleIds.add(capsuleBlob.contentId);
369
+ this.recordCapsule(row.trajectory_id, row.revision + 1, revised.capsuleHash, capsuleBlob.contentId);
370
+ this.#recordCapsuleContentRefs(row.trajectory_id, row.revision + 1, revised);
371
+ this.#database.prepare(`
372
+ insert into capsule_sync_queue(trajectory_id, revision, blob_content_id, created_at)
373
+ values (?, ?, ?, ?)
374
+ on conflict(trajectory_id, revision) do nothing
375
+ `).run(row.trajectory_id, row.revision + 1, capsuleBlob.contentId, createdAt);
376
+ }
377
+ const result = this.#database.prepare(`
378
+ delete from blobs
379
+ where content_id = ?
380
+ and kind in ('raw-provider-turn', 'raw-provider-session')
381
+ and not exists (
382
+ select 1 from capsules where capsules.blob_content_id = blobs.content_id
383
+ )
384
+ `).run(contentId);
385
+ if (result.changes !== 1)
386
+ throw new Error('Raw evidence changed during retention enforcement.');
387
+ }
388
+ this.#database.exec('commit');
389
+ await Promise.all(quarantined.map((entry) => rm(entry.quarantine, { force: true })));
390
+ }
391
+ catch (error) {
392
+ try {
393
+ this.#database.exec('rollback');
394
+ }
395
+ catch { }
396
+ await Promise.all([...createdCapsuleIds].map((contentId) => rm(this.#blobPath(contentId), { force: true })));
397
+ await Promise.all(quarantined.map(async (entry) => {
398
+ try {
399
+ await rename(entry.quarantine, entry.original);
400
+ }
401
+ catch { }
402
+ }));
403
+ throw error;
404
+ }
405
+ }
406
+ #recordCapsuleContentRefs(trajectoryId, revision, capsule) {
407
+ const contentIndex = Array.isArray(capsule.contentIndex) ? capsule.contentIndex : [];
408
+ const insert = this.#database.prepare(`
409
+ insert into capsule_content_refs(trajectory_id, revision, content_id, available_locally)
410
+ values (?, ?, ?, ?)
411
+ on conflict(trajectory_id, revision, content_id) do update set
412
+ available_locally = excluded.available_locally
413
+ `);
414
+ for (const item of contentIndex) {
415
+ if (!item || typeof item !== 'object' || Array.isArray(item))
416
+ continue;
417
+ const record = item;
418
+ if (typeof record.contentId !== 'string')
419
+ continue;
420
+ insert.run(trajectoryId, revision, record.contentId, record.availableLocally === true ? 1 : 0);
421
+ }
422
+ }
423
+ async #backfillCapsuleContentRefs() {
424
+ const records = this.#database.prepare(`
425
+ select c.trajectory_id, c.revision, c.blob_content_id
426
+ from capsules c
427
+ where not exists (
428
+ select 1 from capsule_content_refs refs
429
+ where refs.trajectory_id = c.trajectory_id and refs.revision = c.revision
430
+ )
431
+ order by c.trajectory_id asc, c.revision asc
432
+ `).all();
433
+ for (const record of records) {
434
+ const capsule = JSON.parse((await this.getBlob(record.blob_content_id)).toString('utf8'));
435
+ this.#recordCapsuleContentRefs(record.trajectory_id, record.revision, capsule);
436
+ }
437
+ }
438
+ async #recoverRetentionQuarantine() {
439
+ const blobsRoot = resolve(this.root, 'blobs');
440
+ const prefixes = await readdir(blobsRoot, { withFileTypes: true });
441
+ for (const prefix of prefixes) {
442
+ if (!prefix.isDirectory() || !/^[a-f0-9]{2}$/.test(prefix.name))
443
+ continue;
444
+ const directory = resolve(blobsRoot, prefix.name);
445
+ const entries = await readdir(directory, { withFileTypes: true });
446
+ for (const entry of entries) {
447
+ if (!entry.isFile() || !/^[a-f0-9]{64}\.blob\.expired-/.test(entry.name))
448
+ continue;
449
+ const quarantine = resolve(directory, entry.name);
450
+ const original = resolve(directory, entry.name.replace(/\.expired-.+$/, ''));
451
+ const digest = basename(original, '.blob');
452
+ const contentId = `sha256:${digest}`;
453
+ const retained = this.#database.prepare('select 1 from blobs where content_id = ?').get(contentId);
454
+ if (retained) {
455
+ try {
456
+ await rename(quarantine, original);
457
+ }
458
+ catch (error) {
459
+ if (error.code === 'EEXIST')
460
+ await rm(quarantine, { force: true });
461
+ else
462
+ throw error;
463
+ }
464
+ }
465
+ else {
466
+ await rm(quarantine, { force: true });
467
+ }
468
+ }
469
+ }
470
+ }
185
471
  }
186
472
  export function loadExplicitTestKey(env) {
187
473
  if (env.DHARMA_ALLOW_ENV_KEY !== '1' || !env.DHARMA_VAULT_KEY) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  import assert from 'node:assert/strict';
2
- import { randomBytes } from 'node:crypto';
3
- import { mkdtemp, readFile, writeFile } from 'node:fs/promises';
2
+ import { createHash, randomBytes } from 'node:crypto';
3
+ import { mkdtemp, readFile, rename, writeFile } from 'node:fs/promises';
4
4
  import { tmpdir } from 'node:os';
5
5
  import { join } from 'node:path';
6
+ import { DatabaseSync } from 'node:sqlite';
6
7
  import test from 'node:test';
8
+ import { canonicalize, sha256 } from '@dharma-ai-labs/agent-fabric-contracts';
7
9
  import { LocalVault, loadExplicitTestKey, loadOrCreateVaultMasterKey } from './index.js';
8
10
  test('vault encrypts content and verifies it on read', async () => {
9
11
  const root = await mkdtemp(join(tmpdir(), 'dharma-vault-'));
@@ -60,6 +62,119 @@ test('vault resolves the latest capsule and records idempotent disclosure receip
60
62
  assert.doesNotThrow(() => vault.recordDisclosure('response-1', `sha256:${'3'.repeat(64)}`, 42));
61
63
  vault.close();
62
64
  });
65
+ test('failed capture commit rolls back session metadata and removes newly written blobs', async () => {
66
+ const root = await mkdtemp(join(tmpdir(), 'dharma-vault-capture-'));
67
+ const vault = await LocalVault.open({ root, masterKey: randomBytes(32) });
68
+ const raw = Buffer.from('first raw evidence');
69
+ const rawContentId = `sha256:${createHash('sha256').update(raw).digest('hex')}`;
70
+ await vault.commitCapture({
71
+ raw: { plaintext: raw, kind: 'raw-provider-turn', expectedContentId: rawContentId },
72
+ capsule: {
73
+ plaintext: Buffer.from('{"revision":1}'), trajectoryId: 'trajectory-atomic', revision: 1,
74
+ capsuleHash: `sha256:${'1'.repeat(64)}`,
75
+ },
76
+ session: {
77
+ sessionId: 'session-atomic', provider: 'codex', workspaceId: 'workspace-atomic',
78
+ sourceLocator: '/private/source', status: 'partial', observedAt: '2026-08-12T00:00:00.000Z',
79
+ },
80
+ });
81
+ const before = vault.stats();
82
+ const changedRaw = Buffer.from('changed raw evidence');
83
+ const changedRawContentId = `sha256:${createHash('sha256').update(changedRaw).digest('hex')}`;
84
+ await assert.rejects(() => vault.commitCapture({
85
+ raw: { plaintext: changedRaw, kind: 'raw-provider-turn', expectedContentId: changedRawContentId },
86
+ capsule: {
87
+ plaintext: Buffer.from('{"revision":1,"changed":true}'), trajectoryId: 'trajectory-atomic', revision: 1,
88
+ capsuleHash: `sha256:${'2'.repeat(64)}`,
89
+ },
90
+ session: {
91
+ sessionId: 'session-atomic-changed', provider: 'codex', workspaceId: 'workspace-atomic',
92
+ sourceLocator: '/private/changed', status: 'partial', observedAt: '2026-08-12T00:01:00.000Z',
93
+ },
94
+ }), /revision hash conflict/);
95
+ assert.deepEqual(vault.stats(), before);
96
+ await assert.rejects(() => vault.getBlob(changedRawContentId), /ENOENT/);
97
+ vault.close();
98
+ });
99
+ test('vault expires raw evidence, retains capsule history, and queues an unavailable revision', async () => {
100
+ const root = await mkdtemp(join(tmpdir(), 'dharma-vault-retention-'));
101
+ const vault = await LocalVault.open({ root, masterKey: randomBytes(32) });
102
+ const rawContentId = await vault.putBlob(Buffer.from('expired raw provider evidence'), 'raw-provider-turn');
103
+ const capsuleBase = {
104
+ trajectoryId: 'trajectory-retention', revision: 1, previousRevisionHash: null,
105
+ contentIndex: [{ contentId: rawContentId, kind: 'raw-provider-turn', bytes: 29, uploaded: false, availableLocally: true }],
106
+ localEvidenceAvailable: [{ contentId: rawContentId, kind: 'raw-provider-turn', bytes: 29 }],
107
+ createdAt: '2026-01-01T00:00:00.000Z',
108
+ };
109
+ const capsule = { ...capsuleBase, capsuleHash: sha256(canonicalize(capsuleBase)) };
110
+ const capsuleContentId = await vault.putBlob(Buffer.from(JSON.stringify(capsule)), 'trajectory-capsule');
111
+ vault.recordCapsule('trajectory-retention', 1, capsule.capsuleHash, capsuleContentId);
112
+ const result = await vault.enforceRawEvidenceRetention({
113
+ retentionDays: 30,
114
+ now: new Date(Date.now() + 31 * 86_400_000),
115
+ });
116
+ assert.equal(result.deleted, 1);
117
+ await assert.rejects(() => vault.getBlob(rawContentId), /ENOENT/);
118
+ assert.deepEqual(await vault.getBlob(capsuleContentId), Buffer.from(JSON.stringify(capsule)));
119
+ const latest = await vault.getLatestCapsule('trajectory-retention');
120
+ assert.equal(latest.revision, 2);
121
+ assert.equal(latest.previousRevisionHash, capsule.capsuleHash);
122
+ assert.deepEqual(latest.localEvidenceAvailable, []);
123
+ assert.equal(latest.contentIndex[0]?.availableLocally, false);
124
+ const pending = await vault.listPendingCapsuleSyncs();
125
+ assert.equal(pending.length, 1);
126
+ assert.equal(pending[0]?.trajectoryId, 'trajectory-retention');
127
+ assert.equal(pending[0]?.revision, 2);
128
+ vault.markCapsuleSynced('trajectory-retention', 2);
129
+ assert.deepEqual(await vault.listPendingCapsuleSyncs(), []);
130
+ vault.close();
131
+ });
132
+ test('raw retention drains every expired batch and creates lookup indexes', async () => {
133
+ const root = await mkdtemp(join(tmpdir(), 'dharma-vault-retention-'));
134
+ const vault = await LocalVault.open({ root, masterKey: randomBytes(32) });
135
+ const rawIds = [];
136
+ for (const value of ['expired one', 'expired two', 'expired three']) {
137
+ rawIds.push(await vault.putBlob(Buffer.from(value), 'raw-provider-session'));
138
+ }
139
+ const result = await vault.enforceRawEvidenceRetention({
140
+ retentionDays: 30,
141
+ now: new Date(Date.now() + 31 * 86_400_000),
142
+ limit: 1,
143
+ });
144
+ assert.deepEqual({ examined: result.examined, deleted: result.deleted }, { examined: 3, deleted: 3 });
145
+ for (const contentId of rawIds)
146
+ await assert.rejects(() => vault.getBlob(contentId), /ENOENT/);
147
+ vault.close();
148
+ const database = new DatabaseSync(join(root, 'vault.sqlite'), { readOnly: true });
149
+ const indexes = database.prepare(`select name from sqlite_master where type = 'index'`).all()
150
+ .map((row) => row.name);
151
+ assert.ok(indexes.includes('blobs_raw_retention_idx'));
152
+ assert.ok(indexes.includes('capsules_blob_content_id_idx'));
153
+ assert.ok(indexes.includes('capsules_latest_revision_idx'));
154
+ assert.ok(indexes.includes('capsule_content_refs_lookup_idx'));
155
+ database.close();
156
+ });
157
+ test('raw retention rejects invalid policy bounds', async () => {
158
+ const root = await mkdtemp(join(tmpdir(), 'dharma-vault-retention-'));
159
+ const vault = await LocalVault.open({ root, masterKey: randomBytes(32) });
160
+ await assert.rejects(() => vault.enforceRawEvidenceRetention({ retentionDays: 0 }), /between 1 and 3650 days/);
161
+ await assert.rejects(() => vault.enforceRawEvidenceRetention({ limit: 10_001 }), /between 1 and 10000/);
162
+ vault.close();
163
+ });
164
+ test('vault recovers interrupted retention quarantine before enforcing policy', async () => {
165
+ const root = await mkdtemp(join(tmpdir(), 'dharma-vault-retention-recovery-'));
166
+ const key = randomBytes(32);
167
+ const vault = await LocalVault.open({ root, masterKey: key });
168
+ const contentId = await vault.putBlob(Buffer.from('retained after interrupted transaction'), 'raw-provider-turn');
169
+ vault.close();
170
+ const digest = contentId.slice('sha256:'.length);
171
+ const original = join(root, 'blobs', digest.slice(0, 2), `${digest}.blob`);
172
+ const quarantine = `${original}.expired-test`;
173
+ await rename(original, quarantine);
174
+ const reopened = await LocalVault.open({ root, masterKey: key, rawLocalDays: 3_650 });
175
+ assert.deepEqual(await reopened.getBlob(contentId), Buffer.from('retained after interrupted transaction'));
176
+ reopened.close();
177
+ });
63
178
  test('environment keys fail closed unless explicitly enabled', () => {
64
179
  const value = randomBytes(32).toString('base64');
65
180
  assert.throws(() => loadExplicitTestKey({ DHARMA_VAULT_KEY: value }));
@@ -1 +1 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dharma-ai-labs/agent-fabric-local-vault",
3
- "version": "0.1.0",
3
+ "version": "0.1.3",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -9,5 +9,8 @@
9
9
  "files": ["dist"],
10
10
  "publishConfig": { "access": "public", "provenance": true },
11
11
  "scripts": { "test": "node --test dist/*.test.js" },
12
- "dependencies": { "@dharma-ai-labs/agent-fabric-secure-store": "0.1.0" }
12
+ "dependencies": {
13
+ "@dharma-ai-labs/agent-fabric-contracts": "0.1.1",
14
+ "@dharma-ai-labs/agent-fabric-secure-store": "0.1.0"
15
+ }
13
16
  }