@openplanr/protocol 0.2.0

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 (334) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +82 -0
  3. package/lib/dashboard/closed-json-contract.mjs +141 -0
  4. package/lib/dashboard/generated/operate-experience-surface-schema-data.mjs +67 -0
  5. package/lib/dashboard/generated/operate-review-schema-data.mjs +35 -0
  6. package/lib/dashboard/generated/operate-schema-token-codec.mjs +127 -0
  7. package/lib/dashboard/operate-experience-audit-display-contract.d.mts +196 -0
  8. package/lib/dashboard/operate-experience-audit-display-contract.mjs +700 -0
  9. package/lib/dashboard/operate-experience-display-contract.d.mts +572 -0
  10. package/lib/dashboard/operate-experience-display-contract.mjs +1007 -0
  11. package/lib/dashboard/operate-experience-surface-contract.d.mts +157 -0
  12. package/lib/dashboard/operate-experience-surface-contract.mjs +91 -0
  13. package/lib/dashboard/operate-review-contract.d.mts +34 -0
  14. package/lib/dashboard/operate-review-contract.mjs +175 -0
  15. package/lib/dashboard/operate-review-display-workspace-contract.d.mts +54 -0
  16. package/lib/dashboard/operate-review-display-workspace-contract.mjs +258 -0
  17. package/lib/dashboard/operate-review-payload-safety.d.mts +7 -0
  18. package/lib/dashboard/operate-review-payload-safety.mjs +42 -0
  19. package/lib/dashboard/operate-review-workspace-projection-v2.d.mts +218 -0
  20. package/lib/protocol/index.d.ts +2638 -0
  21. package/package.json +115 -0
  22. package/registries/commands.json +1952 -0
  23. package/registries/diagram-grammars.json +2407 -0
  24. package/registries/diagram-semantic-patterns.json +111 -0
  25. package/registries/output-paths.json +40 -0
  26. package/registries/outputs.json +864 -0
  27. package/registries/roles.json +661 -0
  28. package/registries/rules.json +261 -0
  29. package/registries/skill-host-profiles.json +247 -0
  30. package/registries/skill-modules.json +1112 -0
  31. package/registries/skill-routing.json +389 -0
  32. package/registries/skills.json +1545 -0
  33. package/registries/task-kinds.json +220 -0
  34. package/registry/adapters.json +110 -0
  35. package/registry/artifact-theme.json +60 -0
  36. package/registry/evaluation-graders.json +303 -0
  37. package/registry/evaluation-host-profiles.json +131 -0
  38. package/registry/frozen-commands.json +15 -0
  39. package/registry/landing-operations.json +20 -0
  40. package/registry/landing-workflows.json +70 -0
  41. package/registry/live-evidence-providers.json +1 -0
  42. package/registry/operate-v2-contracts.json +5965 -0
  43. package/registry/professional-skills.json +115 -0
  44. package/registry/roles.json +14 -0
  45. package/registry/ship-review-specialists.json +42 -0
  46. package/schemas/v1.0.0/design-approved.schema.json +35 -0
  47. package/schemas/v1.0.0/design-feedback.schema.json +169 -0
  48. package/schemas/v1.0.0/design-manifest.schema.json +90 -0
  49. package/schemas/v1.0.0/design-session.schema.json +73 -0
  50. package/schemas/v1.0.0/graph.schema.json +100 -0
  51. package/schemas/v1.0.0/pipeline-shipped.schema.json +154 -0
  52. package/schemas/v1.0.0/run-manifest.schema.json +81 -0
  53. package/schemas/v1.0.0/spec.schema.json +120 -0
  54. package/schemas/v1.0.0/stack.schema.json +184 -0
  55. package/schemas/v1.0.0/story.schema.json +95 -0
  56. package/schemas/v1.0.0/task.schema.json +171 -0
  57. package/schemas/v1.0.0/taste-profile.schema.json +96 -0
  58. package/schemas/v1.1.0/adapter-registry.schema.json +72 -0
  59. package/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  60. package/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  61. package/schemas/v1.1.0/artifact-review.schema.json +97 -0
  62. package/schemas/v1.1.0/artifact-room-descriptor.schema.json +39 -0
  63. package/schemas/v1.1.0/artifact-room-event.schema.json +184 -0
  64. package/schemas/v1.1.0/artifact-room-signed-event.schema.json +58 -0
  65. package/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  66. package/schemas/v1.1.0/browser-qa-gate.schema.json +21 -0
  67. package/schemas/v1.1.0/browser-qa-result.schema.json +24 -0
  68. package/schemas/v1.1.0/browser-qa-session.schema.json +12 -0
  69. package/schemas/v1.1.0/ecosystem-manifest.schema.json +46 -0
  70. package/schemas/v1.1.0/investigation-diagnosis.schema.json +12 -0
  71. package/schemas/v1.1.0/investigation-event.schema.json +15 -0
  72. package/schemas/v1.1.0/investigation-experiment.schema.json +17 -0
  73. package/schemas/v1.1.0/investigation-fix.schema.json +11 -0
  74. package/schemas/v1.1.0/investigation-hypothesis.schema.json +6 -0
  75. package/schemas/v1.1.0/investigation-observation.schema.json +10 -0
  76. package/schemas/v1.1.0/investigation-receipt.schema.json +7 -0
  77. package/schemas/v1.1.0/investigation-record.schema.json +7 -0
  78. package/schemas/v1.1.0/investigation-request.schema.json +34 -0
  79. package/schemas/v1.1.0/planning-review-event.schema.json +64 -0
  80. package/schemas/v1.1.0/planning-review-receipt.schema.json +19 -0
  81. package/schemas/v1.1.0/planning-review-record.schema.json +176 -0
  82. package/schemas/v1.1.0/planning-review-state.schema.json +19 -0
  83. package/schemas/v1.1.0/professional-skills.schema.json +105 -0
  84. package/schemas/v1.1.0/professional-specification.schema.json +111 -0
  85. package/schemas/v1.1.0/provenance-event.schema.json +82 -0
  86. package/schemas/v1.1.0/role-registry.schema.json +28 -0
  87. package/schemas/v1.1.0/runtime-lock.schema.json +39 -0
  88. package/schemas/v1.1.0/ship-closure.schema.json +353 -0
  89. package/schemas/v1.1.0/ship-review-specialist-registry.schema.json +29 -0
  90. package/schemas/v1.1.0/ship-risk-classification.schema.json +48 -0
  91. package/schemas/v1.1.0/specialist-review-result.schema.json +19 -0
  92. package/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  93. package/schemas/v1.10.0/design-review-context.schema.json +191 -0
  94. package/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  95. package/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  96. package/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  97. package/schemas/v1.12.0/enterprise-access-context.schema.json +217 -0
  98. package/schemas/v1.12.0/enterprise-agent-handoff.schema.json +508 -0
  99. package/schemas/v1.12.0/enterprise-artifact-revision.schema.json +87 -0
  100. package/schemas/v1.12.0/enterprise-change-proposal.schema.json +359 -0
  101. package/schemas/v1.12.0/enterprise-evidence-reference.schema.json +147 -0
  102. package/schemas/v1.12.0/enterprise-review-thread.schema.json +278 -0
  103. package/schemas/v1.12.0/enterprise-sync-state.schema.json +169 -0
  104. package/schemas/v1.2.0/adapter-registry.schema.json +83 -0
  105. package/schemas/v1.2.0/dashboard-bootstrap.schema.json +219 -0
  106. package/schemas/v1.2.0/ecosystem-release-operation.schema.json +90 -0
  107. package/schemas/v1.2.0/ecosystem-saga.schema.json +54 -0
  108. package/schemas/v1.2.0/evidence-diagnostic.schema.json +77 -0
  109. package/schemas/v1.2.0/guided-answer-envelope.schema.json +73 -0
  110. package/schemas/v1.2.0/guided-confirmation.schema.json +128 -0
  111. package/schemas/v1.2.0/guided-question.schema.json +242 -0
  112. package/schemas/v1.2.0/guided-questionnaire.schema.json +278 -0
  113. package/schemas/v1.2.0/guided-session.schema.json +141 -0
  114. package/schemas/v1.2.0/landing-confirmation.schema.json +17 -0
  115. package/schemas/v1.2.0/landing-event.schema.json +12 -0
  116. package/schemas/v1.2.0/landing-operation-registry.schema.json +16 -0
  117. package/schemas/v1.2.0/landing-phase-receipt.schema.json +19 -0
  118. package/schemas/v1.2.0/landing-plan.schema.json +36 -0
  119. package/schemas/v1.2.0/landing-receipt.schema.json +12 -0
  120. package/schemas/v1.2.0/landing-workflow-catalog.schema.json +143 -0
  121. package/schemas/v1.2.0/operate-action-display-workspace.schema.json +119 -0
  122. package/schemas/v1.2.0/operate-cycle-display-workspace.schema.json +109 -0
  123. package/schemas/v1.2.0/operate-executive-board-display-surface.schema.json +72 -0
  124. package/schemas/v1.2.0/operate-experience-audit-display-surface.schema.json +328 -0
  125. package/schemas/v1.2.0/operate-experience-display-surface.schema.json +46 -0
  126. package/schemas/v1.2.0/operate-experience-surface.schema.json +590 -0
  127. package/schemas/v1.2.0/operate-recovery-display-surface.schema.json +85 -0
  128. package/schemas/v1.2.0/structured-action.schema.json +91 -0
  129. package/schemas/v1.3.0/adapter-registry.schema.json +84 -0
  130. package/schemas/v1.3.0/ecosystem-manifest.schema.json +120 -0
  131. package/schemas/v1.3.0/release-compatibility-claim.schema.json +46 -0
  132. package/schemas/v1.3.0/release-ledger-receipt.schema.json +45 -0
  133. package/schemas/v1.3.0/release-ledger.schema.json +60 -0
  134. package/schemas/v1.4.0/adapter-registry.schema.json +62 -0
  135. package/schemas/v1.4.0/evaluation-aggregate-report.schema.json +166 -0
  136. package/schemas/v1.4.0/evaluation-budget.schema.json +49 -0
  137. package/schemas/v1.4.0/evaluation-corpus.schema.json +93 -0
  138. package/schemas/v1.4.0/evaluation-fixture.schema.json +64 -0
  139. package/schemas/v1.4.0/evaluation-gate-policy.schema.json +33 -0
  140. package/schemas/v1.4.0/evaluation-grader-registration.schema.json +141 -0
  141. package/schemas/v1.4.0/evaluation-grader-registry.schema.json +20 -0
  142. package/schemas/v1.4.0/evaluation-host-profile-registry.schema.json +20 -0
  143. package/schemas/v1.4.0/evaluation-host-profile.schema.json +73 -0
  144. package/schemas/v1.4.0/evaluation-observation.schema.json +76 -0
  145. package/schemas/v1.4.0/evaluation-run-result.schema.json +84 -0
  146. package/schemas/v1.4.0/evaluation-scenario.schema.json +231 -0
  147. package/schemas/v1.4.0/evaluation-waiver.schema.json +65 -0
  148. package/schemas/v1.4.0/skill-certification-receipt.schema.json +103 -0
  149. package/schemas/v1.5.0/command-catalog.schema.json +296 -0
  150. package/schemas/v1.5.0/common.schema.json +261 -0
  151. package/schemas/v1.5.0/generated-asset-manifest.schema.json +313 -0
  152. package/schemas/v1.5.0/implementation-result.schema.json +152 -0
  153. package/schemas/v1.5.0/migration-preservation-manifest.schema.json +749 -0
  154. package/schemas/v1.5.0/output-catalog.schema.json +210 -0
  155. package/schemas/v1.5.0/output-path-catalog.schema.json +81 -0
  156. package/schemas/v1.5.0/role-registry.schema.json +261 -0
  157. package/schemas/v1.5.0/rule-catalog.schema.json +130 -0
  158. package/schemas/v1.5.0/skill-catalog.schema.json +303 -0
  159. package/schemas/v1.5.0/task-kind-registry.schema.json +167 -0
  160. package/schemas/v1.5.0/task-manifest.schema.json +373 -0
  161. package/schemas/v1.5.0/task-output-manifest.schema.json +462 -0
  162. package/schemas/v1.6.0/common.schema.json +462 -0
  163. package/schemas/v1.6.0/diagram-consumer-reference.schema.json +167 -0
  164. package/schemas/v1.6.0/diagram-document.schema.json +699 -0
  165. package/schemas/v1.6.0/diagram-fidelity-report.schema.json +137 -0
  166. package/schemas/v1.6.0/diagram-manifest.schema.json +162 -0
  167. package/schemas/v1.6.0/diagram-quality-report.schema.json +148 -0
  168. package/schemas/v1.6.0/diagram-review-binding.schema.json +132 -0
  169. package/schemas/v1.6.0/diagram-semantic-pattern-registry.schema.json +90 -0
  170. package/schemas/v1.6.0/diagram-type-registry.schema.json +373 -0
  171. package/schemas/v1.6.0/generated-asset-manifest.schema.json +103 -0
  172. package/schemas/v1.6.0/skill-catalog.schema.json +84 -0
  173. package/schemas/v1.6.0/skill-completion-receipt.schema.json +72 -0
  174. package/schemas/v1.6.0/skill-consent-record.schema.json +74 -0
  175. package/schemas/v1.6.0/skill-host-profile-registry.schema.json +526 -0
  176. package/schemas/v1.6.0/skill-learning-record.schema.json +116 -0
  177. package/schemas/v1.6.0/skill-module-registry.schema.json +108 -0
  178. package/schemas/v1.6.0/skill-routing-registry.schema.json +93 -0
  179. package/schemas/v1.6.0/skill-session.schema.json +73 -0
  180. package/schemas/v1.6.0/skill-source.schema.json +169 -0
  181. package/schemas/v1.7.0/common.schema.json +464 -0
  182. package/schemas/v1.7.0/generated-asset-manifest.schema.json +103 -0
  183. package/schemas/v1.7.0/planning-id-sequence.schema.json +50 -0
  184. package/schemas/v1.7.0/request-authority.schema.json +71 -0
  185. package/schemas/v1.7.0/skill-catalog.schema.json +84 -0
  186. package/schemas/v1.7.0/skill-completion-receipt.schema.json +72 -0
  187. package/schemas/v1.7.0/skill-consent-record.schema.json +74 -0
  188. package/schemas/v1.7.0/skill-host-profile-registry.schema.json +526 -0
  189. package/schemas/v1.7.0/skill-learning-record.schema.json +116 -0
  190. package/schemas/v1.7.0/skill-module-registry.schema.json +108 -0
  191. package/schemas/v1.7.0/skill-routing-registry.schema.json +93 -0
  192. package/schemas/v1.7.0/skill-session.schema.json +73 -0
  193. package/schemas/v1.7.0/skill-source.schema.json +169 -0
  194. package/schemas/v1.7.0/spec.schema.json +117 -0
  195. package/schemas/v1.7.0/story.schema.json +107 -0
  196. package/schemas/v1.7.0/task.schema.json +217 -0
  197. package/schemas/v1.8.0/common.schema.json +96 -0
  198. package/schemas/v1.8.0/skill-package.schema.json +63 -0
  199. package/schemas/v1.8.0/utility-command-catalog.schema.json +82 -0
  200. package/schemas/v1.9.0/design-document.schema.json +306 -0
  201. package/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  202. package/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  203. package/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  204. package/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  205. package/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  206. package/schemas/v2.0.0/agent-runtime-manifest.schema.json +59 -0
  207. package/schemas/v2.0.0/business-operating-snapshot-projection.schema.json +14 -0
  208. package/schemas/v2.0.0/operate-allowed-action.schema.json +181 -0
  209. package/schemas/v2.0.0/operate-api-envelope.schema.json +225 -0
  210. package/schemas/v2.0.0/operate-capability-provider-registration.schema.json +30 -0
  211. package/schemas/v2.0.0/operate-domain-registration.schema.json +284 -0
  212. package/schemas/v2.0.0/operate-evidence-provider-registration.schema.json +55 -0
  213. package/schemas/v2.0.0/operate-evidence-resolver-registration.schema.json +46 -0
  214. package/schemas/v2.0.0/operate-executor-registration.schema.json +27 -0
  215. package/schemas/v2.0.0/operate-experience-live-patch.schema.json +47 -0
  216. package/schemas/v2.0.0/operate-experience-preview.schema.json +51 -0
  217. package/schemas/v2.0.0/operate-experience-view.schema.json +281 -0
  218. package/schemas/v2.0.0/operate-live-evidence-provider-registration.schema.json +48 -0
  219. package/schemas/v2.0.0/operate-live-evidence-provider-registry.schema.json +17 -0
  220. package/schemas/v2.0.0/operate-metric-provider-registration.schema.json +12 -0
  221. package/schemas/v2.0.0/operate-policy-provider-registration.schema.json +33 -0
  222. package/schemas/v2.0.0/operate-review-bound-submission.schema.json +29 -0
  223. package/schemas/v2.0.0/operate-review-display-workspace.schema.json +390 -0
  224. package/schemas/v2.0.0/operate-snapshot-provider-registration.schema.json +16 -0
  225. package/schemas/v2.0.0/operate-tool-call.schema.json +172 -0
  226. package/schemas/v2.0.0/operate-verification-provider-registration.schema.json +12 -0
  227. package/schemas/v2.0.0/operating-action-policy.schema.json +31 -0
  228. package/schemas/v2.0.0/operating-action-verification-plan.schema.json +13 -0
  229. package/schemas/v2.0.0/operating-action.schema.json +86 -0
  230. package/schemas/v2.0.0/operating-advisor-result.schema.json +394 -0
  231. package/schemas/v2.0.0/operating-approval-record.schema.json +23 -0
  232. package/schemas/v2.0.0/operating-approval-requirement.schema.json +31 -0
  233. package/schemas/v2.0.0/operating-artifact.schema.json +52 -0
  234. package/schemas/v2.0.0/operating-assignment.schema.json +437 -0
  235. package/schemas/v2.0.0/operating-assumption.schema.json +16 -0
  236. package/schemas/v2.0.0/operating-capability-availability.schema.json +15 -0
  237. package/schemas/v2.0.0/operating-capability-grant.schema.json +14 -0
  238. package/schemas/v2.0.0/operating-challenger-review.schema.json +204 -0
  239. package/schemas/v2.0.0/operating-checkpoint.schema.json +43 -0
  240. package/schemas/v2.0.0/operating-claim.schema.json +17 -0
  241. package/schemas/v2.0.0/operating-connector-checkpoint.schema.json +28 -0
  242. package/schemas/v2.0.0/operating-context-capture.schema.json +74 -0
  243. package/schemas/v2.0.0/operating-cycle-input-binding.schema.json +30 -0
  244. package/schemas/v2.0.0/operating-cycle.schema.json +42 -0
  245. package/schemas/v2.0.0/operating-decision-ledger.schema.json +237 -0
  246. package/schemas/v2.0.0/operating-decision.schema.json +137 -0
  247. package/schemas/v2.0.0/operating-delivery-evidence.schema.json +46 -0
  248. package/schemas/v2.0.0/operating-delivery-route.schema.json +43 -0
  249. package/schemas/v2.0.0/operating-delta.schema.json +13 -0
  250. package/schemas/v2.0.0/operating-domain-projection.schema.json +15 -0
  251. package/schemas/v2.0.0/operating-event-trigger.schema.json +11 -0
  252. package/schemas/v2.0.0/operating-event.schema.json +505 -0
  253. package/schemas/v2.0.0/operating-evidence-candidate.schema.json +88 -0
  254. package/schemas/v2.0.0/operating-evidence-edge.schema.json +39 -0
  255. package/schemas/v2.0.0/operating-evidence-graph.schema.json +25 -0
  256. package/schemas/v2.0.0/operating-evidence-observation.schema.json +48 -0
  257. package/schemas/v2.0.0/operating-evidence-ref.schema.json +51 -0
  258. package/schemas/v2.0.0/operating-evidence-resolution.schema.json +54 -0
  259. package/schemas/v2.0.0/operating-execution-result.schema.json +23 -0
  260. package/schemas/v2.0.0/operating-executive-board.schema.json +78 -0
  261. package/schemas/v2.0.0/operating-finding.schema.json +116 -0
  262. package/schemas/v2.0.0/operating-governed-operation.schema.json +54 -0
  263. package/schemas/v2.0.0/operating-intelligence-input-bundle.schema.json +128 -0
  264. package/schemas/v2.0.0/operating-intelligence-plan.schema.json +302 -0
  265. package/schemas/v2.0.0/operating-learning-receipt.schema.json +31 -0
  266. package/schemas/v2.0.0/operating-learning.schema.json +13 -0
  267. package/schemas/v2.0.0/operating-live-evidence-consent-record.schema.json +42 -0
  268. package/schemas/v2.0.0/operating-live-evidence-ingestion.schema.json +31 -0
  269. package/schemas/v2.0.0/operating-measurement-plan.schema.json +18 -0
  270. package/schemas/v2.0.0/operating-measurement-schedule-receipt.schema.json +7 -0
  271. package/schemas/v2.0.0/operating-measurement-schedule.schema.json +16 -0
  272. package/schemas/v2.0.0/operating-metric-observation.schema.json +15 -0
  273. package/schemas/v2.0.0/operating-metric.schema.json +18 -0
  274. package/schemas/v2.0.0/operating-model-state.schema.json +36 -0
  275. package/schemas/v2.0.0/operating-objective.schema.json +21 -0
  276. package/schemas/v2.0.0/operating-origin.schema.json +31 -0
  277. package/schemas/v2.0.0/operating-outcome-evaluation.schema.json +46 -0
  278. package/schemas/v2.0.0/operating-outcome.schema.json +13 -0
  279. package/schemas/v2.0.0/operating-planning-proposal.schema.json +45 -0
  280. package/schemas/v2.0.0/operating-policy-evaluation.schema.json +28 -0
  281. package/schemas/v2.0.0/operating-review-read.schema.json +217 -0
  282. package/schemas/v2.0.0/operating-review-receipt.schema.json +64 -0
  283. package/schemas/v2.0.0/operating-review.schema.json +47 -0
  284. package/schemas/v2.0.0/operating-risk.schema.json +96 -0
  285. package/schemas/v2.0.0/operating-rollback-plan.schema.json +10 -0
  286. package/schemas/v2.0.0/operating-rollback-result.schema.json +20 -0
  287. package/schemas/v2.0.0/operating-runtime-state.schema.json +289 -0
  288. package/schemas/v2.0.0/operating-scenario.schema.json +13 -0
  289. package/schemas/v2.0.0/operating-snapshot.schema.json +38 -0
  290. package/schemas/v2.0.0/operating-submission.schema.json +34 -0
  291. package/schemas/v2.0.0/operating-trace-matrix.schema.json +176 -0
  292. package/schemas/v2.0.0/operating-work-change-set.schema.json +89 -0
  293. package/schemas/v2.0.0/operating-work-ledger.schema.json +40 -0
  294. package/schemas/v2.0.0/software-operating-snapshot-projection.schema.json +14 -0
  295. package/src/browser-contracts.d.mts +5 -0
  296. package/src/browser-contracts.mjs +40 -0
  297. package/src/canonical-json.d.mts +5 -0
  298. package/src/canonical-json.mjs +142 -0
  299. package/src/compat/live-evidence-v2.mjs +1019 -0
  300. package/src/compat/operate-experience-live-patch.mjs +66 -0
  301. package/src/compat/operating-planning-contracts.mjs +114 -0
  302. package/src/contracts.d.mts +42 -0
  303. package/src/contracts.mjs +990 -0
  304. package/src/design-contracts.d.mts +62 -0
  305. package/src/design-contracts.mjs +186 -0
  306. package/src/design-publication-contracts.d.mts +4 -0
  307. package/src/design-publication-contracts.mjs +85 -0
  308. package/src/diagram-contracts.d.mts +19 -0
  309. package/src/diagram-contracts.mjs +28 -0
  310. package/src/enterprise-contracts.d.mts +107 -0
  311. package/src/enterprise-contracts.mjs +463 -0
  312. package/src/errors.d.mts +11 -0
  313. package/src/errors.mjs +109 -0
  314. package/src/generated/canonical-registries.mjs +5554 -0
  315. package/src/generated/contract-catalog-v2.mjs +7076 -0
  316. package/src/generated/diagram-registries.mjs +2529 -0
  317. package/src/index.d.mts +10 -0
  318. package/src/index.mjs +40 -0
  319. package/src/json-schema.d.mts +7 -0
  320. package/src/json-schema.mjs +283 -0
  321. package/src/planning-contracts.d.mts +10 -0
  322. package/src/planning-contracts.mjs +53 -0
  323. package/src/registries.d.mts +40 -0
  324. package/src/registries.mjs +261 -0
  325. package/src/review-experience-contracts.d.mts +11 -0
  326. package/src/review-experience-contracts.mjs +103 -0
  327. package/src/semver.d.mts +2 -0
  328. package/src/semver.mjs +7 -0
  329. package/src/skill-source-contracts.d.mts +25 -0
  330. package/src/skill-source-contracts.mjs +105 -0
  331. package/src/task-contracts.d.mts +7 -0
  332. package/src/task-contracts.mjs +130 -0
  333. package/src/workspace-contracts.d.mts +26 -0
  334. package/src/workspace-contracts.mjs +83 -0
