chainlesschain 0.166.46 → 0.166.48

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 (232) hide show
  1. package/README.md +6 -4
  2. package/package.json +4 -2
  3. package/src/assets/web-panel/assets/{AIOps-Cp8KiMmv.js → AIOps-BLGEffkh.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-B4d9BGsm.js → ActionButton-Cz1z2VGD.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-Cf9yXTkv.js → Analytics-C3j9cf6q.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-40UkmxtP.js → AppLayout-BR9ERuCA.js} +4 -4
  7. package/src/assets/web-panel/assets/{Artifacts-Ckkb4oOA.js → Artifacts-CozJCm4y.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-Dnf569k5.js → Audit-DC5g9Ra2.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-CA6bLem4.js → BackgroundAgents-B1zrQ0dW.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-ChQU0I_Q.js → Backup-ChVnfjpm.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-BHeZXnNN.js → BaseInput-8_vLQsLf.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-DcFVYB2E.js → Chat-Dct9bm6L.js} +5 -5
  13. package/src/assets/web-panel/assets/ChatBubbleRenderer-BvoSsCKh.js +1 -0
  14. package/src/assets/web-panel/assets/{Checkbox-2PDbejv2.js → Checkbox-DZQIsCIC.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-DJBn1RAu.js → Codegen-CdzHxmnq.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-CPRq7n6y.js → Col-DdAN8LeW.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-axvINFMi.js → Community-CNgjT9MA.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-_OX4Qbe0.js → Compact-BtQiX6G-.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-DWAkvzRL.js → Compliance-OGX5ma3j.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-CUIJ25oj.js → Cowork-CgugQnGM.js} +3 -3
  21. package/src/assets/web-panel/assets/{Cron-nR0m7H3_.js → Cron-Bpg7cPFD.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-CgTLXzh_.js → Crosschain-D1hsuswf.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-BllzRB6Q.js → DID-miDRsMBw.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-C9f0IIBN.js → Dashboard-CGcl8htP.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-BkahetiO.js → Dropdown-BFaxTdVE.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-rartVC-k.js → EmailListRenderer-BQdGLZIO.js} +1 -1
  27. package/src/assets/web-panel/assets/{EvolutionSettings-BqpG3XHV.js → EvolutionSettings-bMvgBk6r.js} +1 -1
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DgUdFvw1.js → FamilyGuardDashboard-c1WVC_--.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-oFpIQU6g.js → Federation-DyAcFrQY.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-BUH5xlyP.js → FormItemContext-CfwpfD2B.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-ilRa-ueg.js → GenericCardRenderer-DkJcbBpS.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git-DlHHSF8j.js → Git-DgYIrPJh.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-yQiiXIWe.js → Governance-BF1tYPJ6.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-BUDRVGOP.js → Inference-BFkwRIrU.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-BaGyIoN1.js → KnowledgeGraph-DpCoqhBa.js} +1 -1
  36. package/src/assets/web-panel/assets/{Logs-C1cO6zE0.js → Logs-DU2qAJmD.js} +2 -2
  37. package/src/assets/web-panel/assets/{MarkdownRenderer-_z_Iaoes.js → MarkdownRenderer-QWv7UJLq.js} +1 -1
  38. package/src/assets/web-panel/assets/{Marketplace-CM8cGL0K.js → Marketplace-Dz9NUrfo.js} +1 -1
  39. package/src/assets/web-panel/assets/{McpTools-CDqAMU0U.js → McpTools-B67I3d5v.js} +3 -3
  40. package/src/assets/web-panel/assets/{Memory-CfB0-Ofv.js → Memory-crkElJSy.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-BL18ytvB.js → MobileBridge-BO20VbdX.js} +1 -1
  42. package/src/assets/web-panel/assets/{MobileProjects-PIyyxbuJ.js → MobileProjects-Ba-3gZZd.js} +1 -1
  43. package/src/assets/web-panel/assets/{Mtc-BTTrFCol.js → Mtc-BAHZM084.js} +4 -4
  44. package/src/assets/web-panel/assets/{MtcAudit-JHZn037c.js → MtcAudit-CL3DzajL.js} +4 -4
  45. package/src/assets/web-panel/assets/{Multisig-CMf9NEdB.js → Multisig-BSWWzvWH.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-Dhk3qaus.js → NLProgramming-fnxqXM_3.js} +1 -1
  47. package/src/assets/web-panel/assets/{Notes-6F8EarNN.js → Notes-qUZPIQXT.js} +3 -3
  48. package/src/assets/web-panel/assets/{NotificationSettings-gxdaVEit.js → NotificationSettings-x9Xrixqu.js} +1 -1
  49. package/src/assets/web-panel/assets/{OrderTableRenderer-gVgXQWdc.js → OrderTableRenderer-BtMtQUt7.js} +1 -1
  50. package/src/assets/web-panel/assets/{Organization-CzvHcDNO.js → Organization-C946Hzna.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-Dclx30Vv.js → Overflow-BYf8KIts.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P-CM0Wm9vZ.js → P2P-Cbqf5dnv.js} +2 -2
  53. package/src/assets/web-panel/assets/PdhVaultBrowser-rmxp0cuF.js +7 -0
  54. package/src/assets/web-panel/assets/{Permissions-B_oATenG.js → Permissions-CZBw45EW.js} +3 -3
  55. package/src/assets/web-panel/assets/{PersonalDataHub-CptiVBh5.js → PersonalDataHub-BKwUAt43.js} +4 -4
  56. package/src/assets/web-panel/assets/{Pipeline-DkHzgyyI.js → Pipeline-DmFD2QW4.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-DzZvwcKh.js → Privacy-KpuwWvt5.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-CzkCs-5G.js → ProjectInit-Bt8UheX6.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-BB8dcxRD.js → ProjectSettings-2ZeAn9CP.js} +2 -2
  60. package/src/assets/web-panel/assets/{Projects-B7PW9CFY.js → Projects-zBuet8Zs.js} +1 -1
  61. package/src/assets/web-panel/assets/{Providers-Tfx-ti1V.js → Providers-DcEAnw6L.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-EvWlNhfX.js → QrScannerModal-qF7liYG9.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-CUspgbNC.js → QuickAsk-qiESlVBJ.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-COY2g77J.js → Recommend-Bk-cQyi9.js} +1 -1
  65. package/src/assets/web-panel/assets/{RemoteSession-BzMBU6E6.js → RemoteSession-CwrekErS.js} +2 -2
  66. package/src/assets/web-panel/assets/{Reputation-RtYRF4YP.js → Reputation-Bmw_UQtW.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-Bva3l9Lc.js → Row-CPdqZIUX.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-BhjzLvW3.js → RssFeed-D_W-xxvS.js} +2 -2
  69. package/src/assets/web-panel/assets/{Search-BYzT2PTR.js → Search-Hu0oDFj_.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-Bcl4-KTv.js → Security-DeRxUwmq.js} +3 -3
  71. package/src/assets/web-panel/assets/{Services-BRRa4A0f.js → Services-CsNmHFkf.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-DYQ016qy.js → Skeleton-gv_Vz0tN.js} +1 -1
  73. package/src/assets/web-panel/assets/{Skills-CAUKL9JA.js → Skills-Dgg-_rCB.js} +1 -1
  74. package/src/assets/web-panel/assets/{Sla-BTyUqfuD.js → Sla-Bpu-bsEJ.js} +1 -1
  75. package/src/assets/web-panel/assets/{SpeechSettings-CUjMihrs.js → SpeechSettings-CrhleHuF.js} +1 -1
  76. package/src/assets/web-panel/assets/{SyncSettings-CvfOSupr.js → SyncSettings-JHjUN6I9.js} +2 -2
  77. package/src/assets/web-panel/assets/{Tasks-EvjNXrWH.js → Tasks-DKRWKkl9.js} +1 -1
  78. package/src/assets/web-panel/assets/{Templates-wPAp0EoM.js → Templates-leiWntLq.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-CP0D-q9Q.js → Tenant--1bYulvn.js} +1 -1
  80. package/src/assets/web-panel/assets/{Terminal-CQ0f2iFg.js → Terminal-C0y6FvSS.js} +2 -2
  81. package/src/assets/web-panel/assets/{TimelineRenderer-D3JrGSPb.js → TimelineRenderer-CQK4PVv4.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-yXf2PPp9.js → Tokens-DbIvF-DV.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-DfmMOoZ2.js → Trigger-CkXJ2vuq.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-BTCyMgf1.js → Trust-B02WXJPw.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-DKCwIBHi.js → UkeySign-VPMkfzmw.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-CQpDSzLO.js → VideoEditing-C5ezUnah.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-CyFrzC3K.js → Wallet-CYfvYRrY.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-D6Nr_1kd.js → WebAuthn-DtKl-kpr.js} +4 -4
  89. package/src/assets/web-panel/assets/{WorkflowEditor-CgR9tNrB.js → WorkflowEditor-DACITF-u.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-CRG_IeyP.js → chat-qnygfnLi.js} +1 -1
  91. package/src/assets/web-panel/assets/{colors-MdE3TStI.js → colors-D4mISLBD.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-B0LRuiNV.js → compact-item-BBPfxYGL.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-B_V5fjcX.js → createContext-Byx4ndHp.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-DBy6gsuI.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-DSL-c_hr.js → hasIn-CGjLkkn3.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-DE7bSYmW.js → index-B8UpadHC.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BD0w-888.js → index-B9jH-h4X.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BbZZ7P_c.js → index-BN7_TSgU.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BIDCNwy6.js → index-BNe2lCk6.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CkN53KiJ.js → index-B_fHPZ8E.js} +1 -1
  101. package/src/assets/web-panel/assets/index-BfEDXk_E.js +1 -0
  102. package/src/assets/web-panel/assets/{index-BsAEd-Do.js → index-BklGH3YI.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CS3bOhV7.js → index-BmKYaaGP.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-B3iW-mhn.js → index-BxQF1wCU.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-SmQfEHjp.js → index-ByA1NyFP.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-0200QxC4.js → index-BzeBBAl5.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-c8OqO3rq.js → index-C3abGsSW.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-C-aKWR2v.js → index-C9tcHs46.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BNhWoD6d.js → index-CD5Btq6p.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-CVDi4rS9.js → index-CFMWjuav.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-CEOAZm5j.js → index-CMj8qmpX.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-C67dPW0L.js → index-CVUJjQAT.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-D3pJBTvo.js → index-CWhI8G14.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-DtOTppk8.js → index-CZjNamSU.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DRRY44XP.js → index-CmHE-lY_.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-Tg3yl8wc.js → index-CoA8WsVr.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CXMeisJK.js → index-Cpg3AWRy.js} +1 -1
  118. package/src/assets/web-panel/assets/index-CrxUwNM8.js +1 -0
  119. package/src/assets/web-panel/assets/{index-Bq8-2Ibv.js → index-CsVuQsY1.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-BHp1nSur.js → index-CydHMjwc.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-CPYshcic.js → index-DH6iC5b2.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-DBwBZwio.js → index-DZXhKAk9.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-Didyuq2Z.js → index-D_g9mA1N.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CdHMc9LQ.js → index-DboTeuPF.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-C5dqieYX.js → index-DfgpKd64.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-CdplnAS9.js → index-Dmfe0L2Z.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-KaSejHjf.js → index-Dzni_5Qw.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-BpwGsAA-.js → index-J5JkStvY.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-OBhlHSMN.js → index-Ne8UGllV.js} +3 -3
  130. package/src/assets/web-panel/assets/{index-CZICtYJ0.js → index-O09jXbir.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-DVgTf7CZ.js → index-Y7el_3WS.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-BQAsL19t.js → index-c_tBkIlU.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-BMm8tO2X.js → index-lKJWAmd4.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-CNytQuFq.js → index-xzRKTy0R.js} +1 -1
  135. package/src/assets/web-panel/assets/{initDefaultProps-P8SBN6Di.js → initDefaultProps-XuhfEIhB.js} +1 -1
  136. package/src/assets/web-panel/assets/{motion-BubbjUT_.js → motion-Cbxh6AxO.js} +1 -1
  137. package/src/assets/web-panel/assets/{move-Chcykv0I.js → move-C7IEnFly.js} +1 -1
  138. package/src/assets/web-panel/assets/{mtc-parser-DyiYuGDu.js → mtc-parser-lLADx4LL.js} +1 -1
  139. package/src/assets/web-panel/assets/{omit-Rdwb_Neb.js → omit-mIbic_k-.js} +1 -1
  140. package/src/assets/web-panel/assets/{pickAttrs-CCr0MYHl.js → pickAttrs-_xIYEqu3.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-B1ZXz3bb.js → placementArrow-ClB-E0ny.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-BGEdwej6.js → responsiveObserve-D36Bg2ut.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-CpnsUMaT.js → slide-CUuO08Bl.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-C7x-TVp_.js → statusUtils-BKahwLbv.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-CC5k_791.js → styleChecker-2pT-T8vy.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-BpZFKsJW.js → useFlexGapSupport-DyH5g7Rg.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-CVq5HySy.js → useFs-CTOauB3X.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-BGkdLryu.js → usePersonalDataHub-B02JYIMe.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-uLtOUEK-.js → vnode-Do22wQrc.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-BfVC9iUs.js → zoom-BfnL7rit.js} +1 -1
  151. package/src/assets/web-panel/index.html +1 -1
  152. package/src/command-help-index.json +3 -3
  153. package/src/commands/agent.js +8 -0
  154. package/src/commands/background-session.js +31 -3
  155. package/src/commands/chat.js +5 -1
  156. package/src/commands/eval.js +86 -28
  157. package/src/commands/llm.js +104 -1
  158. package/src/commands/plugin.js +161 -1
  159. package/src/commands/sandbox.js +121 -2
  160. package/src/commands/serve.js +11 -2
  161. package/src/commands/skill.js +29 -0
  162. package/src/data/changelog.json +26 -0
  163. package/src/gateways/ws/session-protocol.js +13 -0
  164. package/src/gateways/ws/ws-agent-handler.js +17 -0
  165. package/src/gateways/ws/ws-server.js +3 -0
  166. package/src/gateways/ws/ws-session-state.js +131 -0
  167. package/src/generated/cc-agent-protocol.schema.json +48 -1
  168. package/src/lazy-dispatch.js +8 -1
  169. package/src/lib/agent-sandbox.js +337 -53
  170. package/src/lib/app-server/cli-agent-kernel-adapter.js +28 -0
  171. package/src/lib/app-server/server.js +93 -0
  172. package/src/lib/background-agent-keeper-client.js +2 -0
  173. package/src/lib/background-agent-keeper-protocol.js +7 -0
  174. package/src/lib/background-agent-list-index.js +222 -0
  175. package/src/lib/background-agent-supervisor.js +232 -47
  176. package/src/lib/codex-app-server-adapter.js +82 -27
  177. package/src/lib/context-memory-kernel/durable-memory-port.js +31 -8
  178. package/src/lib/context-memory-kernel/provider-context.js +118 -19
  179. package/src/lib/deferred-question-context.js +278 -0
  180. package/src/lib/eval/evidence.js +202 -64
  181. package/src/lib/eval/plugin-suite.js +1181 -0
  182. package/src/lib/eval/runner.js +10 -3
  183. package/src/lib/evolution/agent-evolution-runtime-composition.js +236 -1
  184. package/src/lib/evolution/agent-model-projection.js +97 -1
  185. package/src/lib/evolution/evidence-backed-wiki-maintainer.js +154 -1
  186. package/src/lib/evolution/evolution-artifact-ports.js +6 -0
  187. package/src/lib/evolution/evolution-deployment-loader.js +87 -3
  188. package/src/lib/evolution/evolution-eval-gate.js +8 -0
  189. package/src/lib/evolution/evolution-eval-runtime-composition.js +255 -0
  190. package/src/lib/evolution/evolution-evidence-artifact-adapter.js +58 -2
  191. package/src/lib/evolution/evolution-ledger-file-backend.js +23 -2
  192. package/src/lib/evolution/evolution-ledger-manifest-chain.js +223 -7
  193. package/src/lib/evolution/evolution-ledger-v2-journal.js +525 -0
  194. package/src/lib/evolution/evolution-ledger-v2-manifest-backend.js +46 -2
  195. package/src/lib/evolution/evolution-ledger.js +57 -1
  196. package/src/lib/evolution/evolution-run-ledger-adapter.js +93 -0
  197. package/src/lib/evolution/evolution-run-wiki-evidence-resolver.js +259 -0
  198. package/src/lib/evolution/governed-hub-llm.js +238 -5
  199. package/src/lib/evolution/governed-hub-resolver.js +82 -4
  200. package/src/lib/evolution/governed-hub-skill.js +11 -5
  201. package/src/lib/evolution/governed-skill-synthesis-provider-chat.js +10 -1
  202. package/src/lib/evolution/skill-runtime-revalidation-ledger-adapter.js +254 -0
  203. package/src/lib/evolution/skill-runtime-revalidation.js +530 -0
  204. package/src/lib/evolution/skill-target-matrix-eval.js +4 -4
  205. package/src/lib/evolution/wiki-evidence-commit-guard.js +366 -0
  206. package/src/lib/evolution/wiki-informed-skill-proposer.js +13 -1
  207. package/src/lib/goal-context.js +14 -5
  208. package/src/lib/interaction-adapter.js +166 -1
  209. package/src/lib/model-capabilities.js +271 -0
  210. package/src/lib/model-context-catalog.js +105 -0
  211. package/src/lib/model-context-window.js +4 -49
  212. package/src/lib/openai-responses.js +428 -0
  213. package/src/lib/plugin-runtime/scopes.js +7 -1
  214. package/src/lib/remote-read-loop-guard.js +2 -2
  215. package/src/lib/runtime-usage-ledger.js +16 -0
  216. package/src/lib/session-host-snapshot.js +16 -0
  217. package/src/lib/skill-loader.js +12 -0
  218. package/src/lib/with-file-lock.js +3 -1
  219. package/src/repl/agent-repl.js +5 -1
  220. package/src/runtime/agent-core.js +348 -23
  221. package/src/runtime/agent-runtime.js +7 -0
  222. package/src/runtime/coding-agent-contract-shared.cjs +13 -1
  223. package/src/runtime/headless-runner.js +4 -1
  224. package/src/runtime/headless-stream.js +283 -45
  225. package/src/runtime/runtime-factory.js +26 -2
  226. package/src/workers/background-agent-keeper.js +23 -13
  227. package/src/workers/background-agent-worker.js +27 -13
  228. package/src/assets/web-panel/assets/ChatBubbleRenderer-Bi2SY9E_.js +0 -1
  229. package/src/assets/web-panel/assets/PdhVaultBrowser-fYmQzmTA.js +0 -7
  230. package/src/assets/web-panel/assets/devWarning-BtFLt3qI.js +0 -1
  231. package/src/assets/web-panel/assets/index-BhuWQHeG.js +0 -1
  232. package/src/assets/web-panel/assets/index-D-4tFek3.js +0 -1
