@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,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "dharma.repository-role-metadata/v1",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"additionalProperties": false,
|
|
6
|
+
"required": ["schema", "organizationId", "observationId", "observedAt", "integrity", "scope", "operation", "stage", "role", "discovery", "sharedRepositoryReady", "communicationReady", "sourceFingerprintVerified", "currentAuthorizationVerified", "contactAuthority", "presence", "limitations"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schema": {"const": "dharma.repository-role-metadata/v1"},
|
|
9
|
+
"organizationId": {"$ref": "#/$defs/organization"},
|
|
10
|
+
"observationId": {"$ref": "#/$defs/uuid"},
|
|
11
|
+
"observedAt": {"type": "string", "format": "date-time", "maxLength": 24},
|
|
12
|
+
"integrity": {
|
|
13
|
+
"type": "object", "additionalProperties": false, "required": ["kind", "sha256"],
|
|
14
|
+
"properties": {"kind": {"const": "local_hash_not_signature"}, "sha256": {"$ref": "#/$defs/hash"}}
|
|
15
|
+
},
|
|
16
|
+
"scope": {
|
|
17
|
+
"type": "object", "additionalProperties": false,
|
|
18
|
+
"required": ["organizationId", "workspaceId", "repositoryBindingId", "repositoryAgentId", "endpointId", "sourceFingerprint"],
|
|
19
|
+
"properties": {
|
|
20
|
+
"organizationId": {"$ref": "#/$defs/organization"},
|
|
21
|
+
"workspaceId": {"$ref": "#/$defs/uuid"}, "repositoryBindingId": {"$ref": "#/$defs/uuid"},
|
|
22
|
+
"repositoryAgentId": {"$ref": "#/$defs/uuid"}, "endpointId": {"$ref": "#/$defs/uuid"},
|
|
23
|
+
"sourceFingerprint": {"$ref": "#/$defs/hash"}
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"operation": {"enum": ["register", "discover"]},
|
|
27
|
+
"stage": {"const": "repository_role_observed"},
|
|
28
|
+
"role": {"anyOf": [{"type": "null"}, {"$ref": "#/$defs/role"}]},
|
|
29
|
+
"discovery": {"anyOf": [{"type": "null"}, {"$ref": "#/$defs/discovery"}]},
|
|
30
|
+
"sharedRepositoryReady": {"const": false}, "communicationReady": {"const": false},
|
|
31
|
+
"sourceFingerprintVerified": {"const": false}, "currentAuthorizationVerified": {"const": false},
|
|
32
|
+
"contactAuthority": {"const": false}, "presence": {"const": "unavailable"},
|
|
33
|
+
"limitations": {"const": ["source_fingerprint_unavailable", "current_authorization_not_independently_verified", "presence_unavailable", "contact_authority_unavailable"]}
|
|
34
|
+
},
|
|
35
|
+
"oneOf": [
|
|
36
|
+
{"properties": {"operation": {"const": "register"}, "role": {"$ref": "#/$defs/role"}, "discovery": {"type": "null"}}},
|
|
37
|
+
{"properties": {"operation": {"const": "discover"}, "role": {"type": "null"}, "discovery": {"$ref": "#/$defs/discovery"}}}
|
|
38
|
+
],
|
|
39
|
+
"$defs": {
|
|
40
|
+
"uuid": {"type": "string", "pattern": "^[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])"},
|
|
41
|
+
"hash": {"type": "string", "pattern": "^sha256:[a-f0-9]{64}$(?![\\s\\S])"},
|
|
42
|
+
"organization": {"type": "string", "pattern": "^[A-Za-z0-9_:-]{1,120}$(?![\\s\\S])"},
|
|
43
|
+
"categories": {
|
|
44
|
+
"type": "array", "minItems": 1, "maxItems": 16, "uniqueItems": true,
|
|
45
|
+
"items": {"type": "string", "maxLength": 64, "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$(?![\\s\\S])"}
|
|
46
|
+
},
|
|
47
|
+
"roleName": {"type": "string", "minLength": 1, "maxLength": 80, "pattern": "^(?!\\s)(?![\\s\\S]*[\\u0000-\\u001f\\u007f])[\\s\\S]*\\S$(?![\\s\\S])"},
|
|
48
|
+
"description": {"type": "string", "minLength": 1, "maxLength": 1024, "pattern": "^(?!\\s)(?![\\s\\S]*[\\u0000-\\u001f\\u007f])[\\s\\S]*\\S$(?![\\s\\S])"},
|
|
49
|
+
"revision": {"type": "integer", "minimum": 1, "maximum": 2147483647},
|
|
50
|
+
"role": {
|
|
51
|
+
"type": "object", "additionalProperties": false,
|
|
52
|
+
"required": ["organizationId", "workspaceId", "endpointId", "repositoryBindingId", "repositoryAgentId", "roleName", "questionCategories", "description", "revision"],
|
|
53
|
+
"properties": {
|
|
54
|
+
"organizationId": {"$ref": "#/$defs/organization"}, "workspaceId": {"$ref": "#/$defs/uuid"},
|
|
55
|
+
"endpointId": {"$ref": "#/$defs/uuid"}, "repositoryBindingId": {"$ref": "#/$defs/uuid"}, "repositoryAgentId": {"$ref": "#/$defs/uuid"},
|
|
56
|
+
"roleName": {"$ref": "#/$defs/roleName"}, "questionCategories": {"$ref": "#/$defs/categories"},
|
|
57
|
+
"description": {"$ref": "#/$defs/description"}, "revision": {"$ref": "#/$defs/revision"}
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"peer": {
|
|
61
|
+
"type": "object", "additionalProperties": false,
|
|
62
|
+
"required": ["endpointId", "workspaceId", "provider", "roleName", "questionCategories", "description", "revision"],
|
|
63
|
+
"properties": {
|
|
64
|
+
"endpointId": {"$ref": "#/$defs/uuid"}, "workspaceId": {"$ref": "#/$defs/uuid"},
|
|
65
|
+
"provider": {"enum": ["codex", "claude", "agy", "hermes"]},
|
|
66
|
+
"roleName": {"$ref": "#/$defs/roleName"}, "questionCategories": {"$ref": "#/$defs/categories"},
|
|
67
|
+
"description": {"$ref": "#/$defs/description"}, "revision": {"$ref": "#/$defs/revision"}
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"discovery": {
|
|
71
|
+
"type": "object", "additionalProperties": false,
|
|
72
|
+
"required": ["peers", "limit", "possiblyTruncated", "catalogComplete"],
|
|
73
|
+
"properties": {
|
|
74
|
+
"peers": {"type": "array", "maxItems": 50, "items": {"$ref": "#/$defs/peer"}},
|
|
75
|
+
"limit": {"const": 50}, "possiblyTruncated": {"type": "boolean"}, "catalogComplete": {"type": "boolean"}
|
|
76
|
+
},
|
|
77
|
+
"if": {"properties": {"peers": {"type": "array", "minItems": 50}}},
|
|
78
|
+
"then": {"properties": {"possiblyTruncated": {"const": true}, "catalogComplete": {"const": false}}},
|
|
79
|
+
"else": {"properties": {"possiblyTruncated": {"const": false}, "catalogComplete": {"const": true}}}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://schemas.dharma-ai.io/skill-preparation-pointer/v1",
|
|
4
|
+
"title": "Local Pending Skill Preparation Pointer",
|
|
5
|
+
"description": "Private cache locator only, never activation authority. Payload reuse additionally requires independently fresh protected context and verified server selection, signature/expiry/integrity checks and a safe activation boundary. No replay or GC authority is established by this pointer.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["schema", "cacheId", "organizationId", "deviceId", "workspaceId", "repositoryAgentId", "repositoryBindingId", "provider", "policyHash", "rolloutId", "bundleId", "bundleHash", "metadataHash", "sourceDirectory", "preparedAt", "cachedAt", "activationAuthorized"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"schema": { "const": "dharma.skill-preparation-pointer/v1" },
|
|
11
|
+
"cacheId": { "type": "string", "format": "uuid" },
|
|
12
|
+
"organizationId": { "type": "string", "pattern": "^org_[A-Za-z0-9_]{1,156}(?![\\s\\S])" },
|
|
13
|
+
"deviceId": { "type": "string", "format": "uuid" },
|
|
14
|
+
"workspaceId": { "type": "string", "format": "uuid" },
|
|
15
|
+
"repositoryAgentId": { "type": "string", "format": "uuid" },
|
|
16
|
+
"repositoryBindingId": { "anyOf": [{ "type": "null" }, { "type": "string", "format": "uuid" }] },
|
|
17
|
+
"provider": { "enum": ["codex", "claude", "agy", "hermes"] },
|
|
18
|
+
"policyHash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}(?![\\s\\S])" },
|
|
19
|
+
"rolloutId": { "type": "string", "minLength": 1, "maxLength": 256 },
|
|
20
|
+
"bundleId": { "type": "string", "format": "uuid" },
|
|
21
|
+
"bundleHash": { "type": "string", "pattern": "^(sha256|blake3):[A-Fa-f0-9]{32,128}(?![\\s\\S])" },
|
|
22
|
+
"metadataHash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}(?![\\s\\S])" },
|
|
23
|
+
"sourceDirectory": { "type": "string", "pattern": "^attempt-[A-Za-z0-9]{6}(?![\\s\\S])" },
|
|
24
|
+
"preparedAt": { "type": "string", "format": "date-time", "maxLength": 24 },
|
|
25
|
+
"cachedAt": { "type": "string", "format": "date-time", "maxLength": 24 },
|
|
26
|
+
"activationAuthorized": { "const": false }
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://schemas.dharma-ai.io/skill-preparation/v1",
|
|
4
|
+
"title": "Local Pending Skill Preparation",
|
|
5
|
+
"description": "Private staging cache only. Restart activation requires fresh authorization, expiry, integrity and session-boundary checks. Runtime validation additionally checks scope equality and a 3 MiB serialized metadata limit.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["schema", "organizationId", "deviceId", "workspaceId", "repositoryAgentId", "repositoryBindingId", "provider", "policyHash", "rolloutId", "bundle", "repositoryPackage", "preparedAt", "activationAuthorized"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"schema": { "const": "dharma.skill-preparation/v1" },
|
|
11
|
+
"organizationId": { "type": "string", "pattern": "^org_[A-Za-z0-9_]{1,156}(?![\\s\\S])" },
|
|
12
|
+
"deviceId": { "type": "string", "format": "uuid" },
|
|
13
|
+
"workspaceId": { "type": "string", "format": "uuid" },
|
|
14
|
+
"repositoryAgentId": { "type": "string", "format": "uuid" },
|
|
15
|
+
"repositoryBindingId": { "anyOf": [{ "type": "null" }, { "type": "string", "format": "uuid" }] },
|
|
16
|
+
"provider": { "enum": ["codex", "claude", "agy", "hermes"] },
|
|
17
|
+
"policyHash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}(?![\\s\\S])" },
|
|
18
|
+
"rolloutId": { "type": "string", "minLength": 1, "maxLength": 256 },
|
|
19
|
+
"bundle": { "$ref": "https://schemas.dharma-ai.io/skill-bundle/v2" },
|
|
20
|
+
"repositoryPackage": {
|
|
21
|
+
"anyOf": [{ "type": "null" }, {
|
|
22
|
+
"type": "object", "additionalProperties": false, "required": ["envelope", "index"],
|
|
23
|
+
"properties": {
|
|
24
|
+
"envelope": { "$ref": "https://schemas.dharma-ai.io/repository-package-envelope/v1" },
|
|
25
|
+
"index": { "$ref": "https://schemas.dharma-ai.io/repository-package-transfer/v2" }
|
|
26
|
+
}
|
|
27
|
+
}]
|
|
28
|
+
},
|
|
29
|
+
"preparedAt": { "type": "string", "format": "date-time", "maxLength": 24 },
|
|
30
|
+
"activationAuthorized": { "const": false }
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillPollResponse.test.d.ts","sourceRoot":"","sources":["../src/skillPollResponse.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import test from 'node:test';
|
|
4
|
+
import { parseSkillRolloutResponse } from './index.js';
|
|
5
|
+
for (const [name, response] of [
|
|
6
|
+
['missing success', { organizationId: 'org_test', rollout: null }],
|
|
7
|
+
['failed response', { ok: false, organizationId: 'org_test', rollout: null }],
|
|
8
|
+
['missing organization', { ok: true, rollout: null }],
|
|
9
|
+
['foreign organization', { ok: true, organizationId: 'org_other', rollout: null }],
|
|
10
|
+
['missing rollout', { ok: true, organizationId: 'org_test' }],
|
|
11
|
+
['undefined rollout', { ok: true, organizationId: 'org_test', rollout: undefined }],
|
|
12
|
+
['false rollout', { ok: true, organizationId: 'org_test', rollout: false }],
|
|
13
|
+
['zero rollout', { ok: true, organizationId: 'org_test', rollout: 0 }],
|
|
14
|
+
['empty string rollout', { ok: true, organizationId: 'org_test', rollout: '' }],
|
|
15
|
+
['array rollout', { ok: true, organizationId: 'org_test', rollout: [] }],
|
|
16
|
+
['empty rollout ID', { ok: true, organizationId: 'org_test', rollout: { id: '', bundle: {} } }],
|
|
17
|
+
['array bundle', { ok: true, organizationId: 'org_test', rollout: { id: 'rollout', bundle: [] } }],
|
|
18
|
+
['null bundle', { ok: true, organizationId: 'org_test', rollout: { id: 'rollout', bundle: null } }],
|
|
19
|
+
]) {
|
|
20
|
+
test(`skill poll rejects ${name}`, () => assert.throws(() => parseSkillRolloutResponse(response, 'org_test')));
|
|
21
|
+
}
|
|
22
|
+
test('skill poll accepts explicit same-organization no-update only', () => {
|
|
23
|
+
assert.equal(parseSkillRolloutResponse({ ok: true, organizationId: 'org_test', rollout: null }, 'org_test'), null);
|
|
24
|
+
});
|
|
25
|
+
test('skill poll retains package envelope for subsequent signature validation', () => {
|
|
26
|
+
const rollout = { id: 'rollout', bundle: { bundleId: 'bundle' }, repositoryPackage: { schema: 'envelope' } };
|
|
27
|
+
assert.equal(parseSkillRolloutResponse({ ok: true, organizationId: 'org_test', rollout }, 'org_test'), rollout);
|
|
28
|
+
});
|
|
29
|
+
test('actual skill synchronization parses the authenticated poll before no-update or materialization', async () => {
|
|
30
|
+
const source = await readFile(new URL('../src/index.ts', import.meta.url), 'utf8');
|
|
31
|
+
const sync = source.slice(source.indexOf('export async function prepareSkillUpdate('), source.indexOf('async function skillSync('));
|
|
32
|
+
assert.match(sync, /const rollout = parseSkillRolloutResponse\(response, config\.organizationId\);/);
|
|
33
|
+
assert.ok(sync.indexOf('await fabric.pollSkill(') < sync.indexOf('parseSkillRolloutResponse('));
|
|
34
|
+
assert.ok(sync.indexOf('parseSkillRolloutResponse(') < sync.indexOf('if (!rollout)'));
|
|
35
|
+
assert.ok(sync.indexOf('parseSkillRolloutResponse(') < sync.indexOf('verifySkillBundle('));
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=skillPollResponse.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillPollResponse.test.js","sourceRoot":"","sources":["../src/skillPollResponse.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillPreparation.test.d.ts","sourceRoot":"","sources":["../src/skillPreparation.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { createHash, generateKeyPairSync } from 'node:crypto';
|
|
3
|
+
import { lstat, mkdir, mkdtemp, readFile, readdir, rm, stat, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { basename, join } from 'node:path';
|
|
6
|
+
import test from 'node:test';
|
|
7
|
+
import { signCanonicalObject, validateContract } from '@dharma-ai-labs/agent-fabric-contracts';
|
|
8
|
+
import { calculateBundleHash } from '@dharma-ai-labs/agent-fabric-skill-manager';
|
|
9
|
+
import { saveDeviceEnrollmentAnchor } from '@dharma-ai-labs/agent-fabric-relay-client';
|
|
10
|
+
import { applyServerEvidencePolicy, materializeWorkspacePolicy, prepareSkillUpdate } from './index.js';
|
|
11
|
+
import { serializeSkillPreparationRecord } from './skillPreparationRecord.js';
|
|
12
|
+
import { skillPreparationScopeRoot } from './skillPreparationTransaction.js';
|
|
13
|
+
const WORKSPACE = '11111111-1111-4111-8111-111111111111';
|
|
14
|
+
const AGENT = '22222222-2222-4222-8222-222222222222';
|
|
15
|
+
const DEVICE = '33333333-3333-4333-8333-333333333333';
|
|
16
|
+
const digest = (s) => 'sha256:' + createHash('sha256').update(s).digest('hex');
|
|
17
|
+
test('pending preparation contract accepts only bounded non-activating records', async () => {
|
|
18
|
+
const f = await fixture();
|
|
19
|
+
try {
|
|
20
|
+
const record = { schema: 'dharma.skill-preparation/v1', organizationId: 'org_test',
|
|
21
|
+
deviceId: DEVICE, workspaceId: WORKSPACE, repositoryAgentId: AGENT, repositoryBindingId: null, provider: 'codex',
|
|
22
|
+
policyHash: digest('policy'), rolloutId: 'rollout', bundle: f.bundle,
|
|
23
|
+
repositoryPackage: null, preparedAt: new Date().toISOString(), activationAuthorized: false };
|
|
24
|
+
const validate = async (value) => (await validateContract(join(import.meta.dirname, 'schemas'), 'https://schemas.dharma-ai.io/skill-preparation/v1', value)).ok;
|
|
25
|
+
assert.equal(await validate(record), true);
|
|
26
|
+
assert.deepEqual(JSON.parse(await serializeSkillPreparationRecord(record)), record);
|
|
27
|
+
await assert.rejects(serializeSkillPreparationRecord({ ...record, organizationId: 'org_foreign' }), /organization mismatch/);
|
|
28
|
+
await assert.rejects(serializeSkillPreparationRecord({ ...record, workspaceId: AGENT }), /target mismatch/);
|
|
29
|
+
await assert.rejects(serializeSkillPreparationRecord({ ...record, rolloutId: 'x'.repeat(3 * 1024 * 1024) }), /byte limit/);
|
|
30
|
+
for (const changes of [{ activationAuthorized: true }, { provider: 'unknown' }, { policyHash: 'not-a-hash' },
|
|
31
|
+
{ repositoryPackage: {} }, { preparedAt: 'not-a-date' }, { extra: 'not allowed' }]) {
|
|
32
|
+
assert.equal(await validate({ ...record, ...changes }), false);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
await rm(f.home, { recursive: true, force: true });
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
async function fixture() {
|
|
40
|
+
const home = await mkdtemp(join(tmpdir(), 'af-preparation-'));
|
|
41
|
+
const workspace = join(home, 'work');
|
|
42
|
+
await mkdir(workspace);
|
|
43
|
+
const keys = generateKeyPairSync('ed25519');
|
|
44
|
+
const publicKey = keys.publicKey.export({ format: 'jwk' }).x;
|
|
45
|
+
const generated = await materializeWorkspacePolicy({ workspace, organizationId: 'org_test', revision: 'policy-test' });
|
|
46
|
+
const unsigned = { schema: 'dharma.workspace-policy-authorization/v1', organizationId: 'org_test', workspaceId: WORKSPACE,
|
|
47
|
+
policy: { revision: 'policy-test', evidence: generated.policy.evidence },
|
|
48
|
+
issuedAt: new Date(Date.now() - 60_000).toISOString(), expiresAt: new Date(Date.now() + 3_600_000).toISOString(), keyVersion: 'fixture' };
|
|
49
|
+
const authorization = { ...unsigned, signature: signCanonicalObject(unsigned, keys.privateKey) };
|
|
50
|
+
const policy = applyServerEvidencePolicy(generated.policy, authorization, publicKey, 'org_test', WORKSPACE);
|
|
51
|
+
const policyPath = join(workspace, '.dharma', 'approved-policy.json');
|
|
52
|
+
await writeFile(policyPath, JSON.stringify(policy));
|
|
53
|
+
await mkdir(join(home, 'registry', 'workspace-authorizations'), { recursive: true });
|
|
54
|
+
await writeFile(join(home, 'registry', 'workspaces.json'), JSON.stringify([{ workspaceId: WORKSPACE, organizationId: 'org_test',
|
|
55
|
+
name: 'Fixture', path: workspace, status: 'active', routeHash: 'a'.repeat(64), repositoryRemoteHash: 'b'.repeat(64), repositoryAgentId: AGENT }]));
|
|
56
|
+
await writeFile(join(home, 'registry', 'workspace-authorizations', WORKSPACE + '.json'), JSON.stringify({ issuedAt: unsigned.issuedAt, signature: authorization.signature }));
|
|
57
|
+
const config = { schema: 'dharma.device-config/v1', organizationId: 'org_test', deviceId: DEVICE, deviceName: 'Fixture', platform: 'linux',
|
|
58
|
+
hqUrl: 'https://example.invalid', relayUrl: 'wss://example.invalid', publicKeyEd25519: publicKey,
|
|
59
|
+
serverPublicKeyEd25519: publicKey, enrolledAt: new Date().toISOString() };
|
|
60
|
+
await writeFile(join(home, 'device.json'), JSON.stringify(config));
|
|
61
|
+
const values = new Map();
|
|
62
|
+
const store = { backend: 'linux-secret-service', get: async (k) => values.get(k) ?? null,
|
|
63
|
+
put: async (k, v) => { values.set(k, v); }, delete: async (k) => { values.delete(k); } };
|
|
64
|
+
await saveDeviceEnrollmentAnchor({ config, store });
|
|
65
|
+
const text = '# Verifier\n';
|
|
66
|
+
const unsignedBundle = { schema: 'dharma.skill-bundle/v2', bundleId: '44444444-4444-4444-8444-444444444444', organizationId: 'org_test',
|
|
67
|
+
version: 'fixture', operation: 'install', riskClass: 'R0', activationPolicy: 'next_session', rollbackBundleId: null,
|
|
68
|
+
evaluationReceiptId: '55555555-5555-4555-8555-555555555555', createdAt: new Date(Date.now() - 60_000).toISOString(), expiresAt: unsigned.expiresAt,
|
|
69
|
+
targetSelectors: { organizationAgentIds: [AGENT], deviceIds: [DEVICE], workspaceIds: [WORKSPACE], providers: ['codex'] },
|
|
70
|
+
skills: [{ skillId: 'verifier', version: 'fixture', repository: 'https://github.com/example/repository', commit: 'a'.repeat(40), path: 'skills/verifier',
|
|
71
|
+
contentHash: digest('verifier/SKILL.md\0' + text + '\0'), files: [{ path: 'SKILL.md', contentBase64: Buffer.from(text).toString('base64'), sha256: digest(text) }] }] };
|
|
72
|
+
const signed = { ...unsignedBundle, bundleHash: calculateBundleHash(unsignedBundle) };
|
|
73
|
+
const bundle = { ...signed, signature: signCanonicalObject(signed, keys.privateKey) };
|
|
74
|
+
return { home, policyPath, store, values, bundle, keys, text };
|
|
75
|
+
}
|
|
76
|
+
for (const scenario of ['success', 'foreign selector', 'tampered tree', 'stop after poll', 'changed policy', 'no update']) {
|
|
77
|
+
test(`actual automatic preparation: ${scenario}`, async () => {
|
|
78
|
+
const f = await fixture();
|
|
79
|
+
const previous = process.env.DHARMA_HOME;
|
|
80
|
+
process.env.DHARMA_HOME = f.home;
|
|
81
|
+
let stopped = false, calls = 0;
|
|
82
|
+
const baseline = new Map(f.values);
|
|
83
|
+
const bundle = structuredClone(f.bundle);
|
|
84
|
+
if (scenario === 'foreign selector') {
|
|
85
|
+
bundle.targetSelectors.workspaceIds = ['foreign'];
|
|
86
|
+
const { signature: _signature, bundleHash: _hash, ...unsigned } = bundle;
|
|
87
|
+
bundle.bundleHash = calculateBundleHash(unsigned);
|
|
88
|
+
const { signature: _unused, ...signed } = bundle;
|
|
89
|
+
bundle.signature = signCanonicalObject(signed, f.keys.privateKey);
|
|
90
|
+
}
|
|
91
|
+
if (scenario === 'tampered tree') {
|
|
92
|
+
bundle.skills[0].contentHash = digest('wrong');
|
|
93
|
+
const { signature: _signature, bundleHash: _hash, ...unsigned } = bundle;
|
|
94
|
+
bundle.bundleHash = calculateBundleHash(unsigned);
|
|
95
|
+
const { signature: _unused, ...signed } = bundle;
|
|
96
|
+
bundle.signature = signCanonicalObject(signed, f.keys.privateKey);
|
|
97
|
+
}
|
|
98
|
+
const fabric = { pollSkill: async (input) => {
|
|
99
|
+
calls++;
|
|
100
|
+
assert.equal(input.workspaceId, WORKSPACE);
|
|
101
|
+
assert.equal(input.installedBundleId, null);
|
|
102
|
+
if (scenario === 'stop after poll')
|
|
103
|
+
stopped = true;
|
|
104
|
+
if (scenario === 'changed policy') {
|
|
105
|
+
const policy = JSON.parse(await readFile(f.policyPath, 'utf8'));
|
|
106
|
+
policy.skills.canaryPercent = 25;
|
|
107
|
+
await writeFile(f.policyPath, JSON.stringify(policy));
|
|
108
|
+
}
|
|
109
|
+
return { ok: true, organizationId: 'org_test', rollout: scenario === 'no update' ? null : { id: 'rollout', bundle } };
|
|
110
|
+
}, signedGet: async () => { throw new Error('Unexpected package transport.'); } };
|
|
111
|
+
try {
|
|
112
|
+
const operation = () => prepareSkillUpdate({ workspaceId: WORKSPACE, provider: 'codex', policyPath: f.policyPath,
|
|
113
|
+
fabric, store: f.store, automatic: true, assertRunning: () => { if (stopped)
|
|
114
|
+
throw new Error('stopped fixture'); } });
|
|
115
|
+
if (scenario === 'success') {
|
|
116
|
+
const first = await operation();
|
|
117
|
+
const second = await operation();
|
|
118
|
+
assert.ok(first && second);
|
|
119
|
+
assert.notEqual(first.sourceRoot, second.sourceRoot);
|
|
120
|
+
assert.equal(await readFile(join(first.sourceRoot, 'skills/verifier/SKILL.md'), 'utf8'), f.text);
|
|
121
|
+
if (process.platform !== 'win32') {
|
|
122
|
+
assert.equal((await stat(first.sourceRoot)).mode & 0o777, 0o700);
|
|
123
|
+
assert.equal((await stat(join(first.sourceRoot, 'skills/verifier/SKILL.md'))).mode & 0o777, 0o600);
|
|
124
|
+
}
|
|
125
|
+
await rm(first.sourceRoot, { recursive: true });
|
|
126
|
+
assert.equal(await readFile(join(second.sourceRoot, 'skills/verifier/SKILL.md'), 'utf8'), f.text);
|
|
127
|
+
await rm(second.sourceRoot, { recursive: true });
|
|
128
|
+
}
|
|
129
|
+
else if (scenario === 'no update')
|
|
130
|
+
assert.equal(await operation(), null);
|
|
131
|
+
else
|
|
132
|
+
await assert.rejects(operation(), scenario === 'foreign selector' ? /does not target/ : scenario === 'tampered tree' ? /content hash/ : scenario === 'stop after poll' ? /stopped fixture/ : /scope or policy changed/);
|
|
133
|
+
assert.equal(calls, scenario === 'success' ? 2 : 1);
|
|
134
|
+
assert.deepEqual(f.values, baseline);
|
|
135
|
+
const dirs = await readdir(join(f.home, 'relay/skill-pending-sources')).catch(e => { if (e.code === 'ENOENT')
|
|
136
|
+
return []; throw e; });
|
|
137
|
+
const reachedPreparation = ['success', 'tampered tree', 'changed policy'].includes(scenario);
|
|
138
|
+
const scopeRoot = skillPreparationScopeRoot(f.home, WORKSPACE, 'codex');
|
|
139
|
+
assert.deepEqual(dirs, reachedPreparation ? [basename(scopeRoot)] : []);
|
|
140
|
+
if (reachedPreparation) {
|
|
141
|
+
const scope = await lstat(scopeRoot);
|
|
142
|
+
assert.equal(scope.isDirectory(), true);
|
|
143
|
+
assert.equal(scope.isSymbolicLink(), false);
|
|
144
|
+
if (process.platform !== 'win32') {
|
|
145
|
+
const getuid = process.getuid;
|
|
146
|
+
assert.equal(typeof getuid, 'function');
|
|
147
|
+
assert.equal(scope.mode & 0o777, 0o700);
|
|
148
|
+
assert.equal(scope.uid, getuid?.());
|
|
149
|
+
}
|
|
150
|
+
// Direct preparation does not publish; no attempt, pointer or metadata may remain.
|
|
151
|
+
assert.deepEqual(await readdir(scopeRoot), []);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
finally {
|
|
155
|
+
if (previous === undefined)
|
|
156
|
+
delete process.env.DHARMA_HOME;
|
|
157
|
+
else
|
|
158
|
+
process.env.DHARMA_HOME = previous;
|
|
159
|
+
await rm(f.home, { recursive: true, force: true });
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=skillPreparation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillPreparation.test.js","sourceRoot":"","sources":["../src/skillPreparation.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type ProviderId } from '@dharma-ai-labs/agent-fabric-contracts';
|
|
2
|
+
type ExpectedPreparation = {
|
|
3
|
+
organizationId: string;
|
|
4
|
+
deviceId: string;
|
|
5
|
+
repositoryAgentId: string;
|
|
6
|
+
repositoryBindingId: string | null;
|
|
7
|
+
policyHash: string;
|
|
8
|
+
rolloutId: string;
|
|
9
|
+
bundleId: string;
|
|
10
|
+
bundleHash: string;
|
|
11
|
+
};
|
|
12
|
+
export type SkillPreparationCachePublication = {
|
|
13
|
+
home: string;
|
|
14
|
+
workspaceId: string;
|
|
15
|
+
provider: ProviderId;
|
|
16
|
+
sourceRoot: string;
|
|
17
|
+
recordBytes: string;
|
|
18
|
+
expected: ExpectedPreparation;
|
|
19
|
+
assertCurrent: () => void;
|
|
20
|
+
onCommitted: () => void;
|
|
21
|
+
};
|
|
22
|
+
export type SkillPreparationCacheExpectation = Omit<ExpectedPreparation, 'rolloutId' | 'bundleId' | 'bundleHash'> & {
|
|
23
|
+
home: string;
|
|
24
|
+
workspaceId: string;
|
|
25
|
+
provider: ProviderId;
|
|
26
|
+
assertCurrent: () => void;
|
|
27
|
+
};
|
|
28
|
+
export declare function publishSkillPreparationCache(input: SkillPreparationCachePublication): Promise<void>;
|
|
29
|
+
export declare function takeSkillPreparationCache(input: SkillPreparationCacheExpectation): Promise<{
|
|
30
|
+
sourceRoot: string;
|
|
31
|
+
record: Record<string, unknown>;
|
|
32
|
+
} | null>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=skillPreparationCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillPreparationCache.d.ts","sourceRoot":"","sources":["../src/skillPreparationCache.ts"],"names":[],"mappings":"AAIA,OAAO,EAA0C,KAAK,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAIjH,KAAK,mBAAmB,GAAG;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,UAAU,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG,IAAI,CAAC,mBAAmB,EAAE,WAAW,GAAG,UAAU,GAAG,YAAY,CAAC,GAAG;IAClH,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,UAAU,CAAC;IACrB,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B,CAAC;AA6EF,wBAAsB,4BAA4B,CAAC,KAAK,EAAE,gCAAgC,GAAG,OAAO,CAAC,IAAI,CAAC,CAyIzG;AAID,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,gCAAgC,GAAG,OAAO,CAAC;IAChG,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,GAAG,IAAI,CAAC,CAgER"}
|