@dharma-ai-labs/agent-fabric 0.2.49 → 0.2.51

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 (198) hide show
  1. package/dist/index.d.ts +88 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +840 -175
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.test.js +2 -2
  6. package/dist/repositoryCandidateSync.d.ts +55 -0
  7. package/dist/repositoryCandidateSync.d.ts.map +1 -0
  8. package/dist/repositoryCandidateSync.js +177 -0
  9. package/dist/repositoryCandidateSync.js.map +1 -0
  10. package/dist/repositoryCandidateSync.test.d.ts +2 -0
  11. package/dist/repositoryCandidateSync.test.d.ts.map +1 -0
  12. package/dist/repositoryCandidateSync.test.js +141 -0
  13. package/dist/repositoryCandidateSync.test.js.map +1 -0
  14. package/dist/repositoryInstalledKnowledge.d.ts +13 -0
  15. package/dist/repositoryInstalledKnowledge.d.ts.map +1 -0
  16. package/dist/repositoryInstalledKnowledge.js +25 -0
  17. package/dist/repositoryInstalledKnowledge.js.map +1 -0
  18. package/dist/repositoryInstallerFiles.d.ts +6 -0
  19. package/dist/repositoryInstallerFiles.d.ts.map +1 -0
  20. package/dist/repositoryInstallerFiles.js +113 -0
  21. package/dist/repositoryInstallerFiles.js.map +1 -0
  22. package/dist/repositoryKnowledge.d.ts +119 -0
  23. package/dist/repositoryKnowledge.d.ts.map +1 -0
  24. package/dist/repositoryKnowledge.js +462 -0
  25. package/dist/repositoryKnowledge.js.map +1 -0
  26. package/dist/repositoryKnowledge.test.d.ts +2 -0
  27. package/dist/repositoryKnowledge.test.d.ts.map +1 -0
  28. package/dist/repositoryKnowledge.test.js +245 -0
  29. package/dist/repositoryKnowledge.test.js.map +1 -0
  30. package/dist/repositoryKnowledgeRetention.test.d.ts +2 -0
  31. package/dist/repositoryKnowledgeRetention.test.d.ts.map +1 -0
  32. package/dist/repositoryKnowledgeRetention.test.js +386 -0
  33. package/dist/repositoryKnowledgeRetention.test.js.map +1 -0
  34. package/dist/repositoryOnboardingCaller.test.d.ts +2 -0
  35. package/dist/repositoryOnboardingCaller.test.d.ts.map +1 -0
  36. package/dist/repositoryOnboardingCaller.test.js +216 -0
  37. package/dist/repositoryOnboardingCaller.test.js.map +1 -0
  38. package/dist/repositoryOnboardingFlow.test.d.ts +2 -0
  39. package/dist/repositoryOnboardingFlow.test.d.ts.map +1 -0
  40. package/dist/repositoryOnboardingFlow.test.js +47 -0
  41. package/dist/repositoryOnboardingFlow.test.js.map +1 -0
  42. package/dist/repositoryPackage.d.ts +115 -0
  43. package/dist/repositoryPackage.d.ts.map +1 -0
  44. package/dist/repositoryPackage.js +1095 -0
  45. package/dist/repositoryPackage.js.map +1 -0
  46. package/dist/repositoryPackage.test.d.ts +2 -0
  47. package/dist/repositoryPackage.test.d.ts.map +1 -0
  48. package/dist/repositoryPackage.test.js +709 -0
  49. package/dist/repositoryPackage.test.js.map +1 -0
  50. package/dist/repositoryPackageDelivery.d.ts +29 -0
  51. package/dist/repositoryPackageDelivery.d.ts.map +1 -0
  52. package/dist/repositoryPackageDelivery.js +140 -0
  53. package/dist/repositoryPackageDelivery.js.map +1 -0
  54. package/dist/repositoryPackageDelivery.test.d.ts +2 -0
  55. package/dist/repositoryPackageDelivery.test.d.ts.map +1 -0
  56. package/dist/repositoryPackageDelivery.test.js +787 -0
  57. package/dist/repositoryPackageDelivery.test.js.map +1 -0
  58. package/dist/repositoryPackageDeliveryCaller.test.d.ts +2 -0
  59. package/dist/repositoryPackageDeliveryCaller.test.d.ts.map +1 -0
  60. package/dist/repositoryPackageDeliveryCaller.test.js +18 -0
  61. package/dist/repositoryPackageDeliveryCaller.test.js.map +1 -0
  62. package/dist/repositoryPackageDeliveryPreflight.test.d.ts +2 -0
  63. package/dist/repositoryPackageDeliveryPreflight.test.d.ts.map +1 -0
  64. package/dist/repositoryPackageDeliveryPreflight.test.js +29 -0
  65. package/dist/repositoryPackageDeliveryPreflight.test.js.map +1 -0
  66. package/dist/repositoryPackageTransfer.d.ts +85 -0
  67. package/dist/repositoryPackageTransfer.d.ts.map +1 -0
  68. package/dist/repositoryPackageTransfer.js +233 -0
  69. package/dist/repositoryPackageTransfer.js.map +1 -0
  70. package/dist/repositoryPackageTransfer.test.d.ts +2 -0
  71. package/dist/repositoryPackageTransfer.test.d.ts.map +1 -0
  72. package/dist/repositoryPackageTransfer.test.js +173 -0
  73. package/dist/repositoryPackageTransfer.test.js.map +1 -0
  74. package/dist/repositoryPackageTransferV2.test.d.ts +2 -0
  75. package/dist/repositoryPackageTransferV2.test.d.ts.map +1 -0
  76. package/dist/repositoryPackageTransferV2.test.js +549 -0
  77. package/dist/repositoryPackageTransferV2.test.js.map +1 -0
  78. package/dist/repositoryPackageTransferV2Schema.test.d.ts +2 -0
  79. package/dist/repositoryPackageTransferV2Schema.test.d.ts.map +1 -0
  80. package/dist/repositoryPackageTransferV2Schema.test.js +48 -0
  81. package/dist/repositoryPackageTransferV2Schema.test.js.map +1 -0
  82. package/dist/repositoryReleaseMetadata.d.ts +37 -0
  83. package/dist/repositoryReleaseMetadata.d.ts.map +1 -0
  84. package/dist/repositoryReleaseMetadata.js +251 -0
  85. package/dist/repositoryReleaseMetadata.js.map +1 -0
  86. package/dist/repositoryReleaseMetadata.test.d.ts +2 -0
  87. package/dist/repositoryReleaseMetadata.test.d.ts.map +1 -0
  88. package/dist/repositoryReleaseMetadata.test.js +297 -0
  89. package/dist/repositoryReleaseMetadata.test.js.map +1 -0
  90. package/dist/repositoryRoleDerivation.d.ts +11 -0
  91. package/dist/repositoryRoleDerivation.d.ts.map +1 -0
  92. package/dist/repositoryRoleDerivation.js +59 -0
  93. package/dist/repositoryRoleDerivation.js.map +1 -0
  94. package/dist/repositoryRoleDerivation.test.d.ts +2 -0
  95. package/dist/repositoryRoleDerivation.test.d.ts.map +1 -0
  96. package/dist/repositoryRoleDerivation.test.js +33 -0
  97. package/dist/repositoryRoleDerivation.test.js.map +1 -0
  98. package/dist/repositoryRoleMetadata.d.ts +63 -0
  99. package/dist/repositoryRoleMetadata.d.ts.map +1 -0
  100. package/dist/repositoryRoleMetadata.js +203 -0
  101. package/dist/repositoryRoleMetadata.js.map +1 -0
  102. package/dist/repositoryRoleMetadata.test.d.ts +2 -0
  103. package/dist/repositoryRoleMetadata.test.d.ts.map +1 -0
  104. package/dist/repositoryRoleMetadata.test.js +296 -0
  105. package/dist/repositoryRoleMetadata.test.js.map +1 -0
  106. package/dist/repositoryRoleQuestion.d.ts +36 -0
  107. package/dist/repositoryRoleQuestion.d.ts.map +1 -0
  108. package/dist/repositoryRoleQuestion.js +68 -0
  109. package/dist/repositoryRoleQuestion.js.map +1 -0
  110. package/dist/repositoryRoleQuestion.test.d.ts +2 -0
  111. package/dist/repositoryRoleQuestion.test.d.ts.map +1 -0
  112. package/dist/repositoryRoleQuestion.test.js +66 -0
  113. package/dist/repositoryRoleQuestion.test.js.map +1 -0
  114. package/dist/repositorySourceAuthorization.d.ts +43 -0
  115. package/dist/repositorySourceAuthorization.d.ts.map +1 -0
  116. package/dist/repositorySourceAuthorization.js +164 -0
  117. package/dist/repositorySourceAuthorization.js.map +1 -0
  118. package/dist/repositorySourceCapture.test.d.ts +2 -0
  119. package/dist/repositorySourceCapture.test.d.ts.map +1 -0
  120. package/dist/repositorySourceCapture.test.js +303 -0
  121. package/dist/repositorySourceCapture.test.js.map +1 -0
  122. package/dist/repositorySourceSync.d.ts +54 -0
  123. package/dist/repositorySourceSync.d.ts.map +1 -0
  124. package/dist/repositorySourceSync.js +88 -0
  125. package/dist/repositorySourceSync.js.map +1 -0
  126. package/dist/repositorySourceSync.test.d.ts +2 -0
  127. package/dist/repositorySourceSync.test.d.ts.map +1 -0
  128. package/dist/repositorySourceSync.test.js +218 -0
  129. package/dist/repositorySourceSync.test.js.map +1 -0
  130. package/dist/schemas/repository-knowledge-retention-v1.schema.json +26 -0
  131. package/dist/schemas/repository-knowledge-v2.schema.json +74 -0
  132. package/dist/schemas/repository-knowledge.schema.json +63 -0
  133. package/dist/schemas/repository-package-chunk-v2.schema.json +15 -0
  134. package/dist/schemas/repository-package-chunk.schema.json +18 -0
  135. package/dist/schemas/repository-package-delivery-v1.schema.json +51 -0
  136. package/dist/schemas/repository-package-envelope-v1.schema.json +16 -0
  137. package/dist/schemas/repository-package-transfer-v2.schema.json +36 -0
  138. package/dist/schemas/repository-package-transfer.schema.json +34 -0
  139. package/dist/schemas/repository-package-v2.schema.json +491 -0
  140. package/dist/schemas/repository-package-v3.schema.json +36 -0
  141. package/dist/schemas/repository-package.schema.json +94 -0
  142. package/dist/schemas/repository-release-manifest.schema.json +34 -0
  143. package/dist/schemas/repository-role-metadata.schema.json +82 -0
  144. package/dist/schemas/skill-preparation-pointer-v1.schema.json +28 -0
  145. package/dist/schemas/skill-preparation-v1.schema.json +32 -0
  146. package/dist/skillPollResponse.test.d.ts +2 -0
  147. package/dist/skillPollResponse.test.d.ts.map +1 -0
  148. package/dist/skillPollResponse.test.js +37 -0
  149. package/dist/skillPollResponse.test.js.map +1 -0
  150. package/dist/skillPreparation.test.d.ts +2 -0
  151. package/dist/skillPreparation.test.d.ts.map +1 -0
  152. package/dist/skillPreparation.test.js +163 -0
  153. package/dist/skillPreparation.test.js.map +1 -0
  154. package/dist/skillPreparationCache.d.ts +34 -0
  155. package/dist/skillPreparationCache.d.ts.map +1 -0
  156. package/dist/skillPreparationCache.js +371 -0
  157. package/dist/skillPreparationCache.js.map +1 -0
  158. package/dist/skillPreparationCache.test.d.ts +2 -0
  159. package/dist/skillPreparationCache.test.d.ts.map +1 -0
  160. package/dist/skillPreparationCache.test.js +316 -0
  161. package/dist/skillPreparationCache.test.js.map +1 -0
  162. package/dist/skillPreparationCaller.test.d.ts +2 -0
  163. package/dist/skillPreparationCaller.test.d.ts.map +1 -0
  164. package/dist/skillPreparationCaller.test.js +32 -0
  165. package/dist/skillPreparationCaller.test.js.map +1 -0
  166. package/dist/skillPreparationPump.d.ts +11 -0
  167. package/dist/skillPreparationPump.d.ts.map +1 -0
  168. package/dist/skillPreparationPump.js +41 -0
  169. package/dist/skillPreparationPump.js.map +1 -0
  170. package/dist/skillPreparationPump.test.d.ts +2 -0
  171. package/dist/skillPreparationPump.test.d.ts.map +1 -0
  172. package/dist/skillPreparationPump.test.js +87 -0
  173. package/dist/skillPreparationPump.test.js.map +1 -0
  174. package/dist/skillPreparationRecord.d.ts +2 -0
  175. package/dist/skillPreparationRecord.d.ts.map +1 -0
  176. package/dist/skillPreparationRecord.js +36 -0
  177. package/dist/skillPreparationRecord.js.map +1 -0
  178. package/dist/skillPreparationTransaction.d.ts +13 -0
  179. package/dist/skillPreparationTransaction.d.ts.map +1 -0
  180. package/dist/skillPreparationTransaction.js +236 -0
  181. package/dist/skillPreparationTransaction.js.map +1 -0
  182. package/dist/skillPreparationTransaction.test.d.ts +2 -0
  183. package/dist/skillPreparationTransaction.test.d.ts.map +1 -0
  184. package/dist/skillPreparationTransaction.test.js +181 -0
  185. package/dist/skillPreparationTransaction.test.js.map +1 -0
  186. package/dist/skillSyncPolicy.test.d.ts +2 -0
  187. package/dist/skillSyncPolicy.test.d.ts.map +1 -0
  188. package/dist/skillSyncPolicy.test.js +156 -0
  189. package/dist/skillSyncPolicy.test.js.map +1 -0
  190. package/dist/usage.d.ts +1 -1
  191. package/dist/usage.d.ts.map +1 -1
  192. package/dist/usage.js +1 -1
  193. package/dist/usage.js.map +1 -1
  194. package/dist/windowsProcessPortability.test.d.ts +2 -0
  195. package/dist/windowsProcessPortability.test.d.ts.map +1 -0
  196. package/dist/windowsProcessPortability.test.js +14 -0
  197. package/dist/windowsProcessPortability.test.js.map +1 -0
  198. package/package.json +7 -4