@@ -54,6 +54,11 @@ export const EVOLUTION_ARTIFACT_RESOLUTION_SCHEMA =
54
54
  export const EVOLUTION_LEDGER_MAX_EVENT_BYTES = 1024 * 1024;
55
55
  export const EVOLUTION_LEDGER_MAX_ARTIFACT_BYTES = 16 * 1024 * 1024;
56
56
  export const EVOLUTION_LEDGER_MAX_EVENTS = 250_000;
57
+ export const EVOLUTION_LEDGER_V2_MIGRATION_INTENT =
58
+ "evolution.ledger-v2.migration-intent";
59
+ export const EVOLUTION_LEDGER_V2_CUTOVER_COMPLETED =
60
+ "evolution.ledger-v2.cutover-completed";
61
+ const MIGRATION_SOURCES = new WeakMap();
57
62
 
58
63
  const IDENTITY_DOMAIN = "chainlesschain.evolution-ledger-identity/v1\0";
59
64
  const EVENT_DOMAIN = "chainlesschain.evolution-event/v2\0";
@@ -2011,6 +2016,29 @@ export class EvolutionLedger {
2011
2016
  );
2012
2017
  }
2013
2018
 
2019
+ MIGRATION_SOURCES.set(
2020
+ this,
2021
+ Object.freeze({
2022
+ ledger: this,
2023
+ requiresV2: () =>
2024
+ this.#withLock(() =>
2025
+ this.#loadState({
2026
+ allowInitialize: false,
2027
+ incremental: true,
2028
+ }).events.some(
2029
+ (event) => event.type === EVOLUTION_LEDGER_V2_MIGRATION_INTENT,
2030
+ ),
2031
+ ),
2032
+ append: (input, options = {}) =>
2033
+ this.#appendEvents([input], options, false, false, true),
2034
+ appendBatch: (inputs, options = {}) =>
2035
+ this.#appendEvents(inputs, options, false, true, true),
2036
+ appendDomainEvent: (input, options = {}) =>
2037
+ this.#appendEvents([input], options, true, false, true),
2038
+ appendDomainEventBatch: (inputs, options = {}) =>
2039
+ this.#appendEvents(inputs, options, true, true, true),
2040
+ }),
2041
+ );
2014
2042
  Object.freeze(this);
