chainlesschain 0.166.20 → 0.166.22

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 (222) hide show
  1. package/README.md +67 -9
  2. package/package.json +2 -2
  3. package/src/assets/web-panel/assets/{AIOps-CcJst5Zs.js → AIOps-oJ7USzMC.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-BpHPFKd3.js → ActionButton-BlgnZe_C.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-DHAsASuS.js → Analytics-D2rRbTLu.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-BTKwo5RC.js → AppLayout-FwS3f0B2.js} +5 -5
  7. package/src/assets/web-panel/assets/{Artifacts-BcCBTggA.js → Artifacts-iF-_08Hi.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-z1JvJYbT.js → Audit-D24p0zQw.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-CJ7DCMDR.js → BackgroundAgents-Cg3mRVi9.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-CKpxw4uw.js → Backup-EOqht3H-.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-2jI_IlUB.js → BaseInput-9XWYq2hj.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-C_4RfBeN.js → Chat-Dq5yardA.js} +5 -5
  13. package/src/assets/web-panel/assets/ChatBubbleRenderer-Ds3pA-ET.js +1 -0
  14. package/src/assets/web-panel/assets/{Checkbox-BnF4z4N1.js → Checkbox-CuyCBoBf.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-m_LMamhM.js → Codegen-DjWtYHNe.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-DzMbA760.js → Col-CrVr_iuG.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-SScuZUcW.js → Community-C6QxpfGc.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-CiOHRvwQ.js → Compact-B-v5r6Pa.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-97FzYz-6.js → Compliance-zNiLiFgD.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-C0ss-SRl.js → Cowork-D9K7lMOu.js} +2 -2
  21. package/src/assets/web-panel/assets/{Cron-CCbdc9fp.js → Cron-DAjO36z4.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-BPnabXej.js → Crosschain-Bxqn0aqB.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-B65hFnHs.js → DID-DfRmLUe-.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-B6qR_TF2.js → Dashboard-Cz8KF3fr.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-6c-2Fxm-.js → Dropdown-C4oVfkP0.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-GD57mfiz.js → EmailListRenderer-ivyZKN8k.js} +1 -1
  27. package/src/assets/web-panel/assets/{FamilyGuardDashboard-B2mxG6LN.js → FamilyGuardDashboard-DoxY1CPW.js} +1 -1
  28. package/src/assets/web-panel/assets/{Federation-cZS-uvAo.js → Federation-C93gZxnb.js} +1 -1
  29. package/src/assets/web-panel/assets/{FormItemContext-UbSfBIe1.js → FormItemContext-D_lEjYJE.js} +1 -1
  30. package/src/assets/web-panel/assets/{GenericCardRenderer-BMAtvGt1.js → GenericCardRenderer-BNFN9YjN.js} +1 -1
  31. package/src/assets/web-panel/assets/{Git-DAlhOiDA.js → Git-mUu2HcLI.js} +2 -2
  32. package/src/assets/web-panel/assets/{Governance-B-RRVaP8.js → Governance-CNuosrge.js} +1 -1
  33. package/src/assets/web-panel/assets/{Inference-DBl-pXYR.js → Inference-DwY5pbCB.js} +1 -1
  34. package/src/assets/web-panel/assets/{KnowledgeGraph-DjqOkvgY.js → KnowledgeGraph-aRUxhACD.js} +1 -1
  35. package/src/assets/web-panel/assets/{Logs-CEV7AEAD.js → Logs-DFfsWYy_.js} +2 -2
  36. package/src/assets/web-panel/assets/{MarkdownRenderer-BDCxa4d1.js → MarkdownRenderer-DqTx7_u1.js} +1 -1
  37. package/src/assets/web-panel/assets/{Marketplace-oRjzfmYJ.js → Marketplace-COI-ciM-.js} +1 -1
  38. package/src/assets/web-panel/assets/{McpTools-BiTnznLw.js → McpTools-BJJwaIpe.js} +3 -3
  39. package/src/assets/web-panel/assets/{Memory-DR0C5K4N.js → Memory-CDO6SGDZ.js} +2 -2
  40. package/src/assets/web-panel/assets/{MobileBridge--oR8wEcp.js → MobileBridge-BlZ5tFf4.js} +1 -1
  41. package/src/assets/web-panel/assets/{MobileProjects-DKqpYMuG.js → MobileProjects-DuoxbgWz.js} +1 -1
  42. package/src/assets/web-panel/assets/{Mtc-Dg0D6fDQ.js → Mtc-6ec9j70b.js} +2 -2
  43. package/src/assets/web-panel/assets/{MtcAudit-D4_-yWTK.js → MtcAudit-BuL7HkC7.js} +5 -5
  44. package/src/assets/web-panel/assets/{Multisig-Coz55FxA.js → Multisig-CJxR85lk.js} +3 -3
  45. package/src/assets/web-panel/assets/{NLProgramming-BWVjgW9Y.js → NLProgramming-B71O1S4l.js} +1 -1
  46. package/src/assets/web-panel/assets/{Notes-BflVuGwr.js → Notes-Bsw5zbpV.js} +3 -3
  47. package/src/assets/web-panel/assets/{NotificationSettings-CT0F_dJ7.js → NotificationSettings-BnAhXuK_.js} +1 -1
  48. package/src/assets/web-panel/assets/{OrderTableRenderer-Dyrnqy_o.js → OrderTableRenderer-BJ0R5GGz.js} +1 -1
  49. package/src/assets/web-panel/assets/{Organization-CMDTM2z5.js → Organization-B7wwNxoP.js} +2 -2
  50. package/src/assets/web-panel/assets/{Overflow-acKvvYpC.js → Overflow-CfAGr0gM.js} +1 -1
  51. package/src/assets/web-panel/assets/{P2P-CRq5j9Ax.js → P2P-KhMg22Fz.js} +2 -2
  52. package/src/assets/web-panel/assets/{PdhVaultBrowser-DmtzN6Kn.js → PdhVaultBrowser-NdAXI9ft.js} +4 -4
  53. package/src/assets/web-panel/assets/{Permissions-SZ-kjJDa.js → Permissions-CIYjqyT7.js} +4 -4
  54. package/src/assets/web-panel/assets/{PersonalDataHub-DXh-ZfgJ.js → PersonalDataHub-D2ht3P_R.js} +6 -6
  55. package/src/assets/web-panel/assets/{Pipeline-DhBU9ftP.js → Pipeline-i6flZW1m.js} +1 -1
  56. package/src/assets/web-panel/assets/{Privacy-BgEXpO_V.js → Privacy-DE0lhYVc.js} +1 -1
  57. package/src/assets/web-panel/assets/{ProjectInit-B2DJ-dmK.js → ProjectInit-BL3YbyxS.js} +2 -2
  58. package/src/assets/web-panel/assets/{ProjectSettings-ve3SocWc.js → ProjectSettings-CEtdg7ni.js} +2 -2
  59. package/src/assets/web-panel/assets/{Projects-5ZvFasSJ.js → Projects-CvtU5peJ.js} +1 -1
  60. package/src/assets/web-panel/assets/{Providers-C8fcF3BK.js → Providers-DKt_Cg-j.js} +1 -1
  61. package/src/assets/web-panel/assets/{QrScannerModal-unjO8lNO.js → QrScannerModal-DA61jNSx.js} +1 -1
  62. package/src/assets/web-panel/assets/{QuickAsk-BT1QtT7D.js → QuickAsk-fS9ryUmq.js} +1 -1
  63. package/src/assets/web-panel/assets/{Recommend-BSjFrY1w.js → Recommend-CR9dZU5Y.js} +1 -1
  64. package/src/assets/web-panel/assets/{RemoteSession-CWV0bICg.js → RemoteSession-BV0BR2Dz.js} +2 -2
  65. package/src/assets/web-panel/assets/{Reputation-BMjiMsk2.js → Reputation-BIeGUvYD.js} +1 -1
  66. package/src/assets/web-panel/assets/{Row-9XCY22PM.js → Row-DHDT1aro.js} +1 -1
  67. package/src/assets/web-panel/assets/{RssFeed-DQ9PDy7Q.js → RssFeed-Cq6YKb1h.js} +3 -3
  68. package/src/assets/web-panel/assets/{Search-Boym2HwG.js → Search-DEF6vsy6.js} +1 -1
  69. package/src/assets/web-panel/assets/{Security-Gbq3lGQb.js → Security-CHtYiKY9.js} +4 -4
  70. package/src/assets/web-panel/assets/{Services-OcUfLdnu.js → Services-u16lvBJN.js} +2 -2
  71. package/src/assets/web-panel/assets/{Skeleton-BjTog6cA.js → Skeleton-CGbizyDj.js} +1 -1
  72. package/src/assets/web-panel/assets/{Skills-Dny4ft_1.js → Skills-BZMQcAa7.js} +1 -1
  73. package/src/assets/web-panel/assets/{Sla-Cy_VnhpZ.js → Sla-Bm-CycVi.js} +1 -1
  74. package/src/assets/web-panel/assets/{SpeechSettings-CrFuL_lp.js → SpeechSettings-BudpA5kr.js} +1 -1
  75. package/src/assets/web-panel/assets/{SyncSettings-k-FnjuOR.js → SyncSettings-B8q1C1eC.js} +2 -2
  76. package/src/assets/web-panel/assets/{Tasks-ZEqDSo0_.js → Tasks-SU1pBWc-.js} +1 -1
  77. package/src/assets/web-panel/assets/{Templates-CYYksYV5.js → Templates-CyOfJzmt.js} +1 -1
  78. package/src/assets/web-panel/assets/{Tenant-BvTTRTHS.js → Tenant-xqWSm2GP.js} +1 -1
  79. package/src/assets/web-panel/assets/{Terminal-DMOQOtkj.js → Terminal-D1Ttgjsi.js} +2 -2
  80. package/src/assets/web-panel/assets/{TimelineRenderer-CnudkJxk.js → TimelineRenderer-Da2lYs5D.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tokens-VW6Wocdp.js → Tokens-B34-SduO.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trigger-BtOxZqP6.js → Trigger-C8zyYm4R.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trust-XcGJoTQx.js → Trust-D1Pvqems.js} +1 -1
  84. package/src/assets/web-panel/assets/{UkeySign-aASNCs5j.js → UkeySign-Do3VVnAy.js} +1 -1
  85. package/src/assets/web-panel/assets/{VideoEditing-Bz89M52u.js → VideoEditing-Dz7egVIA.js} +1 -1
  86. package/src/assets/web-panel/assets/{Wallet-uU4dSS_N.js → Wallet-Dcuw-OxR.js} +3 -3
  87. package/src/assets/web-panel/assets/{WebAuthn-Brrroxgr.js → WebAuthn-DPlw-QsB.js} +3 -3
  88. package/src/assets/web-panel/assets/{WorkflowEditor-Cny-evI9.js → WorkflowEditor-h4OsnU5q.js} +1 -1
  89. package/src/assets/web-panel/assets/{chat-CJ5iSwWq.js → chat-eO9wEwrW.js} +1 -1
  90. package/src/assets/web-panel/assets/{colors-DWa-2flG.js → colors-34lSmOXw.js} +1 -1
  91. package/src/assets/web-panel/assets/{compact-item-DFwUfptU.js → compact-item-CK4kEWJ4.js} +1 -1
  92. package/src/assets/web-panel/assets/{createContext-FHWWcyeB.js → createContext-E0A57xed.js} +1 -1
  93. package/src/assets/web-panel/assets/devWarning-CF3xafX2.js +1 -0
  94. package/src/assets/web-panel/assets/{hasIn-QY_TElrN.js → hasIn-BD9ZMGAl.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-BcVr-LOk.js → index--N0u6kTG.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-CUiTugu3.js → index-8qMA1DWQ.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-0umhind6.js → index-B0rkHxKK.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-wqiOz655.js → index-B_G_ElKO.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-B18zERdP.js → index-BbX_Dted.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-Dy2PnKZx.js → index-Bjs90Eh9.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-th467RN6.js → index-BmNbU2Z6.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-uRUZdL7I.js → index-Brqc9Emx.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-hw1J_Oxs.js → index-BsGmo6v1.js} +1 -1
  104. package/src/assets/web-panel/assets/index-C907rPwd.js +1 -0
  105. package/src/assets/web-panel/assets/{index-CjejB-z9.js → index-CT1_eRL-.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DaHvj4jA.js → index-CZBaqe3d.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-B33frlaD.js → index-CZkFMeWL.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BYbwQ7SP.js → index-Ch175NUw.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-va4Rt-yM.js → index-CsrKJJcX.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-DDpXDi4J.js → index-CuSau5ya.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-D-Mhq8K6.js → index-Cx3Jn1r0.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-CKS7n6mE.js → index-Cz3unNfL.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-BRsGZBHc.js → index-D4bB_x_v.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-Bd7McYpJ.js → index-DCn-ECvK.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DUfILsc-.js → index-DFLE2qO9.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-DUepuy7O.js → index-DGRxt5wj.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-BR4RMPnB.js → index-DONOUtlz.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-Dlq-u9E4.js → index-DP-UZAQN.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DCHMVYG1.js → index-Da5fmOHB.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-BiHRihC0.js → index-DcE1BspQ.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-CGv5In_T.js → index-DcbgVLOH.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-BQCtBurK.js → index-DeXNCyQJ.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-D2rPJ6Sv.js → index-DiT_REby.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CUoLd1dt.js → index-DpfisY1g.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-2ufsNuVn.js → index-DrOalGut.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-aTiI7lOQ.js → index-DrSAAuJj.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-BUNwuu5v.js → index-DrsDA_md.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CkmgbT7h.js → index-DvKcroix.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-BEjwv2x6.js → index-DzXjP44T.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-CeGn0A4W.js → index-MIg5Z8qe.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-C5F1vwec.js → index-o8pYehRq.js} +3 -3
  132. package/src/assets/web-panel/assets/index-wueRSK2d.js +1 -0
  133. package/src/assets/web-panel/assets/{index-w3SdYwaC.js → index-yAGBu2E0.js} +1 -1
  134. package/src/assets/web-panel/assets/{initDefaultProps-BeSPUFDz.js → initDefaultProps-DMTkAomF.js} +1 -1
  135. package/src/assets/web-panel/assets/{motion-Dcajvjm9.js → motion-Cnti1F5g.js} +1 -1
  136. package/src/assets/web-panel/assets/{move-B76orau-.js → move-CGxmHUga.js} +1 -1
  137. package/src/assets/web-panel/assets/{mtc-parser-zB6yFwcX.js → mtc-parser-CuwwLoq7.js} +1 -1
  138. package/src/assets/web-panel/assets/{omit-BsbNjz8w.js → omit-BpdlTkPM.js} +1 -1
  139. package/src/assets/web-panel/assets/{pickAttrs-BiJ9tssQ.js → pickAttrs-D7nWrThp.js} +1 -1
  140. package/src/assets/web-panel/assets/{placementArrow-BdfMjMeN.js → placementArrow-Bhx0TV8F.js} +1 -1
  141. package/src/assets/web-panel/assets/{responsiveObserve-rV4LGpbU.js → responsiveObserve-CZ1KesZh.js} +1 -1
  142. package/src/assets/web-panel/assets/{slide-HsVw1qFQ.js → slide-CnldF8J6.js} +1 -1
  143. package/src/assets/web-panel/assets/{statusUtils-D1ry8XPE.js → statusUtils-CZfo_GOA.js} +1 -1
  144. package/src/assets/web-panel/assets/{styleChecker-B1t6aQQ_.js → styleChecker-B2QCcAv5.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFlexGapSupport-C8qbl-9w.js → useFlexGapSupport-DzzjIS4J.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFs-R7g_mYTC.js → useFs-B_atg9M0.js} +1 -1
  147. package/src/assets/web-panel/assets/{usePersonalDataHub-Cd-kCe7Z.js → usePersonalDataHub-DhZs3QYN.js} +1 -1
  148. package/src/assets/web-panel/assets/{vnode-9WhK5UWA.js → vnode-DcePTYAm.js} +1 -1
  149. package/src/assets/web-panel/assets/{zoom-CUqppPco.js → zoom-BYmlnjRk.js} +1 -1
  150. package/src/assets/web-panel/index.html +1 -1
  151. package/src/command-help-index.json +2 -2
  152. package/src/commands/agent.js +19 -1
  153. package/src/commands/evolution-knowledge.js +54 -0
  154. package/src/commands/evolution-workbench.js +83 -0
  155. package/src/commands/evolution.js +6 -1
  156. package/src/commands/serve.js +47 -0
  157. package/src/commands/skill.js +158 -16
  158. package/src/data/changelog.json +26 -0
  159. package/src/gateways/ws/session-protocol.js +2 -0
  160. package/src/gateways/ws/ws-agent-handler.js +124 -69
  161. package/src/gateways/ws/ws-server.js +19 -0
  162. package/src/generated/cc-agent-protocol.schema.json +7 -1
  163. package/src/harness/jsonl-session-store.js +25 -1
  164. package/src/index.js +11 -3
  165. package/src/lazy-dispatch.js +9 -1
  166. package/src/lib/app-server/cli-agent-kernel-adapter.js +8 -0
  167. package/src/lib/app-server/graph-runtime.js +40 -1
  168. package/src/lib/app-server/server.js +181 -3
  169. package/src/lib/app-server/websocket-transport.js +23 -0
  170. package/src/lib/evolution/agent-evolution-runtime-composition-brand.js +17 -0
  171. package/src/lib/evolution/agent-evolution-runtime-composition.js +165 -1
  172. package/src/lib/evolution/controlled-skill-production-pilot.js +912 -0
  173. package/src/lib/evolution/evolution-artifact-ports.js +30 -0
  174. package/src/lib/evolution/evolution-deployment-loader.js +208 -0
  175. package/src/lib/evolution/evolution-raw-crypto-shred.js +185 -0
  176. package/src/lib/evolution/evolution-release-train-ledger-adapter.js +335 -0
  177. package/src/lib/evolution/evolution-release-train.js +538 -0
  178. package/src/lib/evolution/evolution-workbench-batch-executor.js +195 -0
  179. package/src/lib/evolution/evolution-workbench-cli-host.js +169 -0
  180. package/src/lib/evolution/evolution-workbench-metrics-ledger-adapter.js +648 -0
  181. package/src/lib/evolution/evolution-workbench-metrics.js +943 -0
  182. package/src/lib/evolution/evolution-workbench-projection.js +753 -0
  183. package/src/lib/evolution/evolution-workbench-version-control.js +272 -0
  184. package/src/lib/evolution/evolvable-artifact-ledger-adapter.js +688 -0
  185. package/src/lib/evolution/governed-knowledge-artifact-lifecycle.js +364 -0
  186. package/src/lib/evolution/governed-knowledge-conflict-merge.js +352 -0
  187. package/src/lib/evolution/governed-knowledge-dependency-authority.js +273 -0
  188. package/src/lib/evolution/governed-knowledge-dependency-ledger-executor.js +646 -0
  189. package/src/lib/evolution/governed-knowledge-merge-ledger-executor.js +671 -0
  190. package/src/lib/evolution/governed-knowledge-merge-publisher-authority.js +310 -0
  191. package/src/lib/evolution/governed-knowledge-node-crypto-authority.js +348 -0
  192. package/src/lib/evolution/governed-knowledge-rbac-approval-authority.js +621 -0
  193. package/src/lib/evolution/governed-knowledge-review-host.js +249 -0
  194. package/src/lib/evolution/governed-knowledge-sync-ledger-adapter.js +729 -0
  195. package/src/lib/evolution/governed-knowledge-sync-merge-publisher.js +312 -0
  196. package/src/lib/evolution/governed-knowledge-sync.js +795 -0
  197. package/src/lib/evolution/governed-knowledge-trust-ledger.js +707 -0
  198. package/src/lib/evolution/governed-skill-marketplace.js +430 -0
  199. package/src/lib/evolution/governed-wiki-pruning.js +435 -0
  200. package/src/lib/evolution/skill-outcome-index-authority.js +268 -0
  201. package/src/lib/evolution/skill-outcome-source-catalog-authority.js +237 -0
  202. package/src/lib/evolution/skill-writer-inventory-manifest.js +7 -6
  203. package/src/lib/evolution/statistical-progressive-canary.js +683 -0
  204. package/src/lib/evolution/wikiskill-benchmark.js +510 -0
  205. package/src/lib/public-ide-capability-manifest.js +4 -0
  206. package/src/lib/session-host-lease.js +11 -16
  207. package/src/lib/skill-outcome-authority.js +43 -0
  208. package/src/lib/skill-outcome-transcript-authority.js +252 -0
  209. package/src/lib/skill-retrieval-router-benchmark.js +135 -0
  210. package/src/lib/skill-retrieval-router.js +235 -0
  211. package/src/lib/skill-vector-authority.js +325 -0
  212. package/src/lib/skill-vector-process-authority.js +386 -0
  213. package/src/repl/agent-repl.js +7 -1
  214. package/src/runtime/agent-core.js +133 -13
  215. package/src/runtime/agent-runtime.js +42 -0
  216. package/src/runtime/headless-runner.js +32 -0
  217. package/src/runtime/headless-stream.js +39 -1
  218. package/src/runtime/runtime-factory.js +62 -4
  219. package/src/assets/web-panel/assets/ChatBubbleRenderer-eMmw1eZF.js +0 -1
  220. package/src/assets/web-panel/assets/devWarning-DxufPwXC.js +0 -1
  221. package/src/assets/web-panel/assets/index-ZMTB9p5z.js +0 -1
  222. package/src/assets/web-panel/assets/index-_PvIDelE.js +0 -1
