@dharma-ai-labs/agent-fabric 0.2.93 → 0.2.95

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.
Files changed (54) hide show
  1. package/dist/demoEnrollment.d.ts +6 -0
  2. package/dist/demoEnrollment.d.ts.map +1 -1
  3. package/dist/demoEnrollment.js +35 -2
  4. package/dist/demoEnrollment.js.map +1 -1
  5. package/dist/demoEnrollment.test.js +43 -9
  6. package/dist/demoEnrollment.test.js.map +1 -1
  7. package/dist/demoPackage.d.ts +62 -0
  8. package/dist/demoPackage.d.ts.map +1 -0
  9. package/dist/demoPackage.js +404 -0
  10. package/dist/demoPackage.js.map +1 -0
  11. package/dist/demoPackage.test.d.ts +2 -0
  12. package/dist/demoPackage.test.d.ts.map +1 -0
  13. package/dist/demoPackage.test.js +365 -0
  14. package/dist/demoPackage.test.js.map +1 -0
  15. package/dist/demoPeer.test.js +14 -2
  16. package/dist/demoPeer.test.js.map +1 -1
  17. package/dist/index.d.ts +3 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +99 -14
  20. package/dist/index.js.map +1 -1
  21. package/dist/index.test.js +2 -2
  22. package/dist/repositoryCandidateSync.d.ts +2 -0
  23. package/dist/repositoryCandidateSync.d.ts.map +1 -1
  24. package/dist/repositoryCandidateSync.js +12 -2
  25. package/dist/repositoryCandidateSync.js.map +1 -1
  26. package/dist/repositoryCandidateSync.test.js +27 -0
  27. package/dist/repositoryCandidateSync.test.js.map +1 -1
  28. package/dist/repositoryPackage.d.ts +5 -0
  29. package/dist/repositoryPackage.d.ts.map +1 -1
  30. package/dist/repositoryPackage.js +19 -1
  31. package/dist/repositoryPackage.js.map +1 -1
  32. package/dist/repositorySourceInventoryClient.d.ts +15 -0
  33. package/dist/repositorySourceInventoryClient.d.ts.map +1 -0
  34. package/dist/repositorySourceInventoryClient.js +106 -0
  35. package/dist/repositorySourceInventoryClient.js.map +1 -0
  36. package/dist/repositorySourceReconciliation.d.ts +16 -0
  37. package/dist/repositorySourceReconciliation.d.ts.map +1 -0
  38. package/dist/repositorySourceReconciliation.js +69 -0
  39. package/dist/repositorySourceReconciliation.js.map +1 -0
  40. package/dist/repositorySourceReconciliation.test.d.ts +2 -0
  41. package/dist/repositorySourceReconciliation.test.d.ts.map +1 -0
  42. package/dist/repositorySourceReconciliation.test.js +153 -0
  43. package/dist/repositorySourceReconciliation.test.js.map +1 -0
  44. package/dist/repositorySourceSync.d.ts +34 -1
  45. package/dist/repositorySourceSync.d.ts.map +1 -1
  46. package/dist/repositorySourceSync.js +41 -5
  47. package/dist/repositorySourceSync.js.map +1 -1
  48. package/dist/repositorySourceSync.test.js +73 -2
  49. package/dist/repositorySourceSync.test.js.map +1 -1
  50. package/dist/usage.d.ts +1 -1
  51. package/dist/usage.d.ts.map +1 -1
  52. package/dist/usage.js +1 -1
  53. package/dist/usage.js.map +1 -1
  54. package/package.json +1 -1
