chainlesschain 0.166.22 → 0.166.25

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 (298) hide show
  1. package/README.md +46 -3
  2. package/package.json +4 -3
  3. package/src/assets/web-panel/assets/{AIOps-oJ7USzMC.js → AIOps-RaxL_QQD.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-BlgnZe_C.js → ActionButton-DD3ieFO-.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-D2rRbTLu.js → Analytics-CATDJukS.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-FwS3f0B2.js → AppLayout-BHGsnRDS.js} +5 -5
  7. package/src/assets/web-panel/assets/{Artifacts-iF-_08Hi.js → Artifacts-BL6NunjN.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-D24p0zQw.js → Audit-D0nEWfbA.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-Cg3mRVi9.js → BackgroundAgents-BAP1MUol.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-EOqht3H-.js → Backup-R4y2OeSi.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-9XWYq2hj.js → BaseInput-ByQZ2z6S.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-Dq5yardA.js → Chat-32uV--xF.js} +4 -4
  13. package/src/assets/web-panel/assets/ChatBubbleRenderer-t1enanwz.js +1 -0
  14. package/src/assets/web-panel/assets/{Checkbox-CuyCBoBf.js → Checkbox-D1CB-7bq.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-DjWtYHNe.js → Codegen-BPx3dQ2q.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-CrVr_iuG.js → Col-DkPTQ2Gl.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-C6QxpfGc.js → Community-ZriaxRlr.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-B-v5r6Pa.js → Compact-C_qJ0P7F.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-zNiLiFgD.js → Compliance-Bgoy-saS.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-D9K7lMOu.js → Cowork-B5i9y6XK.js} +2 -2
  21. package/src/assets/web-panel/assets/{Cron-DAjO36z4.js → Cron-D7vBJ5-J.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-Bxqn0aqB.js → Crosschain-D4kvoGI_.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-DfRmLUe-.js → DID-BLOeBd-r.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-Cz8KF3fr.js → Dashboard-mecJaonC.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-C4oVfkP0.js → Dropdown-GPKwaFer.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-ivyZKN8k.js → EmailListRenderer-BML9m7Dd.js} +1 -1
  27. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DoxY1CPW.js → FamilyGuardDashboard-DN5bAtJC.js} +1 -1
  28. package/src/assets/web-panel/assets/{Federation-C93gZxnb.js → Federation-DmD6Gecd.js} +1 -1
  29. package/src/assets/web-panel/assets/{FormItemContext-D_lEjYJE.js → FormItemContext-6wwplN_K.js} +1 -1
  30. package/src/assets/web-panel/assets/{GenericCardRenderer-BNFN9YjN.js → GenericCardRenderer-DUhpLkDL.js} +1 -1
  31. package/src/assets/web-panel/assets/{Git-mUu2HcLI.js → Git-eJfyXkwf.js} +2 -2
  32. package/src/assets/web-panel/assets/{Governance-CNuosrge.js → Governance-swAUW59x.js} +1 -1
  33. package/src/assets/web-panel/assets/{Inference-DwY5pbCB.js → Inference-CbdwJPDJ.js} +1 -1
  34. package/src/assets/web-panel/assets/{KnowledgeGraph-aRUxhACD.js → KnowledgeGraph-UuYpg1nm.js} +1 -1
  35. package/src/assets/web-panel/assets/{Logs-DFfsWYy_.js → Logs-CS0G057y.js} +2 -2
  36. package/src/assets/web-panel/assets/MarkdownRenderer-BxIIB4k3.js +1 -0
  37. package/src/assets/web-panel/assets/{Marketplace-COI-ciM-.js → Marketplace-CZRjuvvI.js} +1 -1
  38. package/src/assets/web-panel/assets/{McpTools-BJJwaIpe.js → McpTools-BOJ9A_Rf.js} +3 -3
  39. package/src/assets/web-panel/assets/{Memory-CDO6SGDZ.js → Memory-BnkrR-Ok.js} +2 -2
  40. package/src/assets/web-panel/assets/{MobileBridge-BlZ5tFf4.js → MobileBridge-Do4mPi13.js} +1 -1
  41. package/src/assets/web-panel/assets/{MobileProjects-DuoxbgWz.js → MobileProjects-2JxWa6-p.js} +1 -1
  42. package/src/assets/web-panel/assets/{Mtc-6ec9j70b.js → Mtc-CS_mnpGd.js} +2 -2
  43. package/src/assets/web-panel/assets/{MtcAudit-BuL7HkC7.js → MtcAudit-DZ4J_351.js} +5 -5
  44. package/src/assets/web-panel/assets/{Multisig-CJxR85lk.js → Multisig-Jh74zKXu.js} +3 -3
  45. package/src/assets/web-panel/assets/{NLProgramming-B71O1S4l.js → NLProgramming-_4n2BfnS.js} +1 -1
  46. package/src/assets/web-panel/assets/{Notes-Bsw5zbpV.js → Notes-CtENcKHv.js} +3 -3
  47. package/src/assets/web-panel/assets/{NotificationSettings-BnAhXuK_.js → NotificationSettings-dgDCvpK9.js} +1 -1
  48. package/src/assets/web-panel/assets/{OrderTableRenderer-BJ0R5GGz.js → OrderTableRenderer-D5VxCrmG.js} +1 -1
  49. package/src/assets/web-panel/assets/{Organization-B7wwNxoP.js → Organization-CpIF8Xkd.js} +2 -2
  50. package/src/assets/web-panel/assets/{Overflow-CfAGr0gM.js → Overflow-aHnBZaez.js} +1 -1
  51. package/src/assets/web-panel/assets/{P2P-KhMg22Fz.js → P2P-8ppzog2V.js} +2 -2
  52. package/src/assets/web-panel/assets/{PdhVaultBrowser-NdAXI9ft.js → PdhVaultBrowser-D3p1BXkp.js} +3 -3
  53. package/src/assets/web-panel/assets/{Permissions-CIYjqyT7.js → Permissions-D7vflD5q.js} +4 -4
  54. package/src/assets/web-panel/assets/{PersonalDataHub-D2ht3P_R.js → PersonalDataHub-D2hY-Ek2.js} +4 -4
  55. package/src/assets/web-panel/assets/{Pipeline-i6flZW1m.js → Pipeline-qK2VqhJC.js} +1 -1
  56. package/src/assets/web-panel/assets/{Privacy-DE0lhYVc.js → Privacy-DHJr4uu0.js} +1 -1
  57. package/src/assets/web-panel/assets/{ProjectInit-BL3YbyxS.js → ProjectInit-DMBS6trm.js} +2 -2
  58. package/src/assets/web-panel/assets/{ProjectSettings-CEtdg7ni.js → ProjectSettings-D3Ng74BT.js} +2 -2
  59. package/src/assets/web-panel/assets/{Projects-CvtU5peJ.js → Projects-BfJFZiIW.js} +1 -1
  60. package/src/assets/web-panel/assets/{Providers-DKt_Cg-j.js → Providers-DlNA95G0.js} +1 -1
  61. package/src/assets/web-panel/assets/{QrScannerModal-DA61jNSx.js → QrScannerModal-CMOIYxIm.js} +1 -1
  62. package/src/assets/web-panel/assets/{QuickAsk-fS9ryUmq.js → QuickAsk-D6MyGp5I.js} +1 -1
  63. package/src/assets/web-panel/assets/{Recommend-CR9dZU5Y.js → Recommend-W6WcShtf.js} +1 -1
  64. package/src/assets/web-panel/assets/{RemoteSession-BV0BR2Dz.js → RemoteSession-Dm_MjlV_.js} +2 -2
  65. package/src/assets/web-panel/assets/{Reputation-BIeGUvYD.js → Reputation-Ctvij6eX.js} +1 -1
  66. package/src/assets/web-panel/assets/{Row-DHDT1aro.js → Row-DivbeDE-.js} +1 -1
  67. package/src/assets/web-panel/assets/{RssFeed-Cq6YKb1h.js → RssFeed-D4famoAw.js} +3 -3
  68. package/src/assets/web-panel/assets/{Search-DEF6vsy6.js → Search-6gOAh3zG.js} +1 -1
  69. package/src/assets/web-panel/assets/{Security-CHtYiKY9.js → Security-DApb9kK8.js} +4 -4
  70. package/src/assets/web-panel/assets/{Services-u16lvBJN.js → Services-B8OomyE2.js} +2 -2
  71. package/src/assets/web-panel/assets/{Skeleton-CGbizyDj.js → Skeleton-BTJ2g2E3.js} +1 -1
  72. package/src/assets/web-panel/assets/{Skills-BZMQcAa7.js → Skills-NIRr4DD1.js} +1 -1
  73. package/src/assets/web-panel/assets/{Sla-Bm-CycVi.js → Sla-BQHP_6px.js} +1 -1
  74. package/src/assets/web-panel/assets/{SpeechSettings-BudpA5kr.js → SpeechSettings-BVQTDSVS.js} +1 -1
  75. package/src/assets/web-panel/assets/{SyncSettings-B8q1C1eC.js → SyncSettings-BOD4Mar6.js} +2 -2
  76. package/src/assets/web-panel/assets/{Tasks-SU1pBWc-.js → Tasks-Ciu7H2-y.js} +1 -1
  77. package/src/assets/web-panel/assets/{Templates-CyOfJzmt.js → Templates-CtlwavRU.js} +1 -1
  78. package/src/assets/web-panel/assets/{Tenant-xqWSm2GP.js → Tenant-QLWYJdL6.js} +1 -1
  79. package/src/assets/web-panel/assets/{Terminal-D1Ttgjsi.js → Terminal-B3q10mjm.js} +2 -2
  80. package/src/assets/web-panel/assets/{TimelineRenderer-Da2lYs5D.js → TimelineRenderer-CqltBA_8.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tokens-B34-SduO.js → Tokens-CJOKrj4y.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trigger-C8zyYm4R.js → Trigger-CPMGgfdM.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trust-D1Pvqems.js → Trust-DiJms7Bl.js} +1 -1
  84. package/src/assets/web-panel/assets/{UkeySign-Do3VVnAy.js → UkeySign-rakR8eel.js} +1 -1
  85. package/src/assets/web-panel/assets/{VideoEditing-Dz7egVIA.js → VideoEditing-DAWZUM5o.js} +1 -1
  86. package/src/assets/web-panel/assets/{Wallet-Dcuw-OxR.js → Wallet-DqUPnl7K.js} +3 -3
  87. package/src/assets/web-panel/assets/{WebAuthn-DPlw-QsB.js → WebAuthn-BnVUwvMm.js} +3 -3
  88. package/src/assets/web-panel/assets/{WorkflowEditor-h4OsnU5q.js → WorkflowEditor-B1CAwxgs.js} +1 -1
  89. package/src/assets/web-panel/assets/{chat-eO9wEwrW.js → chat-k2-0Jzfy.js} +1 -1
  90. package/src/assets/web-panel/assets/{colors-34lSmOXw.js → colors-BAu8xBmW.js} +1 -1
  91. package/src/assets/web-panel/assets/{compact-item-CK4kEWJ4.js → compact-item-DMlqcdfI.js} +1 -1
  92. package/src/assets/web-panel/assets/{createContext-E0A57xed.js → createContext-BU9kfiSw.js} +1 -1
  93. package/src/assets/web-panel/assets/devWarning-DuGrUMAS.js +1 -0
  94. package/src/assets/web-panel/assets/{hasIn-BD9ZMGAl.js → hasIn-2vacgdcl.js} +1 -1
  95. package/src/assets/web-panel/assets/{index--N0u6kTG.js → index-B-C-Ruft.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-DzXjP44T.js → index-B7wDjYUd.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-CZBaqe3d.js → index-BMq0frKK.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-DrOalGut.js → index-BUX4W-2v.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-CT1_eRL-.js → index-BZz2eB33.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DrsDA_md.js → index-BblNQlaA.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DP-UZAQN.js → index-BdfKoqsK.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-DiT_REby.js → index-Bf8YofPE.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-Cx3Jn1r0.js → index-Bn8tARil.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-B0rkHxKK.js → index-Bpe2CJd-.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-B_G_ElKO.js → index-BxctzdYQ.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-MIg5Z8qe.js → index-C24NoPpy.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BmNbU2Z6.js → index-C5C4kSi8.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BsGmo6v1.js → index-C6ICn9Y6.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CsrKJJcX.js → index-C8ldqZi6.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-BbX_Dted.js → index-C9WsM29I.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Ch175NUw.js → index-CONPVaxw.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DONOUtlz.js → index-CPyYXKFB.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-DFLE2qO9.js → index-CSvSf9px.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-o8pYehRq.js → index-CXmpR6N3.js} +3 -3
  115. package/src/assets/web-panel/assets/{index-Cz3unNfL.js → index-Chybe7Ge.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-yAGBu2E0.js → index-CyXmP3PW.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CuSau5ya.js → index-DCusBOqR.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DcE1BspQ.js → index-DH01oIaj.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DrSAAuJj.js → index-DHg3LMNP.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CZkFMeWL.js → index-DWLTSIka.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-DvKcroix.js → index-DaUGdvtU.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-Bjs90Eh9.js → index-DcA-tEQd.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-DGRxt5wj.js → index-DfWvcu4p.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-DCn-ECvK.js → index-DmZNnZz7.js} +1 -1
  125. package/src/assets/web-panel/assets/index-DvFfMAux.js +1 -0
  126. package/src/assets/web-panel/assets/{index-8qMA1DWQ.js → index-JsyGqKmD.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-D4bB_x_v.js → index-TtrpHmYx.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-Brqc9Emx.js → index-Ygh0wmKz.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-Da5fmOHB.js → index-dIYqw3f0.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-DpfisY1g.js → index-hDHHJYno.js} +1 -1
  131. package/src/assets/web-panel/assets/index-n6p-1A77.js +1 -0
  132. package/src/assets/web-panel/assets/{index-DeXNCyQJ.js → index-oElehY4F.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-DcbgVLOH.js → index-z4_YwZDW.js} +1 -1
  134. package/src/assets/web-panel/assets/{initDefaultProps-DMTkAomF.js → initDefaultProps-B9OXWu2e.js} +1 -1
  135. package/src/assets/web-panel/assets/{motion-Cnti1F5g.js → motion-IQ47MCDQ.js} +1 -1
  136. package/src/assets/web-panel/assets/{move-CGxmHUga.js → move-CLCU4kjV.js} +1 -1
  137. package/src/assets/web-panel/assets/{mtc-parser-CuwwLoq7.js → mtc-parser-CXnVlSPq.js} +1 -1
  138. package/src/assets/web-panel/assets/{omit-BpdlTkPM.js → omit-BJjLXB0f.js} +1 -1
  139. package/src/assets/web-panel/assets/{pickAttrs-D7nWrThp.js → pickAttrs-BHdtvdy6.js} +1 -1
  140. package/src/assets/web-panel/assets/{placementArrow-Bhx0TV8F.js → placementArrow-oq8X_Bwc.js} +1 -1
  141. package/src/assets/web-panel/assets/{responsiveObserve-CZ1KesZh.js → responsiveObserve-DTD02LAO.js} +1 -1
  142. package/src/assets/web-panel/assets/{slide-CnldF8J6.js → slide-DbEeq8to.js} +1 -1
  143. package/src/assets/web-panel/assets/{statusUtils-CZfo_GOA.js → statusUtils-Do2fy1CJ.js} +1 -1
  144. package/src/assets/web-panel/assets/{styleChecker-B2QCcAv5.js → styleChecker-CFWD63T-.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFlexGapSupport-DzzjIS4J.js → useFlexGapSupport-BeozAWOo.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFs-B_atg9M0.js → useFs-0-rIgnBL.js} +1 -1
  147. package/src/assets/web-panel/assets/{usePersonalDataHub-DhZs3QYN.js → usePersonalDataHub-CeiNoI31.js} +1 -1
  148. package/src/assets/web-panel/assets/{vnode-DcePTYAm.js → vnode-Dj0ReRNg.js} +1 -1
  149. package/src/assets/web-panel/assets/{zoom-BYmlnjRk.js → zoom-DD7MC4Dy.js} +1 -1
  150. package/src/assets/web-panel/index.html +1 -1
  151. package/src/command-help-index.json +3 -3
  152. package/src/commands/agent.js +18 -1
  153. package/src/commands/evolution-benchmark.js +72 -0
  154. package/src/commands/evolution-knowledge.js +40 -1
  155. package/src/commands/evolution.js +2 -0
  156. package/src/commands/governed-skill-marketplace.js +142 -0
  157. package/src/commands/marketplace.js +4 -1
  158. package/src/commands/serve.js +21 -0
  159. package/src/commands/skill.js +3 -0
  160. package/src/data/changelog.json +39 -0
  161. package/src/gateways/ws/ws-agent-handler.js +59 -2
  162. package/src/gateways/ws/ws-server.js +2 -0
  163. package/src/generated/cc-agent-protocol.schema.json +3 -1
  164. package/src/harness/golden-transcript.js +1 -0
  165. package/src/harness/prompt-compressor.js +51 -5
  166. package/src/harness/provider-backed-compaction.js +28 -1
  167. package/src/harness/remote-session-registry.js +15 -3
  168. package/src/index.js +20 -2
  169. package/src/lazy-dispatch.js +6 -0
  170. package/src/lib/advisor-runtime.js +55 -2
  171. package/src/lib/app-server/cli-agent-kernel-adapter.js +4 -0
  172. package/src/lib/app-server/graph-runtime.js +32 -0
  173. package/src/lib/app-server/server.js +94 -1
  174. package/src/lib/app-server/websocket-transport.js +15 -0
  175. package/src/lib/autonomous-agent.js +63 -13
  176. package/src/lib/cowork/ab-comparator-cli.js +4 -3
  177. package/src/lib/cowork/debate-review-cli.js +4 -3
  178. package/src/lib/cowork/decision-kb-cli.js +5 -0
  179. package/src/lib/cowork-adapter.js +38 -16
  180. package/src/lib/evolution/agent-evolution-ingress.js +95 -15
  181. package/src/lib/evolution/agent-evolution-runtime-composition.js +82 -0
  182. package/src/lib/evolution/agent-evolution-session-lifecycle.js +46 -0
  183. package/src/lib/evolution/agent-model-projection.js +437 -0
  184. package/src/lib/evolution/bounded-descriptor-read.js +29 -0
  185. package/src/lib/evolution/controlled-skill-pilot-ledger-adapter.js +551 -0
  186. package/src/lib/evolution/controlled-skill-production-pilot.js +308 -18
  187. package/src/lib/evolution/evidence-backed-wiki-maintainer.js +32 -10
  188. package/src/lib/evolution/evidence-json-text.js +236 -0
  189. package/src/lib/evolution/evolution-artifact-ports.js +196 -21
  190. package/src/lib/evolution/evolution-deployment-loader.js +240 -2
  191. package/src/lib/evolution/evolution-eval-child-evidence-ledger-adapter.js +373 -0
  192. package/src/lib/evolution/evolution-eval-gate.js +14 -1
  193. package/src/lib/evolution/evolution-eval-process-supervisor-worker.mjs +14 -0
  194. package/src/lib/evolution/evolution-eval-process-supervisor.js +607 -0
  195. package/src/lib/evolution/evolution-evidence-artifact-adapter.js +14 -1
  196. package/src/lib/evolution/evolution-evidence-projector.js +271 -37
  197. package/src/lib/evolution/evolution-file-witness.js +153 -30
  198. package/src/lib/evolution/evolution-ledger-ports.js +1219 -66
  199. package/src/lib/evolution/evolution-ledger.js +66 -2
  200. package/src/lib/evolution/evolution-raw-crypto-shred.js +29 -15
  201. package/src/lib/evolution/evolution-raw-deletion-ledger-adapter.js +865 -0
  202. package/src/lib/evolution/evolution-release-train-domain-stages.js +769 -0
  203. package/src/lib/evolution/evolution-release-train-stage-output-ledger-adapter.js +333 -0
  204. package/src/lib/evolution/evolution-release-train.js +54 -6
  205. package/src/lib/evolution/evolution-workbench-batch-executor.js +101 -144
  206. package/src/lib/evolution/evolution-workbench-control-ports.js +203 -0
  207. package/src/lib/evolution/evolution-workbench-file-resources.js +403 -0
  208. package/src/lib/evolution/evolution-workbench-projection.js +134 -26
  209. package/src/lib/evolution/evolution-workbench-registry-source.js +482 -0
  210. package/src/lib/evolution/evolution-workbench-review-ledger-adapter.js +823 -0
  211. package/src/lib/evolution/evolution-workbench-review-protocol.js +157 -0
  212. package/src/lib/evolution/evolution-workbench-rollback-authorization.js +57 -0
  213. package/src/lib/evolution/evolution-workbench-rollback-ledger-adapter.js +1016 -0
  214. package/src/lib/evolution/evolution-workbench-runtime.js +133 -0
  215. package/src/lib/evolution/evolution-workbench-version-control.js +70 -36
  216. package/src/lib/evolution/evolvable-artifact-ledger-adapter.js +48 -0
  217. package/src/lib/evolution/governed-knowledge-candidate-rejection.js +343 -0
  218. package/src/lib/evolution/governed-knowledge-dependency-authority.js +227 -44
  219. package/src/lib/evolution/governed-knowledge-dependency-inventory.js +392 -0
  220. package/src/lib/evolution/governed-knowledge-dependency-ledger-executor.js +217 -82
  221. package/src/lib/evolution/governed-knowledge-quarantine-release.js +1013 -0
  222. package/src/lib/evolution/governed-knowledge-record.js +148 -0
  223. package/src/lib/evolution/governed-knowledge-revocation-host.js +59 -0
  224. package/src/lib/evolution/governed-knowledge-revocation-record.js +135 -0
  225. package/src/lib/evolution/governed-knowledge-skill-rollback.js +510 -0
  226. package/src/lib/evolution/governed-knowledge-sync.js +181 -95
  227. package/src/lib/evolution/governed-knowledge-wiki-tombstone.js +516 -0
  228. package/src/lib/evolution/governed-skill-marketplace-badge.js +208 -0
  229. package/src/lib/evolution/governed-skill-marketplace-candidate.js +330 -0
  230. package/src/lib/evolution/governed-skill-marketplace-cli-host.js +308 -0
  231. package/src/lib/evolution/governed-skill-marketplace-ledger-adapter.js +420 -0
  232. package/src/lib/evolution/governed-skill-marketplace.js +288 -5
  233. package/src/lib/evolution/governed-wiki-pruning-journal.js +302 -0
  234. package/src/lib/evolution/governed-wiki-pruning-ledger-adapter.js +459 -0
  235. package/src/lib/evolution/governed-wiki-pruning-maintenance.js +576 -0
  236. package/src/lib/evolution/governed-wiki-pruning-plan-authority.js +169 -0
  237. package/src/lib/evolution/governed-wiki-pruning-raw-shred.js +207 -0
  238. package/src/lib/evolution/governed-wiki-pruning-retrieval.js +587 -0
  239. package/src/lib/evolution/governed-wiki-pruning-runtime.js +153 -0
  240. package/src/lib/evolution/governed-wiki-pruning-skill-rollback.js +360 -0
  241. package/src/lib/evolution/governed-wiki-pruning.js +322 -143
  242. package/src/lib/evolution/independent-skill-revocation-source.js +231 -0
  243. package/src/lib/evolution/knowledge-wiki-source-admission.js +283 -0
  244. package/src/lib/evolution/knowledge-wiki-source-provenance.js +360 -0
  245. package/src/lib/evolution/progressive-canary-external-watchdog.js +578 -0
  246. package/src/lib/evolution/progressive-canary-traffic-worker.js +628 -0
  247. package/src/lib/evolution/progressive-canary-watchdog-file-store.js +285 -0
  248. package/src/lib/evolution/progressive-canary-watchdog-node-pki.js +265 -0
  249. package/src/lib/evolution/skill-candidate-registry.js +43 -3
  250. package/src/lib/evolution/skill-promotion-controller.js +25 -0
  251. package/src/lib/evolution/skill-promotion-review-ledger-adapter.js +100 -0
  252. package/src/lib/evolution/skill-registry-transition-ledger-adapter.js +131 -2
  253. package/src/lib/evolution/skill-release-registry.js +168 -4
  254. package/src/lib/evolution/skill-retrieval-revocation-authority.js +361 -0
  255. package/src/lib/evolution/skill-retrieval-revocation-ledger-adapter.js +346 -0
  256. package/src/lib/evolution/skill-revocation-propagation.js +467 -0
  257. package/src/lib/evolution/skill-target-matrix-eval.js +162 -11
  258. package/src/lib/evolution/skill-wiki-reconciliation.js +985 -0
  259. package/src/lib/evolution/skill-writer-inventory-manifest.js +8 -6
  260. package/src/lib/evolution/statistical-progressive-canary.js +165 -3
  261. package/src/lib/evolution/structured-memory-agent-control-plane.js +120 -0
  262. package/src/lib/evolution/structured-memory-authority-ledger-adapter.js +5 -1
  263. package/src/lib/evolution/structured-memory-promotion-receipt-writer.js +126 -0
  264. package/src/lib/evolution/wiki-informed-skill-proposer.js +127 -21
  265. package/src/lib/evolution/wiki-maintainer-ledger-adapter.js +822 -101
  266. package/src/lib/evolution/wiki-revision-protocol.js +120 -0
  267. package/src/lib/evolution/wiki-skill-proposal-ledger-adapter.js +307 -0
  268. package/src/lib/evolution/wiki-target-tombstone-revision.js +109 -0
  269. package/src/lib/evolution/wikiskill-benchmark-cli-host.js +178 -0
  270. package/src/lib/evolution/wikiskill-benchmark-execution-host.js +702 -0
  271. package/src/lib/evolution/wikiskill-benchmark-ledger-adapter.js +613 -0
  272. package/src/lib/evolution/wikiskill-benchmark.js +80 -16
  273. package/src/lib/goal-assess.js +17 -10
  274. package/src/lib/interactive-planner.js +9 -1
  275. package/src/lib/iteration-budget.js +16 -2
  276. package/src/lib/micro-compact.js +4 -1
  277. package/src/lib/model-failure-policy.js +21 -0
  278. package/src/lib/process-execution-broker/index.js +1 -0
  279. package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
  280. package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
  281. package/src/lib/process-execution-broker/windows-sandbox.cs +33 -15
  282. package/src/lib/read-file-loop-guard.js +113 -0
  283. package/src/lib/read-file-page.js +191 -0
  284. package/src/lib/runnable-provider.js +2 -1
  285. package/src/lib/skill-retrieval-router.js +22 -1
  286. package/src/repl/agent-repl.js +133 -34
  287. package/src/runtime/agent-core.js +196 -74
  288. package/src/runtime/agent-runtime.js +43 -0
  289. package/src/runtime/coding-agent-contract-shared.cjs +7 -1
  290. package/src/runtime/fallback-model.js +143 -62
  291. package/src/runtime/headless-runner.js +54 -10
  292. package/src/runtime/headless-stream.js +50 -6
  293. package/src/runtime/runtime-factory.js +41 -2
  294. package/src/assets/web-panel/assets/ChatBubbleRenderer-Ds3pA-ET.js +0 -1
  295. package/src/assets/web-panel/assets/MarkdownRenderer-DqTx7_u1.js +0 -1
  296. package/src/assets/web-panel/assets/devWarning-CF3xafX2.js +0 -1
  297. package/src/assets/web-panel/assets/index-C907rPwd.js +0 -1
  298. package/src/assets/web-panel/assets/index-wueRSK2d.js +0 -1
