@dharma-ai-labs/agent-fabric 0.2.49 → 0.2.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +88 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +826 -175
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +2 -2
- package/dist/repositoryCandidateSync.d.ts +55 -0
- package/dist/repositoryCandidateSync.d.ts.map +1 -0
- package/dist/repositoryCandidateSync.js +177 -0
- package/dist/repositoryCandidateSync.js.map +1 -0
- package/dist/repositoryCandidateSync.test.d.ts +2 -0
- package/dist/repositoryCandidateSync.test.d.ts.map +1 -0
- package/dist/repositoryCandidateSync.test.js +141 -0
- package/dist/repositoryCandidateSync.test.js.map +1 -0
- package/dist/repositoryInstalledKnowledge.d.ts +13 -0
- package/dist/repositoryInstalledKnowledge.d.ts.map +1 -0
- package/dist/repositoryInstalledKnowledge.js +25 -0
- package/dist/repositoryInstalledKnowledge.js.map +1 -0
- package/dist/repositoryInstallerFiles.d.ts +6 -0
- package/dist/repositoryInstallerFiles.d.ts.map +1 -0
- package/dist/repositoryInstallerFiles.js +113 -0
- package/dist/repositoryInstallerFiles.js.map +1 -0
- package/dist/repositoryKnowledge.d.ts +119 -0
- package/dist/repositoryKnowledge.d.ts.map +1 -0
- package/dist/repositoryKnowledge.js +462 -0
- package/dist/repositoryKnowledge.js.map +1 -0
- package/dist/repositoryKnowledge.test.d.ts +2 -0
- package/dist/repositoryKnowledge.test.d.ts.map +1 -0
- package/dist/repositoryKnowledge.test.js +245 -0
- package/dist/repositoryKnowledge.test.js.map +1 -0
- package/dist/repositoryKnowledgeRetention.test.d.ts +2 -0
- package/dist/repositoryKnowledgeRetention.test.d.ts.map +1 -0
- package/dist/repositoryKnowledgeRetention.test.js +386 -0
- package/dist/repositoryKnowledgeRetention.test.js.map +1 -0
- package/dist/repositoryOnboardingCaller.test.d.ts +2 -0
- package/dist/repositoryOnboardingCaller.test.d.ts.map +1 -0
- package/dist/repositoryOnboardingCaller.test.js +197 -0
- package/dist/repositoryOnboardingCaller.test.js.map +1 -0
- package/dist/repositoryOnboardingFlow.test.d.ts +2 -0
- package/dist/repositoryOnboardingFlow.test.d.ts.map +1 -0
- package/dist/repositoryOnboardingFlow.test.js +47 -0
- package/dist/repositoryOnboardingFlow.test.js.map +1 -0
- package/dist/repositoryPackage.d.ts +115 -0
- package/dist/repositoryPackage.d.ts.map +1 -0
- package/dist/repositoryPackage.js +1095 -0
- package/dist/repositoryPackage.js.map +1 -0
- package/dist/repositoryPackage.test.d.ts +2 -0
- package/dist/repositoryPackage.test.d.ts.map +1 -0
- package/dist/repositoryPackage.test.js +709 -0
- package/dist/repositoryPackage.test.js.map +1 -0
- package/dist/repositoryPackageDelivery.d.ts +29 -0
- package/dist/repositoryPackageDelivery.d.ts.map +1 -0
- package/dist/repositoryPackageDelivery.js +140 -0
- package/dist/repositoryPackageDelivery.js.map +1 -0
- package/dist/repositoryPackageDelivery.test.d.ts +2 -0
- package/dist/repositoryPackageDelivery.test.d.ts.map +1 -0
- package/dist/repositoryPackageDelivery.test.js +787 -0
- package/dist/repositoryPackageDelivery.test.js.map +1 -0
- package/dist/repositoryPackageDeliveryCaller.test.d.ts +2 -0
- package/dist/repositoryPackageDeliveryCaller.test.d.ts.map +1 -0
- package/dist/repositoryPackageDeliveryCaller.test.js +18 -0
- package/dist/repositoryPackageDeliveryCaller.test.js.map +1 -0
- package/dist/repositoryPackageDeliveryPreflight.test.d.ts +2 -0
- package/dist/repositoryPackageDeliveryPreflight.test.d.ts.map +1 -0
- package/dist/repositoryPackageDeliveryPreflight.test.js +29 -0
- package/dist/repositoryPackageDeliveryPreflight.test.js.map +1 -0
- package/dist/repositoryPackageTransfer.d.ts +85 -0
- package/dist/repositoryPackageTransfer.d.ts.map +1 -0
- package/dist/repositoryPackageTransfer.js +233 -0
- package/dist/repositoryPackageTransfer.js.map +1 -0
- package/dist/repositoryPackageTransfer.test.d.ts +2 -0
- package/dist/repositoryPackageTransfer.test.d.ts.map +1 -0
- package/dist/repositoryPackageTransfer.test.js +173 -0
- package/dist/repositoryPackageTransfer.test.js.map +1 -0
- package/dist/repositoryPackageTransferV2.test.d.ts +2 -0
- package/dist/repositoryPackageTransferV2.test.d.ts.map +1 -0
- package/dist/repositoryPackageTransferV2.test.js +549 -0
- package/dist/repositoryPackageTransferV2.test.js.map +1 -0
- package/dist/repositoryPackageTransferV2Schema.test.d.ts +2 -0
- package/dist/repositoryPackageTransferV2Schema.test.d.ts.map +1 -0
- package/dist/repositoryPackageTransferV2Schema.test.js +48 -0
- package/dist/repositoryPackageTransferV2Schema.test.js.map +1 -0
- package/dist/repositoryReleaseMetadata.d.ts +37 -0
- package/dist/repositoryReleaseMetadata.d.ts.map +1 -0
- package/dist/repositoryReleaseMetadata.js +251 -0
- package/dist/repositoryReleaseMetadata.js.map +1 -0
- package/dist/repositoryReleaseMetadata.test.d.ts +2 -0
- package/dist/repositoryReleaseMetadata.test.d.ts.map +1 -0
- package/dist/repositoryReleaseMetadata.test.js +297 -0
- package/dist/repositoryReleaseMetadata.test.js.map +1 -0
- package/dist/repositoryRoleDerivation.d.ts +11 -0
- package/dist/repositoryRoleDerivation.d.ts.map +1 -0
- package/dist/repositoryRoleDerivation.js +59 -0
- package/dist/repositoryRoleDerivation.js.map +1 -0
- package/dist/repositoryRoleDerivation.test.d.ts +2 -0
- package/dist/repositoryRoleDerivation.test.d.ts.map +1 -0
- package/dist/repositoryRoleDerivation.test.js +33 -0
- package/dist/repositoryRoleDerivation.test.js.map +1 -0
- package/dist/repositoryRoleMetadata.d.ts +63 -0
- package/dist/repositoryRoleMetadata.d.ts.map +1 -0
- package/dist/repositoryRoleMetadata.js +203 -0
- package/dist/repositoryRoleMetadata.js.map +1 -0
- package/dist/repositoryRoleMetadata.test.d.ts +2 -0
- package/dist/repositoryRoleMetadata.test.d.ts.map +1 -0
- package/dist/repositoryRoleMetadata.test.js +296 -0
- package/dist/repositoryRoleMetadata.test.js.map +1 -0
- package/dist/repositoryRoleQuestion.d.ts +36 -0
- package/dist/repositoryRoleQuestion.d.ts.map +1 -0
- package/dist/repositoryRoleQuestion.js +68 -0
- package/dist/repositoryRoleQuestion.js.map +1 -0
- package/dist/repositoryRoleQuestion.test.d.ts +2 -0
- package/dist/repositoryRoleQuestion.test.d.ts.map +1 -0
- package/dist/repositoryRoleQuestion.test.js +66 -0
- package/dist/repositoryRoleQuestion.test.js.map +1 -0
- package/dist/repositorySourceAuthorization.d.ts +43 -0
- package/dist/repositorySourceAuthorization.d.ts.map +1 -0
- package/dist/repositorySourceAuthorization.js +164 -0
- package/dist/repositorySourceAuthorization.js.map +1 -0
- package/dist/repositorySourceCapture.test.d.ts +2 -0
- package/dist/repositorySourceCapture.test.d.ts.map +1 -0
- package/dist/repositorySourceCapture.test.js +303 -0
- package/dist/repositorySourceCapture.test.js.map +1 -0
- package/dist/repositorySourceSync.d.ts +54 -0
- package/dist/repositorySourceSync.d.ts.map +1 -0
- package/dist/repositorySourceSync.js +88 -0
- package/dist/repositorySourceSync.js.map +1 -0
- package/dist/repositorySourceSync.test.d.ts +2 -0
- package/dist/repositorySourceSync.test.d.ts.map +1 -0
- package/dist/repositorySourceSync.test.js +218 -0
- package/dist/repositorySourceSync.test.js.map +1 -0
- package/dist/schemas/repository-knowledge-retention-v1.schema.json +26 -0
- package/dist/schemas/repository-knowledge-v2.schema.json +74 -0
- package/dist/schemas/repository-knowledge.schema.json +63 -0
- package/dist/schemas/repository-package-chunk-v2.schema.json +15 -0
- package/dist/schemas/repository-package-chunk.schema.json +18 -0
- package/dist/schemas/repository-package-delivery-v1.schema.json +51 -0
- package/dist/schemas/repository-package-envelope-v1.schema.json +16 -0
- package/dist/schemas/repository-package-transfer-v2.schema.json +36 -0
- package/dist/schemas/repository-package-transfer.schema.json +34 -0
- package/dist/schemas/repository-package-v2.schema.json +491 -0
- package/dist/schemas/repository-package-v3.schema.json +36 -0
- package/dist/schemas/repository-package.schema.json +94 -0
- package/dist/schemas/repository-release-manifest.schema.json +34 -0
- package/dist/schemas/repository-role-metadata.schema.json +82 -0
- package/dist/schemas/skill-preparation-pointer-v1.schema.json +28 -0
- package/dist/schemas/skill-preparation-v1.schema.json +32 -0
- package/dist/skillPollResponse.test.d.ts +2 -0
- package/dist/skillPollResponse.test.d.ts.map +1 -0
- package/dist/skillPollResponse.test.js +37 -0
- package/dist/skillPollResponse.test.js.map +1 -0
- package/dist/skillPreparation.test.d.ts +2 -0
- package/dist/skillPreparation.test.d.ts.map +1 -0
- package/dist/skillPreparation.test.js +163 -0
- package/dist/skillPreparation.test.js.map +1 -0
- package/dist/skillPreparationCache.d.ts +34 -0
- package/dist/skillPreparationCache.d.ts.map +1 -0
- package/dist/skillPreparationCache.js +371 -0
- package/dist/skillPreparationCache.js.map +1 -0
- package/dist/skillPreparationCache.test.d.ts +2 -0
- package/dist/skillPreparationCache.test.d.ts.map +1 -0
- package/dist/skillPreparationCache.test.js +316 -0
- package/dist/skillPreparationCache.test.js.map +1 -0
- package/dist/skillPreparationCaller.test.d.ts +2 -0
- package/dist/skillPreparationCaller.test.d.ts.map +1 -0
- package/dist/skillPreparationCaller.test.js +32 -0
- package/dist/skillPreparationCaller.test.js.map +1 -0
- package/dist/skillPreparationPump.d.ts +11 -0
- package/dist/skillPreparationPump.d.ts.map +1 -0
- package/dist/skillPreparationPump.js +41 -0
- package/dist/skillPreparationPump.js.map +1 -0
- package/dist/skillPreparationPump.test.d.ts +2 -0
- package/dist/skillPreparationPump.test.d.ts.map +1 -0
- package/dist/skillPreparationPump.test.js +87 -0
- package/dist/skillPreparationPump.test.js.map +1 -0
- package/dist/skillPreparationRecord.d.ts +2 -0
- package/dist/skillPreparationRecord.d.ts.map +1 -0
- package/dist/skillPreparationRecord.js +36 -0
- package/dist/skillPreparationRecord.js.map +1 -0
- package/dist/skillPreparationTransaction.d.ts +13 -0
- package/dist/skillPreparationTransaction.d.ts.map +1 -0
- package/dist/skillPreparationTransaction.js +236 -0
- package/dist/skillPreparationTransaction.js.map +1 -0
- package/dist/skillPreparationTransaction.test.d.ts +2 -0
- package/dist/skillPreparationTransaction.test.d.ts.map +1 -0
- package/dist/skillPreparationTransaction.test.js +181 -0
- package/dist/skillPreparationTransaction.test.js.map +1 -0
- package/dist/skillSyncPolicy.test.d.ts +2 -0
- package/dist/skillSyncPolicy.test.d.ts.map +1 -0
- package/dist/skillSyncPolicy.test.js +156 -0
- package/dist/skillSyncPolicy.test.js.map +1 -0
- package/dist/usage.d.ts +1 -1
- package/dist/usage.d.ts.map +1 -1
- package/dist/usage.js +1 -1
- package/dist/usage.js.map +1 -1
- package/dist/windowsProcessPortability.test.d.ts +2 -0
- package/dist/windowsProcessPortability.test.d.ts.map +1 -0
- package/dist/windowsProcessPortability.test.js +14 -0
- package/dist/windowsProcessPortability.test.js.map +1 -0
- 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 @@
|
|
|
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":"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"}
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"repositorySourceCapture.test.d.ts","sourceRoot":"","sources":["../src/repositorySourceCapture.test.ts"],"names":[],"mappings":""}
|