@dharma-ai-labs/agent-fabric 0.2.48 → 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.
Files changed (199) hide show
  1. package/dist/index.d.ts +92 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +846 -180
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.test.js +25 -3
  6. package/dist/index.test.js.map +1 -1
  7. package/dist/repositoryCandidateSync.d.ts +55 -0
  8. package/dist/repositoryCandidateSync.d.ts.map +1 -0
  9. package/dist/repositoryCandidateSync.js +177 -0
  10. package/dist/repositoryCandidateSync.js.map +1 -0
  11. package/dist/repositoryCandidateSync.test.d.ts +2 -0
  12. package/dist/repositoryCandidateSync.test.d.ts.map +1 -0
  13. package/dist/repositoryCandidateSync.test.js +141 -0
  14. package/dist/repositoryCandidateSync.test.js.map +1 -0
  15. package/dist/repositoryInstalledKnowledge.d.ts +13 -0
  16. package/dist/repositoryInstalledKnowledge.d.ts.map +1 -0
  17. package/dist/repositoryInstalledKnowledge.js +25 -0
  18. package/dist/repositoryInstalledKnowledge.js.map +1 -0
  19. package/dist/repositoryInstallerFiles.d.ts +6 -0
  20. package/dist/repositoryInstallerFiles.d.ts.map +1 -0
  21. package/dist/repositoryInstallerFiles.js +113 -0
  22. package/dist/repositoryInstallerFiles.js.map +1 -0
  23. package/dist/repositoryKnowledge.d.ts +119 -0
  24. package/dist/repositoryKnowledge.d.ts.map +1 -0
  25. package/dist/repositoryKnowledge.js +462 -0
  26. package/dist/repositoryKnowledge.js.map +1 -0
  27. package/dist/repositoryKnowledge.test.d.ts +2 -0
  28. package/dist/repositoryKnowledge.test.d.ts.map +1 -0
  29. package/dist/repositoryKnowledge.test.js +245 -0
  30. package/dist/repositoryKnowledge.test.js.map +1 -0
  31. package/dist/repositoryKnowledgeRetention.test.d.ts +2 -0
  32. package/dist/repositoryKnowledgeRetention.test.d.ts.map +1 -0
  33. package/dist/repositoryKnowledgeRetention.test.js +386 -0
  34. package/dist/repositoryKnowledgeRetention.test.js.map +1 -0
  35. package/dist/repositoryOnboardingCaller.test.d.ts +2 -0
  36. package/dist/repositoryOnboardingCaller.test.d.ts.map +1 -0
  37. package/dist/repositoryOnboardingCaller.test.js +197 -0
  38. package/dist/repositoryOnboardingCaller.test.js.map +1 -0
  39. package/dist/repositoryOnboardingFlow.test.d.ts +2 -0
  40. package/dist/repositoryOnboardingFlow.test.d.ts.map +1 -0
  41. package/dist/repositoryOnboardingFlow.test.js +47 -0
  42. package/dist/repositoryOnboardingFlow.test.js.map +1 -0
  43. package/dist/repositoryPackage.d.ts +115 -0
  44. package/dist/repositoryPackage.d.ts.map +1 -0
  45. package/dist/repositoryPackage.js +1095 -0
  46. package/dist/repositoryPackage.js.map +1 -0
  47. package/dist/repositoryPackage.test.d.ts +2 -0
  48. package/dist/repositoryPackage.test.d.ts.map +1 -0
  49. package/dist/repositoryPackage.test.js +709 -0
  50. package/dist/repositoryPackage.test.js.map +1 -0
  51. package/dist/repositoryPackageDelivery.d.ts +29 -0
  52. package/dist/repositoryPackageDelivery.d.ts.map +1 -0
  53. package/dist/repositoryPackageDelivery.js +140 -0
  54. package/dist/repositoryPackageDelivery.js.map +1 -0
  55. package/dist/repositoryPackageDelivery.test.d.ts +2 -0
  56. package/dist/repositoryPackageDelivery.test.d.ts.map +1 -0
  57. package/dist/repositoryPackageDelivery.test.js +787 -0
  58. package/dist/repositoryPackageDelivery.test.js.map +1 -0
  59. package/dist/repositoryPackageDeliveryCaller.test.d.ts +2 -0
  60. package/dist/repositoryPackageDeliveryCaller.test.d.ts.map +1 -0
  61. package/dist/repositoryPackageDeliveryCaller.test.js +18 -0
  62. package/dist/repositoryPackageDeliveryCaller.test.js.map +1 -0
  63. package/dist/repositoryPackageDeliveryPreflight.test.d.ts +2 -0
  64. package/dist/repositoryPackageDeliveryPreflight.test.d.ts.map +1 -0
  65. package/dist/repositoryPackageDeliveryPreflight.test.js +29 -0
  66. package/dist/repositoryPackageDeliveryPreflight.test.js.map +1 -0
  67. package/dist/repositoryPackageTransfer.d.ts +85 -0
  68. package/dist/repositoryPackageTransfer.d.ts.map +1 -0
  69. package/dist/repositoryPackageTransfer.js +233 -0
  70. package/dist/repositoryPackageTransfer.js.map +1 -0
  71. package/dist/repositoryPackageTransfer.test.d.ts +2 -0
  72. package/dist/repositoryPackageTransfer.test.d.ts.map +1 -0
  73. package/dist/repositoryPackageTransfer.test.js +173 -0
  74. package/dist/repositoryPackageTransfer.test.js.map +1 -0
  75. package/dist/repositoryPackageTransferV2.test.d.ts +2 -0
  76. package/dist/repositoryPackageTransferV2.test.d.ts.map +1 -0
  77. package/dist/repositoryPackageTransferV2.test.js +549 -0
  78. package/dist/repositoryPackageTransferV2.test.js.map +1 -0
  79. package/dist/repositoryPackageTransferV2Schema.test.d.ts +2 -0
  80. package/dist/repositoryPackageTransferV2Schema.test.d.ts.map +1 -0
  81. package/dist/repositoryPackageTransferV2Schema.test.js +48 -0
  82. package/dist/repositoryPackageTransferV2Schema.test.js.map +1 -0
  83. package/dist/repositoryReleaseMetadata.d.ts +37 -0
  84. package/dist/repositoryReleaseMetadata.d.ts.map +1 -0
  85. package/dist/repositoryReleaseMetadata.js +251 -0
  86. package/dist/repositoryReleaseMetadata.js.map +1 -0
  87. package/dist/repositoryReleaseMetadata.test.d.ts +2 -0
  88. package/dist/repositoryReleaseMetadata.test.d.ts.map +1 -0
  89. package/dist/repositoryReleaseMetadata.test.js +297 -0
  90. package/dist/repositoryReleaseMetadata.test.js.map +1 -0
  91. package/dist/repositoryRoleDerivation.d.ts +11 -0
  92. package/dist/repositoryRoleDerivation.d.ts.map +1 -0
  93. package/dist/repositoryRoleDerivation.js +59 -0
  94. package/dist/repositoryRoleDerivation.js.map +1 -0
  95. package/dist/repositoryRoleDerivation.test.d.ts +2 -0
  96. package/dist/repositoryRoleDerivation.test.d.ts.map +1 -0
  97. package/dist/repositoryRoleDerivation.test.js +33 -0
  98. package/dist/repositoryRoleDerivation.test.js.map +1 -0
  99. package/dist/repositoryRoleMetadata.d.ts +63 -0
  100. package/dist/repositoryRoleMetadata.d.ts.map +1 -0
  101. package/dist/repositoryRoleMetadata.js +203 -0
  102. package/dist/repositoryRoleMetadata.js.map +1 -0
  103. package/dist/repositoryRoleMetadata.test.d.ts +2 -0
  104. package/dist/repositoryRoleMetadata.test.d.ts.map +1 -0
  105. package/dist/repositoryRoleMetadata.test.js +296 -0
  106. package/dist/repositoryRoleMetadata.test.js.map +1 -0
  107. package/dist/repositoryRoleQuestion.d.ts +36 -0
  108. package/dist/repositoryRoleQuestion.d.ts.map +1 -0
  109. package/dist/repositoryRoleQuestion.js +68 -0
  110. package/dist/repositoryRoleQuestion.js.map +1 -0
  111. package/dist/repositoryRoleQuestion.test.d.ts +2 -0
  112. package/dist/repositoryRoleQuestion.test.d.ts.map +1 -0
  113. package/dist/repositoryRoleQuestion.test.js +66 -0
  114. package/dist/repositoryRoleQuestion.test.js.map +1 -0
  115. package/dist/repositorySourceAuthorization.d.ts +43 -0
  116. package/dist/repositorySourceAuthorization.d.ts.map +1 -0
  117. package/dist/repositorySourceAuthorization.js +164 -0
  118. package/dist/repositorySourceAuthorization.js.map +1 -0
  119. package/dist/repositorySourceCapture.test.d.ts +2 -0
  120. package/dist/repositorySourceCapture.test.d.ts.map +1 -0
  121. package/dist/repositorySourceCapture.test.js +303 -0
  122. package/dist/repositorySourceCapture.test.js.map +1 -0
  123. package/dist/repositorySourceSync.d.ts +54 -0
  124. package/dist/repositorySourceSync.d.ts.map +1 -0
  125. package/dist/repositorySourceSync.js +88 -0
  126. package/dist/repositorySourceSync.js.map +1 -0
  127. package/dist/repositorySourceSync.test.d.ts +2 -0
  128. package/dist/repositorySourceSync.test.d.ts.map +1 -0
  129. package/dist/repositorySourceSync.test.js +218 -0
  130. package/dist/repositorySourceSync.test.js.map +1 -0
  131. package/dist/schemas/repository-knowledge-retention-v1.schema.json +26 -0
  132. package/dist/schemas/repository-knowledge-v2.schema.json +74 -0
  133. package/dist/schemas/repository-knowledge.schema.json +63 -0
  134. package/dist/schemas/repository-package-chunk-v2.schema.json +15 -0
  135. package/dist/schemas/repository-package-chunk.schema.json +18 -0
  136. package/dist/schemas/repository-package-delivery-v1.schema.json +51 -0
  137. package/dist/schemas/repository-package-envelope-v1.schema.json +16 -0
  138. package/dist/schemas/repository-package-transfer-v2.schema.json +36 -0
  139. package/dist/schemas/repository-package-transfer.schema.json +34 -0
  140. package/dist/schemas/repository-package-v2.schema.json +491 -0
  141. package/dist/schemas/repository-package-v3.schema.json +36 -0
  142. package/dist/schemas/repository-package.schema.json +94 -0
  143. package/dist/schemas/repository-release-manifest.schema.json +34 -0
  144. package/dist/schemas/repository-role-metadata.schema.json +82 -0
  145. package/dist/schemas/skill-preparation-pointer-v1.schema.json +28 -0
  146. package/dist/schemas/skill-preparation-v1.schema.json +32 -0
  147. package/dist/skillPollResponse.test.d.ts +2 -0
  148. package/dist/skillPollResponse.test.d.ts.map +1 -0
  149. package/dist/skillPollResponse.test.js +37 -0
  150. package/dist/skillPollResponse.test.js.map +1 -0
  151. package/dist/skillPreparation.test.d.ts +2 -0
  152. package/dist/skillPreparation.test.d.ts.map +1 -0
  153. package/dist/skillPreparation.test.js +163 -0
  154. package/dist/skillPreparation.test.js.map +1 -0
  155. package/dist/skillPreparationCache.d.ts +34 -0
  156. package/dist/skillPreparationCache.d.ts.map +1 -0
  157. package/dist/skillPreparationCache.js +371 -0
  158. package/dist/skillPreparationCache.js.map +1 -0
  159. package/dist/skillPreparationCache.test.d.ts +2 -0
  160. package/dist/skillPreparationCache.test.d.ts.map +1 -0
  161. package/dist/skillPreparationCache.test.js +316 -0
  162. package/dist/skillPreparationCache.test.js.map +1 -0
  163. package/dist/skillPreparationCaller.test.d.ts +2 -0
  164. package/dist/skillPreparationCaller.test.d.ts.map +1 -0
  165. package/dist/skillPreparationCaller.test.js +32 -0
  166. package/dist/skillPreparationCaller.test.js.map +1 -0
  167. package/dist/skillPreparationPump.d.ts +11 -0
  168. package/dist/skillPreparationPump.d.ts.map +1 -0
  169. package/dist/skillPreparationPump.js +41 -0
  170. package/dist/skillPreparationPump.js.map +1 -0
  171. package/dist/skillPreparationPump.test.d.ts +2 -0
  172. package/dist/skillPreparationPump.test.d.ts.map +1 -0
  173. package/dist/skillPreparationPump.test.js +87 -0
  174. package/dist/skillPreparationPump.test.js.map +1 -0
  175. package/dist/skillPreparationRecord.d.ts +2 -0
  176. package/dist/skillPreparationRecord.d.ts.map +1 -0
  177. package/dist/skillPreparationRecord.js +36 -0
  178. package/dist/skillPreparationRecord.js.map +1 -0
  179. package/dist/skillPreparationTransaction.d.ts +13 -0
  180. package/dist/skillPreparationTransaction.d.ts.map +1 -0
  181. package/dist/skillPreparationTransaction.js +236 -0
  182. package/dist/skillPreparationTransaction.js.map +1 -0
  183. package/dist/skillPreparationTransaction.test.d.ts +2 -0
  184. package/dist/skillPreparationTransaction.test.d.ts.map +1 -0
  185. package/dist/skillPreparationTransaction.test.js +181 -0
  186. package/dist/skillPreparationTransaction.test.js.map +1 -0
  187. package/dist/skillSyncPolicy.test.d.ts +2 -0
  188. package/dist/skillSyncPolicy.test.d.ts.map +1 -0
  189. package/dist/skillSyncPolicy.test.js +156 -0
  190. package/dist/skillSyncPolicy.test.js.map +1 -0
  191. package/dist/usage.d.ts +1 -1
  192. package/dist/usage.d.ts.map +1 -1
  193. package/dist/usage.js +1 -1
  194. package/dist/usage.js.map +1 -1
  195. package/dist/windowsProcessPortability.test.d.ts +2 -0
  196. package/dist/windowsProcessPortability.test.d.ts.map +1 -0
  197. package/dist/windowsProcessPortability.test.js +14 -0
  198. package/dist/windowsProcessPortability.test.js.map +1 -0
  199. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=skillPollResponse.test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=skillPreparation.test.d.ts.map
@@ -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"}