2015
2043
  }
2016
2044
 
@@ -4485,7 +4513,7 @@ export class EvolutionLedger {
4485
4513
  return this.#appendEvents([input], options, domainEvent, false);
4486
4514
  }
4487
4515
 
4488
- #appendEvents(inputs, options, domainEvent, batch) {
4516
+ #appendEvents(inputs, options, domainEvent, batch, migrationWrite = false) {
4489
4517
  const safeInputs = readDenseDataArray(
4490
4518
  inputs,
4491
4519
  batch ? "append batch" : "append input",
@@ -4557,6 +4585,23 @@ export class EvolutionLedger {
4557
4585
  ? normalizeDomainAppendInput(input, generatedTimestamp)
4558
4586
  : normalizeAppendInput(input, generatedTimestamp);
4559
4587
  });
4588
+ if (
4589
+ !migrationWrite &&
4590
+ (current.events.some(
4591
+ (event) => event.type === EVOLUTION_LEDGER_V2_MIGRATION_INTENT,
4592
+ ) ||
4593
+ normalizedInputs.some((event) =>
4594
+ [
4595
+ EVOLUTION_LEDGER_V2_MIGRATION_INTENT,
4596
+ EVOLUTION_LEDGER_V2_CUTOVER_COMPLETED,
4597
+ ].includes(event.type),
4598
+ ))
4599
+ ) {
4600
+ throw ledgerError(
4601
+ "CC_EVOLUTION_LEDGER_V2_REQUIRED",
4602
+ "ledger writes require the authenticated v2 cutover composition",
4603
+ );
4604
+ }
4560
4605
  const eventIds = new Set(current.events.map((event) => event.eventId));
