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
@@ -0,0 +1,195 @@
1
+ import { createHash } from "node:crypto";
2
+
3
+ import {
4
+ EVOLUTION_WORKBENCH_BATCH_PLAN_SCHEMA,
5
+ filterEvolutionWorkbenchProjection,
6
+ } from "./evolution-workbench-projection.js";
7
+ import { verifySkillPromotionReviewPacketArtifact } from "./skill-promotion-review.js";
8
+
9
+ export const EVOLUTION_WORKBENCH_BATCH_ITEM_REQUEST_SCHEMA =
10
+ "chainlesschain.evolution-workbench-batch-item-request/v1";
11
+ export const EVOLUTION_WORKBENCH_BATCH_EXECUTION_SCHEMA =
12
+ "chainlesschain.evolution-workbench-batch-execution/v1";
13
+
14
+ const DIGEST = /^sha256:[a-f0-9]{64}$/u;
15
+
16
+ function canonical(value) {
17
+ if (value === null || typeof value !== "object") return JSON.stringify(value);
18
+ if (Array.isArray(value)) return `[${value.map(canonical).join(",")}]`;
19
+ return `{${Object.keys(value)
20
+ .sort()
21
+ .map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`)
22
+ .join(",")}}`;
23
+ }
24
+
25
+ function hash(domain, value) {
26
+ return `sha256:${createHash("sha256")
27
+ .update(domain)
28
+ .update("\0")
29
+ .update(canonical(value))
30
+ .digest("hex")}`;
31
+ }
32
+
33
+ function clone(value) {
34
+ return value == null ? value : structuredClone(value);
35
+ }
36
+
37
+ function freeze(value) {
38
+ if (value && typeof value === "object" && !Object.isFrozen(value)) {
39
+ Object.freeze(value);
40
+ for (const child of Object.values(value)) freeze(child);
41
+ }
42
+ return value;
43
+ }
44
+
45
+ function verifyPlan(input, tenantId) {
46
+ if (
47
+ input?.schema !== EVOLUTION_WORKBENCH_BATCH_PLAN_SCHEMA ||
48
+ input.tenantId !== tenantId ||
49
+ !DIGEST.test(input?.planDigest ?? "")
50
+ )
51
+ throw new TypeError("Workbench batch plan is invalid");
52
+ const core = clone(input);
53
+ delete core.planDigest;
54
+ if (hash(EVOLUTION_WORKBENCH_BATCH_PLAN_SCHEMA, core) !== input.planDigest)
55
+ throw new Error("Workbench batch plan digest is invalid");
56
+ return freeze(clone(input));
57
+ }
58
+
59
+ function itemRequest(plan, packet) {
60
+ const core = {
61
+ schema: EVOLUTION_WORKBENCH_BATCH_ITEM_REQUEST_SCHEMA,
62
+ tenantId: plan.tenantId,
63
+ planDigest: plan.planDigest,
64
+ sourceProjectionDigest: plan.sourceProjectionDigest,
65
+ packetDigest: packet.packetDigest,
66
+ candidateId: packet.candidateId,
67
+ candidateContentDigest: packet.candidateContentDigest,
68
+ decision: plan.decision,
69
+ reason: plan.reason,
70
+ requestedBy: plan.requestedBy,
71
+ requiredHumanQuorum: packet.requiredHumanQuorum,
72
+ contentRiskDigest: packet.contentRisk.contentRiskDigest,
73
+ contentRiskDetected: packet.contentRisk.detected,
74
+ };
75
+ return freeze({
76
+ ...core,
77
+ requestDigest: hash(EVOLUTION_WORKBENCH_BATCH_ITEM_REQUEST_SCHEMA, core),
78
+ });
79
+ }
80
+
81
+ export class EvolutionWorkbenchBatchExecutor {
82
+ constructor({ tenantId, ports } = {}) {
83
+ if (typeof tenantId !== "string" || tenantId.trim() === "")
84
+ throw new TypeError("tenantId is required");
85
+ this.tenantId = tenantId;
86
+ for (const name of [
87
+ "loadProjection",
88
+ "resolvePacket",
89
+ "requestHumanDecision",
90
+ "retainDecision",
91
+ "commitExecutionItem",
92
+ ]) {
93
+ if (typeof ports?.[name] !== "function")
94
+ throw new TypeError(
95
+ `Workbench batch executor port ${name} is required`,
96
+ );
97
+ this[`_${name}`] = ports[name].bind(ports);
98
+ }
99
+ }
100
+
101
+ async execute(input) {
102
+ const plan = verifyPlan(input, this.tenantId);
103
+ const projection = await this._loadProjection({
104
+ tenantId: this.tenantId,
105
+ projectionDigest: plan.sourceProjectionDigest,
106
+ });
107
+ filterEvolutionWorkbenchProjection(projection, { limit: 1 });
108
+ if (
109
+ projection.tenantId !== plan.tenantId ||
110
+ projection.runId !== plan.runId ||
111
+ projection.skillName !== plan.skillName ||
112
+ projection.projectionDigest !== plan.sourceProjectionDigest
113
+ )
114
+ throw new Error("Workbench batch source projection changed");
115
+ const pending = new Map(
116
+ projection.candidates
117
+ .filter(({ status }) => status === "pending")
118
+ .map((candidate) => [candidate.packetDigest, candidate]),
119
+ );
120
+ const items = [];
121
+ for (const packetDigest of plan.packetDigests) {
122
+ if (!pending.has(packetDigest))
123
+ throw new Error("Workbench batch packet is no longer pending");
124
+ const packet = verifySkillPromotionReviewPacketArtifact(
125
+ await this._resolvePacket({ tenantId: this.tenantId, packetDigest }),
126
+ );
127
+ if (
128
+ packet.packetDigest !== packetDigest ||
129
+ packet.candidateId !== pending.get(packetDigest).candidateId
130
+ )
131
+ throw new Error("Workbench batch packet was substituted");
132
+ const request = itemRequest(plan, packet);
133
+ const decision = await this._requestHumanDecision(request);
134
+ const expectedDecision =
135
+ plan.decision === "approve" ? "approved" : "rejected";
136
+ if (
137
+ decision?.tenantId !== this.tenantId ||
138
+ decision.packetDigest !== packetDigest ||
139
+ decision.candidateId !== packet.candidateId ||
140
+ decision.decision !== expectedDecision ||
141
+ decision.automated !== false ||
142
+ decision.reason !== plan.reason ||
143
+ decision.requestDigest !== request.requestDigest ||
144
+ !DIGEST.test(decision.receiptDigest ?? "") ||
145
+ typeof decision.signature !== "string" ||
146
+ decision.signature.length < 32
147
+ )
148
+ throw new Error("Workbench batch human decision is not exactly bound");
149
+ const retained = await this._retainDecision({
150
+ packetDigest,
151
+ decision,
152
+ });
153
+ if (
154
+ retained?.persisted !== true ||
155
+ retained.receiptDigest !== decision.receiptDigest
156
+ )
157
+ throw new Error("Workbench batch decision was not durably retained");
158
+ const itemCore = {
159
+ packetDigest,
160
+ requestDigest: request.requestDigest,
161
+ decisionReceiptDigest: decision.receiptDigest,
162
+ };
163
+ const item = freeze({
164
+ ...itemCore,
165
+ itemDigest: hash(
166
+ "chainlesschain.evolution-workbench-batch-execution-item/v1",
167
+ itemCore,
168
+ ),
169
+ });
170
+ const committed = await this._commitExecutionItem({
171
+ tenantId: this.tenantId,
172
+ planDigest: plan.planDigest,
173
+ item,
174
+ });
175
+ if (
176
+ committed?.authenticated !== true ||
177
+ committed.durable !== true ||
178
+ committed.itemDigest !== item.itemDigest
179
+ )
180
+ throw new Error("Workbench batch execution item was not committed");
181
+ items.push(item);
182
+ }
183
+ const core = {
184
+ schema: EVOLUTION_WORKBENCH_BATCH_EXECUTION_SCHEMA,
185
+ tenantId: this.tenantId,
186
+ planDigest: plan.planDigest,
187
+ sourceProjectionDigest: plan.sourceProjectionDigest,
188
+ items,
189
+ };
190
+ return freeze({
191
+ ...core,
192
+ executionDigest: hash(EVOLUTION_WORKBENCH_BATCH_EXECUTION_SCHEMA, core),
193
+ });
194
+ }
195
+ }
@@ -0,0 +1,169 @@
1
+ import { types as utilTypes } from "node:util";
2
+
3
+ import {
4
+ buildEvolutionWorkbenchBatchPlan,
5
+ filterEvolutionWorkbenchProjection,
6
+ } from "./evolution-workbench-projection.js";
7
+ import {
8
+ buildEvolutionWorkbenchRollbackPlan,
9
+ compareEvolutionWorkbenchVersions,
10
+ } from "./evolution-workbench-version-control.js";
11
+
12
+ const HOSTS = new WeakSet();
13
+ const DIGEST = /^sha256:[a-f0-9]{64}$/u;
14
+
15
+ function capture(owner, method, label) {
16
+ if (
17
+ !owner ||
18
+ typeof owner !== "object" ||
19
+ utilTypes.isProxy(owner) ||
20
+ typeof owner[method] !== "function"
21
+ ) {
22
+ throw new TypeError(`${label}.${method}() is required`);
23
+ }
24
+ return (...args) => Reflect.apply(owner[method], owner, args);
25
+ }
26
+
27
+ function text(value, label) {
28
+ if (typeof value !== "string" || value.trim() !== value || value === "") {
29
+ throw new TypeError(`${label} is required`);
30
+ }
31
+ return value;
32
+ }
33
+
34
+ function digest(value, label) {
35
+ if (!DIGEST.test(value ?? "")) throw new TypeError(`${label} is invalid`);
36
+ return value;
37
+ }
38
+
39
+ function identity(value, tenantId) {
40
+ if (
41
+ value?.authenticated !== true ||
42
+ value.durable !== true ||
43
+ value.automated !== false ||
44
+ value.tenantId !== tenantId ||
45
+ typeof value.subjectId !== "string" ||
46
+ value.subjectId.trim() === "" ||
47
+ !DIGEST.test(value.receiptDigest ?? "")
48
+ ) {
49
+ throw new Error("Workbench CLI requires a durable human identity");
50
+ }
51
+ return value;
52
+ }
53
+
54
+ async function retainProjection(retain, projection) {
55
+ const result = await retain({
56
+ tenantId: projection.tenantId,
57
+ projection,
58
+ });
59
+ if (
60
+ result?.authenticated !== true ||
61
+ result.durable !== true ||
62
+ result.projectionDigest !== projection.projectionDigest
63
+ ) {
64
+ throw new Error("Workbench projection was not durably retained");
65
+ }
66
+ }
67
+
68
+ export function createEvolutionWorkbenchCliHost({
69
+ tenantId: tenantIdInput,
70
+ projectionLoader,
71
+ projectionAuthority,
72
+ identityProvider,
73
+ activeStateReader,
74
+ batchExecutor,
75
+ rollbackExecutor,
76
+ } = {}) {
77
+ const tenantId = text(tenantIdInput, "tenantId");
78
+ const loadProjection = capture(projectionLoader, "load", "projectionLoader");
79
+ const retain = capture(projectionAuthority, "retain", "projectionAuthority");
80
+ const resolveIdentity = capture(
81
+ identityProvider,
82
+ "current",
83
+ "identityProvider",
84
+ );
85
+ const readActiveState = capture(
86
+ activeStateReader,
87
+ "read",
88
+ "activeStateReader",
89
+ );
90
+ const executeBatch = capture(batchExecutor, "execute", "batchExecutor");
91
+ const executeRollback = capture(
92
+ rollbackExecutor,
93
+ "execute",
94
+ "rollbackExecutor",
95
+ );
96
+
97
+ async function projection() {
98
+ const value = await loadProjection({ tenantId });
99
+ filterEvolutionWorkbenchProjection(value, { limit: 1 });
100
+ if (value.tenantId !== tenantId) {
101
+ throw new Error("Workbench projection crossed its tenant boundary");
102
+ }
103
+ return value;
104
+ }
105
+
106
+ const host = Object.freeze({
107
+ tenantId,
108
+ async list(options = {}) {
109
+ return filterEvolutionWorkbenchProjection(await projection(), options);
110
+ },
111
+ async compare(leftPacketDigest, rightPacketDigest) {
112
+ return compareEvolutionWorkbenchVersions(await projection(), {
113
+ leftPacketDigest: digest(leftPacketDigest, "left packet digest"),
114
+ rightPacketDigest: digest(rightPacketDigest, "right packet digest"),
115
+ });
116
+ },
117
+ async review({ packetDigests, decision, reason } = {}) {
118
+ const current = await projection();
119
+ const actor = identity(await resolveIdentity({ tenantId }), tenantId);
120
+ const plan = buildEvolutionWorkbenchBatchPlan(current, {
121
+ packetDigests,
122
+ decision,
123
+ reason,
124
+ requestedBy: actor.subjectId,
125
+ });
126
+ await retainProjection(retain, current);
127
+ return executeBatch(plan);
128
+ },
129
+ async rollback({ fromPacketDigest, toPacketDigest, reason } = {}) {
130
+ const current = await projection();
131
+ const actor = identity(await resolveIdentity({ tenantId }), tenantId);
132
+ const from = current.candidates.find(
133
+ ({ packetDigest }) => packetDigest === fromPacketDigest,
134
+ );
135
+ if (!from || from.actualUsage.active !== true) {
136
+ throw new Error("Workbench rollback source is not active");
137
+ }
138
+ const active = await readActiveState({
139
+ tenantId,
140
+ skillName: current.skillName,
141
+ });
142
+ if (
143
+ active?.authenticated !== true ||
144
+ active.durable !== true ||
145
+ active.tenantId !== tenantId ||
146
+ active.skillName !== current.skillName ||
147
+ active.contentDigest !== from.candidateContentDigest ||
148
+ !DIGEST.test(active.stateDigest ?? "")
149
+ ) {
150
+ throw new Error("Workbench active state does not match the projection");
151
+ }
152
+ const plan = buildEvolutionWorkbenchRollbackPlan(current, {
153
+ fromPacketDigest: digest(fromPacketDigest, "from packet digest"),
154
+ toPacketDigest: digest(toPacketDigest, "to packet digest"),
155
+ expectedActiveStateDigest: active.stateDigest,
156
+ requestedBy: actor.subjectId,
157
+ reason,
158
+ });
159
+ await retainProjection(retain, current);
160
+ return executeRollback(plan);
161
+ },
162
+ });
163
+ HOSTS.add(host);
164
+ return host;
165
+ }
166
+
167
+ export function isEvolutionWorkbenchCliHost(value) {
168
+ return HOSTS.has(value);
169
+ }