@@ -0,0 +1,106 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { canonicalize } from '@dharma-ai-labs/agent-fabric-contracts';
3
+ import { repositorySourcePathAllowed, repositorySourcePathSafe } from './repositorySourceAuthorization.js';
4
+ const UUID = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i;
5
+ const HASH = /^sha256:[a-f0-9]{64}$/;
6
+ const digest = (value) => `sha256:${createHash('sha256').update(value).digest('hex')}`;
7
+ function record(value, label) {
8
+ if (!value || typeof value !== 'object' || Array.isArray(value))
9
+ throw new Error(`Repository source ${label} is invalid.`);
10
+ return value;
11
+ }
12
+ function checkedInventory(value, scope, authorization) {
13
+ const row = record(value, 'inventory');
14
+ if (!UUID.test(String(row.candidateId)) || !UUID.test(String(row.workspaceId))
15
+ || !HASH.test(String(row.sourceSnapshotHash)) || !HASH.test(String(row.sourceManifestHash))
16
+ || !HASH.test(String(row.sourceFingerprint)) || !Array.isArray(row.files)
17
+ || !Array.isArray(row.skills) || row.files.length > 512 || row.skills.length > 512) {
18
+ throw new Error('Repository source inventory fields are invalid.');
19
+ }
20
+ const files = [];
21
+ const paths = new Set();
22
+ for (const raw of row.files) {
23
+ const file = record(raw, 'file');
24
+ if (typeof file.path !== 'string' || !repositorySourcePathSafe(file.path)
25
+ || typeof file.sha256 !== 'string' || !HASH.test(file.sha256)
26
+ || !Number.isSafeInteger(file.sizeBytes) || Number(file.sizeBytes) < 0
27
+ || Number(file.sizeBytes) > authorization.policy.maximumFileBytes
28
+ || !['skill', 'dependency', 'approved_output', 'repository_content'].includes(String(file.role))
29
+ || (file.managedPath !== undefined && typeof file.managedPath !== 'string')
30
+ || paths.has(file.path.toLowerCase()))
31
+ throw new Error('Repository source file metadata is invalid.');
32
+ const contentClass = file.role === 'approved_output' ? 'approved_outputs'
33
+ : file.role === 'repository_content' ? 'repository_content' : 'repository_skills';
34
+ if (!repositorySourcePathAllowed(authorization, file.path, contentClass)
35
+ && !(file.role === 'dependency' && (repositorySourcePathAllowed(authorization, file.path, 'repository_content')
36
+ || repositorySourcePathAllowed(authorization, file.path, 'approved_outputs')))) {
37
+ throw new Error('Repository source file exceeds current policy.');
38
+ }
39
+ paths.add(file.path.toLowerCase());
40
+ files.push(file);
41
+ }
42
+ const skills = row.skills;
43
+ if (skills.some(skill => !skill || typeof skill !== 'object' || Array.isArray(skill)
44
+ || typeof skill.path !== 'string' || !repositorySourcePathSafe(skill.path)
45
+ || !Array.isArray(skill.filePaths) || skill.filePaths.length > 512)) {
46
+ throw new Error('Repository source skill metadata is invalid.');
47
+ }
48
+ const fingerprint = digest(canonicalize({ organizationId: scope.organizationId,
49
+ repositoryBindingId: scope.repositoryBindingId, repositoryAgentId: scope.repositoryAgentId,
50
+ generationId: authorization.generationId, policyHash: authorization.policyHash, files, skills }));
51
+ if (fingerprint !== row.sourceFingerprint)
52
+ throw new Error('Repository source fingerprint integrity failed.');
53
+ return { candidateId: String(row.candidateId), workspaceId: String(row.workspaceId),
54
+ sourceSnapshotHash: String(row.sourceSnapshotHash), sourceFingerprint: fingerprint,
55
+ files, skills };
56
+ }
57
+ export async function fetchPublishedRepositorySource(input) {
58
+ const { transport, scope, authorization, local } = input;
59
+ const route = `/agent-fabric/repository-agents/${encodeURIComponent(scope.repositoryAgentId)}/source-inventory`;
60
+ const response = record(await transport.signedGet(`${route}?workspaceId=${encodeURIComponent(scope.workspaceId)}`), 'response');
61
+ if (response.ok !== true || response.organizationId !== scope.organizationId
62
+ || response.repositoryBindingId !== scope.repositoryBindingId
63
+ || response.repositoryAgentId !== scope.repositoryAgentId
64
+ || response.policyGenerationId !== authorization.generationId) {
65
+ throw new Error('Repository source inventory authority does not match this device.');
66
+ }
67
+ if (response.source === null)
68
+ return null;
69
+ const source = checkedInventory(response.source, scope, authorization);
70
+ if (response.workspaceBaseline !== null && response.workspaceBaseline !== undefined) {
71
+ const baseline = checkedInventory(response.workspaceBaseline, scope, authorization);
72
+ if (baseline.workspaceId !== scope.workspaceId || baseline.candidateId === source.candidateId) {
73
+ throw new Error('Repository source workspace baseline is not bound to this device.');
74
+ }
75
+ }
76
+ const localHashes = new Set(local.blobs.map(blob => blob.sha256));
77
+ const wanted = new Map(source.files.filter(file => !localHashes.has(file.sha256)).map(file => [file.sha256, file]));
78
+ const pending = [...wanted.values()];
79
+ const fetched = [];
80
+ for (let offset = 0; offset < pending.length; offset += 8) {
81
+ const batch = await Promise.all(pending.slice(offset, offset + 8).map(async (file) => {
82
+ const query = new URLSearchParams({ workspaceId: scope.workspaceId, path: file.path });
83
+ const raw = await transport.signedGet(`${route}/${source.candidateId}/blobs/${encodeURIComponent(file.sha256)}?${query}`);
84
+ const body = record(raw, 'blob response');
85
+ if (body.ok !== true || body.organizationId !== scope.organizationId
86
+ || body.repositoryBindingId !== scope.repositoryBindingId
87
+ || body.repositoryAgentId !== scope.repositoryAgentId
88
+ || body.candidateId !== source.candidateId
89
+ || body.sourceSnapshotHash !== source.sourceSnapshotHash
90
+ || body.sourceFingerprint !== source.sourceFingerprint
91
+ || body.path !== file.path || body.sha256 !== file.sha256 || body.role !== file.role
92
+ || body.sizeBytes !== file.sizeBytes || typeof body.contentBase64 !== 'string') {
93
+ throw new Error('Repository source blob response does not match the published inventory.');
94
+ }
95
+ const bytes = Buffer.from(body.contentBase64, 'base64');
96
+ if (bytes.toString('base64') !== body.contentBase64 || bytes.length !== file.sizeBytes
97
+ || digest(bytes) !== file.sha256)
98
+ throw new Error('Repository source blob integrity failed.');
99
+ return { sha256: file.sha256, contentBase64: body.contentBase64 };
100
+ }));
101
+ fetched.push(...batch);
102
+ }
103
+ return { files: source.files, skills: source.skills, blobs: fetched,
104
+ sourceFingerprint: source.sourceFingerprint };
105
+ }
106
+ //# sourceMappingURL=repositorySourceInventoryClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositorySourceInventoryClient.js","sourceRoot":"","sources":["../src/repositorySourceInventoryClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type RepositoryPackageFile, type RepositoryPackageManifest, type RepositoryPackageSnapshot } from './repositoryPackage.js';
2
+ type Skill = RepositoryPackageManifest['skills'][number];
3
+ type Blob = RepositoryPackageSnapshot['blobs'][number];
4
+ export interface PublishedRepositorySource {
5
+ files: RepositoryPackageFile[];
6
+ skills: Skill[];
7
+ blobs: Blob[];
8
+ sourceFingerprint: string;
9
+ }
10
+ export declare function reconcileRepositorySourceSnapshot(input: {
11
+ local: RepositoryPackageSnapshot;
12
+ previousLocal: RepositoryPackageSnapshot | null;
13
+ published: PublishedRepositorySource | null;
14
+ }): RepositoryPackageSnapshot;
15
+ export {};
16
+ //# sourceMappingURL=repositorySourceReconciliation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositorySourceReconciliation.d.ts","sourceRoot":"","sources":["../src/repositorySourceReconciliation.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,qBAAqB,EAAE,KAAK,yBAAyB,EAC1D,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,KAAK,KAAK,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AACzD,KAAK,IAAI,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,qBAAqB,EAAE,CAAC;IAC/B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAsCD,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,KAAK,EAAE,yBAAyB,CAAC;IACjC,aAAa,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAChD,SAAS,EAAE,yBAAyB,GAAG,IAAI,CAAC;CAC7C,GAAG,yBAAyB,CA6B5B"}
@@ -0,0 +1,69 @@
1
+ import { canonicalize } from '@dharma-ai-labs/agent-fabric-contracts';
2
+ import { rebuildRepositoryPackageSnapshot, serializeRepositoryPackageSnapshot } from './repositoryPackage.js';
3
+ function indexed(entries, label) {
4
+ const result = new Map();
5
+ for (const entry of entries) {
6
+ const key = entry.path.toLowerCase();
7
+ if (result.has(key))
8
+ throw new Error(`Repository source ${label} contains a conflicting path.`);
9
+ result.set(key, entry);
10
+ }
11
+ return result;
12
+ }
13
+ function same(left, right) {
14
+ return canonicalize(left) === canonicalize(right);
15
+ }
16
+ function reconcileEntries(label, local, previousLocal, published) {
17
+ const localByPath = indexed(local, `${label} local inventory`);
18
+ const baseByPath = indexed(previousLocal, `${label} published local baseline`);
19
+ const publishedByPath = indexed(published, `${label} published inventory`);
20
+ const paths = new Set([...localByPath.keys(), ...baseByPath.keys(), ...publishedByPath.keys()]);
21
+ const result = [];
22
+ for (const path of [...paths].sort()) {
23
+ const current = localByPath.get(path);
24
+ const base = baseByPath.get(path);
25
+ const remote = publishedByPath.get(path);
26
+ const localChanged = !same(current ?? null, base ?? null);
27
+ const remoteChanged = !same(remote ?? null, base ?? null);
28
+ if (localChanged && remoteChanged && !same(current ?? null, remote ?? null)) {
29
+ throw new Error(`Repository source ${label} changed concurrently at ${path}.`);
30
+ }
31
+ const chosen = localChanged ? current : remote;
32
+ if (chosen)
33
+ result.push(chosen);
34
+ }
35
+ return result;
36
+ }
37
+ export function reconcileRepositorySourceSnapshot(input) {
38
+ serializeRepositoryPackageSnapshot(input.local);
39
+ if (input.previousLocal) {
40
+ serializeRepositoryPackageSnapshot(input.previousLocal);
41
+ const prior = input.previousLocal.manifest;
42
+ const current = input.local.manifest;
43
+ if (prior.organizationId !== current.organizationId || prior.workspaceId !== current.workspaceId
44
+ || prior.sourceAuthorization?.repositoryBindingId !== current.sourceAuthorization?.repositoryBindingId
45
+ || prior.sourceAuthorization?.repositoryAgentId !== current.sourceAuthorization?.repositoryAgentId
46
+ || prior.sourceAuthorization?.generationId !== current.sourceAuthorization?.generationId) {
47
+ throw new Error('Repository source local baseline has a different authority.');
48
+ }
49
+ }
50
+ if (!input.published)
51
+ return input.local;
52
+ const local = input.local.manifest;
53
+ const prior = input.previousLocal?.manifest;
54
+ const sourceFiles = (manifest) => manifest?.files.filter(file => file.role !== 'knowledge') ?? [];
55
+ const files = reconcileEntries('file', sourceFiles(local), sourceFiles(prior), input.published.files);
56
+ const skills = reconcileEntries('skill', local.skills, prior?.skills ?? [], input.published.skills);
57
+ const allFiles = [...local.files.filter(file => file.role === 'knowledge'), ...files];
58
+ const available = new Map();
59
+ for (const blob of [...input.published.blobs, ...input.local.blobs])
60
+ available.set(blob.sha256, blob);
61
+ const blobs = [...new Set(allFiles.map(file => file.sha256))].map(hash => {
62
+ const blob = available.get(hash);
63
+ if (!blob)
64
+ throw new Error('Repository source reconciliation is missing a content-addressed blob.');
65
+ return blob;
66
+ });
67
+ return rebuildRepositoryPackageSnapshot(input.local, { files: allFiles, skills, blobs });
68
+ }
69
+ //# sourceMappingURL=repositorySourceReconciliation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositorySourceReconciliation.js","sourceRoot":"","sources":["../src/repositorySourceReconciliation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=repositorySourceReconciliation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositorySourceReconciliation.test.d.ts","sourceRoot":"","sources":["../src/repositorySourceReconciliation.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,153 @@
1
+ import assert from 'node:assert/strict';
2
+ import { createHash } from 'node:crypto';
3
+ import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';
4
+ import { tmpdir } from 'node:os';
5
+ import { resolve } from 'node:path';
6
+ import test from 'node:test';
7
+ import { canonicalize } from '@dharma-ai-labs/agent-fabric-contracts';
8
+ import { initializeRepositoryKnowledge } from './repositoryKnowledge.js';
9
+ import { inventoryRepositoryPackage, rebuildRepositoryPackageSnapshot, serializeRepositoryPackageSnapshot } from './repositoryPackage.js';
10
+ import { reconcileRepositorySourceSnapshot } from './repositorySourceReconciliation.js';
11
+ import { fetchPublishedRepositorySource } from './repositorySourceInventoryClient.js';
12
+ const organizationId = 'org_reconcile_fixture';
13
+ const workspaceId = '11111111-1111-4111-8111-111111111111';
14
+ const repositoryBindingId = '22222222-2222-4222-8222-222222222222';
15
+ const repositoryAgentId = '33333333-3333-4333-8333-333333333333';
16
+ const generationId = '44444444-4444-4444-8444-444444444444';
17
+ const digest = (value) => `sha256:${createHash('sha256').update(value).digest('hex')}`;
18
+ const policy = {
19
+ action: 'authorize', confirmed: true, requestId: '55555555-5555-4555-8555-555555555555',
20
+ repositoryBindingId, expectedRevision: 0,
21
+ allowedContentClasses: ['approved_outputs', 'repository_content', 'repository_skills'],
22
+ approvedRepositoryPaths: ['README.md'], approvedOutputFolders: ['output/reports'],
23
+ automaticValidatedPublication: true, retentionDays: 30, maximumFileBytes: 262144,
24
+ maximumSnapshotBytes: 4194304, maximumDailyUploadBytes: 8388608, expiresAt: null,
25
+ };
26
+ const authorization = {
27
+ schema: 'dharma.repository-source-authorization/v1', organizationId, workspaceId,
28
+ repositoryBindingId, repositoryAgentId, revision: 1, generationId,
29
+ receiptId: `repo_consent_${generationId}`, policyRevision: `repository-source-${generationId}`,
30
+ policyHash: digest(canonicalize(policy)), confirmedAt: '2026-09-24T00:00:00.000Z', policy,
31
+ };
32
+ function file(path, content) {
33
+ const bytes = Buffer.from(content);
34
+ const sha256 = digest(bytes);
35
+ return { entry: { path, role: path === 'README.md' ? 'repository_content' : 'approved_output',
36
+ sha256, sizeBytes: bytes.length }, blob: { sha256, contentBase64: bytes.toString('base64') } };
37
+ }
38
+ async function fixture(t) {
39
+ const workspace = await mkdtemp(resolve(tmpdir(), 'repository-source-reconcile-'));
40
+ t.after(() => rm(workspace, { recursive: true, force: true }));
41
+ const managedRoot = resolve(workspace, '.agents/skills/dharma-agent-fabric');
42
+ await mkdir(managedRoot, { recursive: true });
43
+ await writeFile(resolve(managedRoot, '.dharma-agent-fabric.json'), JSON.stringify({ managedBy: 'dharma-agent-fabric', workspaceId }));
44
+ await initializeRepositoryKnowledge({ organizationId, repositoryAgentId, workspace });
45
+ await writeFile(resolve(workspace, 'README.md'), '# Shared repository\n');
46
+ const template = await inventoryRepositoryPackage({ organizationId, workspaceId, repositoryBindingId,
47
+ repositoryAgentId, workspace, sourceAuthorization: authorization });
48
+ const snapshot = (...entries) => {
49
+ const knowledge = template.manifest.files.filter(item => item.role === 'knowledge');
50
+ const hashes = new Set(knowledge.map(item => item.sha256));
51
+ const blobs = [...template.blobs.filter(blob => hashes.has(blob.sha256)), ...entries.map(item => item.blob)];
52
+ return rebuildRepositoryPackageSnapshot(template, {
53
+ files: [...knowledge, ...entries.map(item => item.entry)], skills: [],
54
+ blobs: [...new Map(blobs.map(blob => [blob.sha256, blob])).values()],
55
+ });
56
+ };
57
+ return { snapshot };
58
+ }
59
+ function published(value) {
60
+ const files = value.manifest.files.filter(item => item.role !== 'knowledge');
61
+ const hashes = new Set(files.map(item => item.sha256));
62
+ return { files, skills: value.manifest.skills, blobs: value.blobs.filter(blob => hashes.has(blob.sha256)),
63
+ sourceFingerprint: value.manifest.sourceFingerprint };
64
+ }
65
+ const readme = file('README.md', '# Shared repository\n');
66
+ const localReport = file('output/reports/local.md', '# Local report\n');
67
+ const remoteReport = file('output/reports/remote.md', '# Remote report\n');
68
+ test('reconciles independent approved reports without losing either source', async (t) => {
69
+ const f = await fixture(t);
70
+ const base = f.snapshot(readme);
71
+ const local = f.snapshot(readme, localReport);
72
+ const remote = f.snapshot(readme, remoteReport);
73
+ const merged = reconcileRepositorySourceSnapshot({ local, previousLocal: base, published: published(remote) });
74
+ assert.deepEqual(merged.manifest.files.filter(item => item.role !== 'knowledge').map(item => item.path), ['README.md', 'output/reports/local.md', 'output/reports/remote.md']);
75
+ assert.notEqual(merged.manifest.sourceFingerprint, remote.manifest.sourceFingerprint);
76
+ serializeRepositoryPackageSnapshot(merged);
77
+ });
78
+ test('does not resurrect a locally deleted file when the remote copy is unchanged', async (t) => {
79
+ const f = await fixture(t);
80
+ const base = f.snapshot(readme, localReport);
81
+ const merged = reconcileRepositorySourceSnapshot({ local: f.snapshot(readme),
82
+ previousLocal: base, published: published(base) });
83
+ assert.deepEqual(merged.manifest.files.filter(item => item.role !== 'knowledge').map(item => item.path), ['README.md']);
84
+ });
85
+ test('adopts a remote deletion when this workspace has not changed the file', async (t) => {
86
+ const f = await fixture(t);
87
+ const base = f.snapshot(readme, localReport);
88
+ const merged = reconcileRepositorySourceSnapshot({ local: base, previousLocal: base,
89
+ published: published(f.snapshot(readme)) });
90
+ assert.deepEqual(merged.manifest.files.filter(item => item.role !== 'knowledge').map(item => item.path), ['README.md']);
91
+ });
92
+ test('rejects concurrent conflicting modifications to the same source path', async (t) => {
93
+ const f = await fixture(t);
94
+ const base = f.snapshot(readme);
95
+ const local = f.snapshot(file('README.md', '# Local revision\n'));
96
+ const remote = f.snapshot(file('README.md', '# Remote revision\n'));
97
+ assert.throws(() => reconcileRepositorySourceSnapshot({ local, previousLocal: base,
98
+ published: published(remote) }), /changed concurrently at readme.md/);
99
+ });
100
+ test('fresh workspaces preserve remote-only source and reject conflicting same-path content', async (t) => {
101
+ const f = await fixture(t);
102
+ const local = f.snapshot(readme, localReport);
103
+ const remote = f.snapshot(readme, remoteReport);
104
+ const merged = reconcileRepositorySourceSnapshot({ local, previousLocal: null, published: published(remote) });
105
+ assert.equal(merged.manifest.files.filter(item => item.role !== 'knowledge').length, 3);
106
+ assert.throws(() => reconcileRepositorySourceSnapshot({ local, previousLocal: null,
107
+ published: published(f.snapshot(file('README.md', '# Different repository\n'))) }), /changed concurrently at readme.md/);
108
+ });
109
+ test('rejects missing or corrupted remote blobs through the normal snapshot serializer', async (t) => {
110
+ const f = await fixture(t);
111
+ const local = f.snapshot(readme);
112
+ const remote = f.snapshot(readme, remoteReport);
113
+ assert.throws(() => reconcileRepositorySourceSnapshot({ local, previousLocal: local,
114
+ published: { ...published(remote), blobs: [] } }), /missing a content-addressed blob/);
115
+ assert.throws(() => reconcileRepositorySourceSnapshot({ local, previousLocal: local,
116
+ published: { ...published(remote), blobs: [{ ...remoteReport.blob, contentBase64: 'YmFk' }] } }), /blob integrity failed/);
117
+ });
118
+ test('reads scoped published inventory and verifies a missing remote blob', async (t) => {
119
+ const f = await fixture(t);
120
+ const local = f.snapshot(readme);
121
+ const remote = f.snapshot(readme, remoteReport);
122
+ const candidateId = '66666666-6666-4666-8666-666666666666';
123
+ const remoteFile = remote.manifest.files.find(item => item.path === remoteReport.entry.path);
124
+ const view = { ok: true, organizationId, repositoryBindingId, repositoryAgentId,
125
+ policyGenerationId: generationId, workspaceBaseline: null,
126
+ source: { candidateId, workspaceId: '77777777-7777-4777-8777-777777777777',
127
+ sourceSnapshotHash: remote.manifest.snapshotHash,
128
+ sourceManifestHash: digest(canonicalize(remote.manifest)),
129
+ sourceFingerprint: remote.manifest.sourceFingerprint,
130
+ files: published(remote).files, skills: remote.manifest.skills } };
131
+ const requests = [];
132
+ const transport = { signedGet: async (route) => {
133
+ requests.push(route);
134
+ if (!route.includes('/blobs/'))
135
+ return view;
136
+ return { ok: true, organizationId, repositoryBindingId, repositoryAgentId,
137
+ candidateId, sourceSnapshotHash: remote.manifest.snapshotHash,
138
+ sourceFingerprint: remote.manifest.sourceFingerprint, path: remoteFile.path,
139
+ role: remoteFile.role, sha256: remoteFile.sha256, sizeBytes: remoteFile.sizeBytes,
140
+ contentBase64: remoteReport.blob.contentBase64 };
141
+ } };
142
+ const scope = { organizationId, workspaceId, repositoryBindingId, repositoryAgentId };
143
+ const fetched = await fetchPublishedRepositorySource({ transport, scope, authorization, local });
144
+ assert.equal(fetched?.blobs.length, 1);
145
+ assert.equal(fetched?.blobs[0]?.sha256, remoteReport.blob.sha256);
146
+ assert.equal(requests.length, 2);
147
+ const merged = reconcileRepositorySourceSnapshot({ local, previousLocal: local, published: fetched });
148
+ assert.deepEqual(merged.manifest.files.filter(item => item.role !== 'knowledge').map(item => item.path), ['README.md', 'output/reports/remote.md']);
149
+ await assert.rejects(fetchPublishedRepositorySource({ transport: { signedGet: async () => ({ ...view, organizationId: 'org_foreign' }) }, scope, authorization, local }), /authority/);
150
+ await assert.rejects(fetchPublishedRepositorySource({ transport: { signedGet: async (route) => route.includes('/blobs/') ? { ...(await transport.signedGet(route)), contentBase64: 'YmFk' }
151
+ : view }, scope, authorization, local }), /blob integrity/);
152
+ });
153
+ //# sourceMappingURL=repositorySourceReconciliation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositorySourceReconciliation.test.js","sourceRoot":"","sources":["../src/repositorySourceReconciliation.test.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,20 @@ export type BoundRepositorySource = RepositorySourceScope & {
7
7
  repositoryBindingId: string;