@@ -0,0 +1,216 @@
1
+ import assert from 'node:assert/strict';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { dirname, resolve } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { runInNewContext } from 'node:vm';
6
+ import test from 'node:test';
7
+ import ts from 'typescript';
8
+ // Execute the actual function body, parsed by TypeScript rather than extracted
9
+ // by text matching. All I/O boundaries are injected: no enrollment, paid work,
10
+ // secret-store writes, daemon processes, or external requests can occur.
11
+ async function caller(name, dependencies) {
12
+ const text = await readFile(fileURLToPath(new URL('../src/index.ts', import.meta.url)), 'utf8');
13
+ const source = ts.createSourceFile('index.ts', text, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
14
+ const nodes = source.statements.filter(node => ts.isFunctionDeclaration(node) && node.name?.text === name);
15
+ assert.equal(nodes.length, 1, 'The named source function must resolve exactly once.');
16
+ const compiled = ts.transpileModule(nodes[0].getText(source), {
17
+ compilerOptions: { target: ts.ScriptTarget.ES2023, module: ts.ModuleKind.None },
18
+ reportDiagnostics: true,
19
+ });
20
+ assert.equal(compiled.diagnostics?.filter(item => item.category === ts.DiagnosticCategory.Error).length, 0);
21
+ return runInNewContext(`${compiled.outputText}\n${name}`, dependencies, {
22
+ timeout: 1000, contextCodeGeneration: { strings: false, wasm: false },
23
+ });
24
+ }
25
+ function bootstrapDependencies(onboarding) {
26
+ const calls = [];
27
+ const record = async (name) => { calls.push(name); };
28
+ const dependencies = {
29
+ normalizeHqUrl: (value) => value,
30
+ portalUrl: () => 'https://fixture.invalid',
31
+ required: (flags, key) => {
32
+ const value = flags.get(key);
33
+ if (typeof value !== 'string')
34
+ throw new Error(`Missing fixture flag ${key}`);
35
+ return value;
36
+ },
37
+ realpath: async (path) => path,
38
+ preflightBootstrapWorkspaceIdentity: async () => record('preflight'),
39
+ isLocalProviderId: (provider) => provider === 'codex',
40
+ readDeviceConfig: async () => null,
41
+ configPath: () => '/fixture-config/device.json',
42
+ process: { env: { USER: 'fixture' }, stderr: { write: () => true } },
43
+ platform: async () => 'linux',
44
+ loadOrCreateDeviceIdentity: async () => ({ publicKeyEd25519: 'fixture_public_key' }),
45
+ redeemBootstrapGrant: async () => ({ deviceId: 'fixture_device', serverPublicKeyEd25519: 'fixture_server_key',
46
+ relayUrl: 'wss://fixture.invalid', organizationApiToken: 'fixture_token', organizationApiTokenScopes: [] }),
47
+ openVerificationUri: async () => { await record('open_approval'); return true; },
48
+ saveDeviceConfig: async () => record('save_device'),
49
+ saveDeviceEnrollmentAnchor: async () => record('save_anchor'),
50
+ saveOrganizationApiToken: async () => record('save_token'),
51
+ retryBootstrapOnboarding: async (operation) => operation(),
52
+ onboard: async () => onboarding,
53
+ installStableRepositoryLauncher: async () => { await record('launcher'); return { installed: true }; },
54
+ verifyAgentFabricSkillInstallation: async () => ({ ready: true }),
55
+ resolve, dirname,
56
+ evidencePreview: async () => ({ trajectoryCount: 0, automaticDisclosure: { ready: false } }),
57
+ startRelayDaemon: async () => { await record('relay'); return { started: true, state: 'running', probe: { ok: true } }; },
58
+ runOrganizationCommand: async () => ({ ok: true }),
59
+ requireCompletedBootstrapEvidence: () => undefined,
60
+ summarizeBootstrapOrganizationApi: () => ({ ok: true }),
61
+ };
62
+ return { dependencies, calls };
63
+ }
64
+ test('bootstrap passes recipient approval to the verified browser opener before storing credentials', async () => {
65
+ const f = bootstrapDependencies({ ok: true, stage: 'ready', localStage: 'ready', sharedRepositoryReady: true });
66
+ f.dependencies.redeemBootstrapGrant = async (input) => {
67
+ await input.onRecipientApprovalRequired({
68
+ url: 'https://fixture.invalid/login?redirect_url=%2Fportal%2Fagent-fabric%2Fbootstrap-approval',
69
+ expiresAt: '2026-09-19T00:15:00.000Z', fingerprint: `sha256:${'a'.repeat(64)}`,
70
+ });
71
+ return { deviceId: 'fixture_device', serverPublicKeyEd25519: 'fixture_server_key',
72
+ relayUrl: 'wss://fixture.invalid', organizationApiToken: 'fixture_token', organizationApiTokenScopes: [] };
73
+ };
74
+ const actual = await (await caller('bootstrap', f.dependencies))(bootstrapFlags());
75
+ const enrollment = actual.enrollment;
76
+ const approval = enrollment.recipientApproval;
77
+ assert.equal(approval.required, true);
78
+ assert.equal(approval.browserOpened, true);
79
+ assert.equal(f.calls.filter(item => item === 'open_approval').length, 1);
80
+ assert.ok(f.calls.indexOf('open_approval') < f.calls.indexOf('save_token'));
81
+ });
82
+ function bootstrapFlags(complete = false) {
83
+ const flags = new Map([
84
+ ['organization-id', 'org_fixture'], ['grant', 'fixture_grant'], ['workspace', '/fixture-repository'],
85
+ ['policy-revision', 'fixture-policy'], ['provider', 'codex'],
86
+ ]);
87
+ if (complete)
88
+ flags.set('complete', true);
89
+ return flags;
90
+ }
91
+ test('bootstrap propagates blocked repository onboarding without launcher or completion work', async () => {
92
+ const onboarding = { ok: false, stage: 'repository_source_authorization_required',
93
+ code: 'repository_source_policy_unavailable', sharedRepositoryReady: false };
94
+ const f = bootstrapDependencies(onboarding);
95
+ const actual = await (await caller('bootstrap', f.dependencies))(bootstrapFlags());
96
+ assert.equal(actual.ok, false);
97
+ assert.equal(actual.stage, onboarding.stage);
98
+ assert.equal(actual.sharedRepositoryReady, false);
99
+ assert.equal(f.calls.includes('launcher'), false);
100
+ assert.equal(f.calls.includes('relay'), false);
101
+ });
102
+ test('bootstrap complete cannot report shared completion while its canonical repository package is pending', async () => {
103
+ const onboarding = { ok: true, stage: 'shared_repository_pending', localStage: 'ready', sharedRepositoryReady: false };
104
+ const f = bootstrapDependencies(onboarding);
105
+ const actual = await (await caller('bootstrap', f.dependencies))(bootstrapFlags(true));
106
+ assert.equal(actual.stage, 'shared_repository_pending');
107
+ assert.equal(actual.localStage, 'complete');
108
+ assert.equal(actual.sharedRepositoryReady, false);
109
+ assert.equal(f.calls.includes('launcher'), true);
110
+ assert.equal(f.calls.includes('relay'), true);
111
+ });
112
+ test('repository connect separates attempts and local readiness from shared connections', async () => {
113
+ const pending = { ok: true, stage: 'shared_repository_pending', localStage: 'ready', sharedRepositoryReady: false };
114
+ const blocked = { ok: false, stage: 'repository_source_authorization_required', sharedRepositoryReady: false };
115
+ const actual = await (await caller('repositoriesConnect', {
116
+ realpath: async (path) => path,
117
+ repositoryKeyAssignments: () => new Map(), parseSelectedProviderIds: () => null,
118
+ onboard: async (flags) => flags.get('workspace') === '/repo-a' ? pending : blocked,
119
+ }))(new Map(), ['/repo-a', '/repo-b'], [], [], []);
120
+ assert.equal(actual.ok, false);
121
+ assert.equal(actual.requested, 2);
122
+ assert.equal(actual.attempted, 2);
123
+ assert.equal(actual.locallyReady, 1);
124
+ assert.equal(actual.connected, 0);
125
+ assert.equal(actual.blocked, 1);
126
+ assert.equal(actual.pending, 1);
127
+ });
128
+ test('complete bootstrap stops before local completion work when repository onboarding is blocked', async () => {
129
+ const f = bootstrapDependencies({ ok: false, stage: 'repository_source_authorization_required', sharedRepositoryReady: false });
130
+ const actual = await (await caller('bootstrap', f.dependencies))(bootstrapFlags(true));
131
+ assert.equal(actual.ok, false);
132
+ assert.equal(actual.sharedRepositoryReady, false);
133
+ assert.equal(f.calls.includes('launcher'), false);
134
+ assert.equal(f.calls.includes('relay'), false);
135
+ });
136
+ test('bootstrap preserves device approval as a pending stage without starting completion work', async () => {
137
+ const f = bootstrapDependencies({ ok: true, stage: 'approve_device' });
138
+ const actual = await (await caller('bootstrap', f.dependencies))(bootstrapFlags(true));
139
+ assert.equal(actual.stage, 'approve_device');
140
+ assert.equal(actual.sharedRepositoryReady, false);
141
+ assert.equal(f.calls.includes('launcher'), false);
142
+ assert.equal(f.calls.includes('relay'), false);
143
+ });
144
+ test('bootstrap retains complete behavior for explicitly shared-ready repository onboarding', async () => {
145
+ const f = bootstrapDependencies({ ok: true, stage: 'ready', localStage: 'ready', sharedRepositoryReady: true });
146
+ const actual = await (await caller('bootstrap', f.dependencies))(bootstrapFlags(true));
147
+ assert.equal(actual.stage, 'complete');
148
+ assert.equal(actual.localStage, 'complete');
149
+ assert.equal(actual.sharedRepositoryReady, true);
150
+ assert.equal(f.calls.includes('relay'), true);
151
+ });
152
+ test('legacy local-ready bootstrap cannot imply shared repository readiness', async () => {
153
+ const f = bootstrapDependencies({ ok: true, stage: 'ready' });
154
+ const actual = await (await caller('bootstrap', f.dependencies))(bootstrapFlags());
155
+ assert.equal(actual.stage, 'shared_repository_pending');
156
+ assert.equal(actual.localStage, 'ready');
157
+ assert.equal(actual.sharedRepositoryReady, false);
158
+ assert.equal(f.calls.includes('launcher'), true);
159
+ });
160
+ test('repository connect preserves approval interruption and distinguishes legacy local readiness', async () => {
161
+ const visited = [];
162
+ const actual = await (await caller('repositoriesConnect', {
163
+ realpath: async (path) => path,
164
+ repositoryKeyAssignments: () => new Map(), parseSelectedProviderIds: () => null,
165
+ onboard: async (flags) => {
166
+ const path = String(flags.get('workspace'));
167
+ visited.push(path);
168
+ if (path === '/repo-a')
169
+ return { ok: true, stage: 'ready', sharedRepositoryReady: true };
170
+ if (path === '/repo-b')
171
+ return { ok: true, stage: 'ready' };
172
+ return { ok: true, stage: 'approve_device' };
173
+ },
174
+ }))(new Map(), ['/repo-a', '/repo-b', '/repo-c', '/repo-d'], [], [], []);
175
+ assert.equal(actual.requested, 4);
176
+ assert.equal(actual.attempted, 3);
177
+ assert.equal(actual.connected, 1);
178
+ assert.equal(actual.locallyReady, 2);
179
+ assert.equal(actual.pending, 2);
180
+ assert.equal(actual.blocked, 0);
181
+ assert.equal(actual.sharedRepositoryReady, false);
182
+ assert.deepEqual(visited, ['/repo-a', '/repo-b', '/repo-c']);
183
+ });
184
+ test('repository connect reports shared readiness only when every requested repository is shared-ready', async () => {
185
+ const actual = await (await caller('repositoriesConnect', {
186
+ realpath: async (path) => path,
187
+ repositoryKeyAssignments: () => new Map(), parseSelectedProviderIds: () => null,
188
+ onboard: async () => ({ ok: true, stage: 'ready', sharedRepositoryReady: true }),
189
+ }))(new Map(), ['/repo-a', '/repo-b'], [], [], []);
190
+ assert.equal(actual.ok, true);
191
+ assert.equal(actual.connected, 2);
192
+ assert.equal(actual.attempted, 2);
193
+ assert.equal(actual.pending, 0);
194
+ assert.equal(actual.blocked, 0);
195
+ assert.equal(actual.sharedRepositoryReady, true);
196
+ });
197
+ test('truthy non-boolean onboarding readiness cannot imply shared readiness', async () => {
198
+ const f = bootstrapDependencies({ ok: true, stage: 'ready', sharedRepositoryReady: 'true' });
199
+ const actual = await (await caller('bootstrap', f.dependencies))(bootstrapFlags(true));
200
+ assert.equal(actual.stage, 'shared_repository_pending');
201
+ assert.equal(actual.sharedRepositoryReady, false);
202
+ });
203
+ test('repository connect deduplicates canonical paths before counting attempts and shared readiness', async () => {
204
+ let calls = 0;
205
+ const actual = await (await caller('repositoriesConnect', {
206
+ realpath: async () => '/same-repository',
207
+ repositoryKeyAssignments: () => new Map(), parseSelectedProviderIds: () => null,
208
+ onboard: async () => { calls += 1; return { ok: true, stage: 'ready', sharedRepositoryReady: true }; },
209
+ }))(new Map(), ['/alias-a', '/alias-b'], ['/alias-c'], [], []);
210
+ assert.equal(actual.requested, 1);
211
+ assert.equal(actual.attempted, 1);
212
+ assert.equal(actual.connected, 1);
213
+ assert.equal(actual.sharedRepositoryReady, true);
214
+ assert.equal(calls, 1);
215
+ });
216
+ //# sourceMappingURL=repositoryOnboardingCaller.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositoryOnboardingCaller.test.js","sourceRoot":"","sources":["../src/repositoryOnboardingCaller.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=repositoryOnboardingFlow.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositoryOnboardingFlow.test.d.ts","sourceRoot":"","sources":["../src/repositoryOnboardingFlow.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ import assert from 'node:assert/strict';
2
+ import { readFile } from 'node:fs/promises';
3
+ import test from 'node:test';
4
+ import { canonicalEndpointRole, canonicalRepositoryPackage } from './index.js';
5
+ const ids = {
6
+ candidateId: '77f61652-a5eb-46e4-930c-9478cd4a9c31',
7
+ releaseId: '87f61652-a5eb-46e4-930c-9478cd4a9c31',
8
+ };
9
+ test('repository connect package state distinguishes unseen and published canonical repositories', () => {
10
+ assert.deepEqual(canonicalRepositoryPackage({ state: 'absent', candidateId: null, operationId: null,
11
+ snapshotHash: null, sourceManifestHash: null, releaseId: null, generation: 0, consolidationMode: null }), {
12
+ state: 'absent', candidateId: null, operationId: null, snapshotHash: null, sourceManifestHash: null,
13
+ releaseId: null, generation: 0, consolidationMode: null,
14
+ });
15
+ const published = { state: 'published', candidateId: ids.candidateId, operationId: `sha256:${'a'.repeat(64)}`,
16
+ snapshotHash: `sha256:${'b'.repeat(64)}`, sourceManifestHash: `sha256:${'c'.repeat(64)}`,
17
+ releaseId: ids.releaseId, generation: 4, consolidationMode: 'initial_repository' };
18
+ assert.deepEqual(canonicalRepositoryPackage(published), published);
19
+ assert.throws(() => canonicalRepositoryPackage({ ...published, releaseId: null }), /inconsistent/);
20
+ });
21
+ test('repository connect endpoint role state is exact and revisioned', () => {
22
+ assert.equal(canonicalEndpointRole(null), null);
23
+ assert.deepEqual(canonicalEndpointRole({ revision: 2, profileHash: `sha256:${'d'.repeat(64)}` }), { revision: 2, profileHash: `sha256:${'d'.repeat(64)}` });
24
+ assert.throws(() => canonicalEndpointRole({ revision: 0, profileHash: `sha256:${'d'.repeat(64)}` }), /invalid/);
25
+ });
26
+ test('one prompt submits initial knowledge only for an absent package and derives a role without flags', async () => {
27
+ const source = await readFile(new URL('../src/index.ts', import.meta.url), 'utf8');
28
+ const onboard = source.slice(source.indexOf('async function onboard('), source.indexOf('async function evidenceSync('));
29
+ assert.match(onboard, /canonicalPackage\.state === 'absent'/);
30
+ assert.match(onboard, /snapshot: initialSnapshot, initialRepository: true/);
31
+ assert.match(onboard, /: await adoptRepositoryCandidate\(/);
32
+ assert.match(onboard, /const derivedRole = deriveRepositoryRole\(/);
33
+ assert.match(onboard, /const roleInput = roleRequested \?/);
34
+ assert.match(onboard, /await registerRepositoryRoleMetadata\(/);
35
+ assert.ok(onboard.indexOf('await evidencePreview(') < onboard.indexOf('await synchronizeRepositoryCandidate('));
36
+ assert.ok(onboard.indexOf('await capture(onboardingEvidenceFlags, true)') < onboard.indexOf('await synchronizeRepositoryCandidate('));
37
+ assert.ok(onboard.indexOf('await synchronizeRepositoryCandidate(') < onboard.indexOf('await startRelayDaemon('));
38
+ });
39
+ test('relay polls candidate state independently and activates only after an idle task boundary', async () => {
40
+ const source = await readFile(new URL('../src/index.ts', import.meta.url), 'utf8');
41
+ const relay = source.slice(source.indexOf('async function relayStart('), source.indexOf('export async function run('));
42
+ assert.match(relay, /await pollRepositoryCandidate\(/);
43
+ assert.ok(relay.indexOf('await pollRepositoryCandidate(') < relay.indexOf('scanRepositorySourceChanges('));
44
+ assert.ok(relay.indexOf('const result = await executeOneTask(') < relay.indexOf('await takeCachedSkillUpdate('));
45
+ assert.match(relay, /if \(!result\.taskId && performance\.now\(\) >= nextSkillActivationAt\)/);
46
+ });
47
+ //# sourceMappingURL=repositoryOnboardingFlow.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositoryOnboardingFlow.test.js","sourceRoot":"","sources":["../src/repositoryOnboardingFlow.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ import { type RepositoryKnowledgeRetentionReference } from './repositoryKnowledge.js';
2
+ import { type RepositorySourceAuthorization } from './repositorySourceAuthorization.js';
3
+ export declare const REPOSITORY_SKILL_ROOTS: readonly [".agents/skills", ".claude/skills", ".codex/skills", "skills"];
4
+ declare const DEFAULT_LIMITS: {
5
+ maximumEntries: number;
6
+ maximumFiles: number;
7
+ maximumFileBytes: number;
8
+ maximumTotalBytes: number;
9
+ maximumDepth: number;
10
+ maximumDependencies: number;
11
+ };
12
+ export type RepositoryPackageLimits = typeof DEFAULT_LIMITS;
13
+ export interface RepositoryPackageObservation {
14
+ skillPath: string;
15
+ skillHash: string;
16
+ sourcePath: string;
17
+ sourceHash: string;
18
+ }
19
+ export interface RepositoryPackageFile {
20
+ path: string;
21
+ managedPath?: string;
22
+ sha256: string;
23
+ sizeBytes: number;
24
+ role: 'skill' | 'dependency' | 'approved_output' | 'repository_content' | 'knowledge';
25
+ }
26
+ export interface RepositoryPackageManifest {
27
+ schema: 'dharma.repository-package/v1' | 'dharma.repository-package/v2' | 'dharma.repository-package/v3';
28
+ sourceAuthorization?: RepositorySourceAuthorization;
29
+ sourceFingerprint?: string;
30
+ organizationId: string;
31
+ workspaceId: string;
32
+ snapshotId: string;
33
+ snapshotHash: string;
34
+ authority: 'local_inventory_not_signed';
35
+ roots: string[];
36
+ files: RepositoryPackageFile[];
37
+ skills: Array<{
38
+ path: string;
39
+ managedPath?: string;
40
+ providerRoot: string;
41
+ entryPath: string;
42
+ contentHash: string;
43
+ availability: 'available' | 'partial' | 'unavailable';
44
+ filePaths: string[];
45
+ observation: {
46
+ state: 'not_observed' | 'reported_observed';
47
+ authority: 'caller_supplied_not_runtime_verified';
48
+ references: RepositoryPackageObservation[];
49
+ };
50
+ }>;
51
+ exclusions: Array<{
52
+ path: string;
53
+ reason: string;
54
+ }>;
55
+ knowledge?: {
56
+ repositoryAgentId: string;
57
+ knowledgeBaseId: string;
58
+ catalogPath: string;
59
+ catalogHash: string;
60
+ authority: 'locally_initialized_unsigned';
61
+ atlasAssociation: 'local_scope_only';
62
+ } | {
63
+ repositoryAgentId: string;
64
+ knowledgeBaseId: string;
65
+ catalogPath: string;
66
+ catalogHash: string;
67
+ authority: 'unverified_prior_release_reference';
68
+ atlasAssociation: 'requires_verified_release';
69
+ priorRelease: RepositoryKnowledgeRetentionReference;
70
+ };
71
+ }
72
+ export interface RepositoryPackageSnapshot {
73
+ schema: 'dharma.repository-package-snapshot/v1';
74
+ capturedAt: string;
75
+ manifest: RepositoryPackageManifest;
76
+ blobs: Array<{
77
+ sha256: string;
78
+ contentBase64: string;
79
+ }>;
80
+ }
81
+ export interface RepositoryPackageInventoryInput {
82
+ workspace: string;
83
+ organizationId: string;
84
+ workspaceId: string;
85
+ repositoryAgentId?: string | null;
86
+ repositoryBindingId?: string | null;
87
+ sourceAuthorization?: unknown;
88
+ approvedOutputs?: string[];
89
+ observations?: RepositoryPackageObservation[];
90
+ limits?: Partial<RepositoryPackageLimits>;
91
+ now?: Date;
92
+ retainedKnowledge?: {
93
+ catalogBytes: Buffer;
94
+ manifestBytes: Buffer;
95
+ } | null;
96
+ }
97
+ export declare function inventoryRepositoryPackage(input: RepositoryPackageInventoryInput): Promise<RepositoryPackageSnapshot>;
98
+ export declare function serializeRepositoryPackageSnapshot(snapshot: RepositoryPackageSnapshot): string;
99
+ export type RepositoryPackageCopyCheckpoint = 'journal_prepared' | 'file_backed_up' | 'file_installed' | 'copies_index_written' | 'manifest_written' | 'cleanup_file_removed';
100
+ export interface RepositoryPackageWriteInput {
101
+ workspace: string;
102
+ snapshot: RepositoryPackageSnapshot;
103
+ candidateOnly?: boolean;
104
+ onCopyCheckpoint?: (point: RepositoryPackageCopyCheckpoint) => void | Promise<void>;
105
+ }
106
+ export declare function writeRepositoryPackageSnapshot(input: RepositoryPackageWriteInput): Promise<{
107
+ manifestPath: string;
108
+ snapshotPath: string;
109
+ snapshotHash: string;
110
+ managedCopiesPath: string | null;
111
+ disposition: "candidate_only" | "local_bootstrap_inventory";
112
+ authority: "local_inventory_not_signed";
113
+ }>;
114
+ export {};
115
+ //# sourceMappingURL=repositoryPackage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositoryPackage.d.ts","sourceRoot":"","sources":["../src/repositoryPackage.ts"],"names":[],"mappings":"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"}