@@ -90,6 +90,9 @@ import {
90
90
  verifyExecutionLocationResultBundle,
91
91
  } from "../lib/execution-location-result.js";
92
92
  import { normalizeExecutionLocationResultStoreReceipt } from "../lib/execution-location-result-store.js";
93
+ import skillInvocationReceipt from "@chainlesschain/session-core/skill-invocation-receipt";
94
+
95
+ const { verifySkillInvocationReceipt } = skillInvocationReceipt;
93
96
 
94
97
  let securedSessionsDir = null;
95
98
  let securedSessionsDirIdentity = null;
@@ -3189,7 +3192,16 @@ export function appendToolCall(sessionId, toolName, args) {
3189
3192
  */
3190
3193
  export function appendToolCallCompact(
3191
3194
  sessionId,
3192
- { id, tool, isError, skill, plugin, pluginVersion, durationMs } = {},
3195
+ {
3196
+ id,
3197
+ tool,
3198
+ isError,
3199
+ skill,
3200
+ plugin,
3201
+ pluginVersion,
3202
+ durationMs,
3203
+ invocationReceipt,
3204
+ } = {},
3193
3205
  ) {
3194
3206
  const cleanId =
3195
3207
  id === undefined
@@ -3203,6 +3215,15 @@ export function appendToolCallCompact(
3203
3215
  if (id !== undefined && !cleanId) {
3204
3216
  throw new TypeError("compact tool call id must be a bounded string");
3205
3217
  }
3218
+ const verifiedInvocationReceipt =
3219
+ invocationReceipt === undefined || invocationReceipt === null
3220
+ ? null
3221
+ : verifySkillInvocationReceipt(invocationReceipt);
3222
+ if (verifiedInvocationReceipt !== null && tool !== "run_skill") {
3223
+ throw new TypeError(
3224
+ "Skill invocation receipt can only be attached to run_skill",
3225
+ );
3226
+ }
3206
3227
  const duration = normalizeCompactDuration(durationMs);
3207
3228
  appendEvent(sessionId, "tool_call", {
3208
3229
  ...(cleanId ? { id: cleanId } : {}),
@@ -3212,6 +3233,9 @@ export function appendToolCallCompact(
3212
3233
  ...(plugin ? { plugin: String(plugin) } : {}),
3213
3234
  ...(pluginVersion ? { plugin_version: String(pluginVersion) } : {}),
3214
3235
  ...(duration !== null ? { duration_ms: duration } : {}),
3236
+ ...(verifiedInvocationReceipt
3237
+ ? { skill_invocation_receipt: verifiedInvocationReceipt }
3238
+ : {}),
3215
3239
  });
3216
3240
  }
3217
3241
 
package/src/index.js CHANGED
@@ -13,6 +13,7 @@ import {
13
13
  startDefaultEventRuntimeHost,
14
14
  stopDefaultEventRuntimeHost,
15
15
  } from "./lib/event-runtime-host.js";
16
+ import { loadEvolutionDeploymentCommandDependencies } from "./lib/evolution/evolution-deployment-loader.js";
16
17
 
17
18
  // The manifest entry is the canonical registration point for learning. Keep
18
19
  // these names visible here for tooling that audits the CLI's command surface:
@@ -29,7 +30,9 @@ for (const entry of manifest.commands) {
29
30
  const modulePath = join(__dirname, entry.module.replace("./", ""));
30
31
  const moduleUrl = pathToFileURL(modulePath).href;
31
32
  const mod = await import(moduleUrl);
32
- commandModules.push({ entry, mod });
33
+ const deploymentDependencies =
34
+ await loadEvolutionDeploymentCommandDependencies(entry.name);
35
+ commandModules.push({ entry, mod, deploymentDependencies });
33
36
  } catch (err) {
34
37
  // Store error for later reporting
35
38
  commandModules.push({ entry, error: err });
@@ -79,7 +82,7 @@ export function createProgram(options = {}) {
79
82
  });
80
83
 
81
84
  // Register all preloaded commands
82
- for (const { entry, mod, error } of commandModules) {
85
+ for (const { entry, mod, error, deploymentDependencies } of commandModules) {
83
86
  if (shouldFilter && !allowedCommands.has(entry.name)) continue;
84
87
  if (error) {
85
88
  if (process.env.DEBUG) {
@@ -99,7 +102,12 @@ export function createProgram(options = {}) {
99
102
  `Register function '${entry.register}' not found in ${entry.module}`,
100
103
  );
101
104
  }
102
- registerFn(program);
105
+ registerFn(
106
+ program,
107
+ options.commandDependencies?.[entry.name] ??
108
+ deploymentDependencies ??
109
+ undefined,
110
+ );
103
111
  } catch (err) {
104
112
  if (process.env.DEBUG) {
105
113
  console.warn(
@@ -682,6 +682,12 @@ async function defaultLoadFullProgram() {
682
682
  return createProgramAsync();
683
683
  }
684
684
 
685
+ async function defaultLoadCommandDependencies(commandName) {
686
+ const { loadEvolutionDeploymentCommandDependencies } =
687
+ await import("./lib/evolution/evolution-deployment-loader.js");
688
+ return loadEvolutionDeploymentCommandDependencies(commandName);
689
+ }
690
+
685
691
  /**
686
692
  * Load/register may fall back to the compatibility program. parseAsync is
687
693
  * intentionally outside that catch: once an action begins, any failure must
@@ -692,6 +698,7 @@ export async function dispatchManifestEntry(
692
698
  entry,
693
699
  {
694
700
  loadCommandModule = defaultLoadCommandModule,
701
+ loadCommandDependencies = defaultLoadCommandDependencies,
695
702
  createBaseProgram = defaultCreateBaseProgram,
696
703
  loadFullProgram = defaultLoadFullProgram,
697
704
  stderr = process.stderr,
@@ -708,7 +715,8 @@ export async function dispatchManifestEntry(
708
715
  `Register function '${entry.register}' not found in ${entry.module}`,
709
716
  );
710
717
  }
711
- registerFn(program);
718
+ const dependencies = await loadCommandDependencies(entry.name);
719
+ registerFn(program, dependencies ?? undefined);
712
720
  } catch (error) {
713
721
  if (env.DEBUG || env.CC_DEBUG) {
714
722
  stderr.write(
@@ -200,6 +200,14 @@ export class CliAgentKernelAdapter {
200
200
  turnOptions.evolutionIngress ??
201
201
  this.sessionOptions.evolutionIngress ??
202
202
  null,
203
+ skillOutcomeIndex:
204
+ turnOptions.skillOutcomeIndex ??
205
+ this.sessionOptions.skillOutcomeIndex ??
206
+ null,
207
+ skillVectorAuthority:
208
+ turnOptions.skillVectorAuthority ??
209
+ this.sessionOptions.skillVectorAuthority ??
210
+ null,
203
211
  },
204
212
  {
205
213
  ...this.dependencies,
@@ -6,7 +6,11 @@ import {
6
6
  import { createGraphAuthorityBinding } from "../graph-kernel/authority.js";
7
7
  import { GraphEventStore } from "../graph-kernel/event-store.js";
8
8
  import { GraphKernel } from "../graph-kernel/runtime.js";
9
- import { captureAgentEvolutionRuntimeComposition } from "../evolution/agent-evolution-runtime-composition-brand.js";
9
+ import {
10
+ captureAgentEvolutionRuntimeComposition,
11
+ captureAgentSkillOutcomeIndex,
12
+ } from "../evolution/agent-evolution-runtime-composition-brand.js";
13
+ import { captureSkillVectorAuthority } from "../skill-vector-authority.js";
10
14
  import {
11
15
  diffGraphTrace,
12
16
  locateBlockedRoot,
@@ -145,6 +149,8 @@ export class AppServerGraphRuntime {
145
149
  createId = randomUUID,
146
150
  onEvent = null,
147
151
  evolutionCompositionFactory = null,
152
+ skillOutcomeIndex = null,
153
+ skillVectorAuthority = null,
148
154
  writerLeaseTtlMs = 24 * 60 * 60 * 1000,
149
155
  } = {}) {
150
156
  if (typeof executeNode !== "function") {
@@ -165,6 +171,21 @@ export class AppServerGraphRuntime {
165
171
  this.createId = createId;
166
172
  this.onEvent = typeof onEvent === "function" ? onEvent : null;
167
173
  this.evolutionCompositionFactory = evolutionCompositionFactory;
174
+ this.skillOutcomeIndex =
175
+ skillOutcomeIndex === null
176
+ ? null
177
+ : captureAgentSkillOutcomeIndex(skillOutcomeIndex);
178
+ this.skillVectorAuthority =
179
+ skillVectorAuthority === null
180
+ ? null
181
+ : captureSkillVectorAuthority(skillVectorAuthority);
182
+ if (
183
+ this.skillOutcomeIndex !== null &&
184
+ this.skillVectorAuthority !== null &&
185
+ this.skillOutcomeIndex.tenantId !== this.skillVectorAuthority.tenantId
186
+ ) {
187
+ throw new TypeError("Graph retrieval authorities must share one tenant");
188
+ }
168
189
  this.writerLeaseTtlMs = writerLeaseTtlMs;
169
190
  this.runs = new Map();
170
191
  this.drives = new Map();
@@ -190,6 +211,22 @@ export class AppServerGraphRuntime {
190
211
  "Agent evolution composition belongs to another Graph run",
191
212
  );
192
213
  }
214
+ if (
215
+ this.skillOutcomeIndex !== null &&
216
+ composition.tenantId !== this.skillOutcomeIndex.tenantId
217
+ ) {
218
+ throw new TypeError(
219
+ "Graph evolution composition and Skill outcome index must share one tenant",
220
+ );
221
+ }
222
+ if (
223
+ this.skillVectorAuthority !== null &&
224
+ composition.tenantId !== this.skillVectorAuthority.tenantId
225
+ ) {
226
+ throw new TypeError(
227
+ "Graph evolution composition and Skill vector authority must share one tenant",
228
+ );
229
+ }
193
230
  if (
194
231
  typeof composition.evolutionIngress?.start !== "function" ||
195
232
  typeof composition.evolutionIngress?.complete !== "function"
@@ -693,6 +730,8 @@ export class AppServerGraphRuntime {
693
730
  input: nodeInput(entry.inputs, nodeId),
694
731
  signal: controller.signal,
695
732
  evolutionIngress: evolutionComposition?.evolutionIngress || null,
733
+ skillOutcomeIndex: this.skillOutcomeIndex,
734
+ skillVectorAuthority: this.skillVectorAuthority,
696
735
  });
697
736
  if (!result || !["succeeded", "completed"].includes(result.status)) {
698
737
  const error = runtimeError(
@@ -7,8 +7,12 @@ import {
7
7
  createRolloutStore,
8
8
  } from "./rollout-store-factory.js";
9
9
  import { AppServerGraphRuntime } from "./graph-runtime.js";
10
+ import { captureAgentSkillOutcomeIndex } from "../evolution/agent-evolution-runtime-composition-brand.js";
11
+ import { captureSkillVectorAuthority } from "../skill-vector-authority.js";
10
12
  import { compileGraphDefinition } from "../graph-kernel/compiler.js";
11
13
  import { createCliContextMemoryRuntime } from "../context-memory-kernel/runtime.js";
14
+ import { isEvolutionWorkbenchCliHost } from "../evolution/evolution-workbench-cli-host.js";
15
+ import { isGovernedKnowledgeReviewHost } from "../evolution/governed-knowledge-review-host.js";
12
16
  import {
13
17
  contextPlanCreatedNotification,
14
18
  memoryDeletionNotification,
@@ -145,6 +149,10 @@ export class CcAppServer {
145
149
  transport = "stdio",
146
150
  graphRuntime = null,
147
151
  evolutionCompositionFactory = null,
152
+ skillOutcomeIndex = null,
153
+ skillVectorAuthority = null,
154
+ evolutionWorkbenchHost = null,
155
+ governedKnowledgeReviewHost = null,
148
156
  contextMemoryRuntimeFactory = createCliContextMemoryRuntime,
149
157
  } = {}) {
150
158
  if (typeof send !== "function") {
@@ -166,9 +174,47 @@ export class CcAppServer {
166
174
  throw new TypeError("contextMemoryRuntimeFactory must be a function");
167
175
  }
168
176
  this.contextMemoryRuntimeFactory = contextMemoryRuntimeFactory;
169
- if (graphRuntime && evolutionCompositionFactory) {
177
+ if (
178
+ evolutionWorkbenchHost !== null &&
179
+ !isEvolutionWorkbenchCliHost(evolutionWorkbenchHost)
180
+ ) {
181
+ throw new TypeError(
182
+ "CcAppServer evolutionWorkbenchHost must be a branded Workbench host",
183
+ );
184
+ }
185
+ this.evolutionWorkbenchHost = evolutionWorkbenchHost;
186
+ if (
187
+ governedKnowledgeReviewHost !== null &&
188
+ !isGovernedKnowledgeReviewHost(governedKnowledgeReviewHost)
189
+ ) {
190
+ throw new TypeError(
191
+ "CcAppServer governedKnowledgeReviewHost must be a branded review host",
192
+ );
193
+ }
194
+ this.governedKnowledgeReviewHost = governedKnowledgeReviewHost;
195
+ this.skillOutcomeIndex =
196
+ skillOutcomeIndex === null
197
+ ? null
198
+ : captureAgentSkillOutcomeIndex(skillOutcomeIndex);
199
+ this.skillVectorAuthority =
200
+ skillVectorAuthority === null
201
+ ? null
202
+ : captureSkillVectorAuthority(skillVectorAuthority);
203
+ if (
204
+ this.skillOutcomeIndex !== null &&
205
+ this.skillVectorAuthority !== null &&
206
+ this.skillOutcomeIndex.tenantId !== this.skillVectorAuthority.tenantId
207
+ ) {
208
+ throw new TypeError(
209
+ "App Server retrieval authorities must share one tenant",
210
+ );
211
+ }
212
+ if (
213
+ graphRuntime &&
214
+ (evolutionCompositionFactory || skillOutcomeIndex || skillVectorAuthority)
215
+ ) {
170
216
  throw new TypeError(
171
- "graphRuntime and evolutionCompositionFactory cannot both be provided",
217
+ "graphRuntime and host-owned Graph authorities cannot both be provided",
172
218
  );
173
219
  }
174
220
  this.graphRuntime =
@@ -178,6 +224,8 @@ export class CcAppServer {
178
224
  now,
179
225
  createId,
180
226
  evolutionCompositionFactory,
227
+ skillOutcomeIndex: this.skillOutcomeIndex,
228
+ skillVectorAuthority: this.skillVectorAuthority,
181
229
  executeNode: (context) => this._executeGraphNode(context),
182
230
  requestHumanTask: (context) => this._requestHumanTask(context),
183
231
  onEvent: (event) => {
@@ -353,6 +401,18 @@ export class CcAppServer {
353
401
  "memory/decide": () => this._memoryDecide(message.params),
354
402
  "memory/delete": () => this._memoryDelete(message.params),
355
403
  "memory/reconcile": () => this._memoryReconcile(message.params),
404
+ "evolution/workbench/list": () =>
405
+ this._evolutionWorkbenchList(message.params),
406
+ "evolution/workbench/compare": () =>
407
+ this._evolutionWorkbenchCompare(message.params),
408
+ "evolution/workbench/review": () =>
409
+ this._evolutionWorkbenchReview(message.params),
410
+ "evolution/workbench/rollback": () =>
411
+ this._evolutionWorkbenchRollback(message.params),
412
+ "evolution/knowledge/conflicts": () =>
413
+ this._governedKnowledgeConflicts(message.params),
414
+ "evolution/knowledge/merge": () =>
415
+ this._governedKnowledgeMerge(message.params),
356
416
  };
357
417
  const handler = handlers[method];
358
418
  if (!handler) {
@@ -400,6 +460,20 @@ export class CcAppServer {
400
460
  websocket: { stability: "experimental" },
401
461
  limits: this.requestQueue.snapshot(),
402
462
  graphRuntime: this.graphRuntime.runtimeClaims(),
463
+ evolutionWorkbench: {
464
+ available: this.evolutionWorkbenchHost !== null,
465
+ methods:
466
+ this.evolutionWorkbenchHost === null
467
+ ? []
468
+ : ["list", "compare", "review", "rollback"],
469
+ },
470
+ governedKnowledgeReview: {
471
+ available: this.governedKnowledgeReviewHost !== null,
472
+ methods:
473
+ this.governedKnowledgeReviewHost === null
474
+ ? []
475
+ : ["conflicts", "merge"],
476
+ },
403
477
  schema: {
404
478
  id: APP_SERVER_SCHEMA.$id,
405
479
  version: APP_SERVER_PROTOCOL_VERSION,
@@ -415,6 +489,91 @@ export class CcAppServer {
415
489
  return runtime;
416
490
  }
417
491
 
492
+ _requireEvolutionWorkbenchHost() {
493
+ if (this.evolutionWorkbenchHost === null) {
494
+ throw new JsonRpcError(
495
+ JSON_RPC_ERROR.NOT_FOUND,
496
+ "Evolution Workbench is not configured for this App Server",
497
+ );
498
+ }
499
+ return this.evolutionWorkbenchHost;
500
+ }
501
+
502
+ _evolutionWorkbenchList(rawParams = {}) {
503
+ const params = requireObject(rawParams);
504
+ return this._requireEvolutionWorkbenchHost().list({
505
+ query: typeof params.query === "string" ? params.query : "",
506
+ status: params.status ?? null,
507
+ offset: params.offset ?? 0,
508
+ limit: params.limit ?? 100,
509
+ });
510
+ }
511
+
512
+ _evolutionWorkbenchCompare(rawParams) {
513
+ const params = requireObject(rawParams);
514
+ return this._requireEvolutionWorkbenchHost().compare(
515
+ requiredString(params.leftPacketDigest, "leftPacketDigest"),
516
+ requiredString(params.rightPacketDigest, "rightPacketDigest"),
517
+ );
518
+ }
519
+
520
+ _evolutionWorkbenchReview(rawParams) {
521
+ const params = requireObject(rawParams);
522
+ if (!Array.isArray(params.packetDigests)) {
523
+ throw new JsonRpcError(
524
+ JSON_RPC_ERROR.INVALID_PARAMS,
525
+ "packetDigests must be an array",
526
+ );
527
+ }
528
+ return this._requireEvolutionWorkbenchHost().review({
529
+ packetDigests: params.packetDigests,
530
+ decision: requiredString(params.decision, "decision"),
531
+ reason: requiredString(params.reason, "reason"),
532
+ });
533
+ }
534
+
535
+ _evolutionWorkbenchRollback(rawParams) {
536
+ const params = requireObject(rawParams);
537
+ return this._requireEvolutionWorkbenchHost().rollback({
538
+ fromPacketDigest: requiredString(
539
+ params.fromPacketDigest,
540
+ "fromPacketDigest",
541
+ ),
542
+ toPacketDigest: requiredString(params.toPacketDigest, "toPacketDigest"),
543
+ reason: requiredString(params.reason, "reason"),
544
+ });
545
+ }
546
+
547
+ _requireGovernedKnowledgeReviewHost() {
548
+ if (this.governedKnowledgeReviewHost === null) {
549
+ throw new JsonRpcError(
550
+ JSON_RPC_ERROR.NOT_FOUND,
551
+ "Governed knowledge review is not configured for this App Server",
552
+ );
553
+ }
554
+ return this.governedKnowledgeReviewHost;
555
+ }
556
+
557
+ _governedKnowledgeConflicts(rawParams = {}) {
558
+ const params = requireObject(rawParams);
559
+ return this._requireGovernedKnowledgeReviewHost().list({
560
+ cursor: params.cursor ?? 0,
561
+ limit: params.limit ?? 50,
562
+ });
563
+ }
564
+
565
+ _governedKnowledgeMerge(rawParams) {
566
+ const params = requireObject(rawParams);
567
+ return this._requireGovernedKnowledgeReviewHost().merge({
568
+ conflictEnvelopeDigest: requiredString(
569
+ params.conflictEnvelopeDigest,
570
+ "conflictEnvelopeDigest",
571
+ ),
572
+ mergedRecord: requireObject(params.mergedRecord, "mergedRecord"),
573
+ reason: requiredString(params.reason, "reason"),
574
+ });
575
+ }
576
+
418
577
  async _contextPlan(rawParams) {
419
578
  const params = requireObject(rawParams);
420
579
  const runtime = this._contextMemoryRuntime({
@@ -612,6 +771,8 @@ export class CcAppServer {
612
771
  input,
613
772
  signal,
614
773
  evolutionIngress,
774
+ skillOutcomeIndex,
775
+ skillVectorAuthority,
615
776
  }) {
616
777
  const threadId = `graph-agent:${runId}:${nodeId}`;
617
778
  const turn = { id: attempt.id, threadId };
@@ -622,9 +783,17 @@ export class CcAppServer {
622
783
  try {
623
784
  const turnOptions = { ...(input?.options || {}) };
624
785
  delete turnOptions.evolutionIngress;
786
+ delete turnOptions.skillOutcomeIndex;
787
+ delete turnOptions.skillVectorAuthority;
625
788
  if (evolutionIngress !== null && evolutionIngress !== undefined) {
626
789
  turnOptions.evolutionIngress = evolutionIngress;
627
790
  }
791
+ if (skillOutcomeIndex !== null && skillOutcomeIndex !== undefined) {
792
+ turnOptions.skillOutcomeIndex = skillOutcomeIndex;
793
+ }
794
+ if (skillVectorAuthority !== null && skillVectorAuthority !== undefined) {
795
+ turnOptions.skillVectorAuthority = skillVectorAuthority;
796
+ }
628
797
  const result = await this.kernel.startTurn({
629
798
  threadId,
630
799
  turnId: attempt.id,
@@ -866,11 +1035,20 @@ export class CcAppServer {
866
1035
  async _runTurn(active, input, options) {
867
1036
  const { turn } = active;
868
1037
  try {
1038
+ const turnOptions = { ...options };
1039
+ delete turnOptions.skillOutcomeIndex;
1040
+ delete turnOptions.skillVectorAuthority;
1041
+ if (this.skillOutcomeIndex !== null) {
1042
+ turnOptions.skillOutcomeIndex = this.skillOutcomeIndex;
1043
+ }
1044
+ if (this.skillVectorAuthority !== null) {
1045
+ turnOptions.skillVectorAuthority = this.skillVectorAuthority;
1046
+ }
869
1047
  const result = await this.kernel.startTurn({
870
1048
  threadId: turn.threadId,
871
1049
  turnId: turn.id,
872
1050
  input,
873
- options,
1051
+ options: turnOptions,
874
1052
  emit: (event) => this._emitKernelEvent(turn, event),
875
1053
  requestApproval: (event) => this._requestApproval(turn, event),
876
1054
  });
@@ -10,6 +10,8 @@ import { WebSocketServer } from "ws";
10
10
  import { BoundedAsyncQueue, QueueOverloadedError } from "./bounded-queue.js";
11
11
  import { CcAppServer } from "./server.js";
12
12
  import { JSON_RPC_ERROR, JsonRpcError, rpcError } from "./protocol.js";
13
+ import { isEvolutionWorkbenchCliHost } from "../evolution/evolution-workbench-cli-host.js";
14
+ import { isGovernedKnowledgeReviewHost } from "../evolution/governed-knowledge-review-host.js";
13
15
 
14
16
  export const APP_SERVER_WEBSOCKET_PROTOCOL =
15
17
  "chainlesschain.app-server.experimental.v1";
@@ -250,6 +252,22 @@ export class WebSocketConnectionTransport extends EventEmitter {
250
252
  export class WebSocketAppServerHost extends EventEmitter {
251
253
  constructor(options = {}) {
252
254
  super();
255
+ if (
256
+ options.evolutionWorkbenchHost != null &&
257
+ !isEvolutionWorkbenchCliHost(options.evolutionWorkbenchHost)
258
+ ) {
259
+ throw new TypeError(
260
+ "WebSocket App Server evolutionWorkbenchHost must be a branded Workbench host",
261
+ );
262
+ }
263
+ if (
264
+ options.governedKnowledgeReviewHost != null &&
265
+ !isGovernedKnowledgeReviewHost(options.governedKnowledgeReviewHost)
266
+ ) {
267
+ throw new TypeError(
268
+ "WebSocket App Server governedKnowledgeReviewHost must be a branded review host",
269
+ );
270
+ }
253
271
  this.options = options;
254
272
  this.binding = validateWebSocketAppServerOptions(options);
255
273
  this.port = boundedInteger(options.port, 18800, 0, 65_535);
@@ -398,6 +416,11 @@ export class WebSocketAppServerHost extends EventEmitter {
398
416
  kernel: this.kernelFactory?.(),
399
417
  evolutionCompositionFactory:
400
418
  this.options.evolutionCompositionFactory ?? null,
419
+ skillOutcomeIndex: this.options.skillOutcomeIndex ?? null,
420
+ skillVectorAuthority: this.options.skillVectorAuthority ?? null,
421
+ evolutionWorkbenchHost: this.options.evolutionWorkbenchHost ?? null,
422
+ governedKnowledgeReviewHost:
423
+ this.options.governedKnowledgeReviewHost ?? null,
401
424
  transport: "websocket",
402
425
  maxQueuedRequests: this.options.maxQueuedRequests,
403
426
  maxQueuedRequestBytes: this.options.maxQueuedRequestBytes,
@@ -2,6 +2,7 @@ export const AGENT_EVOLUTION_RUNTIME_COMPOSITION_SCHEMA =
2
2
  "chainlesschain.agent-evolution-runtime-composition/v1";
3
3
 
4
4
  const COMPOSITIONS = new WeakSet();
5
+ const SKILL_OUTCOME_INDEXES = new WeakSet();
5
6
 
6
7
  export function sealAgentEvolutionRuntimeComposition(fields) {
7
8
  const composition = Object.freeze({
@@ -20,3 +21,19 @@ export function captureAgentEvolutionRuntimeComposition(value) {
20
21
  }
21
22
  return value;
22
23
  }
24
+
25
+ export function sealAgentSkillOutcomeIndex(fields) {
26
+ const index = Object.freeze({
27
+ schema: "chainlesschain.agent-skill-outcome-index/v1",
28
+ ...fields,
29
+ });
30
+ SKILL_OUTCOME_INDEXES.add(index);
31
+ return index;
32
+ }
33
+
34
+ export function captureAgentSkillOutcomeIndex(value) {
35
+ if (!SKILL_OUTCOME_INDEXES.has(value)) {
36
+ throw new TypeError("a branded Agent Skill outcome index is required");
37
+ }
38
+ return value;
39
+ }