4561
4606
  for (const normalized of normalizedInputs) {
4562
4607
  if (eventIds.has(normalized.eventId)) {
@@ -5209,6 +5254,17 @@ export class EvolutionLedger {
5209
5254
  }
5210
5255
  }
5211
5256
 
5257
+ // Trusted composition port; consumers receive the journal wrapper, never this
5258
+ // capability. WeakMap identity excludes structural or prototype impersonation.
5259
+ export function captureEvolutionLedgerMigrationSource(ledger) {
5260
+ const source = MIGRATION_SOURCES.get(ledger);
5261
+ if (!source)
5262
+ throw new TypeError(
5263
+ "a constructed EvolutionLedger migration source is required",
5264
+ );
5265
+ return source;
5266
+ }
5267
+
5212
5268
  function artifactRefsForAudit(input) {
5213
5269
  const refs = Object.hasOwn(input, "subjectRef")
5214
5270
  ? [input.subjectRef, ...input.sourceRefs]
@@ -19,6 +19,7 @@ export const EVOLUTION_RUN_LEDGER_CORRUPT_CODE =
19
19
 
20
20
  const ARTIFACT_TYPE = "evolution-run-event";
21
21
  const DIGEST = /^sha256:[a-f0-9]{64}$/u;
22
+ const EVIDENCE_READERS = new WeakMap();
22
23
  const EVENT_KEYS = new Set([
23
24
  "schema",
24
25
  "tenantId",
@@ -71,6 +72,14 @@ function clone(value) {
71
72
  return JSON.parse(canonical(value));
72
73
  }
73
74
 
75
+ function freeze(value) {
76
+ if (value && typeof value === "object" && !Object.isFrozen(value)) {
77
+ Object.values(value).forEach(freeze);
78
+ Object.freeze(value);
79
+ }
80
+ return value;
81
+ }
82
+
74
83
  function same(left, right) {
75
84
  return canonical(left) === canonical(right);
76
85
  }
@@ -169,6 +178,82 @@ export class EvolutionRunLedgerAdapter {
169
178
  throw new TypeError("now must be a function");
170
179
  this._resolve = ledgerArtifactResolver;
171
180
  this._now = now;
181
+ const load = this.load.bind(this);
182
+ const verify = this._verify;
183
+ const checkpoints = new WeakSet();
184
+ const frontier = () => {
185
+ // verifiedAt describes this observation, not a ledger mutation.
186
+ const { verifiedAt: _observedAt, ...identity } = clone(verify());
187
+ return identity;
188
+ };
189
+ const snapshot = () => {
190
+ const before = frontier();
191
+ const loaded = load();
192
+ const after = frontier();
193
+ if (!same(before, after)) {
194
+ fail(
195
+ EVOLUTION_RUN_LEDGER_CONFLICT_CODE,
196
+ "Run changed during evidence lookup",
197
+ );
198
+ }
199
+ if (loaded.projection?.status !== "completed") {
200
+ fail(
201
+ EVOLUTION_RUN_LEDGER_CORRUPT_CODE,
202
+ "Wiki evidence requires a completed Run",
203
+ );
204
+ }
205
+ return { loaded, ledgerHead: after };
206
+ };
207
+ // Preserve the legacy subclass API, but only the exact implementation may
208
+ // mint the new evidence membership capability. A subclass can override
209
+ // load/_entries and must never turn those overrides into signed membership.
210
+ if (Object.getPrototypeOf(this) === EvolutionRunLedgerAdapter.prototype)
211
+ EVIDENCE_READERS.set(
212
+ this,
213
+ Object.freeze({
214
+ descriptor: this.descriptor,
215
+ readEvidence(evidenceId) {
216
+ requiredString(evidenceId, "evidenceId");
217
+ const { loaded, ledgerHead } = snapshot();
218
+ const matches = loaded.events.filter(
219
+ (event) =>
220
+ event.type === EVENT_TYPES.RAW_EVENT_REFERENCED &&
221
+ event.subjectId === evidenceId,
222
+ );
223
+ if (matches.length !== 1) {
224
+ fail(
225
+ EVOLUTION_RUN_LEDGER_CORRUPT_CODE,
226
+ "Run evidence is missing or ambiguous",
227
+ );
228
+ }
229
+ const checkpoint = freeze({
230
+ event: clone(matches[0]),
231
+ ledgerHead,
232
+ projectionDigest: loaded.projection.projectionDigest,
233
+ });
234
+ checkpoints.add(checkpoint);
235
+ return checkpoint;
236
+ },
237
+ assertCurrent(expected) {
238
+ if (!checkpoints.has(expected)) {
239
+ fail(
240
+ EVOLUTION_RUN_LEDGER_CORRUPT_CODE,
241
+ "Run evidence checkpoint is not authentic",
242
+ );
243
+ }
244
+ const { loaded, ledgerHead } = snapshot();
245
+ if (
246
+ !same(ledgerHead, expected.ledgerHead) ||
247
+ loaded.projection.projectionDigest !== expected.projectionDigest
248
+ ) {
249
+ fail(
250
+ EVOLUTION_RUN_LEDGER_CONFLICT_CODE,
251
+ "Run evidence frontier changed before release",
252
+ );
253
+ }
254
+ },
255
+ }),
256
+ );
172
257
  Object.freeze(this);
173
258
  }
174
259
 
@@ -407,3 +492,11 @@ export class EvolutionRunLedgerAdapter {
407
492
  });
408
493
  }
409
494
  }
495
+
496
+ /** Read-only capability registered only by the real Run adapter constructor. */
497
+ export function captureEvolutionRunEvidenceReader(adapter) {
498
+ const reader = EVIDENCE_READERS.get(adapter);
499
+ if (!reader)
500
+ throw new TypeError("a real EvolutionRunLedgerAdapter is required");
501
+ return reader;
502
+ }
@@ -0,0 +1,259 @@
1
+ import { createHash } from "node:crypto";
2
+ import { types as utilTypes } from "node:util";
3
+ import { EvolutionEvidenceArtifactAdapter } from "./evolution-evidence-artifact-adapter.js";
4
+ import { EvolutionEvidenceReader } from "./evolution-evidence-projector.js";
5
+ import { captureEvolutionRunEvidenceReader } from "./evolution-run-ledger-adapter.js";
6
+ import { WIKI_EVIDENCE_SCHEMA } from "./evidence-backed-wiki-maintainer.js";
7
+
8
+ export const EVOLUTION_RUN_WIKI_EVIDENCE_DENIED_CODE =
9
+ "CC_EVOLUTION_RUN_WIKI_EVIDENCE_DENIED";
10
+ const DIGEST = /^sha256:[a-f0-9]{64}$/u;
11
+ const KINDS = Object.freeze({
12
+ "tool-observation": "tool-observation",
13
+ "verified-outcome": "grader-receipt",
14
+ });
15
+ const FORBIDDEN = new Set([
16
+ "content",
17
+ "output",
18
+ "payload",
19
+ "prompt",
20
+ "secret",
21
+ "token",
22
+ "__proto__",
23
+ "constructor",
24
+ "prototype",
25
+ ]);
26
+ const RESERVED = new Set([
27
+ "sourceCommitment",
28
+ "rawRecordDigest",
29
+ "manifestDigest",
30
+ "projectionReceiptDigest",
31
+ "schemaDigest",
32
+ ]);
33
+
34
+ function denied(message) {
35
+ const error = new Error(message);
36
+ error.code = EVOLUTION_RUN_WIKI_EVIDENCE_DENIED_CODE;
37
+ return error;
38
+ }
39
+ function canonical(value) {
40
+ if (value === null || typeof value !== "object") return JSON.stringify(value);
41
+ if (Array.isArray(value)) return `[${value.map(canonical).join(",")}]`;
42
+ return `{${Object.keys(value)
43
+ .sort()
44
+ .map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`)
45
+ .join(",")}}`;
46
+ }
47
+ function hash(value) {
48
+ return `sha256:${createHash("sha256").update(canonical(value)).digest("hex")}`;
49
+ }
50
+ function freeze(value) {
51
+ if (value && typeof value === "object" && !Object.isFrozen(value)) {
52
+ Object.values(value).forEach(freeze);
53
+ Object.freeze(value);
54
+ }
55
+ return value;
56
+ }
57
+ function record(value, label) {
58
+ if (
59
+ !value ||
60
+ utilTypes.isProxy(value) ||
61
+ Array.isArray(value) ||
62
+ ![Object.prototype, null].includes(Object.getPrototypeOf(value))
63
+ )
64
+ throw denied(`${label} must be plain data`);
65
+ for (const key of Reflect.ownKeys(value)) {
66
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
67
+ if (
68
+ typeof key !== "string" ||
69
+ !descriptor?.enumerable ||
70
+ !("value" in descriptor)
71
+ )
72
+ throw denied(`${label} must contain data fields`);
73
+ }
74
+ return value;
75
+ }
76
+ function metadata(value, depth = 0) {
77
+ if (depth > 8) throw denied("Wiki evidence metadata is too deep");
78
+ if (
79
+ value === null ||
80
+ typeof value === "boolean" ||
81
+ typeof value === "string" ||
82
+ (typeof value === "number" && Number.isFinite(value))
83
+ )
84
+ return value;
85
+ if (Array.isArray(value)) {
86
+ denseArray(value, 64);
87
+ return value.map((entry) => metadata(entry, depth + 1));
88
+ }
89
+ record(value, "Wiki evidence metadata");
90
+ return Object.fromEntries(
91
+ Object.entries(value).map(([key, child]) => {
92
+ if (FORBIDDEN.has(key.toLowerCase()))
93
+ throw denied("Wiki evidence contains forbidden metadata fields");
94
+ return [key, metadata(child, depth + 1)];
95
+ }),
96
+ );
97
+ }
98
+ function denseArray(value, max) {
99
+ if (
100
+ utilTypes.isProxy(value) ||
101
+ !Array.isArray(value) ||
102
+ Object.getPrototypeOf(value) !== Array.prototype ||
103
+ value.length > max ||
104
+ Reflect.ownKeys(value).length !== value.length + 1
105
+ )
106
+ throw denied("Wiki metadata arrays must be bounded plain data");
107
+ for (let index = 0; index < value.length; index += 1) {
108
+ const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
109
+ if (!descriptor?.enumerable || !("value" in descriptor))
110
+ throw denied("Wiki metadata arrays must be dense data");
111
+ }
112
+ }
113
+
114
+ /**
115
+ * Host configuration, never per-request trust claims. Only a captured real Run
116
+ * capability can select evidence; both downstream calls use production private
117
+ * state, so instance-shaped facades cannot supply bundles or read decisions.
118
+ */
119
+ export function createEvolutionRunWikiEvidenceResolver({
120
+ runAdapter,
121
+ evidenceAdapter,
122
+ evidenceReader,
123
+ principalEnvelope,
124
+ schemaPolicies,
125
+ } = {}) {
126
+ const run = captureEvolutionRunEvidenceReader(runAdapter);
127
+ if (
128
+ utilTypes.isProxy(evidenceAdapter) ||
129
+ Object.getPrototypeOf(evidenceAdapter ?? {}) !==
130
+ EvolutionEvidenceArtifactAdapter.prototype ||
131
+ utilTypes.isProxy(evidenceReader) ||
132
+ Object.getPrototypeOf(evidenceReader ?? {}) !==
133
+ EvolutionEvidenceReader.prototype
134
+ ) {
135
+ throw new TypeError(
136
+ "real evidence adapter and trusted reader are required",
137
+ );
138
+ }
139
+ if (
140
+ typeof principalEnvelope !== "string" ||
141
+ !principalEnvelope ||
142
+ principalEnvelope.length > 8192
143
+ ) {
144
+ throw new TypeError("Wiki reader principal envelope is required");
145
+ }
146
+ record(schemaPolicies, "Wiki schema policies");
147
+ const policies = new Map();
148
+ for (const [schemaDigest, input] of Object.entries(schemaPolicies)) {
149
+ record(input, "Wiki schema policy");
150
+ denseArray(input.metadataKeys, 32);
151
+ if (
152
+ !DIGEST.test(schemaDigest) ||
153
+ Object.keys(input).sort().join(",") !== "metadataKeys,sourceKind" ||
154
+ !Object.hasOwn(KINDS, input.sourceKind) ||
155
+ !Array.isArray(input.metadataKeys) ||
156
+ !input.metadataKeys.length ||
157
+ input.metadataKeys.length > 32 ||
158
+ input.metadataKeys.some(
159
+ (key) =>
160
+ typeof key !== "string" ||
161
+ !/^[a-zA-Z][a-zA-Z0-9_]{0,63}$/u.test(key) ||
162
+ FORBIDDEN.has(key.toLowerCase()) ||
163
+ RESERVED.has(key),
164
+ ) ||
165
+ new Set(input.metadataKeys).size !== input.metadataKeys.length
166
+ ) {
167
+ throw denied("Wiki schema policy is invalid");
168
+ }
169
+ policies.set(
170
+ schemaDigest,
171
+ freeze({
172
+ sourceKind: input.sourceKind,
173
+ metadataKeys: [...input.metadataKeys],
174
+ }),
175
+ );
176
+ }
177
+ if (!policies.size || policies.size > 32)
178
+ throw denied("Wiki schema policy set must be bounded and nonempty");
179
+ const resolve = EvolutionEvidenceArtifactAdapter.prototype.resolveRunEvidence;
180
+ const readTrusted = EvolutionEvidenceReader.prototype.readTrusted;
181
+ const tenantId = run.descriptor.tenantId;
182
+ return Object.freeze({
183
+ tenantId,
184
+ async resolveEvidence(evidenceId) {
185
+ const checkpoint = run.readEvidence(evidenceId);
186
+ const event = checkpoint.event;
187
+ if (event.tenantId !== tenantId || event.runId !== run.descriptor.runId)
188
+ throw denied("Wiki evidence belongs to another Run");
189
+ const resolved = await Reflect.apply(resolve, evidenceAdapter, [
190
+ {
191
+ event,
192
+ ledgerId: checkpoint.ledgerHead.ledgerId,
193
+ epoch: checkpoint.ledgerHead.epoch,
194
+ },
195
+ ]);
196
+ const { bundle } = resolved;
197
+ const raw = bundle.rawRecord;
198
+ const trusted = await Reflect.apply(readTrusted, evidenceReader, [
199
+ bundle,
200
+ principalEnvelope,
201
+ "wiki-maintenance",
202
+ ]);
203
+ const policy = policies.get(raw.schemaDigest);
204
+ if (
205
+ raw.tenantId !== tenantId ||
206
+ raw.evidenceId !== evidenceId ||
207
+ trusted.tenantId !== tenantId ||
208
+ trusted.evidenceId !== evidenceId ||
209
+ resolved.verification.verified !== true ||
210
+ trusted.status !== "trusted" ||
211
+ !raw.authenticated ||
212
+ raw.trust !== "trusted" ||
213
+ !raw.compilable ||
214
+ !policy ||
215
+ policy.sourceKind !== raw.sourceKind ||
216
+ !Object.hasOwn(KINDS, raw.sourceKind)
217
+ ) {
218
+ throw denied(
219
+ "Wiki evidence has no admitted authenticated source schema",
220
+ );
221
+ }
222
+ const content = record(trusted.content, "trusted Wiki metadata");
223
+ if (
224
+ Object.keys(content).some((key) => !policy.metadataKeys.includes(key))
225
+ )
226
+ throw denied("trusted Wiki metadata exceeds its schema allowlist");
227
+ const data = metadata(content);
228
+ if (Buffer.byteLength(canonical(data), "utf8") > 16_384)
229
+ throw denied("trusted Wiki metadata exceeds its budget");
230
+ const core = {
231
+ schema: WIKI_EVIDENCE_SCHEMA,
232
+ tenantId,
233
+ ref: evidenceId,
234
+ sourceDigest: hash({
235
+ domain: "chainlesschain.wiki-source-commitment/v1",
236
+ tenantId,
237
+ sourceCommitment: raw.sourceCommitment,
238
+ }),
239
+ projectionDigest: trusted.projectionDigest,
240
+ artifactRef: event.artifactRef,
241
+ trustedProjection: true,
242
+ trustDomain: `evolution-principal:${tenantId}:${raw.principalId}`,
243
+ kind: KINDS[raw.sourceKind],
244
+ status: "active",
245
+ observedAt: bundle.receipt.createdAt,
246
+ expiresAt: raw.retention.expiresAt,
247
+ data: {
248
+ ...data,
249
+ rawRecordDigest: raw.rawRecordDigest,
250
+ manifestDigest: event.payloadDigest,
251
+ projectionReceiptDigest: bundle.receipt.receiptDigest,
252
+ schemaDigest: raw.schemaDigest,
253
+ },
254
+ };
255
+ run.assertCurrent(checkpoint);
256
+ return freeze({ ...core, envelopeDigest: hash(core) });
257
+ },
258
+ });
259
+ }