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
@@ -268,6 +268,8 @@ export class RemoteSessionRegistry {
268
268
  // explicitly require this authority and trigger its lazy construction.
269
269
  this._membershipAuthority = options.membershipAuthority ?? null;
270
270
  this._membershipCoordinator = options.membershipCoordinator ?? null;
271
+ this._refreshCoordinatorOnEnumeration =
272
+ options.refreshCoordinatorOnEnumeration === true;
271
273
  this.sessions = new Map();
272
274
  this.tokens = new Map();
273
275
  this._transportBindings = new Map();
@@ -1175,11 +1177,21 @@ export class RemoteSessionRegistry {
1175
1177
  }
1176
1178
 
1177
1179
  findHosted(agentSessionId, hostClientId) {
1178
- if (this._membershipCoordinator) {
1180
+ const hasDurableSession = [...this.sessions.values()].some((session) =>
1181
+ Boolean(session.hostPrincipalId),
1182
+ );
1183
+ if (
1184
+ this._membershipCoordinator &&
1185
+ (this._refreshCoordinatorOnEnumeration ||
1186
+ this._coordinatorHydrated ||
1187
+ hasDurableSession)
1188
+ ) {
1179
1189
  // Enumeration cannot rely on the one-time startup hydration: another
1180
1190
  // server may have created, closed, or re-enabled a durable session since
1181
- // this process started. Refresh the coordinator index before matching
1182
- // local transport attachments.
1191
+ // this process started. Explicit coordinator deployments and processes
1192
+ // already serving durable sessions refresh before matching local
1193
+ // transport attachments. A lazy default coordinator must stay unopened
1194
+ // for purely in-memory sessions.
1183
1195
  this._hydrateCoordinatorSessions(this._resolveMembershipCoordinator());
1184
1196
  }
1185
1197
  const matches = [];
package/src/index.js CHANGED
@@ -26,16 +26,22 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
26
26
  const commandModules = [];
27
27
 
28
28
  for (const entry of manifest.commands) {
29
+ let deploymentStarted = false;
29
30
  try {
30
31
  const modulePath = join(__dirname, entry.module.replace("./", ""));
31
32
  const moduleUrl = pathToFileURL(modulePath).href;
32
33
  const mod = await import(moduleUrl);
34
+ deploymentStarted = true;
33
35
  const deploymentDependencies =
34
36
  await loadEvolutionDeploymentCommandDependencies(entry.name);
35
37
  commandModules.push({ entry, mod, deploymentDependencies });
36
38
  } catch (err) {
37
39
  // Store error for later reporting
38
- commandModules.push({ entry, error: err });
40
+ commandModules.push({
41
+ entry,
42
+ error: err,
43
+ deploymentError: deploymentStarted,
44
+ });
39
45
  }
40
46
  }
41
47
 
@@ -82,9 +88,16 @@ export function createProgram(options = {}) {
82
88
  });
83
89
 
84
90
  // Register all preloaded commands
85
- for (const { entry, mod, error, deploymentDependencies } of commandModules) {
91
+ for (const {
92
+ entry,
93
+ mod,
94
+ error,
95
+ deploymentError,
96
+ deploymentDependencies,
97
+ } of commandModules) {
86
98
  if (shouldFilter && !allowedCommands.has(entry.name)) continue;
87
99
  if (error) {
100
+ if (deploymentError) throw error;
88
101
  if (process.env.DEBUG) {
89
102
  console.warn(
90
103
  chalk.yellow(
@@ -109,6 +122,11 @@ export function createProgram(options = {}) {
109
122
  undefined,
110
123
  );
111
124
  } catch (err) {
125
+ if (
126
+ options.commandDependencies?.[entry.name] != null ||
127
+ deploymentDependencies != null
128
+ )
129
+ throw err;
112
130
  if (process.env.DEBUG) {
113
131
  console.warn(
114
132
  chalk.yellow(
@@ -706,6 +706,7 @@ export async function dispatchManifestEntry(
706
706
  } = {},
707
707
  ) {
708
708
  let program;
709
+ let allowCompatibilityFallback = true;
709
710
  try {
710
711
  program = await createBaseProgram();
711
712
  const mod = await loadCommandModule(entry);
@@ -715,9 +716,14 @@ export async function dispatchManifestEntry(
715
716
  `Register function '${entry.register}' not found in ${entry.module}`,
716
717
  );
717
718
  }
719
+ // Governed deployment loading may reconcile durable state. Do not hide a
720
+ // failed trust check or retry that assembly through the eager program.
721
+ allowCompatibilityFallback = false;
718
722
  const dependencies = await loadCommandDependencies(entry.name);
723
+ allowCompatibilityFallback = dependencies == null;
719
724
  registerFn(program, dependencies ?? undefined);
720
725
  } catch (error) {
726
+ if (!allowCompatibilityFallback) throw error;
721
727
  if (env.DEBUG || env.CC_DEBUG) {
722
728
  stderr.write(
723
729
  `Lazy command registration failed; loading compatibility program: ${error.message}\n`,
@@ -12,6 +12,7 @@ import { CostBudget } from "./cost-budget.js";
12
12
  import { FREE_PROVIDERS, mergePricing } from "./llm-pricing.js";
13
13
  import { redactSecrets } from "./secret-scan.js";
14
14
  import { firstBalancedJson } from "./json-schema-output.js";
15
+ import { captureAgentEvolutionIngress } from "./evolution/agent-evolution-ingress.js";
15
16
 
16
17
  export const ADVISOR_TRIGGERS = Object.freeze({
17
18
  MANUAL: "manual",
@@ -609,7 +610,12 @@ export async function invokeToolFreeAdvisor({
609
610
  apiKey,
610
611
  maxTokens = DEFAULT_ADVISOR_MAX_TOKENS,
611
612
  signal,
613
+ evolutionIngress = null,
612
614
  } = {}) {
615
+ const ingress =
616
+ evolutionIngress == null
617
+ ? null
618
+ : captureAgentEvolutionIngress(evolutionIngress);
613
619
  const { chatWithTools } = await import("../runtime/agent-core.js");
614
620
  let resolvedBaseUrl = baseUrl;
615
621
  if (!resolvedBaseUrl) {
@@ -625,6 +631,7 @@ export async function invokeToolFreeAdvisor({
625
631
  resolvedBaseUrl = "http://localhost:11434";
626
632
  }
627
633
  return chatWithTools(messages, {
634
+ ...(ingress === null ? {} : { evolutionIngress: ingress }),
628
635
  provider,
629
636
  model,
630
637
  baseUrl: resolvedBaseUrl,
@@ -640,6 +647,9 @@ export async function invokeToolFreeAdvisor({
640
647
  }
641
648
 
642
649
  export class AdvisorRuntime {
650
+ #evolutionIngress;
651
+ #callWrapper;
652
+
643
653
  constructor({
644
654
  config,
645
655
  managed,
@@ -649,11 +659,28 @@ export class AdvisorRuntime {
649
659
  baseUrl = null,
650
660
  apiKey = null,
651
661
  invoke = invokeToolFreeAdvisor,
662
+ evolutionIngress = null,
663
+ callWrapper = null,
652
664
  onEvent = null,
653
665
  priceTable = null,
654
666
  now = () => Date.now(),
655
667
  id = () => randomUUID(),
656
668
  } = {}) {
669
+ this.#evolutionIngress =
670
+ evolutionIngress == null
671
+ ? null
672
+ : captureAgentEvolutionIngress(evolutionIngress);
673
+ if (this.#evolutionIngress !== null && invoke !== invokeToolFreeAdvisor) {
674
+ throw Object.assign(
675
+ new TypeError(
676
+ "Evolution Advisor requires the canonical model transport",
677
+ ),
678
+ { code: "CC_AGENT_EVOLUTION_INGRESS_FAILED" },
679
+ );
680
+ }
681
+ if (callWrapper !== null && typeof callWrapper !== "function")
682
+ throw new TypeError("Advisor callWrapper must be a function");
683
+ this.#callWrapper = callWrapper;
657
684
  this.config = resolveAdvisorConfig({
658
685
  config,
659
686
  managed,
@@ -837,7 +864,7 @@ export class AdvisorRuntime {
837
864
  toolCount: 0,
838
865
  });
839
866
  try {
840
- const rawResult = await this.invoke({
867
+ const request = {
841
868
  messages: requestMessages,
842
869
  provider: this.config.provider,
843
870
  model: this.config.model,
@@ -846,7 +873,28 @@ export class AdvisorRuntime {
846
873
  maxTokens: this.config.maxTokens,
847
874
  signal,
848
875
  enabledToolNames: [],
849
- });
876
+ ...(this.#evolutionIngress === null
877
+ ? {}
878
+ : { evolutionIngress: this.#evolutionIngress }),
879
+ };
880
+ const invoke =
881
+ this.#evolutionIngress === null ? this.invoke : invokeToolFreeAdvisor;
882
+ const invokeCall = ({ signal: hostSignal = signal } = {}) =>
883
+ invoke({
884
+ ...request,
885
+ signal:
886
+ hostSignal && signal && hostSignal !== signal
887
+ ? AbortSignal.any([signal, hostSignal])
888
+ : hostSignal || signal,
889
+ });
890
+ const rawResult =
891
+ this.#callWrapper === null
892
+ ? await invokeCall()
893
+ : await this.#callWrapper({
894
+ call: invokeCall,
895
+ provider: request.provider,
896
+ model: request.model,
897
+ });
850
898
  const rawText = resultText(rawResult);
851
899
  const advice = parseAdvisorAdvice(rawText);
852
900
  const usage = usageFrom(rawResult, requestMessages, rawText);
@@ -889,6 +937,7 @@ export class AdvisorRuntime {
889
937
  };
890
938
  } catch (error) {
891
939
  if (error?.runtimeLedgerPersistence === true) throw error;
940
+ if (error?.code === "CC_AGENT_EVOLUTION_INGRESS_FAILED") throw error;
892
941
  const failure = {
893
942
  callId,
894
943
  trigger,
@@ -1019,6 +1068,8 @@ export async function createConfiguredAdvisorRuntime({
1019
1068
  overrides = {},
1020
1069
  onEvent = null,
1021
1070
  invoke = invokeToolFreeAdvisor,
1071
+ evolutionIngress = null,
1072
+ callWrapper = null,
1022
1073
  now,
1023
1074
  id,
1024
1075
  } = {}) {
@@ -1037,6 +1088,8 @@ export async function createConfiguredAdvisorRuntime({
1037
1088
  baseUrl,
1038
1089
  apiKey,
1039
1090
  invoke,
1091
+ evolutionIngress,
1092
+ callWrapper,
1040
1093
  onEvent,
1041
1094
  priceTable: mergePricing(config?.llm?.pricing),
1042
1095
  now,
@@ -208,6 +208,10 @@ export class CliAgentKernelAdapter {
208
208
  turnOptions.skillVectorAuthority ??
209
209
  this.sessionOptions.skillVectorAuthority ??
210
210
  null,
211
+ skillRetrievalRevocationReader:
212
+ turnOptions.skillRetrievalRevocationReader ??
213
+ this.sessionOptions.skillRetrievalRevocationReader ??
214
+ null,
211
215
  },
212
216
  {
213
217
  ...this.dependencies,
@@ -11,6 +11,7 @@ import {
11
11
  captureAgentSkillOutcomeIndex,
12
12
  } from "../evolution/agent-evolution-runtime-composition-brand.js";
13
13
  import { captureSkillVectorAuthority } from "../skill-vector-authority.js";
14
+ import { captureSkillRetrievalRevocationReader } from "../evolution/skill-retrieval-revocation-authority.js";
14
15
  import {
15
16
  diffGraphTrace,
16
17
  locateBlockedRoot,
@@ -151,6 +152,7 @@ export class AppServerGraphRuntime {
151
152
  evolutionCompositionFactory = null,
152
153
  skillOutcomeIndex = null,
153
154
  skillVectorAuthority = null,
155
+ skillRetrievalRevocationReader = null,
154
156
  writerLeaseTtlMs = 24 * 60 * 60 * 1000,
155
157
  } = {}) {
156
158
  if (typeof executeNode !== "function") {
@@ -179,6 +181,10 @@ export class AppServerGraphRuntime {
179
181
  skillVectorAuthority === null
180
182
  ? null
181
183
  : captureSkillVectorAuthority(skillVectorAuthority);
184
+ this.skillRetrievalRevocationReader =
185
+ skillRetrievalRevocationReader === null
186
+ ? null
187
+ : captureSkillRetrievalRevocationReader(skillRetrievalRevocationReader);
182
188
  if (
183
189
  this.skillOutcomeIndex !== null &&
184
190
  this.skillVectorAuthority !== null &&
@@ -186,6 +192,22 @@ export class AppServerGraphRuntime {
186
192
  ) {
187
193
  throw new TypeError("Graph retrieval authorities must share one tenant");
188
194
  }
195
+ if (
196
+ this.skillVectorAuthority !== null &&
197
+ this.skillRetrievalRevocationReader !== null &&
198
+ this.skillVectorAuthority.tenantId !==
199
+ this.skillRetrievalRevocationReader.tenantId
200
+ ) {
201
+ throw new TypeError("Graph retrieval authorities must share one tenant");
202
+ }
203
+ if (
204
+ this.skillOutcomeIndex !== null &&
205
+ this.skillRetrievalRevocationReader !== null &&
206
+ this.skillOutcomeIndex.tenantId !==
207
+ this.skillRetrievalRevocationReader.tenantId
208
+ ) {
209
+ throw new TypeError("Graph retrieval authorities must share one tenant");
210
+ }
189
211
  this.writerLeaseTtlMs = writerLeaseTtlMs;
190
212
  this.runs = new Map();
191
213
  this.drives = new Map();
@@ -227,6 +249,15 @@ export class AppServerGraphRuntime {
227
249
  "Graph evolution composition and Skill vector authority must share one tenant",
228
250
  );
229
251
  }
252
+ if (
253
+ this.skillRetrievalRevocationReader !== null &&
254
+ composition.tenantId !==
255
+ this.skillRetrievalRevocationReader.tenantId
256
+ ) {
257
+ throw new TypeError(
258
+ "Graph evolution composition and Skill revocation authority must share one tenant",
259
+ );
260
+ }
230
261
  if (
231
262
  typeof composition.evolutionIngress?.start !== "function" ||
232
263
  typeof composition.evolutionIngress?.complete !== "function"
@@ -732,6 +763,7 @@ export class AppServerGraphRuntime {
732
763
  evolutionIngress: evolutionComposition?.evolutionIngress || null,
733
764
  skillOutcomeIndex: this.skillOutcomeIndex,
734
765
  skillVectorAuthority: this.skillVectorAuthority,
766
+ skillRetrievalRevocationReader: this.skillRetrievalRevocationReader,
735
767
  });
736
768
  if (!result || !["succeeded", "completed"].includes(result.status)) {
737
769
  const error = runtimeError(
@@ -9,10 +9,12 @@ import {
9
9
  import { AppServerGraphRuntime } from "./graph-runtime.js";
10
10
  import { captureAgentSkillOutcomeIndex } from "../evolution/agent-evolution-runtime-composition-brand.js";
11
11
  import { captureSkillVectorAuthority } from "../skill-vector-authority.js";
12
+ import { captureSkillRetrievalRevocationReader } from "../evolution/skill-retrieval-revocation-authority.js";
12
13
  import { compileGraphDefinition } from "../graph-kernel/compiler.js";
13
14
  import { createCliContextMemoryRuntime } from "../context-memory-kernel/runtime.js";
14
15
  import { isEvolutionWorkbenchCliHost } from "../evolution/evolution-workbench-cli-host.js";
15
16
  import { isGovernedKnowledgeReviewHost } from "../evolution/governed-knowledge-review-host.js";
17
+ import { isGovernedKnowledgeRevocationHost } from "../evolution/governed-knowledge-revocation-host.js";
16
18
  import {
17
19
  contextPlanCreatedNotification,
18
20
  memoryDeletionNotification,
@@ -151,8 +153,10 @@ export class CcAppServer {
151
153
  evolutionCompositionFactory = null,
152
154
  skillOutcomeIndex = null,
153
155
  skillVectorAuthority = null,
156
+ skillRetrievalRevocationReader = null,
154
157
  evolutionWorkbenchHost = null,
155
158
  governedKnowledgeReviewHost = null,
159
+ governedKnowledgeRevocationHost = null,
156
160
  contextMemoryRuntimeFactory = createCliContextMemoryRuntime,
157
161
  } = {}) {
158
162
  if (typeof send !== "function") {
@@ -192,6 +196,15 @@ export class CcAppServer {
192
196
  );
193
197
  }
194
198
  this.governedKnowledgeReviewHost = governedKnowledgeReviewHost;
199
+ if (
200
+ governedKnowledgeRevocationHost !== null &&
201
+ !isGovernedKnowledgeRevocationHost(governedKnowledgeRevocationHost)
202
+ ) {
203
+ throw new TypeError(
204
+ "CcAppServer governedKnowledgeRevocationHost must be a branded revocation host",
205
+ );
206
+ }
207
+ this.governedKnowledgeRevocationHost = governedKnowledgeRevocationHost;
195
208
  this.skillOutcomeIndex =
196
209
  skillOutcomeIndex === null
197
210
  ? null
@@ -200,6 +213,10 @@ export class CcAppServer {
200
213
  skillVectorAuthority === null
201
214
  ? null
202
215
  : captureSkillVectorAuthority(skillVectorAuthority);
216
+ this.skillRetrievalRevocationReader =
217
+ skillRetrievalRevocationReader === null
218
+ ? null
219
+ : captureSkillRetrievalRevocationReader(skillRetrievalRevocationReader);
203
220
  if (
204
221
  this.skillOutcomeIndex !== null &&
205
222
  this.skillVectorAuthority !== null &&
@@ -209,9 +226,32 @@ export class CcAppServer {
209
226
  "App Server retrieval authorities must share one tenant",
210
227
  );
211
228
  }
229
+ if (
230
+ this.skillVectorAuthority !== null &&
231
+ this.skillRetrievalRevocationReader !== null &&
232
+ this.skillVectorAuthority.tenantId !==
233
+ this.skillRetrievalRevocationReader.tenantId
234
+ ) {
235
+ throw new TypeError(
236
+ "App Server retrieval authorities must share one tenant",
237
+ );
238
+ }
239
+ if (
240
+ this.skillOutcomeIndex !== null &&
241
+ this.skillRetrievalRevocationReader !== null &&
242
+ this.skillOutcomeIndex.tenantId !==
243
+ this.skillRetrievalRevocationReader.tenantId
244
+ ) {
245
+ throw new TypeError(
246
+ "App Server retrieval authorities must share one tenant",
247
+ );
248
+ }
212
249
  if (
213
250
  graphRuntime &&
214
- (evolutionCompositionFactory || skillOutcomeIndex || skillVectorAuthority)
251
+ (evolutionCompositionFactory ||
252
+ skillOutcomeIndex ||
253
+ skillVectorAuthority ||
254
+ skillRetrievalRevocationReader)
215
255
  ) {
216
256
  throw new TypeError(
217
257
  "graphRuntime and host-owned Graph authorities cannot both be provided",
@@ -226,6 +266,7 @@ export class CcAppServer {
226
266
  evolutionCompositionFactory,
227
267
  skillOutcomeIndex: this.skillOutcomeIndex,
228
268
  skillVectorAuthority: this.skillVectorAuthority,
269
+ skillRetrievalRevocationReader: this.skillRetrievalRevocationReader,
229
270
  executeNode: (context) => this._executeGraphNode(context),
230
271
  requestHumanTask: (context) => this._requestHumanTask(context),
231
272
  onEvent: (event) => {
@@ -413,6 +454,10 @@ export class CcAppServer {
413
454
  this._governedKnowledgeConflicts(message.params),
414
455
  "evolution/knowledge/merge": () =>
415
456
  this._governedKnowledgeMerge(message.params),
457
+ "evolution/knowledge/revocation/prepare": () =>
458
+ this._governedKnowledgeRevocationPrepare(message.params),
459
+ "evolution/knowledge/revocation/publish": () =>
460
+ this._governedKnowledgeRevocationPublish(message.params),
416
461
  };
417
462
  const handler = handlers[method];
418
463
  if (!handler) {
@@ -474,6 +519,13 @@ export class CcAppServer {
474
519
  ? []
475
520
  : ["conflicts", "merge"],
476
521
  },
522
+ governedKnowledgeRevocation: {
523
+ available: this.governedKnowledgeRevocationHost !== null,
524
+ methods:
525
+ this.governedKnowledgeRevocationHost === null
526
+ ? []
527
+ : ["prepare", "publish"],
528
+ },
477
529
  schema: {
478
530
  id: APP_SERVER_SCHEMA.$id,
479
531
  version: APP_SERVER_PROTOCOL_VERSION,
@@ -574,6 +626,33 @@ export class CcAppServer {
574
626
  });
575
627
  }
576
628
 
629
+ _requireGovernedKnowledgeRevocationHost() {
630
+ if (this.governedKnowledgeRevocationHost === null) {
631
+ throw new JsonRpcError(
632
+ JSON_RPC_ERROR.NOT_FOUND,
633
+ "Governed knowledge revocation is not configured for this App Server",
634
+ );
635
+ }
636
+ return this.governedKnowledgeRevocationHost;
637
+ }
638
+
639
+ _governedKnowledgeRevocationPrepare(rawParams) {
640
+ const params = requireObject(rawParams);
641
+ return this._requireGovernedKnowledgeRevocationHost().prepare(
642
+ requireObject(params.record, "record"),
643
+ );
644
+ }
645
+
646
+ _governedKnowledgeRevocationPublish(rawParams) {
647
+ const params = requireObject(rawParams);
648
+ return this._requireGovernedKnowledgeRevocationHost().publish({
649
+ operationDigest: requiredString(
650
+ params.operationDigest,
651
+ "operationDigest",
652
+ ),
653
+ });
654
+ }
655
+
577
656
  async _contextPlan(rawParams) {
578
657
  const params = requireObject(rawParams);
579
658
  const runtime = this._contextMemoryRuntime({
@@ -773,6 +852,7 @@ export class CcAppServer {
773
852
  evolutionIngress,
774
853
  skillOutcomeIndex,
775
854
  skillVectorAuthority,
855
+ skillRetrievalRevocationReader,
776
856
  }) {
777
857
  const threadId = `graph-agent:${runId}:${nodeId}`;
778
858
  const turn = { id: attempt.id, threadId };
@@ -785,6 +865,7 @@ export class CcAppServer {
785
865
  delete turnOptions.evolutionIngress;
786
866
  delete turnOptions.skillOutcomeIndex;
787
867
  delete turnOptions.skillVectorAuthority;
868
+ delete turnOptions.skillRetrievalRevocationReader;
788
869
  if (evolutionIngress !== null && evolutionIngress !== undefined) {
789
870
  turnOptions.evolutionIngress = evolutionIngress;
790
871
  }
@@ -794,6 +875,13 @@ export class CcAppServer {
794
875
  if (skillVectorAuthority !== null && skillVectorAuthority !== undefined) {
795
876
  turnOptions.skillVectorAuthority = skillVectorAuthority;
796
877
  }
878
+ if (
879
+ skillRetrievalRevocationReader !== null &&
880
+ skillRetrievalRevocationReader !== undefined
881
+ ) {
882
+ turnOptions.skillRetrievalRevocationReader =
883
+ skillRetrievalRevocationReader;
884
+ }
797
885
  const result = await this.kernel.startTurn({
798
886
  threadId,
799
887
  turnId: attempt.id,
@@ -1038,12 +1126,17 @@ export class CcAppServer {
1038
1126
  const turnOptions = { ...options };
1039
1127
  delete turnOptions.skillOutcomeIndex;
1040
1128
  delete turnOptions.skillVectorAuthority;
1129
+ delete turnOptions.skillRetrievalRevocationReader;
1041
1130
  if (this.skillOutcomeIndex !== null) {
1042
1131
  turnOptions.skillOutcomeIndex = this.skillOutcomeIndex;
1043
1132
  }
1044
1133
  if (this.skillVectorAuthority !== null) {
1045
1134
  turnOptions.skillVectorAuthority = this.skillVectorAuthority;
1046
1135
  }
1136
+ if (this.skillRetrievalRevocationReader !== null) {
1137
+ turnOptions.skillRetrievalRevocationReader =
1138
+ this.skillRetrievalRevocationReader;
1139
+ }
1047
1140
  const result = await this.kernel.startTurn({
1048
1141
  threadId: turn.threadId,
1049
1142
  turnId: turn.id,
@@ -12,6 +12,7 @@ import { CcAppServer } from "./server.js";
12
12
  import { JSON_RPC_ERROR, JsonRpcError, rpcError } from "./protocol.js";
13
13
  import { isEvolutionWorkbenchCliHost } from "../evolution/evolution-workbench-cli-host.js";
14
14
  import { isGovernedKnowledgeReviewHost } from "../evolution/governed-knowledge-review-host.js";
15
+ import { isGovernedKnowledgeRevocationHost } from "../evolution/governed-knowledge-revocation-host.js";
15
16
 
16
17
  export const APP_SERVER_WEBSOCKET_PROTOCOL =
17
18
  "chainlesschain.app-server.experimental.v1";
@@ -268,6 +269,16 @@ export class WebSocketAppServerHost extends EventEmitter {
268
269
  "WebSocket App Server governedKnowledgeReviewHost must be a branded review host",
269
270
  );
270
271
  }
272
+ if (
273
+ options.governedKnowledgeRevocationHost != null &&
274
+ !isGovernedKnowledgeRevocationHost(
275
+ options.governedKnowledgeRevocationHost,
276
+ )
277
+ ) {
278
+ throw new TypeError(
279
+ "WebSocket App Server governedKnowledgeRevocationHost must be a branded revocation host",
280
+ );
281
+ }
271
282
  this.options = options;
272
283
  this.binding = validateWebSocketAppServerOptions(options);
273
284
  this.port = boundedInteger(options.port, 18800, 0, 65_535);
@@ -418,9 +429,13 @@ export class WebSocketAppServerHost extends EventEmitter {
418
429
  this.options.evolutionCompositionFactory ?? null,
419
430
  skillOutcomeIndex: this.options.skillOutcomeIndex ?? null,
420
431
  skillVectorAuthority: this.options.skillVectorAuthority ?? null,
432
+ skillRetrievalRevocationReader:
433
+ this.options.skillRetrievalRevocationReader ?? null,
421
434
  evolutionWorkbenchHost: this.options.evolutionWorkbenchHost ?? null,
422
435
  governedKnowledgeReviewHost:
423
436
  this.options.governedKnowledgeReviewHost ?? null,
437
+ governedKnowledgeRevocationHost:
438
+ this.options.governedKnowledgeRevocationHost ?? null,
424
439
  transport: "websocket",
425
440
  maxQueuedRequests: this.options.maxQueuedRequests,
426
441
  maxQueuedRequestBytes: this.options.maxQueuedRequestBytes,