8
8
  repositoryAgentId: string;
9
9
  };
10
+ export declare function advanceRepositorySourceBaseline(record: {
11
+ localBaselineSnapshotHash?: string | null;
12
+ publishedLocalSnapshotHash?: string | null;
13
+ pendingLocalSnapshotHash?: string | null;
14
+ pendingLocalOperationId?: string | null;
15
+ }, receipt: {
16
+ state: string;
17
+ operationId: string;
18
+ }): {
19
+ localBaselineSnapshotHash: string | null;
20
+ publishedLocalSnapshotHash: string | null;
21
+ pendingLocalSnapshotHash: string | null;
22
+ pendingLocalOperationId: string | null;
23
+ };
10
24
  export declare function fetchRepositorySourceAuthorization(transport: SourceTransport, scope: BoundRepositorySource): Promise<import("./repositorySourceAuthorization.js").RepositorySourceAuthorization>;
11
25
  export declare class RepositorySourceWatcher {
12
26
  #private;
@@ -47,7 +61,8 @@ export declare function scanRepositorySourceChanges(input: BoundRepositorySource
47
61
  catalogBytes: Buffer;
48
62
  manifestBytes: Buffer;
49
63
  } | null>;
50
- submitCandidate?: (snapshot: RepositoryPackageSnapshot) => Promise<Record<string, unknown>>;
64
+ loadPublishedLocalBaseline?: () => Promise<RepositoryPackageSnapshot | null>;
65
+ submitCandidate?: (snapshot: RepositoryPackageSnapshot, expectedLatestSourceFingerprint?: string) => Promise<Record<string, unknown>>;
51
66
  }): Promise<{
52
67
  state: "unchanged" | "debouncing";
53
68
  localMutation: boolean;
@@ -56,6 +71,23 @@ export declare function scanRepositorySourceChanges(input: BoundRepositorySource
56
71
  fingerprint?: undefined;
57
72
  persisted?: undefined;
58
73
  candidate?: undefined;
74
+ submittedManifestHash?: undefined;
75
+ } | {
76
+ state: "source_already_published";
77
+ localMutation: boolean;
78
+ sharedAuthority: "verified_existing";
79
+ snapshotId: string;
80
+ fingerprint: string;
81
+ persisted: {
82
+ manifestPath: string;
83
+ snapshotPath: string;
84
+ snapshotHash: string;
85
+ managedCopiesPath: string | null;
86
+ disposition: "candidate_only" | "local_bootstrap_inventory";
87
+ authority: "local_inventory_not_signed";
88
+ };
89
+ candidate: null;
90
+ submittedManifestHash?: undefined;
59
91
  } | {
60
92
  state: "local_candidate_collected";
61
93
  localMutation: boolean;
@@ -71,6 +103,7 @@ export declare function scanRepositorySourceChanges(input: BoundRepositorySource
71
103
  authority: "local_inventory_not_signed";
72
104
  };
73
105
  candidate: Record<string, unknown> | null;
106
+ submittedManifestHash: string;
74
107
  }>;
75
108
  export {};
76
109
  //# sourceMappingURL=repositorySourceSync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repositorySourceSync.d.ts","sourceRoot":"","sources":["../src/repositorySourceSync.ts"],"names":[],"mappings":"AAIA,OAAO,EAA8E,KAAK,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC5J,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAExE,KAAK,eAAe,GAAG;IAAE,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAAE,CAAC;AACtF,MAAM,MAAM,qBAAqB,GAAG,qBAAqB,GAAG;IAC1D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAIF,wBAAsB,kCAAkC,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,qBAAqB,uFAOhH;AAID,qBAAa,uBAAuB;;IAIlC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAChB,UAAU,SAAQ;IAI9B,IAAI,CAAC,WAAW,EAAE,MAAM;IAMxB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ;IAahF,QAAQ,CAAC,WAAW,EAAE,MAAM;IAM5B,UAAU;CACX;AAED,wBAAsB,2BAA2B,CAAC,KAAK,EAAE,qBAAqB,GAAG;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,uBAAuB,CAAC;CAClC,iBAUA;AAED,qBAAa,4BAA4B;;IAEvC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE;QAAE,SAAS,EAAE,8BAA8B,CAAA;KAAE,GAClF;QAAE,SAAS,EAAE,oCAAoC,CAAC;QAAC,YAAY,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAAG,SAAS,EAChI,SAAS,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAAG,OAAO;CAW5E;AAED,wBAAsB,2BAA2B,CAAC,KAAK,EAAE,qBAAqB,GAAG;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,eAAe,CAAC;IAC3B,OAAO,EAAE,uBAAuB,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC9F,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,yBAAyB,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC7F;;;;;;;;;;;;;;;;;;;;;;;GAgCA"}
1
+ {"version":3,"file":"repositorySourceSync.d.ts","sourceRoot":"","sources":["../src/repositorySourceSync.ts"],"names":[],"mappings":"AAIA,OAAO,EAA8E,KAAK,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC5J,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAIxE,KAAK,eAAe,GAAG;IAAE,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAAE,CAAC;AACtF,MAAM,MAAM,qBAAqB,GAAG,qBAAqB,GAAG;IAC1D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,wBAAgB,+BAA+B,CAAC,MAAM,EAAE;IACtD,yBAAyB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,0BAA0B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC,EAAE,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE;;;;;EAejD;AAID,wBAAsB,kCAAkC,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,qBAAqB,uFAOhH;AAID,qBAAa,uBAAuB;;IAIlC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAChB,UAAU,SAAQ;IAI9B,IAAI,CAAC,WAAW,EAAE,MAAM;IAMxB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ;IAahF,QAAQ,CAAC,WAAW,EAAE,MAAM;IAM5B,UAAU;CACX;AAED,wBAAsB,2BAA2B,CAAC,KAAK,EAAE,qBAAqB,GAAG;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,uBAAuB,CAAC;CAClC,iBAUA;AAED,qBAAa,4BAA4B;;IAEvC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE;QAAE,SAAS,EAAE,8BAA8B,CAAA;KAAE,GAClF;QAAE,SAAS,EAAE,oCAAoC,CAAC;QAAC,YAAY,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAAG,SAAS,EAChI,SAAS,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAAG,OAAO;CAW5E;AAED,wBAAsB,2BAA2B,CAAC,KAAK,EAAE,qBAAqB,GAAG;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,eAAe,CAAC;IAC3B,OAAO,EAAE,uBAAuB,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC9F,0BAA0B,CAAC,EAAE,MAAM,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAC;IAC7E,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,yBAAyB,EACpD,+BAA+B,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDA"}
@@ -2,6 +2,24 @@ import { createHash } from 'node:crypto';
2
2
  import { canonicalize } from '@dharma-ai-labs/agent-fabric-contracts';
3
3
  import { inventoryRepositoryPackage, readRepositoryPackageSnapshot, readRepositorySourceBaselineSnapshot, writeRepositoryPackageSnapshot } from './repositoryPackage.js';
4
4
  import { parseRepositorySourcePolicyResponse, validateRepositorySourceAuthorization } from './repositorySourceAuthorization.js';
5
+ import { fetchPublishedRepositorySource } from './repositorySourceInventoryClient.js';
6
+ import { reconcileRepositorySourceSnapshot } from './repositorySourceReconciliation.js';
7
+ export function advanceRepositorySourceBaseline(record, receipt) {
8
+ if (record.pendingLocalOperationId && record.pendingLocalOperationId !== receipt.operationId) {
9
+ throw new Error('Repository source candidate receipt does not match the pending operation.');
10
+ }
11
+ const matchesPending = record.pendingLocalOperationId === receipt.operationId;
12
+ const terminal = receipt.state === 'published' || receipt.state === 'blocked';
13
+ const publishedLocalSnapshotHash = receipt.state === 'published' && matchesPending
14
+ ? record.pendingLocalSnapshotHash ?? null : record.publishedLocalSnapshotHash ?? null;
15
+ return {
16
+ localBaselineSnapshotHash: receipt.state === 'blocked' && matchesPending
17
+ ? publishedLocalSnapshotHash : record.localBaselineSnapshotHash ?? null,
18
+ publishedLocalSnapshotHash,
19
+ pendingLocalSnapshotHash: terminal ? null : record.pendingLocalSnapshotHash ?? null,
20
+ pendingLocalOperationId: terminal ? null : record.pendingLocalOperationId ?? null,
21
+ };
22
+ }
5
23
  const UUID = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$(?![\s\S])/i;
6
24
  const HASH = /^sha256:[a-f0-9]{64}$(?![\s\S])/;
7
25
  export async function fetchRepositorySourceAuthorization(transport, scope) {
@@ -92,8 +110,8 @@ export async function scanRepositorySourceChanges(input) {
92
110
  throw new Error('Verified repository knowledge byte limit exceeded.');
93
111
  }
94
112
  const retainedKnowledge = observed ? { catalogBytes: Buffer.from(observed.catalogBytes), manifestBytes: Buffer.from(observed.manifestBytes) } : null;
95
- const snapshot = await inventoryRepositoryPackage({ ...input, retainedKnowledge, sourceAuthorization: authorization });
96
- const fingerprint = snapshot.manifest.sourceFingerprint;
113
+ const local = await inventoryRepositoryPackage({ ...input, retainedKnowledge, sourceAuthorization: authorization });
114
+ const fingerprint = local.manifest.sourceFingerprint;
97
115
  if (!fingerprint)
98
116
  throw new Error('Governed repository source scan returned no fingerprint.');
99
117
  const state = input.watcher.observe(fingerprint, (input.monotonicNow || (() => performance.now()))());
@@ -110,11 +128,29 @@ export async function scanRepositorySourceChanges(input) {
110
128
  throw new Error('Verified repository knowledge release changed during collection.');
111
129
  }
112
130
  }
113
- const persisted = await writeRepositoryPackageSnapshot({ workspace: input.workspace, snapshot, candidateOnly: true });
114
- const candidate = input.submitCandidate ? await input.submitCandidate(snapshot) : null;
131
+ const published = input.loadPublishedLocalBaseline
132
+ ? await fetchPublishedRepositorySource({ transport: input.transport, scope: input,
133
+ authorization, local }) : null;
134
+ const snapshot = input.loadPublishedLocalBaseline
135
+ ? reconcileRepositorySourceSnapshot({ local,
136
+ previousLocal: await input.loadPublishedLocalBaseline(), published }) : local;
137
+ const persisted = await writeRepositoryPackageSnapshot({ workspace: input.workspace, snapshot: local,
138
+ candidateOnly: true });
139
+ if (published && snapshot.manifest.sourceFingerprint === published.sourceFingerprint) {
140
+ input.watcher.complete(fingerprint);
141
+ return { state: 'source_already_published', localMutation: true,
142
+ sharedAuthority: 'verified_existing', snapshotId: snapshot.manifest.snapshotId,
143
+ fingerprint, persisted, candidate: null };
144
+ }
145
+ if (snapshot.manifest.snapshotHash !== local.manifest.snapshotHash) {
146
+ await writeRepositoryPackageSnapshot({ workspace: input.workspace, snapshot, candidateOnly: true });
147
+ }
148
+ const candidate = input.submitCandidate
149
+ ? await input.submitCandidate(snapshot, published?.sourceFingerprint) : null;
115
150
  input.watcher.complete(fingerprint);
116
151
  return { state: 'local_candidate_collected', localMutation: true, sharedAuthority: 'pending',
117
- snapshotId: snapshot.manifest.snapshotId, fingerprint, persisted, candidate };
152
+ snapshotId: snapshot.manifest.snapshotId, fingerprint, persisted, candidate,
153
+ submittedManifestHash: `sha256:${createHash('sha256').update(canonicalize(snapshot.manifest)).digest('hex')}` };
118
154
  }
119
155
  catch (error) {
120
156
  input.watcher.invalidate();
@@ -1 +1 @@
1
- {"version":3,"file":"repositorySourceSync.js","sourceRoot":"","sources":["../src/repositorySourceSync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repositorySourceSync.js","sourceRoot":"","sources":["../src/repositorySourceSync.ts"],"names":[],"mappings":"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"}