@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,68 @@
1
+ import { types } from 'node:util';
2
+ import { discoverRepositoryRoleMetadata } from './repositoryRoleMetadata.js';
3
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$(?![\s\S])/i;
4
+ const CATEGORY = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$(?![\s\S])/;
5
+ const CONTROL = /[\u0000-\u001f\u007f]/;
6
+ function requireFact(value) {
7
+ if (!value)
8
+ throw new Error('Repository question response does not match its signed same-repository contract.');
9
+ }
10
+ function record(value, keys) {
11
+ requireFact(value !== null && typeof value === 'object' && !Array.isArray(value) && !types.isProxy(value)
12
+ && Object.getPrototypeOf(value) === Object.prototype
13
+ && Reflect.ownKeys(value).every(key => typeof key === 'string')
14
+ && Reflect.ownKeys(value).sort().join(',') === [...keys].sort().join(','));
15
+ const descriptors = Object.getOwnPropertyDescriptors(value);
16
+ requireFact(Object.values(descriptors).every(descriptor => Object.hasOwn(descriptor, 'value') && descriptor.enumerable));
17
+ return Object.fromEntries(Object.entries(descriptors).map(([key, descriptor]) => [key, descriptor.value]));
18
+ }
19
+ function text(value, maximum) {
20
+ requireFact(typeof value === 'string' && value.length > 0 && value.length <= maximum
21
+ && value.trim() === value && !CONTROL.test(value));
22
+ return value;
23
+ }
24
+ export async function askRepositoryRoleQuestion(input) {
25
+ requireFact(CATEGORY.test(input.category));
26
+ const question = text(input.question, 2_000);
27
+ const observed = await discoverRepositoryRoleMetadata(input.transport, input.scope, input.category);
28
+ const discovery = observed.discovery;
29
+ requireFact(discovery && discovery.peers.length > 0);
30
+ const target = discovery.peers.filter(peer => peer.endpointId !== input.scope.endpointId)
31
+ .sort((left, right) => left.endpointId.localeCompare(right.endpointId))[0];
32
+ requireFact(target);
33
+ const response = record(await input.transport.signedPost('/agent-fabric/repository-questions', {
34
+ workspaceId: input.scope.workspaceId, repositoryBindingId: input.scope.repositoryBindingId,
35
+ repositoryAgentId: input.scope.repositoryAgentId, targetEndpointId: target.endpointId,
36
+ category: input.category, question, requestedResponse: 'clarification',
37
+ }), ['ok', 'organizationId', 'question']);
38
+ requireFact(response.ok === true && response.organizationId === input.scope.organizationId);
39
+ const result = record(response.question, ['questionId', 'taskId', 'repositoryBindingId', 'sourceWorkspaceId',
40
+ 'targetWorkspaceId', 'targetEndpointId', 'category', 'state']);
41
+ requireFact([result.questionId, result.taskId, result.sourceWorkspaceId, result.targetWorkspaceId, result.targetEndpointId]
42
+ .every(value => typeof value === 'string' && UUID.test(value))
43
+ && result.repositoryBindingId === input.scope.repositoryBindingId
44
+ && result.sourceWorkspaceId === input.scope.workspaceId
45
+ && result.targetWorkspaceId === target.workspaceId && result.targetEndpointId === target.endpointId
46
+ && result.category === input.category && result.state === 'dispatched');
47
+ return { schema: 'dharma.repository-question-observation/v1', questionId: result.questionId,
48
+ taskId: result.taskId, state: 'dispatched', target: { ...target },
49
+ repositoryBindingId: input.scope.repositoryBindingId, communicationReady: false };
50
+ }
51
+ export async function readRepositoryRoleReply(input) {
52
+ requireFact(UUID.test(input.questionId));
53
+ const query = new URLSearchParams({ workspaceId: input.scope.workspaceId });
54
+ const response = record(await input.transport.signedGet(`/agent-fabric/repository-questions/${encodeURIComponent(input.questionId)}?${query}`), ['ok', 'organizationId', 'question']);
55
+ requireFact(response.ok === true && response.organizationId === input.scope.organizationId);
56
+ const result = record(response.question, ['questionId', 'repositoryBindingId', 'sourceWorkspaceId', 'state', 'reply']);
57
+ requireFact(result.questionId === input.questionId && result.repositoryBindingId === input.scope.repositoryBindingId
58
+ && result.sourceWorkspaceId === input.scope.workspaceId && ['dispatched', 'answered', 'failed'].includes(String(result.state)));
59
+ if (result.state === 'answered') {
60
+ const reply = record(result.reply, ['taskId', 'targetEndpointId', 'body', 'receiptHash']);
61
+ requireFact([reply.taskId, reply.targetEndpointId].every(value => typeof value === 'string' && UUID.test(value))
62
+ && typeof reply.receiptHash === 'string' && /^sha256:[0-9a-f]{64}$(?![\s\S])/.test(reply.receiptHash));
63
+ return { state: 'answered', body: text(reply.body, 8_000), receiptHash: reply.receiptHash };
64
+ }
65
+ requireFact(result.reply === null);
66
+ return { state: result.state, body: null, receiptHash: null };
67
+ }
68
+ //# sourceMappingURL=repositoryRoleQuestion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositoryRoleQuestion.js","sourceRoot":"","sources":["../src/repositoryRoleQuestion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=repositoryRoleQuestion.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositoryRoleQuestion.test.d.ts","sourceRoot":"","sources":["../src/repositoryRoleQuestion.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,66 @@
1
+ import assert from 'node:assert/strict';
2
+ import test from 'node:test';
3
+ import { askRepositoryRoleQuestion, readRepositoryRoleReply } from './repositoryRoleQuestion.js';
4
+ const scope = {
5
+ organizationId: 'org_fixture', workspaceId: '056b63dc-ebed-48ed-85d8-02c72f623ea8',
6
+ repositoryBindingId: '73a95988-fd64-41ba-a0b9-6c8867d03788',
7
+ repositoryAgentId: '57f61652-a5eb-46e4-930c-9478cd4a9c31',
8
+ endpointId: '67f61652-a5eb-46e4-930c-9478cd4a9c31', sourceFingerprint: `sha256:${'a'.repeat(64)}`,
9
+ };
10
+ const target = { endpointId: '77f61652-a5eb-46e4-930c-9478cd4a9c31',
11
+ workspaceId: '87f61652-a5eb-46e4-930c-9478cd4a9c31', provider: 'claude', roleName: 'Verifier',
12
+ questionCategories: ['verifier-design'], description: 'Checks bounded verifiers.', revision: 1 };
13
+ test('repository question discovers a same-binding role and dispatches a signed task-bound question', async () => {
14
+ const calls = [];
15
+ const transport = {
16
+ signedGet: async (route) => {
17
+ calls.push({ method: 'GET', route });
18
+ return { ok: true, organizationId: scope.organizationId, correlationId: 'fixture', discovery: {
19
+ organizationId: scope.organizationId, workspaceId: scope.workspaceId,
20
+ repositoryBindingId: scope.repositoryBindingId, repositoryAgentId: scope.repositoryAgentId,
21
+ peers: [{ ...target, endpointId: scope.endpointId, workspaceId: scope.workspaceId }, target],
22
+ limit: 50, possiblyTruncated: false
23
+ } };
24
+ },
25
+ signedPost: async (route, body) => {
26
+ calls.push({ method: 'POST', route, body });
27
+ return { ok: true, organizationId: scope.organizationId, question: {
28
+ questionId: '97f61652-a5eb-46e4-930c-9478cd4a9c31', taskId: 'a7f61652-a5eb-46e4-930c-9478cd4a9c31',
29
+ repositoryBindingId: scope.repositoryBindingId, sourceWorkspaceId: scope.workspaceId,
30
+ targetWorkspaceId: target.workspaceId, targetEndpointId: target.endpointId,
31
+ category: 'verifier-design', state: 'dispatched'
32
+ } };
33
+ },
34
+ };
35
+ const result = await askRepositoryRoleQuestion({ transport, scope, category: 'verifier-design',
36
+ question: 'Which invariant should this verifier enforce?' });
37
+ assert.equal(result.state, 'dispatched');
38
+ assert.equal(result.communicationReady, false);
39
+ assert.deepEqual(calls.map(call => call.method), ['GET', 'POST']);
40
+ assert.deepEqual(calls[1]?.body, { workspaceId: scope.workspaceId, repositoryBindingId: scope.repositoryBindingId,
41
+ repositoryAgentId: scope.repositoryAgentId, targetEndpointId: target.endpointId,
42
+ category: 'verifier-design', question: 'Which invariant should this verifier enforce?', requestedResponse: 'clarification' });
43
+ });
44
+ test('repository question refuses to route to the requesting endpoint', async () => {
45
+ await assert.rejects(() => askRepositoryRoleQuestion({ scope, category: 'verifier-design', question: 'Review this.',
46
+ transport: { signedPost: async () => { throw new Error('must not dispatch'); }, signedGet: async () => ({
47
+ ok: true, organizationId: scope.organizationId, discovery: { organizationId: scope.organizationId,
48
+ workspaceId: scope.workspaceId, repositoryBindingId: scope.repositoryBindingId,
49
+ repositoryAgentId: scope.repositoryAgentId, peers: [{ ...target, endpointId: scope.endpointId,
50
+ workspaceId: scope.workspaceId }], limit: 50, possiblyTruncated: false },
51
+ }) },
52
+ }), /same-repository contract/);
53
+ });
54
+ test('repository reply requires the original repository binding and a signed task receipt hash', async () => {
55
+ const result = await readRepositoryRoleReply({ scope, questionId: '97f61652-a5eb-46e4-930c-9478cd4a9c31',
56
+ transport: { signedGet: async () => ({ ok: true, organizationId: scope.organizationId, question: {
57
+ questionId: '97f61652-a5eb-46e4-930c-9478cd4a9c31', repositoryBindingId: scope.repositoryBindingId,
58
+ sourceWorkspaceId: scope.workspaceId, state: 'answered', reply: {
59
+ taskId: 'a7f61652-a5eb-46e4-930c-9478cd4a9c31', targetEndpointId: target.endpointId,
60
+ body: 'Enforce exact receipt-to-snapshot binding.', receiptHash: `sha256:${'b'.repeat(64)}`
61
+ }
62
+ } }) } });
63
+ assert.deepEqual(result, { state: 'answered', body: 'Enforce exact receipt-to-snapshot binding.',
64
+ receiptHash: `sha256:${'b'.repeat(64)}` });
65
+ });
66
+ //# sourceMappingURL=repositoryRoleQuestion.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositoryRoleQuestion.test.js","sourceRoot":"","sources":["../src/repositoryRoleQuestion.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEjG,MAAM,KAAK,GAAG;IACZ,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,sCAAsC;IAClF,mBAAmB,EAAE,sCAAsC;IAC3D,iBAAiB,EAAE,sCAAsC;IACzD,UAAU,EAAE,sCAAsC,EAAE,iBAAiB,EAAE,UAAU,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;CAClG,CAAC;AACF,MAAM,MAAM,GAAG,EAAE,UAAU,EAAE,sCAAsC;IACjE,WAAW,EAAE,sCAAsC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU;IAC7F,kBAAkB,EAAE,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,2BAA2B,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAEnG,IAAI,CAAC,+FAA+F,EAAE,KAAK,IAAI,EAAE;IAC/G,MAAM,KAAK,GAA6D,EAAE,CAAC;IAC3E,MAAM,SAAS,GAAG;QAChB,SAAS,EAAE,KAAK,EAAE,KAAa,EAAE,EAAE;YACjC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACrC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE;oBAC5F,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW;oBACpE,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;oBAC1F,KAAK,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC;oBAC5F,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK;iBAAE,EAAE,CAAC;QAC5C,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,KAAa,EAAE,IAAa,EAAE,EAAE;YACjD,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,QAAQ,EAAE;oBACjE,UAAU,EAAE,sCAAsC,EAAE,MAAM,EAAE,sCAAsC;oBAClG,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,KAAK,CAAC,WAAW;oBACpF,iBAAiB,EAAE,MAAM,CAAC,WAAW,EAAE,gBAAgB,EAAE,MAAM,CAAC,UAAU;oBAC1E,QAAQ,EAAE,iBAAiB,EAAE,KAAK,EAAE,YAAY;iBAAE,EAAE,CAAC;QACzD,CAAC;KACF,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB;QAC5F,QAAQ,EAAE,+CAA+C,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACzC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IAC/C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAClE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC/G,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,CAAC,UAAU;QAC/E,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,+CAA+C,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC,CAAC;AAClI,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;IACjF,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,cAAc;QACjH,SAAS,EAAE,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACtG,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,SAAS,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc;oBAC/F,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;oBAC9E,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU;4BAC3F,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE;aAC7E,CAAC,EAAE;KACL,CAAC,EAAE,0BAA0B,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0FAA0F,EAAE,KAAK,IAAI,EAAE;IAC1G,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,sCAAsC;QACtG,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,QAAQ,EAAE;oBAC/F,UAAU,EAAE,sCAAsC,EAAE,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;oBAClG,iBAAiB,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;wBAC9D,MAAM,EAAE,sCAAsC,EAAE,gBAAgB,EAAE,MAAM,CAAC,UAAU;wBACnF,IAAI,EAAE,4CAA4C,EAAE,WAAW,EAAE,UAAU,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;qBAAE;iBAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9G,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,4CAA4C;QAC9F,WAAW,EAAE,UAAU,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC"}
@@ -0,0 +1,43 @@
1
+ declare const CLASSES: readonly ["approved_outputs", "repository_content", "repository_skills"];
2
+ export type RepositorySourceClass = typeof CLASSES[number];
3
+ export interface RepositorySourceScope {
4
+ organizationId: string;
5
+ workspaceId: string;
6
+ repositoryBindingId?: string | null;
7
+ repositoryAgentId?: string | null;
8
+ }
9
+ export interface RepositorySourceAuthorization {
10
+ schema: 'dharma.repository-source-authorization/v1';
11
+ organizationId: string;
12
+ workspaceId: string;
13
+ repositoryBindingId: string;
14
+ repositoryAgentId: string;
15
+ revision: number;
16
+ generationId: string;
17
+ receiptId: string;
18
+ policyRevision: string;
19
+ policyHash: string;
20
+ confirmedAt: string;
21
+ policy: {
22
+ action: 'authorize';
23
+ confirmed: true;
24
+ requestId: string;
25
+ repositoryBindingId: string;
26
+ expectedRevision: number;
27
+ allowedContentClasses: RepositorySourceClass[];
28
+ approvedRepositoryPaths: string[];
29
+ approvedOutputFolders: string[];
30
+ automaticValidatedPublication: true;
31
+ retentionDays: number;
32
+ maximumFileBytes: number;
33
+ maximumSnapshotBytes: number;
34
+ maximumDailyUploadBytes: number;
35
+ expiresAt: string | null;
36
+ };
37
+ }
38
+ export declare function repositorySourcePathSafe(path: string): boolean;
39
+ export declare function validateRepositorySourceAuthorization(value: unknown, scope: RepositorySourceScope, now?: Date): RepositorySourceAuthorization;
40
+ export declare function repositorySourcePathAllowed(authorization: RepositorySourceAuthorization, path: string, contentClass: RepositorySourceClass): boolean;
41
+ export declare function parseRepositorySourcePolicyResponse(value: unknown, scope: RepositorySourceScope, now?: Date): RepositorySourceAuthorization;
42
+ export {};
43
+ //# sourceMappingURL=repositorySourceAuthorization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositorySourceAuthorization.d.ts","sourceRoot":"","sources":["../src/repositorySourceAuthorization.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,OAAO,0EAA2E,CAAC;AAEzF,MAAM,MAAM,qBAAqB,GAAG,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AAC3D,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AACD,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,2CAA2C,CAAC;IACpD,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QACN,MAAM,EAAE,WAAW,CAAC;QAAC,SAAS,EAAE,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAC/G,qBAAqB,EAAE,qBAAqB,EAAE,CAAC;QAAC,uBAAuB,EAAE,MAAM,EAAE,CAAC;QAAC,qBAAqB,EAAE,MAAM,EAAE,CAAC;QACnH,6BAA6B,EAAE,IAAI,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAC;QACnH,uBAAuB,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3D,CAAC;CACH;AAiDD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAS9D;AAYD,wBAAgB,qCAAqC,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,6BAA6B,CAmC7I;AAED,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,6BAA6B,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,qBAAqB,GAAG,OAAO,CAKpJ;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,GAAG,OAAa,GAAG,6BAA6B,CAWjJ"}
@@ -0,0 +1,164 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { types } from 'node:util';
3
+ import { canonicalize } from '@dharma-ai-labs/agent-fabric-contracts';
4
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$(?![\s\S])/;
5
+ const CLASSES = ['approved_outputs', 'repository_content', 'repository_skills'];
6
+ const SKILL_ROOTS = ['.agents/skills', '.claude/skills', '.codex/skills', 'skills'];
7
+ function invalid(reason) { throw new Error(`Repository source authorization ${reason}.`); }
8
+ function data(value, seen = new Set(), depth = 0, budget = { remaining: 2048 }) {
9
+ if (--budget.remaining < 0 || depth > 6)
10
+ invalid('structure limit exceeded');
11
+ if (value === null || typeof value === 'boolean')
12
+ return;
13
+ if (typeof value === 'string') {
14
+ if (value.length > 1024)
15
+ invalid('string limit exceeded');
16
+ return;
17
+ }
18
+ if (typeof value === 'number') {
19
+ if (!Number.isSafeInteger(value))
20
+ invalid('number is invalid');
21
+ return;
22
+ }
23
+ if (!value || typeof value !== 'object' || seen.has(value))
24
+ invalid('must be bounded JSON data');
25
+ if (types.isProxy(value))
26
+ invalid('proxy is invalid');
27
+ if (Object.getOwnPropertyDescriptor(Object.prototype, 'toJSON') || Object.getOwnPropertyDescriptor(Array.prototype, 'toJSON')) {
28
+ invalid('inherited serialization hooks are invalid');
29
+ }
30
+ const prototype = Object.getPrototypeOf(value);
31
+ if (prototype !== Object.prototype && prototype !== null && prototype !== Array.prototype)
32
+ invalid('prototype is invalid');
33
+ const fields = Object.getOwnPropertyDescriptors(value);
34
+ if (Object.getOwnPropertySymbols(value).length || Object.values(fields).some(field => !Object.hasOwn(field, 'value')))
35
+ invalid('accessors are invalid');
36
+ if (Array.isArray(value) && (value.length > 2048 || Object.keys(fields).length !== value.length + 1
37
+ || Object.keys(fields).some(key => key !== 'length' && (!/^(?:0|[1-9][0-9]*)$/.test(key) || Number(key) >= value.length)))) {
38
+ invalid('array is not canonical');
39
+ }
40
+ seen.add(value);
41
+ for (const [key, field] of Object.entries(fields)) {
42
+ if (Array.isArray(value) && key === 'length')
43
+ continue;
44
+ if (key.length > 100)
45
+ invalid('field limit exceeded');
46
+ data(field.value, seen, depth + 1, budget);
47
+ }
48
+ seen.delete(value);
49
+ }
50
+ function record(value) {
51
+ if (!value || typeof value !== 'object' || Array.isArray(value))
52
+ invalid('object is required');
53
+ return value;
54
+ }
55
+ function exact(value, keys) {
56
+ if (Object.keys(value).length !== keys.length || keys.some(key => !Object.hasOwn(value, key)))
57
+ invalid('fields are invalid');
58
+ }
59
+ function integer(value, minimum, maximum) {
60
+ if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < minimum || value > maximum)
61
+ invalid('quantity is invalid');
62
+ return value;
63
+ }
64
+ function uuid(value) {
65
+ if (typeof value !== 'string' || !UUID.test(value))
66
+ invalid('identity is invalid');
67
+ return value;
68
+ }
69
+ function timestamp(value) {
70
+ if (typeof value !== 'string' || value.length > 40
71
+ || !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,6})?(?:Z|[+-]\d{2}:\d{2})$(?![\s\S])/.test(value)
72
+ || !Number.isFinite(Date.parse(value)))
73
+ invalid('timestamp is invalid');
74
+ return Date.parse(value);
75
+ }
76
+ export function repositorySourcePathSafe(path) {
77
+ return path.length >= 1 && path.length <= 250 && path.split('/').every(part => /^[A-Za-z0-9._ -]{1,160}$(?![\s\S])/.test(part) && part !== '.' && part !== '..' && !/[. ]$/.test(part)
78
+ && !/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\.|$)/i.test(part)
79
+ && !/^(?:\.env.*|\.netrc|\.npmrc|\.pypirc|\.git|\.dharma|node_modules|dist|build|\.ssh|\.aws|\.gnupg|id_rsa|id_ed25519)$/i.test(part)
80
+ && !/(?:^|[._ -])(?:secrets?|credentials?|passwords?|private[-_ ]?keys?|keystore)(?:[._ -]|$)/i.test(part)
81
+ && !/\.(?:pem|key|p12|pfx|jks|kdbx)$/i.test(part))
82
+ && !SKILL_ROOTS.some(root => path.toLowerCase() === `${root}/dharma-agent-fabric`
83
+ || path.toLowerCase().startsWith(`${root}/dharma-agent-fabric/`));
84
+ }
85
+ function paths(value, maximum, root, minimum) {
86
+ if (!Array.isArray(value) || value.length < minimum || value.length > maximum
87
+ || value.some(path => typeof path !== 'string' || !(root && path === '.') && !repositorySourcePathSafe(path))
88
+ || new Set(value).size !== value.length)
89
+ invalid('path scope is invalid');
90
+ const result = value;
91
+ if (JSON.stringify([...result].sort()) !== JSON.stringify(result))
92
+ invalid('path scope is not canonical');
93
+ return [...result];
94
+ }
95
+ // Structural provenance is not signing authority. The server must recheck the
96
+ // current grant before upload/publication; historical verification omits `now`.
97
+ export function validateRepositorySourceAuthorization(value, scope, now) {
98
+ data(value);
99
+ const body = record(value);
100
+ exact(body, ['schema', 'organizationId', 'workspaceId', 'repositoryBindingId', 'repositoryAgentId', 'revision',
101
+ 'generationId', 'receiptId', 'policyRevision', 'policyHash', 'confirmedAt', 'policy']);
102
+ if (body.schema !== 'dharma.repository-source-authorization/v1' || body.organizationId !== scope.organizationId
103
+ || body.workspaceId !== scope.workspaceId || body.repositoryBindingId !== scope.repositoryBindingId
104
+ || body.repositoryAgentId !== scope.repositoryAgentId)
105
+ invalid('scope mismatch');
106
+ uuid(body.workspaceId);
107
+ uuid(body.repositoryBindingId);
108
+ uuid(body.repositoryAgentId);
109
+ const generation = uuid(body.generationId), revision = integer(body.revision, 1, 2147483646);
110
+ if (body.receiptId !== `repo_consent_${generation}` || body.policyRevision !== `repository-source-${generation}`)
111
+ invalid('receipt mismatch');
112
+ const confirmed = timestamp(body.confirmedAt);
113
+ const policy = record(body.policy);
114
+ exact(policy, ['action', 'confirmed', 'requestId', 'repositoryBindingId', 'expectedRevision', 'allowedContentClasses',
115
+ 'approvedRepositoryPaths', 'approvedOutputFolders', 'automaticValidatedPublication', 'retentionDays',
116
+ 'maximumFileBytes', 'maximumSnapshotBytes', 'maximumDailyUploadBytes', 'expiresAt']);
117
+ if (policy.action !== 'authorize' || policy.confirmed !== true || policy.repositoryBindingId !== body.repositoryBindingId
118
+ || policy.expectedRevision !== revision - 1 || policy.automaticValidatedPublication !== true
119
+ || JSON.stringify(policy.allowedContentClasses) !== JSON.stringify(CLASSES))
120
+ invalid('policy is invalid');
121
+ uuid(policy.requestId);
122
+ paths(policy.approvedRepositoryPaths, 64, true, 1);
123
+ paths(policy.approvedOutputFolders, 32, false, 0);
124
+ integer(policy.retentionDays, 1, 365);
125
+ const maximumSnapshotBytes = integer(policy.maximumSnapshotBytes, 1, 4194304);
126
+ integer(policy.maximumFileBytes, 1, Math.min(262144, maximumSnapshotBytes));
127
+ integer(policy.maximumDailyUploadBytes, 1, 1073741824);
128
+ if (policy.expiresAt !== null) {
129
+ const expiry = timestamp(policy.expiresAt);
130
+ if (new Date(expiry).toISOString() !== policy.expiresAt || expiry <= confirmed)
131
+ invalid('policy expired or timestamp is invalid');
132
+ if (now && expiry <= now.getTime())
133
+ invalid('policy expired');
134
+ }
135
+ if (now && (!Number.isFinite(now.getTime()) || confirmed > now.getTime() + 30000))
136
+ invalid('policy clock is invalid');
137
+ const policyHash = `sha256:${createHash('sha256').update(canonicalize(policy)).digest('hex')}`;
138
+ if (body.policyHash !== policyHash)
139
+ invalid('policy hash mismatch');
140
+ if (Buffer.byteLength(canonicalize(body)) > 32768)
141
+ invalid('metadata limit exceeded');
142
+ return structuredClone(body);
143
+ }
144
+ export function repositorySourcePathAllowed(authorization, path, contentClass) {
145
+ if (!repositorySourcePathSafe(path) || !authorization.policy.allowedContentClasses.includes(contentClass))
146
+ return false;
147
+ const roots = contentClass === 'repository_skills' ? SKILL_ROOTS
148
+ : contentClass === 'approved_outputs' ? authorization.policy.approvedOutputFolders : authorization.policy.approvedRepositoryPaths;
149
+ return roots.some(root => root === '.' || path === root || path.startsWith(`${root}/`));
150
+ }
151
+ export function parseRepositorySourcePolicyResponse(value, scope, now = new Date()) {
152
+ data(value);
153
+ const response = record(value), view = record(response.policy), current = record(view.current);
154
+ if (response.ok !== true || response.organizationId !== scope.organizationId || view.organizationId !== scope.organizationId
155
+ || view.repositoryBindingId !== scope.repositoryBindingId || view.repositoryAgentId !== scope.repositoryAgentId
156
+ || current.active !== true || current.reason !== 'authorized')
157
+ invalid('policy unavailable, inactive or foreign');
158
+ return validateRepositorySourceAuthorization({ schema: 'dharma.repository-source-authorization/v1',
159
+ organizationId: scope.organizationId, workspaceId: scope.workspaceId, repositoryBindingId: view.repositoryBindingId,
160
+ repositoryAgentId: view.repositoryAgentId, revision: current.revision, generationId: current.generationId,
161
+ receiptId: current.receiptId, policyRevision: current.policyRevision, policyHash: current.policyHash,
162
+ confirmedAt: current.confirmedAt, policy: current.policy }, scope, now);
163
+ }
164
+ //# sourceMappingURL=repositorySourceAuthorization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositorySourceAuthorization.js","sourceRoot":"","sources":["../src/repositorySourceAuthorization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=repositorySourceCapture.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositorySourceCapture.test.d.ts","sourceRoot":"","sources":["../src/repositorySourceCapture.test.ts"],"names":[],"mappings":""}