@@ -0,0 +1,130 @@
1
+ import { CANONICAL_REGISTRIES, resolveTaskKind } from './registries.mjs';
2
+ import { ProtocolError } from './errors.mjs';
3
+
4
+ const diagnostic = (code, path, message) => ({ code, path, message });
5
+ const pathKey = ({ repositoryKey, path }) => `${repositoryKey}:${path}`;
6
+
7
+ export function validateTaskManifestSemantics(value, {
8
+ roles = CANONICAL_REGISTRIES['roles.json'],
9
+ taskKinds = CANONICAL_REGISTRIES['task-kinds.json'],
10
+ } = {}) {
11
+ const diagnostics = [];
12
+ const binding = taskKinds.bindings.find(({ taskKind }) => taskKind === value?.routing?.taskKind);
13
+ if (!binding || binding.roleId !== value?.routing?.roleId) {
14
+ diagnostics.push(diagnostic('E_TASK_KIND_ROLE_MISMATCH', '$.routing', 'taskKind and roleId must match one canonical task-kind binding.'));
15
+ }
16
+ if (value?.routing?.taskKindRegistryDigest !== taskKinds.documentDigest
17
+ || value?.routing?.roleRegistryDigest !== roles.documentDigest) {
18
+ diagnostics.push(diagnostic('E_TASK_REGISTRY_BINDING_MISMATCH', '$.routing', 'routing must bind the exact canonical task-kind and role registry digests.'));
19
+ }
20
+ const role = roles.roles.find(({ roleId }) => roleId === value?.routing?.roleId);
21
+ if (!role || role.roleVersion !== value?.routing?.roleVersion) {
22
+ diagnostics.push(diagnostic('E_TASK_ROLE_VERSION_MISMATCH', '$.routing.roleVersion', 'role version is not present in the bound registry.'));
23
+ }
24
+ const scopeSets = new Map();
25
+ for (const scope of ['create', 'modify', 'preserve']) {
26
+ for (const entry of value?.scope?.[scope] ?? []) {
27
+ const key = pathKey(entry);
28
+ const previous = scopeSets.get(key);
29
+ if (previous) diagnostics.push(diagnostic('E_TASK_SCOPE_OVERLAP', `$.scope.${scope}`, `${key} is already declared in ${previous}.`));
30
+ scopeSets.set(key, scope);
31
+ }
32
+ }
33
+ if (!value?.reviewBinding?.planDigest || !value?.reviewBinding?.planningReviewReceiptDigest || !value?.reviewBinding?.ownerDecisionDigest) {
34
+ diagnostics.push(diagnostic('E_TASK_REVIEW_BINDING_REQUIRED', '$.reviewBinding', 'DEV task issuance requires plan, review-receipt, and owner-decision digests.'));
35
+ }
36
+ return diagnostics;
37
+ }
38
+
39
+ export function assertTaskManifestSemantics(value, options) {
40
+ const diagnostics = validateTaskManifestSemantics(value, options);
41
+ if (diagnostics.length) throw new ProtocolError(diagnostics[0].code, diagnostics[0].message, '', { diagnostics });
42
+ return value;
43
+ }
44
+
45
+ export function validateTaskGraph(values) {
46
+ const diagnostics = [];
47
+ const byId = new Map(values.map((value) => [value?.task?.taskId, value]));
48
+ if (byId.size !== values.length || byId.has(undefined)) diagnostics.push(diagnostic('E_TASK_GRAPH_DUPLICATE', '$', 'Task graph IDs must be present and unique.'));
49
+ const visiting = new Set();
50
+ const visited = new Set();
51
+ const visit = (id) => {
52
+ if (visiting.has(id)) {
53
+ diagnostics.push(diagnostic('E_TASK_GRAPH_CYCLE', '$.dependencies', `Task dependency cycle includes ${id}.`));
54
+ return;
55
+ }
56
+ if (visited.has(id)) return;
57
+ visiting.add(id);
58
+ for (const dependency of byId.get(id)?.dependencies ?? []) {
59
+ if (!byId.has(dependency.taskId)) diagnostics.push(diagnostic('E_TASK_DEPENDENCY_MISSING', '$.dependencies', `Unknown dependency ${dependency.taskId}.`));
60
+ else visit(dependency.taskId);
61
+ }
62
+ visiting.delete(id);
63
+ visited.add(id);
64
+ };
65
+ for (const id of byId.keys()) if (id !== undefined) visit(id);
66
+ return diagnostics;
67
+ }
68
+
69
+ export function countR2Tasks(values) {
70
+ return values.reduce((count, value) => {
71
+ try {
72
+ return count + (resolveTaskKind(value.routing.taskKind).countsTowardR2 ? 1 : 0);
73
+ } catch {
74
+ return count;
75
+ }
76
+ }, 0);
77
+ }
78
+
79
+ export function validateTaskOutputSemantics(value, { taskManifest } = {}) {
80
+ const diagnostics = [];
81
+ if (taskManifest) {
82
+ if (value?.taskBinding?.taskManifestId !== taskManifest.taskManifestId
83
+ || value?.taskBinding?.taskManifestDigest !== taskManifest.documentDigest) {
84
+ diagnostics.push(diagnostic('E_TASK_OUTPUT_BINDING_MISMATCH', '$.taskBinding', 'Task output must bind the exact issued task manifest.'));
85
+ }
86
+ if (value?.roleBinding?.roleId !== taskManifest.routing.roleId
87
+ || value?.roleBinding?.roleVersion !== taskManifest.routing.roleVersion
88
+ || value?.roleBinding?.registryDigest !== taskManifest.routing.roleRegistryDigest) {
89
+ diagnostics.push(diagnostic('E_TASK_OUTPUT_ROLE_MISMATCH', '$.roleBinding', 'Task output role binding must equal issued routing.'));
90
+ }
91
+ const allowed = new Set([...taskManifest.scope.create, ...taskManifest.scope.modify].map(pathKey));
92
+ const preserved = new Map(taskManifest.scope.preserve.map((entry) => [pathKey(entry), entry]));
93
+ for (const change of value?.changes ?? []) {
94
+ const key = pathKey(change);
95
+ if (!allowed.has(key)) diagnostics.push(diagnostic('E_TASK_OUTPUT_SCOPE_ESCAPE', '$.changes', `${key} is outside Create/Modify.`));
96
+ if (preserved.has(key)) diagnostics.push(diagnostic('E_TASK_OUTPUT_PRESERVE_CHANGED', '$.changes', `${key} intersects Preserve.`));
97
+ }
98
+ const verification = new Map((value?.preserveVerification ?? []).map((entry) => [pathKey(entry), entry]));
99
+ if (verification.size !== preserved.size || [...preserved.keys()].some((key) => !verification.has(key))) {
100
+ diagnostics.push(diagnostic('E_TASK_OUTPUT_PRESERVE_COVERAGE', '$.preserveVerification', 'Preserve verification must bijectively cover the issued Preserve set.'));
101
+ }
102
+ for (const [key, entry] of verification) {
103
+ if (!preserved.has(key) || entry.beforeDigest !== entry.afterDigest || entry.unchanged !== true) {
104
+ diagnostics.push(diagnostic('E_TASK_OUTPUT_PRESERVE_CHANGED', '$.preserveVerification', `${key} is not digest-equal.`));
105
+ }
106
+ }
107
+ }
108
+ if (value?.roleBinding?.roleId === 'planr-qa' && (value?.changes?.length ?? 0) > 0) {
109
+ diagnostics.push(diagnostic('E_TASK_OUTPUT_QA_WRITE', '$.changes', 'QA is read-only and cannot report changed files.'));
110
+ }
111
+ if ((value?.externalEffects?.length ?? 0) > 0) {
112
+ diagnostics.push(diagnostic('E_TASK_OUTPUT_EXTERNAL_EFFECT', '$.externalEffects', 'Protocol 1.5 task outputs permit no external effects.'));
113
+ }
114
+ const failedCommand = (value?.commandEvidence ?? []).some(({ status }) => status === 'failed');
115
+ const failedAcceptance = (value?.acceptanceEvidence ?? []).some(({ result }) => result !== 'passed');
116
+ const errorDiagnostic = (value?.diagnostics ?? []).some(({ severity }) => severity === 'error');
117
+ if (value?.outcome === 'completed' && (value.errorHandoff !== null || failedCommand || failedAcceptance || errorDiagnostic)) {
118
+ diagnostics.push(diagnostic('E_TASK_OUTPUT_COMPLETED_INVALID', '$.outcome', 'Completed output cannot retain failed evidence, error diagnostics, or an error handoff.'));
119
+ }
120
+ if (value?.outcome === 'blocked' && (!value.errorHandoff || !errorDiagnostic)) {
121
+ diagnostics.push(diagnostic('E_TASK_OUTPUT_BLOCKED_HANDOFF_REQUIRED', '$.errorHandoff', 'Blocked output requires an error diagnostic and bound error handoff.'));
122
+ }
123
+ return diagnostics;
124
+ }
125
+
126
+ export function assertTaskOutputSemantics(value, options) {
127
+ const diagnostics = validateTaskOutputSemantics(value, options);
128
+ if (diagnostics.length) throw new ProtocolError(diagnostics[0].code, diagnostics[0].message, '', { diagnostics });
129
+ return value;
130
+ }
@@ -0,0 +1,26 @@
1
+ export interface WorkspaceCiphertext { iv: string; ciphertext: string }
2
+ export interface WorkspacePublicKey { kty: 'EC'; crv: 'P-256'; x: string; y: string; ext?: boolean; key_ops?: ['verify'] }
3
+ export interface WorkspaceRevision extends WorkspaceCiphertext {
4
+ id: string; epoch: number; reviewOf: string; createdAt: string; signature: string;
5
+ }
6
+ export interface WorkspaceEvent extends WorkspaceCiphertext {
7
+ id: string; revisionId: string; reviewOf: string; epoch: number;
8
+ publicKey: WorkspacePublicKey; signature: string;
9
+ }
10
+ export interface DesignReviewWorkspace {
11
+ schemaVersion: '1.0.0'; id: string; version: number; epoch: number;
12
+ currentRevision: string; commentsPaused: boolean;
13
+ ownerPublicKey: WorkspacePublicKey; keyring: WorkspaceCiphertext;
14
+ }
15
+ export declare const DESIGN_WORKSPACE_VERSION: '1.0.0';
16
+ export declare const DESIGN_WORKSPACE_API: '/api/v1/design-workspaces';
17
+ export declare const DESIGN_WORKSPACE_MAX_BYTES: number;
18
+ export declare const DESIGN_WORKSPACE_MAX_EVENT_BYTES: number;
19
+ export declare const DESIGN_WORKSPACE_ID_PATTERN: string;
20
+ export declare const DESIGN_WORKSPACE_SCHEMA: Readonly<Record<string, unknown>>;
21
+ export declare const DESIGN_WORKSPACE_CREATE_SCHEMA: Readonly<Record<string, unknown>>;
22
+ export declare const DESIGN_WORKSPACE_REVISION_SCHEMA: Readonly<Record<string, unknown>>;
23
+ export declare const DESIGN_WORKSPACE_EVENT_SCHEMA: Readonly<Record<string, unknown>>;
24
+ export declare const DESIGN_REVIEW_BUNDLE_SCHEMA: Readonly<Record<string, unknown>>;
25
+ export declare const DESIGN_WORKSPACE_SCHEMAS: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
26
+ export declare function assertWorkspaceContract<T>(value: T, contract: Readonly<Record<string, unknown>>): T;
@@ -0,0 +1,83 @@
1
+ import { validateJson } from './json-schema.mjs';
2
+ import { DESIGN_DOCUMENT_SCHEMA } from './design-contracts.mjs';
3
+
4
+ export const DESIGN_WORKSPACE_VERSION = '1.0.0';
5
+ export const DESIGN_WORKSPACE_API = '/api/v1/design-workspaces';
6
+ export const DESIGN_WORKSPACE_MAX_BYTES = 5 * 1024 * 1024;
7
+ export const DESIGN_WORKSPACE_MAX_EVENT_BYTES = 256 * 1024;
8
+ export const DESIGN_WORKSPACE_ID_PATTERN = '^[A-Za-z0-9_-]{22,64}$';
9
+ const id = { type: 'string', pattern: DESIGN_WORKSPACE_ID_PATTERN };
10
+ const digest = { type: 'string', pattern: '^[a-f0-9]{64}$' };
11
+ const b64 = { type: 'string', pattern: '^[A-Za-z0-9_-]+$' };
12
+ const epoch = { type: 'integer', minimum: 1, maximum: 2147483647 };
13
+ const cipherProperties = { iv: { ...b64, minLength: 16, maxLength: 16 }, ciphertext: { ...b64, minLength: 22, maxLength: Math.ceil(DESIGN_WORKSPACE_MAX_BYTES * 4 / 3) } };
14
+ const signature = { ...b64, minLength: 86, maxLength: 86 };
15
+ const publicKey = {
16
+ type: 'object', additionalProperties: false, required: ['kty', 'crv', 'x', 'y'],
17
+ properties: { kty: { const: 'EC' }, crv: { const: 'P-256' }, x: { ...b64, minLength: 43, maxLength: 43 }, y: { ...b64, minLength: 43, maxLength: 43 }, ext: { type: 'boolean' }, key_ops: { type: 'array', items: { const: 'verify' }, maxItems: 1 } },
18
+ };
19
+ const schema = (name, properties, required = Object.keys(properties)) => ({
20
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
21
+ $id: `https://openplanr.dev/schemas/v1.9.0/${name}.schema.json`,
22
+ 'x-openplanr-contract': { id: name, version: '1.9.0' },
23
+ type: 'object', additionalProperties: false, properties, required,
24
+ });
25
+
26
+ export const DESIGN_WORKSPACE_REVISION_SCHEMA = schema('design-workspace-revision', {
27
+ id, epoch, reviewOf: digest, createdAt: { type: 'string', format: 'date-time' }, ...cipherProperties, signature,
28
+ });
29
+ export const DESIGN_WORKSPACE_EVENT_SCHEMA = schema('design-workspace-event', {
30
+ id, revisionId: id, reviewOf: digest, epoch, ...cipherProperties, publicKey, signature,
31
+ });
32
+ const sealed = { type: 'object', additionalProperties: false, required: ['iv', 'ciphertext'], properties: cipherProperties };
33
+ export const DESIGN_WORKSPACE_CREATE_SCHEMA = schema('design-workspace-create', {
34
+ schemaVersion: { const: DESIGN_WORKSPACE_VERSION }, id, ownerPublicKey: publicKey,
35
+ ownerAuthHash: digest, reviewerAuthHash: digest, epoch: { const: 1 }, keyring: sealed,
36
+ revision: DESIGN_WORKSPACE_REVISION_SCHEMA, operationId: id, signature,
37
+ });
38
+ export const DESIGN_WORKSPACE_SCHEMA = schema('design-review-workspace', {
39
+ schemaVersion: { const: DESIGN_WORKSPACE_VERSION }, id, version: epoch, epoch,
40
+ currentRevision: id, commentsPaused: { type: 'boolean' }, ownerPublicKey: publicKey, keyring: sealed,
41
+ });
42
+
43
+ // An explicit presentation-only model. Authored paths, source provenance, and
44
+ // design-system references are deliberately not part of a published workspace.
45
+ const designProperties = structuredClone(DESIGN_DOCUMENT_SCHEMA.properties);
46
+ for (const key of ['kind', 'schemaVersion', 'brief', 'assets', 'designSystem']) delete designProperties[key];
47
+ delete designProperties.screens.items.properties.source;
48
+ designProperties.screens.items.required = ['id', 'title'];
49
+ delete designProperties.variants.items.properties.sources;
50
+ export const DESIGN_REVIEW_BUNDLE_SCHEMA = schema('design-review-bundle', {
51
+ kind: { const: 'openplanr-design-review-bundle' }, schemaVersion: { const: DESIGN_WORKSPACE_VERSION },
52
+ design: { type: 'object', additionalProperties: false, properties: designProperties, required: ['id', 'title', 'frames', 'screens', 'screenOrder', 'variants', 'selectedVariant', 'defaultView'] },
53
+ envelope: { type: 'object', required: ['schemaVersion', 'artifacts', 'viewer'] },
54
+ entries: { type: 'array', minItems: 1, maxItems: 256, items: { type: 'object', additionalProperties: false, required: ['artifactId', 'screenId', 'variantId', 'frameId'], properties: Object.fromEntries(['artifactId', 'screenId', 'variantId', 'frameId'].map((key) => [key, { type: 'string', minLength: 1, maxLength: 128 }])) } },
55
+ state: {
56
+ type: ['object', 'null'], additionalProperties: false,
57
+ properties: {
58
+ positions: {
59
+ type: 'object', additionalProperties: {
60
+ type: 'object', additionalProperties: false, required: ['x', 'y'],
61
+ properties: { x: { type: 'number', minimum: -1e7, maximum: 1e7 }, y: { type: 'number', minimum: -1e7, maximum: 1e7 } },
62
+ },
63
+ },
64
+ },
65
+ },
66
+ revision: { type: 'string', minLength: 1, maxLength: 128 },
67
+ verification: { type: ['object', 'null'], additionalProperties: false, properties: { status: { enum: ['verified', 'unverified', 'failed', 'pending'] } } },
68
+ }, ['kind', 'schemaVersion', 'design', 'envelope', 'entries', 'revision']);
69
+ DESIGN_REVIEW_BUNDLE_SCHEMA.$defs = structuredClone(DESIGN_DOCUMENT_SCHEMA.$defs);
70
+
71
+ export function assertWorkspaceContract(value, contract) {
72
+ const errors = validateJson(value, contract);
73
+ if (errors.length) throw new TypeError(`Invalid ${contract['x-openplanr-contract'].id}: ${errors.slice(0, 5).map(({ path, detail }) => `${path}: ${detail}`).join('; ')}`);
74
+ return value;
75
+ }
76
+
77
+ export const DESIGN_WORKSPACE_SCHEMAS = Object.freeze({
78
+ 'design-review-workspace': DESIGN_WORKSPACE_SCHEMA,
79
+ 'design-workspace-create': DESIGN_WORKSPACE_CREATE_SCHEMA,
80
+ 'design-workspace-revision': DESIGN_WORKSPACE_REVISION_SCHEMA,
81
+ 'design-workspace-event': DESIGN_WORKSPACE_EVENT_SCHEMA,
82
+ 'design-review-bundle': DESIGN_REVIEW_BUNDLE_SCHEMA,
83
+ });