@@ -0,0 +1,510 @@
1
+ import { types } from "node:util";
2
+ import { captureSkillReleaseRegistryReader } from "./skill-release-registry.js";
3
+ import { captureSkillReleaseOperationReader } from "./evolution-ledger-ports.js";
4
+ import { captureSkillRollbackProvider } from "./skill-promotion-controller.js";
5
+ import { captureWikiRevisionReader } from "./wiki-maintainer-ledger-adapter.js";
6
+ import {
7
+ verifySkillMutationRequest,
8
+ digestSkillMutationTransitionSubject,
9
+ } from "./skill-mutation-authority.js";
10
+ import {
11
+ createGovernedKnowledgeDependencyAuthority,
12
+ GOVERNED_KNOWLEDGE_DEPENDENCY_RESULT_SCHEMA,
13
+ digestGovernedKnowledgeDependencyResult,
14
+ } from "./governed-knowledge-dependency-authority.js";
15
+ // Reuse the bounded plain-data snapshot/hash, not pruning plans or permissions.
16
+ import {
17
+ capturePruningData as captureData,
18
+ pruningDigest as digest,
19
+ pruningCanonical as canonical,
20
+ } from "./governed-wiki-pruning-journal.js";
21
+
22
+ const ID = /^[A-Za-z0-9][A-Za-z0-9._:@/-]{0,255}$/u;
23
+ const VERIFICATION_SCHEMA =
24
+ "chainlesschain.knowledge-skill-rollback-verification/v1";
25
+ const QUARANTINE_VERIFICATION_SCHEMA =
26
+ "chainlesschain.knowledge-skill-quarantine-verification/v1";
27
+ const ROLLBACK = Object.freeze({
28
+ disposition: "rollback-active",
29
+ verificationSchema: VERIFICATION_SCHEMA,
30
+ });
31
+ const QUARANTINE = Object.freeze({
32
+ disposition: "quarantine",
33
+ verificationSchema: QUARANTINE_VERIFICATION_SCHEMA,
34
+ });
35
+
36
+ function fail(message) {
37
+ throw new Error(`knowledge Skill rollback: ${message}`);
38
+ }
39
+
40
+ export function governedKnowledgeSourceRef({ tenantId, knowledgeId }) {
41
+ if (
42
+ typeof tenantId !== "string" ||
43
+ !ID.test(tenantId) ||
44
+ typeof knowledgeId !== "string" ||
45
+ !ID.test(knowledgeId)
46
+ )
47
+ throw new TypeError("knowledge source identity is invalid");
48
+ return `knowledge://${encodeURIComponent(tenantId)}/${encodeURIComponent(knowledgeId)}`;
49
+ }
50
+
51
+ function bindReader(registry, transactionLedger, tenantId, wikiAdapter) {
52
+ const reader = captureSkillReleaseRegistryReader(registry);
53
+ if (
54
+ reader.tenantId !== tenantId ||
55
+ !reader.matchesTransactionLedger(transactionLedger)
56
+ )
57
+ throw new TypeError(
58
+ "knowledge rollback registry/ledger tenant binding differs",
59
+ );
60
+ const wiki =
61
+ wikiAdapter == null ? null : captureWikiRevisionReader(wikiAdapter);
62
+ if (
63
+ wiki &&
64
+ (wiki.descriptor.tenantId !== tenantId ||
65
+ !captureSkillReleaseOperationReader(transactionLedger).matchesWikiAdapter(
66
+ wikiAdapter,
67
+ ))
68
+ )
69
+ throw new TypeError("Knowledge Wiki lineage tenant differs");
70
+ return Object.freeze({
71
+ registry: reader,
72
+ operations: captureSkillReleaseOperationReader(transactionLedger),
73
+ wiki,
74
+ });
75
+ }
76
+
77
+ function wikiLineage(reader, request, release) {
78
+ if (release.candidate.derivationMode !== "wiki") return null;
79
+ if (!reader.wiki)
80
+ fail("Wiki-derived release requires an authenticated Wiki reader");
81
+ const revision = reader.wiki.readKnowledgeProvenance({
82
+ tenantId: request.tenantId,
83
+ revisionId: release.candidate.wikiRevision,
84
+ knowledgeId: request.knowledgeId,
85
+ contentDigest: request.contentDigest,
86
+ });
87
+ const context = reader.operations.currentContext();
88
+ if (
89
+ ["epoch", "ledgerId", "identityDigest"].some(
90
+ (key) => revision.checkpoint[key] !== context.checkpoint[key],
91
+ )
92
+ )
93
+ fail("Wiki provenance belongs to another release ledger");
94
+ const origin = reader.operations.resolveReleaseOrigin({
95
+ tenantId: request.tenantId,
96
+ skillName: release.skillName,
97
+ releaseDigest: release.releaseDigest,
98
+ context,
99
+ }).result;
100
+ if (
101
+ !origin ||
102
+ origin.projection.status !== "committed" ||
103
+ origin.intent.mutationRequest.requestDigest !==
104
+ release.mutationRequestDigest ||
105
+ revision.checkpoint.sequence >= origin.preparationCheckpoint.sequence
106
+ )
107
+ fail("Wiki provenance must precede the original release preparation");
108
+ return captureData({
109
+ wikiRevision: revision.revisionId,
110
+ stateDigest: revision.stateDigest,
111
+ checkpoint: revision.checkpoint,
112
+ releaseOriginTransactionId: origin.intent.transactionId,
113
+ releaseOriginReceiptDigest: origin.projection.receiptDigest,
114
+ affectedPatternIds: revision.affectedPatternIds,
115
+ unsafePatternIds: revision.unsafePatternIds,
116
+ });
117
+ }
118
+
119
+ function sameLedger(provider, verifier) {
120
+ const left = provider.operations.currentContext().checkpoint;
121
+ const right = verifier.operations.currentContext().checkpoint;
122
+ if (
123
+ ["epoch", "ledgerId", "identityDigest"].some(
124
+ (key) => left[key] !== right[key],
125
+ )
126
+ )
127
+ fail("independent readers do not authenticate the same ledger");
128
+ }
129
+
130
+ function releasesFor(reader, request, configuration) {
131
+ if (
132
+ request.dependency.kind !== "active-skill" ||
133
+ request.dependency.disposition !== configuration.disposition
134
+ )
135
+ fail(
136
+ `this provider requires an active-skill / ${configuration.disposition} dependency`,
137
+ );
138
+ // This effect accepts an immutable release identity, never an ambiguous content
139
+ // digest or a caller-supplied Skill name. Other dependency kinds need their own effect.
140
+ const from = reader.registry.readRelease(request.dependency.digest);
141
+ if (
142
+ !from ||
143
+ from.tenantId !== request.tenantId ||
144
+ from.releaseDigest !== request.dependency.digest
145
+ )
146
+ fail("dependent release is missing or substituted");
147
+ const sourceRef = governedKnowledgeSourceRef(request);
148
+ const wiki = wikiLineage(reader, request, from);
149
+ if (
150
+ !from.candidate.sourceEvidenceRefs.some(
151
+ (entry) =>
152
+ entry.ref === sourceRef && entry.digest === request.contentDigest,
153
+ ) &&
154
+ !wiki?.affectedPatternIds.length
155
+ )
156
+ fail("dependent candidate has no exact Knowledge source lineage");
157
+ return { from, sourceRef, wiki };
158
+ }
159
+
160
+ function validateTarget(reader, request, from, target, sourceRef) {
161
+ if (
162
+ !target ||
163
+ target.tenantId !== request.tenantId ||
164
+ target.skillName !== from.skillName ||
165
+ target.releaseDigest === from.releaseDigest
166
+ )
167
+ fail("no distinct same-tenant last-known-good release");
168
+ if (
169
+ target.candidate.sourceEvidenceRefs.some(
170
+ (entry) =>
171
+ entry.ref === sourceRef || entry.digest === request.contentDigest,
172
+ )
173
+ )
174
+ fail("last-known-good still depends on revoked Knowledge");
175
+ const wiki = wikiLineage(reader, request, target);
176
+ if (wiki?.unsafePatternIds.length)
177
+ fail("last-known-good Wiki revision still depends on revoked Knowledge");
178
+ return wiki;
179
+ }
180
+
181
+ function resolve(reader, request, from) {
182
+ return reader.operations.resolveOperation({
183
+ tenantId: request.tenantId,
184
+ skillName: from.skillName,
185
+ operationId: request.operationId,
186
+ context: reader.operations.currentContext(),
187
+ }).result;
188
+ }
189
+
190
+ function committedProof(reader, request, configuration) {
191
+ const { from, sourceRef, wiki } = releasesFor(reader, request, configuration);
192
+ const result = resolve(reader, request, from);
193
+ if (!result) return null;
194
+ const { intent, previous, projection, finalizationEvidence } = result;
195
+ if (projection.status !== "committed")
196
+ fail("release transaction is pending; reopen the registry to recover");
197
+ const target = reader.registry.readRelease(intent.targetReleaseDigest);
198
+ const targetWiki = validateTarget(reader, request, from, target, sourceRef);
199
+ if (
200
+ intent.operation !== "rollback" ||
201
+ intent.operationId !== request.operationId ||
202
+ intent.skillName !== from.skillName ||
203
+ previous.activeReleaseDigest !== from.releaseDigest ||
204
+ intent.targetReleaseDigest !== previous.lastKnownGoodReleaseDigest ||
205
+ intent.expectedParentDigest !== from.contentDigest ||
206
+ intent.dependencyLockDigest !== target.dependencyLockDigest
207
+ )
208
+ fail("transaction differs from the exact dependent release rollback");
209
+ const active = reader.registry.readActive(from.skillName);
210
+ if (
211
+ projection.current !== true ||
212
+ !active ||
213
+ active.release.releaseDigest !== target.releaseDigest ||
214
+ active.state.transactionId !== intent.transactionId ||
215
+ active.state.stateDigest !== projection.stateDigest
216
+ )
217
+ fail("rollback is no longer the current active release");
218
+ if (
219
+ !finalizationEvidence ||
220
+ finalizationEvidence.eventDigest !== projection.headDigest
221
+ )
222
+ fail("authenticated finalization evidence is missing");
223
+ return captureData({
224
+ fromReleaseDigest: from.releaseDigest,
225
+ targetReleaseDigest: target.releaseDigest,
226
+ transactionId: intent.transactionId,
227
+ stateDigest: projection.stateDigest,
228
+ releaseReceiptDigest: projection.receiptDigest,
229
+ authorityReceiptDigest: intent.authorityReceiptDigest,
230
+ intentDigest: intent.intentDigest,
231
+ epoch: projection.epoch,
232
+ ledgerId: projection.ledgerId,
233
+ sequence: projection.sequence,
234
+ finalizationEvidence,
235
+ ...(wiki || targetWiki
236
+ ? { wikiLineage: { from: wiki, target: targetWiki } }
237
+ : {}),
238
+ });
239
+ }
240
+
241
+ function authorizationData(value) {
242
+ if (!value || typeof value !== "object" || types.isProxy(value))
243
+ fail("rollback authorization must be own data");
244
+ const fields = Object.getOwnPropertyDescriptors(value);
245
+ if (
246
+ Reflect.ownKeys(fields).length !== 2 ||
247
+ !fields.request ||
248
+ !fields.capability ||
249
+ [fields.request, fields.capability].some(
250
+ (field) => !Object.hasOwn(field, "value") || !field.enumerable,
251
+ )
252
+ )
253
+ fail("rollback authorization requires exact own request/capability fields");
254
+ return {
255
+ request: verifySkillMutationRequest(fields.request.value),
256
+ capability: fields.capability.value,
257
+ };
258
+ }
259
+
260
+ // Real active-release effect with direct or historically authenticated Wiki
261
+ // provenance. Candidate rejection and quarantine require separate effects.
262
+ function createSkillDispositionAuthority(options = {}, configuration) {
263
+ const {
264
+ tenantId,
265
+ deviceId,
266
+ releaseRegistry,
267
+ transactionLedger,
268
+ rollbackProvider,
269
+ authorizationProvider,
270
+ verifierReleaseRegistry,
271
+ verifierTransactionLedger,
272
+ wikiLedgerAdapter = null,
273
+ verifierWikiLedgerAdapter = null,
274
+ providerDescriptor,
275
+ verifierDescriptor,
276
+ } = options;
277
+ if (
278
+ releaseRegistry === verifierReleaseRegistry ||
279
+ transactionLedger === verifierTransactionLedger
280
+ )
281
+ throw new TypeError(
282
+ "knowledge rollback verifier must use independent readers",
283
+ );
284
+ if (
285
+ (wikiLedgerAdapter === null) !== (verifierWikiLedgerAdapter === null) ||
286
+ (wikiLedgerAdapter !== null &&
287
+ wikiLedgerAdapter === verifierWikiLedgerAdapter)
288
+ )
289
+ throw new TypeError("Wiki provenance requires independent paired readers");
290
+ const providerReader = bindReader(
291
+ releaseRegistry,
292
+ transactionLedger,
293
+ tenantId,
294
+ wikiLedgerAdapter,
295
+ );
296
+ const verifierReader = bindReader(
297
+ verifierReleaseRegistry,
298
+ verifierTransactionLedger,
299
+ tenantId,
300
+ verifierWikiLedgerAdapter,
301
+ );
302
+ if (
303
+ providerReader.wiki &&
304
+ canonical(providerReader.wiki.descriptor) !==
305
+ canonical(verifierReader.wiki.descriptor)
306
+ )
307
+ throw new TypeError("Wiki provenance reader scopes differ");
308
+ sameLedger(providerReader, verifierReader);
309
+ const rollback = captureSkillRollbackProvider(
310
+ rollbackProvider,
311
+ releaseRegistry,
312
+ );
313
+ if (rollback.tenantId !== tenantId)
314
+ throw new TypeError("rollback tenant differs");
315
+ if (
316
+ !authorizationProvider ||
317
+ typeof authorizationProvider !== "object" ||
318
+ types.isProxy(authorizationProvider)
319
+ )
320
+ throw new TypeError("a fixed rollback authorization provider is required");
321
+ const authorize = Object.getOwnPropertyDescriptor(
322
+ authorizationProvider,
323
+ "authorizeRollback",
324
+ )?.value;
325
+ if (typeof authorize !== "function" || types.isProxy(authorize))
326
+ throw new TypeError("a fixed rollback authorization provider is required");
327
+ const providerIdentity = captureData(providerDescriptor);
328
+ const verifierIdentity = captureData(verifierDescriptor);
329
+
330
+ async function apply(request) {
331
+ sameLedger(providerReader, verifierReader);
332
+ let proof = committedProof(providerReader, request, configuration);
333
+ if (!proof) {
334
+ const { from, sourceRef, wiki } = releasesFor(
335
+ providerReader,
336
+ request,
337
+ configuration,
338
+ );
339
+ const active = providerReader.registry.readActive(from.skillName);
340
+ if (!active || active.release.releaseDigest !== from.releaseDigest)
341
+ fail("dependent release is not currently active");
342
+ const target = providerReader.registry.readRelease(
343
+ active.state.lastKnownGoodReleaseDigest,
344
+ );
345
+ const targetWiki = validateTarget(
346
+ providerReader,
347
+ request,
348
+ from,
349
+ target,
350
+ sourceRef,
351
+ );
352
+ // Independently preflight before asking for a destructive capability.
353
+ const independent = verifierReader.registry.readActive(from.skillName);
354
+ if (canonical(independent) !== canonical(active))
355
+ fail("independent active state differs");
356
+ const independentSource = releasesFor(
357
+ verifierReader,
358
+ request,
359
+ configuration,
360
+ );
361
+ const independentTargetWiki = validateTarget(
362
+ verifierReader,
363
+ request,
364
+ independentSource.from,
365
+ verifierReader.registry.readRelease(
366
+ active.state.lastKnownGoodReleaseDigest,
367
+ ),
368
+ sourceRef,
369
+ );
370
+ if (
371
+ canonical(wiki) !== canonical(independentSource.wiki) ||
372
+ canonical(targetWiki) !== canonical(independentTargetWiki)
373
+ )
374
+ fail("independent Wiki provenance differs");
375
+ const expected = captureData({
376
+ tenantId,
377
+ skillName: from.skillName,
378
+ operationId: request.operationId,
379
+ operation: "rollback",
380
+ targetScope: "active",
381
+ expectedTargetDigest: from.contentDigest,
382
+ expectedTargetRevision: active.state.revision,
383
+ targetReleaseDigest: target.releaseDigest,
384
+ transitionSubjectDigest: digestSkillMutationTransitionSubject({
385
+ tenantId,
386
+ skillName: from.skillName,
387
+ operation: "rollback",
388
+ candidateId: null,
389
+ rollbackTargetReleaseDigest: target.releaseDigest,
390
+ dependencyLockDigest: target.dependencyLockDigest,
391
+ expectedActiveContentDigest: from.contentDigest,
392
+ expectedActiveRevision: active.state.revision,
393
+ }),
394
+ });
395
+ const authorization = authorizationData(
396
+ await Reflect.apply(authorize, authorizationProvider, [expected]),
397
+ );
398
+ for (const key of [
399
+ "tenantId",
400
+ "skillName",
401
+ "operationId",
402
+ "operation",
403
+ "targetScope",
404
+ "expectedTargetDigest",
405
+ "expectedTargetRevision",
406
+ "transitionSubjectDigest",
407
+ ])
408
+ if (authorization.request[key] !== expected[key])
409
+ fail("authority authorized a different transition");
410
+ sameLedger(providerReader, verifierReader);
411
+ if (
412
+ committedProof(providerReader, request, configuration) !== null ||
413
+ canonical(providerReader.registry.readActive(from.skillName)) !==
414
+ canonical(active)
415
+ )
416
+ fail("release changed while authorization was pending");
417
+ await rollback.rollback({
418
+ authorization,
419
+ targetReleaseDigest: target.releaseDigest,
420
+ });
421
+ proof = committedProof(providerReader, request, configuration);
422
+ if (!proof) fail("rollback was not durably read back");
423
+ }
424
+ const core = {
425
+ schema: GOVERNED_KNOWLEDGE_DEPENDENCY_RESULT_SCHEMA,
426
+ tenantId,
427
+ deviceId,
428
+ operationId: request.operationId,
429
+ requestDigest: request.requestDigest,
430
+ knowledgeId: request.knowledgeId,
431
+ revocationReceiptDigest: request.revocationReceiptDigest,
432
+ dependencyKind: request.dependency.kind,
433
+ dependencyDigest: request.dependency.digest,
434
+ dependencyDisposition: request.dependency.disposition,
435
+ authorityId: providerIdentity.authorityId,
436
+ authorityRevision: providerIdentity.revision,
437
+ handlerArtifactDigest: providerIdentity.handlerArtifactDigest,
438
+ applied: true,
439
+ durable: true,
440
+ idempotent: true,
441
+ appliedAt: proof.finalizationEvidence.timestamp,
442
+ };
443
+ const { algorithm, keyId, value } = proof.finalizationEvidence.signature;
444
+ return captureData({
445
+ ...core,
446
+ resultDigest: digestGovernedKnowledgeDependencyResult(core),
447
+ attestation: { algorithm, keyId, value },
448
+ });
449
+ }
450
+
451
+ return createGovernedKnowledgeDependencyAuthority({
452
+ tenantId,
453
+ deviceId,
454
+ providerDescriptor: providerIdentity,
455
+ verifierDescriptor: verifierIdentity,
456
+ provider: Object.freeze({ apply }),
457
+ verifier: Object.freeze({
458
+ async verify({ request, result }) {
459
+ sameLedger(providerReader, verifierReader);
460
+ const proof = committedProof(verifierReader, request, configuration);
461
+ const providerProof = committedProof(
462
+ providerReader,
463
+ request,
464
+ configuration,
465
+ );
466
+ if (!proof || canonical(proof) !== canonical(providerProof))
467
+ fail("independent durable rollback proof differs");
468
+ const { algorithm, keyId, value } =
469
+ proof.finalizationEvidence.signature;
470
+ if (
471
+ result.appliedAt !== proof.finalizationEvidence.timestamp ||
472
+ canonical(result.attestation) !==
473
+ canonical({ algorithm, keyId, value })
474
+ )
475
+ fail("result differs from authenticated finalization");
476
+ return captureData({
477
+ authenticated: true,
478
+ durable: true,
479
+ tenantId,
480
+ deviceId,
481
+ operationId: request.operationId,
482
+ requestDigest: request.requestDigest,
483
+ resultDigest: result.resultDigest,
484
+ providerAuthorityId: providerIdentity.authorityId,
485
+ providerRevision: providerIdentity.revision,
486
+ verifierAuthorityId: verifierIdentity.authorityId,
487
+ verifierRevision: verifierIdentity.revision,
488
+ verificationReceiptDigest: digest(configuration.verificationSchema, {
489
+ tenantId,
490
+ deviceId,
491
+ requestDigest: request.requestDigest,
492
+ resultDigest: result.resultDigest,
493
+ proof,
494
+ verifierIdentity,
495
+ }),
496
+ });
497
+ },
498
+ }),
499
+ });
500
+ }
501
+
502
+ export function createGovernedKnowledgeSkillRollbackAuthority(options = {}) {
503
+ return createSkillDispositionAuthority(options, ROLLBACK);
504
+ }
505
+
506
+ // Active quarantine performs the same safety rollback, while the separately
507
+ // typed durable dependency fence prevents this exact release from reactivation.
508
+ export function createGovernedKnowledgeSkillQuarantineAuthority(options = {}) {
509
+ return createSkillDispositionAuthority(options, QUARANTINE);
510
+ }