chainlesschain 0.166.9 → 0.166.13

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 +33 -0
  2. package/bin/chainlesschain.js +5 -0
  3. package/package.json +5 -2
  4. package/src/assets/web-panel/assets/{AIOps-DJvpifGx.js → AIOps-BN25cNOD.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-D2UhuF_A.js → ActionButton-Da9IP-m5.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-C9ho9obu.js → Analytics-D7hkEvQm.js} +3 -3
  7. package/src/assets/web-panel/assets/{AppLayout-BvRCpFK3.js → AppLayout-CCV4Xnbc.js} +5 -5
  8. package/src/assets/web-panel/assets/{Artifacts-jxrySvpk.js → Artifacts-CVSnVJeA.js} +1 -1
  9. package/src/assets/web-panel/assets/{Audit-ovEw0ZYl.js → Audit-CuYdw5Ag.js} +1 -1
  10. package/src/assets/web-panel/assets/{BackgroundAgents-D7H5z6zS.js → BackgroundAgents-DZCnK-Tf.js} +1 -1
  11. package/src/assets/web-panel/assets/{Backup-BuXob8za.js → Backup-cV9FdpTy.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-CtnszuQ2.js → BaseInput-BRnv6YSp.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-B_mYE8fJ.js → Chat-Bw5w87P4.js} +6 -6
  14. package/src/assets/web-panel/assets/ChatBubbleRenderer-C0GjtUAw.js +1 -0
  15. package/src/assets/web-panel/assets/{Checkbox-ierdtcJD.js → Checkbox-DaoTqcdt.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-3VKPJD_B.js → Codegen-B4dYcEIi.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-1EdMyf5P.js → Col-mAhuOeuD.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-D6H7UA8K.js → Community-BK6KEdBk.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-BBAZvYIm.js → Compact-CCglmNu5.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-CgsTrAoj.js → Compliance-Cm8S4of7.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-tnZgLoTE.js → Cowork-Dhs1QLMe.js} +3 -3
  22. package/src/assets/web-panel/assets/{Cron-CPpZw2Nh.js → Cron-CLlhmXWk.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-BymBcp5z.js → Crosschain-BnHVbaNs.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-DKPxS_K1.js → DID-UzQP9-0O.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dashboard-DvJhEmH9.js → Dashboard-CBdlPClz.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dropdown-b8iQyQIZ.js → Dropdown-axIRPdq1.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer--0-A-zKb.js → EmailListRenderer-DUalW5rx.js} +1 -1
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-C12iDN06.js → FamilyGuardDashboard-Bl4W9luY.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-BRhaE2Z8.js → Federation-C1yP-uEu.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-C4dnq7yf.js → FormItemContext-Xh6Ig5q8.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-CGAdbR5n.js → GenericCardRenderer-C2cz3bt2.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git-4eA2fYzL.js → Git-C_z63ixg.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-BJuY9Y-9.js → Governance-BYqB33_3.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-DZ5Dy4up.js → Inference-CEULuArm.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-BMTjRs4A.js → KnowledgeGraph-fgMsu-0H.js} +1 -1
  36. package/src/assets/web-panel/assets/{Logs-BKEeQEfJ.js → Logs-DO9Hdcec.js} +2 -2
  37. package/src/assets/web-panel/assets/MarkdownRenderer-BkrK04xW.js +1 -0
  38. package/src/assets/web-panel/assets/{Marketplace-Dhho4fEg.js → Marketplace-B8zyLiFe.js} +1 -1
  39. package/src/assets/web-panel/assets/{McpTools-BW6xxSlU.js → McpTools-BLAN2mWW.js} +3 -3
  40. package/src/assets/web-panel/assets/{Memory-mPqlpSkq.js → Memory-CrQcFM7u.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-Cb9N_DQI.js → MobileBridge-DVnyiiU-.js} +1 -1
  42. package/src/assets/web-panel/assets/{MobileProjects-BNs8tah_.js → MobileProjects-qjCME5OD.js} +1 -1
  43. package/src/assets/web-panel/assets/{Mtc-CaxBt8tn.js → Mtc-4JE3C3It.js} +2 -2
  44. package/src/assets/web-panel/assets/{MtcAudit-DRPQbp3t.js → MtcAudit-CjBuak9I.js} +5 -5
  45. package/src/assets/web-panel/assets/{Multisig-CRm-d8bK.js → Multisig-BtPcYQcC.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-BCCk3LPs.js → NLProgramming-Cx653_Ba.js} +1 -1
  47. package/src/assets/web-panel/assets/{Notes-Cv8SN8gN.js → Notes-CkuD3YzS.js} +4 -4
  48. package/src/assets/web-panel/assets/{NotificationSettings-CggIvTh5.js → NotificationSettings-BgNgU7HH.js} +1 -1
  49. package/src/assets/web-panel/assets/{OrderTableRenderer-BW3_bV12.js → OrderTableRenderer-BTC8W0a-.js} +1 -1
  50. package/src/assets/web-panel/assets/{Organization-BuRE-VCO.js → Organization-Dmd4Hjxz.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-DBrm1gju.js → Overflow-C_5DA-G0.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P-CWVnDYgS.js → P2P-uwslV4XC.js} +2 -2
  53. package/src/assets/web-panel/assets/{PdhVaultBrowser-8RKUIpte.js → PdhVaultBrowser-CuNgwVnX.js} +5 -5
  54. package/src/assets/web-panel/assets/{Permissions-tDUAxogW.js → Permissions-CJayVX9H.js} +4 -4
  55. package/src/assets/web-panel/assets/{PersonalDataHub-Dv2-CFis.js → PersonalDataHub-Cb05H5go.js} +4 -4
  56. package/src/assets/web-panel/assets/{Pipeline-DM6kvFni.js → Pipeline-BZlGKapZ.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-DzK-yL0d.js → Privacy-BIzZWYzd.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-B5UrNpkj.js → ProjectInit-vEYYyQXQ.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-CxJD43oW.js → ProjectSettings-MZqTy5CC.js} +2 -2
  60. package/src/assets/web-panel/assets/Projects-CRARUOl8.js +1 -0
  61. package/src/assets/web-panel/assets/{Providers-CYl4jRYK.js → Providers-80VAK8PX.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-DeH2T0fH.js → QrScannerModal-CzRSoIwK.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-Bw9k_kTk.js → QuickAsk-BpwQ2n4C.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-Bl_jGwoi.js → Recommend-BC03TZ79.js} +1 -1
  65. package/src/assets/web-panel/assets/{RemoteSession-d6u01Kq0.js → RemoteSession-DE59-jaa.js} +2 -2
  66. package/src/assets/web-panel/assets/{Reputation-Ds_Dfr-k.js → Reputation-DOHmeWyA.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-BpQUQTNj.js → Row-hc5RZl1D.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-BatpZBGt.js → RssFeed-Cv5uMP7E.js} +3 -3
  69. package/src/assets/web-panel/assets/{Search-D7hOObzi.js → Search-qohu7Ug0.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-dXQ4FKNt.js → Security-drCPFWV5.js} +4 -4
  71. package/src/assets/web-panel/assets/{Services-D8wInGPa.js → Services-BAEgUeRy.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-DXQCoYpM.js → Skeleton-CkJkKBlo.js} +1 -1
  73. package/src/assets/web-panel/assets/{Skills-D3oLRIVn.js → Skills-bMuKEpez.js} +1 -1
  74. package/src/assets/web-panel/assets/{Sla-BmP4-LnJ.js → Sla-DxWQVHRC.js} +1 -1
  75. package/src/assets/web-panel/assets/{SpeechSettings-DLj-xzro.js → SpeechSettings-BpS8idmV.js} +1 -1
  76. package/src/assets/web-panel/assets/{SyncSettings-8KKaaRMr.js → SyncSettings-BPBLlW5v.js} +2 -2
  77. package/src/assets/web-panel/assets/{Tasks-GyK42I7C.js → Tasks-C4SLEeUh.js} +1 -1
  78. package/src/assets/web-panel/assets/{Templates-n1y_8UBG.js → Templates-r-wfU39U.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-B39nBph8.js → Tenant-C7vjRmLN.js} +1 -1
  80. package/src/assets/web-panel/assets/{Terminal-DCQoOKXe.js → Terminal-DdzeFCV2.js} +2 -2
  81. package/src/assets/web-panel/assets/{TimelineRenderer-BkhbDfXk.js → TimelineRenderer-CYyWN2KD.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-BeHIIU8D.js → Tokens-D8A9osUg.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-BHvWXVOb.js → Trigger-DBvrNlyS.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-y2WaOSto.js → Trust-DBVAGc7o.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-DBFeJBzt.js → UkeySign-C1vQUCRJ.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-BEOWitC-.js → VideoEditing-BKs4dah4.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-BITedTe6.js → Wallet-ByIuj3lD.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-DMwlJVin.js → WebAuthn-DYlAFCm9.js} +3 -3
  89. package/src/assets/web-panel/assets/{WorkflowEditor-CKfGFEu1.js → WorkflowEditor-Dwyadd0c.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-DR6gnBGF.js → chat-Bm2f3s08.js} +1 -1
  91. package/src/assets/web-panel/assets/{colors-C_Hw5NCn.js → colors-C8ORSh7V.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-B8IPwsEu.js → compact-item-1iVlnsM-.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-D-u4JVnJ.js → createContext-CmqNyUSL.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-B69RCDDH.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-CZubdS4D.js → hasIn-rUMaX3Ul.js} +1 -1
  96. package/src/assets/web-panel/assets/index-9biMQ-tw.js +1 -0
  97. package/src/assets/web-panel/assets/{index-C25rOz7O.js → index-B53c3diB.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-CfniPP5p.js → index-B59OWAs7.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-11ASqx-A.js → index-B8BrB0Ls.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-auyNYjLo.js → index-BC32_0xT.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-Ctje8Vl3.js → index-BC8Wb6cy.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-Cg2bCeol.js → index-BCOhTILd.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-D1w96gg9.js → index-BFniLMn9.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-k1Xa5iw1.js → index-BIvM-uAX.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DuOU5apg.js → index-BK-RY0-7.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-D47jt8ET.js → index-BQL9r73Y.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-C2VmtNaQ.js → index-BVtnizyC.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-Bizm87cX.js → index-Bf1PlIHp.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Dt-w3xQ7.js → index-Bgw4Y2rU.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-ffe7bvqP.js → index-BgwLNxmr.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Cl5RpreD.js → index-C-J5-pGH.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-idZKyADQ.js → index-C-ZIHi42.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-LvjAKDSl.js → index-C3B1S-mW.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-DmRcgiYT.js → index-C5RfRciU.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-rYBHSDcJ.js → index-CCEyz58d.js} +1 -1
  116. package/src/assets/web-panel/assets/index-COie87kl.js +1 -0
  117. package/src/assets/web-panel/assets/{index-DcFjRT-K.js → index-CTfEmKK0.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DjRrqooR.js → index-CfiHyVyl.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DpjHpRoq.js → index-CkFvuAex.js} +3 -3
  120. package/src/assets/web-panel/assets/{index-BzoFanEQ.js → index-D98FXb0w.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-Cbm8F0M2.js → index-DDHk911Q.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-BXS6wYJZ.js → index-DJxtPFOh.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-DY6MHo9D.js → index-DVJ1uKf4.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CiXkhOkY.js → index-Dcck8QfW.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-mYZJxGH6.js → index-DgUE51Pz.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-CqmLw8cs.js → index-Dsve5Gkv.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-xoNssgz_.js → index-DvedhJeM.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-DfnzrUxU.js → index-DwMdWKiF.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-Bi21Etg4.js → index-OcbzdRpT.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-DJ6pG79m.js → index-fPK6GFEg.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-_nL79NT8.js → index-geQinnns.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-DTosx2Wu.js → index-pHWA7bmM.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-cVqbas5C.js → index-reUHhuz8.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-Bv2132PO.js → index-tqTx5wXo.js} +1 -1
  135. package/src/assets/web-panel/assets/{initDefaultProps-lcU_dT2r.js → initDefaultProps-CuA-cpkL.js} +1 -1
  136. package/src/assets/web-panel/assets/{motion-Dc7UNXZ1.js → motion-CimmE_9b.js} +1 -1
  137. package/src/assets/web-panel/assets/{move-Cll8ZXaL.js → move-DlGlrltz.js} +1 -1
  138. package/src/assets/web-panel/assets/{mtc-parser-CAb_yLIM.js → mtc-parser-CK6BJQ07.js} +1 -1
  139. package/src/assets/web-panel/assets/{omit-DurYMyTe.js → omit-BKjBfZfB.js} +1 -1
  140. package/src/assets/web-panel/assets/{pickAttrs-BITQyOlw.js → pickAttrs-B2chVYw9.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-Dg1rH91i.js → placementArrow-BW8aLJJ3.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-D_EWIeac.js → responsiveObserve-dXlPl66S.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-lK4d3zsh.js → slide-hSa89S4G.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-Bflq-Git.js → statusUtils-DM6KLt-s.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-Ccp0I-wt.js → styleChecker-C9MQAK15.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-CYZbByYA.js → useFlexGapSupport-BpQDpP0z.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-B_x0nxFD.js → useFs-C7rtRViA.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-DW55rL85.js → usePersonalDataHub-Dm15xafq.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-Ca6MH3W8.js → vnode-mEiEytw4.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-NdHelOog.js → zoom-DzPxflhY.js} +1 -1
  151. package/src/assets/web-panel/index.html +1 -1
  152. package/src/command-help-index.json +5 -5
  153. package/src/commands/agent.js +51 -20
  154. package/src/commands/compact.js +349 -3
  155. package/src/commands/context.js +72 -1
  156. package/src/commands/graph.js +26 -15
  157. package/src/commands/hmemory.js +21 -0
  158. package/src/commands/hook.js +256 -28
  159. package/src/commands/memory.js +209 -42
  160. package/src/commands/promcomp.js +17 -0
  161. package/src/commands/serve.js +94 -10
  162. package/src/commands/session.js +2 -3
  163. package/src/commands/team.js +7 -1
  164. package/src/data/changelog.json +41 -2
  165. package/src/gateways/ws/session-core-protocol.js +62 -3
  166. package/src/gateways/ws/session-protocol.js +123 -15
  167. package/src/gateways/ws/ws-agent-handler.js +157 -9
  168. package/src/gateways/ws/ws-session-gateway.js +204 -30
  169. package/src/generated/cc-agent-protocol.schema.json +2094 -4
  170. package/src/harness/prompt-compressor.js +5 -55
  171. package/src/lib/agent-sandbox.js +14 -4
  172. package/src/lib/agent-team/team-distributed-graph-bridge.js +3 -3
  173. package/src/lib/app-server/context-memory-notifications.js +54 -0
  174. package/src/lib/app-server/rollout-store-factory.js +115 -0
  175. package/src/lib/app-server/rollout-store.js +310 -23
  176. package/src/lib/app-server/server.js +184 -7
  177. package/src/lib/app-server/sqlite-rollout-store.js +59 -16
  178. package/src/lib/auto-mode-config.js +26 -0
  179. package/src/lib/causal-observability.js +13 -1
  180. package/src/lib/context-memory-kernel/authority.js +95 -0
  181. package/src/lib/context-memory-kernel/durable-memory-port.js +296 -0
  182. package/src/lib/context-memory-kernel/index.js +8 -0
  183. package/src/lib/context-memory-kernel/jsonl-session-context-port.js +232 -0
  184. package/src/lib/context-memory-kernel/live-compaction.js +375 -0
  185. package/src/lib/context-memory-kernel/memory-service.js +667 -0
  186. package/src/lib/context-memory-kernel/message-adapter.js +451 -0
  187. package/src/lib/context-memory-kernel/privacy-purge-port.js +244 -0
  188. package/src/lib/context-memory-kernel/provider-context.js +192 -0
  189. package/src/lib/context-memory-kernel/runtime.js +61 -0
  190. package/src/lib/direct-model-usage.js +22 -18
  191. package/src/lib/graph-kernel/cutover-authority-resolver.js +4 -5
  192. package/src/lib/graph-kernel/cutover-ledger.js +2 -2
  193. package/src/lib/graph-kernel/event-store.js +3 -5
  194. package/src/lib/graph-kernel/index.js +2 -0
  195. package/src/lib/graph-kernel/migration-saga.js +2 -2
  196. package/src/lib/graph-kernel/production-cutover-evidence.js +976 -0
  197. package/src/lib/graph-kernel/retirement-evidence.js +12 -4
  198. package/src/lib/hierarchical-memory.js +22 -0
  199. package/src/lib/hook-audit-store.js +170 -0
  200. package/src/lib/hook-event-bus.cjs +0 -0
  201. package/src/lib/hook-manager.js +25 -83
  202. package/src/lib/hook-runtime-adapters.js +233 -0
  203. package/src/lib/hook-runtime-contract.cjs +291 -0
  204. package/src/lib/hook-runtime-contract.js +21 -0
  205. package/src/lib/hook-trust.js +210 -0
  206. package/src/lib/hooks-v2-producers.js +52 -6
  207. package/src/lib/hooks-v2-runtime.js +443 -178
  208. package/src/lib/llm-pricing.js +10 -0
  209. package/src/lib/memory-manager.js +29 -4
  210. package/src/lib/model-context-window.js +52 -0
  211. package/src/lib/permanent-memory.js +17 -0
  212. package/src/lib/plan-mode.js +8 -4
  213. package/src/lib/process-execution-broker/index.js +208 -16
  214. package/src/lib/runtime-usage-ledger.js +20 -0
  215. package/src/lib/session-consolidator.js +59 -0
  216. package/src/lib/session-core-singletons.js +17 -4
  217. package/src/lib/session-hooks.js +29 -2
  218. package/src/lib/session-transcript-migration.js +188 -0
  219. package/src/lib/settings-hook-events.cjs +37 -401
  220. package/src/lib/settings-hook-events.js +210 -8
  221. package/src/lib/settings-hooks.cjs +42 -83
  222. package/src/lib/ws-session-manager.js +4 -1
  223. package/src/repl/agent-repl.js +186 -53
  224. package/src/runtime/agent-core.js +376 -350
  225. package/src/runtime/headless-runner.js +40 -33
  226. package/src/runtime/headless-stream.js +131 -30
  227. package/src/assets/web-panel/assets/ChatBubbleRenderer-DaiA6CsX.js +0 -1
  228. package/src/assets/web-panel/assets/MarkdownRenderer-B05DgASC.js +0 -1
  229. package/src/assets/web-panel/assets/Projects-Z2Orm8Ma.js +0 -1
  230. package/src/assets/web-panel/assets/devWarning-Cq6lSd_q.js +0 -1
  231. package/src/assets/web-panel/assets/index-BQ3213fz.js +0 -1
  232. package/src/assets/web-panel/assets/index-vJagfET2.js +0 -1
@@ -20,6 +20,7 @@ import {
20
20
  } from "../../lib/plan-mode.js";
21
21
  import { CLIContextEngineering } from "../../lib/cli-context-engineering.js";
22
22
  import { CLIPermanentMemory } from "../../lib/permanent-memory.js";
23
+ import { resolveCliContextMemoryCutover } from "../../lib/context-memory-kernel/authority.js";
23
24
  import {
24
25
  createTrustedMcpServerMap,
25
26
  resolveMcpServerPolicy,
@@ -61,7 +62,48 @@ import {
61
62
  hydrateWsSessionState,
62
63
  recoverWsSessionState,
63
64
  serializeWsSessionState,
65
+ WS_SESSION_STATE_SCHEMA,
66
+ WS_SESSION_STATE_VERSION,
64
67
  } from "./ws-session-state.js";
68
+ import {
69
+ appendEvent as appendCanonicalSessionEvent,
70
+ findLatestEvent as findLatestCanonicalSessionEvent,
71
+ } from "../../harness/jsonl-session-store.js";
72
+
73
+ export const WS_SESSION_ROLLOUT_EVENT = "ws_session_state";
74
+ const WS_SESSION_ROLLOUT_SCHEMA = "chainlesschain.ws-session-rollout/v1";
75
+
76
+ function canonicalWsStateError(code, message) {
77
+ const error = new Error(message);
78
+ error.name = "CanonicalWsSessionStateError";
79
+ error.code = code;
80
+ return error;
81
+ }
82
+
83
+ function hydrateCanonicalWsSessionState(value) {
84
+ if (
85
+ !value ||
86
+ typeof value !== "object" ||
87
+ value.schema !== WS_SESSION_STATE_SCHEMA ||
88
+ value.version !== WS_SESSION_STATE_VERSION ||
89
+ !value.snapshot ||
90
+ typeof value.snapshot !== "object" ||
91
+ !Array.isArray(value.events)
92
+ ) {
93
+ throw canonicalWsStateError(
94
+ "CC_WS_CANONICAL_STATE_CORRUPT",
95
+ "canonical WebSocket session state has an invalid envelope",
96
+ );
97
+ }
98
+ const journal = hydrateWsSessionState(value);
99
+ if (journal.events.length !== value.events.length) {
100
+ throw canonicalWsStateError(
101
+ "CC_WS_CANONICAL_STATE_CORRUPT",
102
+ "canonical WebSocket session state contains a revision gap",
103
+ );
104
+ }
105
+ return journal;
106
+ }
65
107
 
66
108
  function normalizeHostWorkspaceRoot(workspaceRoot) {
67
109
  if (
@@ -181,6 +223,11 @@ export class WSSessionManager {
181
223
  );
182
224
  this.defaultSystemPromptExtension =
183
225
  options.defaultSystemPromptExtension || null;
226
+ this.canonicalSessionStore = {
227
+ appendEvent: appendCanonicalSessionEvent,
228
+ findLatestEvent: findLatestCanonicalSessionEvent,
229
+ ...(options.canonicalSessionStore || {}),
230
+ };
184
231
 
185
232
  /** @type {Map<string, Session>} */
186
233
  this.sessions = new Map();
@@ -410,7 +457,15 @@ export class WSSessionManager {
410
457
  `max_sessions_exceeded: ${this.maxSessions} concurrent sessions reached — close some before creating more`,
411
458
  );
412
459
  }
413
- const sessionId = this._generateId();
460
+ const sessionId = options.sessionId || this._generateId();
461
+ if (this.sessions.has(sessionId)) {
462
+ const error = new Error(`session already exists: ${sessionId}`);
463
+ error.code = "CC_WS_SESSION_EXISTS";
464
+ throw error;
465
+ }
466
+ const contextMemoryCutover = resolveCliContextMemoryCutover({
467
+ scopeKey: `cli:ws-session:${sessionId}`,
468
+ });
414
469
  const requireDurable = options.requireDurable === true;
415
470
  if (requireDurable && !this.db) {
416
471
  const error = new Error(
@@ -458,15 +513,17 @@ export class WSSessionManager {
458
513
  // Create context engine
459
514
  let contextEngine = null;
460
515
  let permanentMemory = null;
461
- try {
462
- const memoryDir = path.join(projectRoot, "memory");
463
- permanentMemory = new CLIPermanentMemory({
464
- db: this.db,
465
- memoryDir,
466
- });
467
- permanentMemory.initialize();
468
- } catch (_err) {
469
- // Non-critical
516
+ if (!contextMemoryCutover.canonical) {
517
+ try {
518
+ const memoryDir = path.join(projectRoot, "memory");
519
+ permanentMemory = new CLIPermanentMemory({
520
+ db: this.db,
521
+ memoryDir,
522
+ });
523
+ permanentMemory.initialize();
524
+ } catch (_err) {
525
+ permanentMemory = null;
526
+ }
470
527
  }
471
528
 
472
529
  try {
@@ -687,33 +744,44 @@ export class WSSessionManager {
687
744
  metadata,
688
745
  );
689
746
  const planManager = this._hydratePlanManager(metadata.planSnapshot);
690
- const sessionStateJournal = hydrateWsSessionState(
691
- metadata.sessionState,
692
- Object.prototype.hasOwnProperty.call(metadata, "planSnapshot")
693
- ? {
694
- // Legacy/current metadata migration is pass-through only.
695
- // PlanModeManager remains the sole owner of Plan hydration and
696
- // persistence.
697
- planSnapshot: metadata.planSnapshot,
698
- }
699
- : {},
700
- );
747
+ const canonicalSessionState =
748
+ metadata.canonicalJsonlSession === true
749
+ ? this._readCanonicalSessionState(dbSession.id, { required: true })
750
+ : null;
751
+ const sessionStateJournal = canonicalSessionState
752
+ ? hydrateCanonicalWsSessionState(canonicalSessionState)
753
+ : hydrateWsSessionState(
754
+ metadata.sessionState,
755
+ Object.prototype.hasOwnProperty.call(metadata, "planSnapshot")
756
+ ? {
757
+ // Legacy/current metadata migration is pass-through only.
758
+ // PlanModeManager remains the sole owner of Plan hydration and
759
+ // persistence.
760
+ planSnapshot: metadata.planSnapshot,
761
+ }
762
+ : {},
763
+ );
701
764
  const stateRecovery = recoverWsSessionState(sessionStateJournal, {
702
765
  reason: "process_restart",
703
766
  });
704
767
  const externalTools = this._buildSessionExternalTools();
768
+ const contextMemoryCutover = resolveCliContextMemoryCutover({
769
+ scopeKey: `cli:ws-session:${dbSession.id}`,
770
+ });
705
771
  let contextEngine = null;
706
772
  let permanentMemory = null;
707
773
 
708
- try {
709
- const memoryDir = path.join(workspace.projectRoot, "memory");
710
- permanentMemory = new CLIPermanentMemory({
711
- db: this.db,
712
- memoryDir,
713
- });
714
- permanentMemory.initialize();
715
- } catch (_err) {
716
- // Non-critical
774
+ if (!contextMemoryCutover.canonical) {
775
+ try {
776
+ const memoryDir = path.join(workspace.projectRoot, "memory");
777
+ permanentMemory = new CLIPermanentMemory({
778
+ db: this.db,
779
+ memoryDir,
780
+ });
781
+ permanentMemory.initialize();
782
+ } catch (_err) {
783
+ permanentMemory = null;
784
+ }
717
785
  }
718
786
 
719
787
  try {
@@ -756,6 +824,9 @@ export class WSSessionManager {
756
824
  patchHistory: this._boundPatchHistory(metadata.patchHistory),
757
825
  taskGraph: this._hydrateTaskGraph(metadata.taskGraph),
758
826
  interaction: null,
827
+ canonicalJsonlSession:
828
+ canonicalSessionState != null ||
829
+ metadata.canonicalJsonlSession === true,
759
830
  createdAt: dbSession.created_at,
760
831
  lastActivity: new Date().toISOString(),
761
832
  };
@@ -779,6 +850,7 @@ export class WSSessionManager {
779
850
  this._bindPlanManagerPersistence(session);
780
851
  this.sessions.set(session.id, session);
781
852
  if (stateRecovery.changed) {
853
+ this._persistCanonicalSessionState(session, sessionStateJournal);
782
854
  this._persistSessionState(session.id);
783
855
  }
784
856
  return session;
@@ -787,6 +859,47 @@ export class WSSessionManager {
787
859
  }
788
860
  }
789
861
 
862
+ /** Build the local compatibility projection for a verified canonical-only session. */
863
+ resumeCanonicalSession(sessionId, options = {}) {
864
+ if (this.sessions.has(sessionId)) return this.resumeSession(sessionId);
865
+ // Read and validate any canonical WS journal before creating a DB/cache
866
+ // projection. An invalid journal must never be replaced by empty state.
867
+ const canonicalSessionState = this._readCanonicalSessionState(sessionId);
868
+ const canonicalJournal = canonicalSessionState
869
+ ? hydrateCanonicalWsSessionState(canonicalSessionState)
870
+ : null;
871
+ const stateRecovery = canonicalJournal
872
+ ? recoverWsSessionState(canonicalJournal, {
873
+ reason: "process_restart",
874
+ })
875
+ : { changed: false };
876
+ const created = this.createSession({
877
+ sessionId,
878
+ type: options.type || "agent",
879
+ provider: options.provider,
880
+ model: options.model,
881
+ baseUrl: options.baseUrl,
882
+ projectRoot: options.projectRoot,
883
+ requireDurable: false,
884
+ });
885
+ const session = this.sessions.get(created.sessionId) || null;
886
+ if (session && canonicalJournal) {
887
+ try {
888
+ session.canonicalJsonlSession = true;
889
+ this._bindSessionStateJournal(session, canonicalJournal);
890
+ if (stateRecovery.changed) {
891
+ this._persistCanonicalSessionState(session, canonicalJournal);
892
+ }
893
+ this._persistSessionState(session.id);
894
+ } catch (error) {
895
+ this.sessions.delete(session.id);
896
+ this._discardSessionResources(session);
897
+ throw error;
898
+ }
899
+ }
900
+ return session;
901
+ }
902
+
790
903
  /**
791
904
  * Close a session and persist final state.
792
905
  *
@@ -1641,6 +1754,7 @@ export class WSSessionManager {
1641
1754
  baseUrl: session.baseUrl || null,
1642
1755
  hostManagedToolPolicy: session.hostManagedToolPolicy || null,
1643
1756
  sessionBudgetRoot: session.sessionBudgetRoot || null,
1757
+ canonicalJsonlSession: session.canonicalJsonlSession === true,
1644
1758
  enabledToolNames: session.enabledToolNames || [],
1645
1759
  canonicalHostSystemPrefix: Array.isArray(
1646
1760
  session._canonicalHostSystemPrefix,
@@ -1689,12 +1803,72 @@ export class WSSessionManager {
1689
1803
  return session._sessionStateJournal;
1690
1804
  }
1691
1805
 
1806
+ _readCanonicalSessionState(sessionId, { required = false } = {}) {
1807
+ const event = this.canonicalSessionStore.findLatestEvent(
1808
+ sessionId,
1809
+ WS_SESSION_ROLLOUT_EVENT,
1810
+ );
1811
+ if (!event) {
1812
+ if (required) {
1813
+ throw canonicalWsStateError(
1814
+ "CC_WS_CANONICAL_STATE_MISSING",
1815
+ `canonical WebSocket session state is missing: ${sessionId}`,
1816
+ );
1817
+ }
1818
+ return null;
1819
+ }
1820
+ if (event.data?.schema !== WS_SESSION_ROLLOUT_SCHEMA) {
1821
+ throw canonicalWsStateError(
1822
+ "CC_WS_CANONICAL_STATE_CORRUPT",
1823
+ `canonical WebSocket session state has an invalid schema: ${sessionId}`,
1824
+ );
1825
+ }
1826
+ return event.data.journal;
1827
+ }
1828
+
1829
+ _persistCanonicalSessionState(session, journal) {
1830
+ if (session?.canonicalJsonlSession !== true) return null;
1831
+ return this.canonicalSessionStore.appendEvent(
1832
+ session.id,
1833
+ WS_SESSION_ROLLOUT_EVENT,
1834
+ {
1835
+ schema: WS_SESSION_ROLLOUT_SCHEMA,
1836
+ journal: serializeWsSessionState(journal),
1837
+ },
1838
+ );
1839
+ }
1840
+
1841
+ markCanonicalSession(sessionId) {
1842
+ const session = this.sessions.get(sessionId);
1843
+ if (!session) return null;
1844
+ const previous = session.canonicalJsonlSession === true;
1845
+ session.canonicalJsonlSession = true;
1846
+ try {
1847
+ this._persistCanonicalSessionState(
1848
+ session,
1849
+ this._ensureSessionStateJournal(session),
1850
+ );
1851
+ this._persistSessionState(sessionId);
1852
+ return session;
1853
+ } catch (error) {
1854
+ session.canonicalJsonlSession = previous;
1855
+ throw error;
1856
+ }
1857
+ }
1858
+
1692
1859
  /** Record a recovery event and atomically persist it with session messages. */
1693
1860
  recordSessionStateEvent(sessionId, type, payload = {}) {
1694
1861
  const session = this.sessions.get(sessionId);
1695
1862
  if (!session) return null;
1696
1863
  const journal = this._ensureSessionStateJournal(session);
1864
+ const before = serializeWsSessionState(journal);
1697
1865
  appendWsSessionStateEvent(journal, type, payload);
1866
+ try {
1867
+ this._persistCanonicalSessionState(session, journal);
1868
+ } catch (error) {
1869
+ this._bindSessionStateJournal(session, hydrateWsSessionState(before));
1870
+ throw error;
1871
+ }
1698
1872
  this._persistSessionState(sessionId);
1699
1873
  return getWsSessionStateSnapshot(journal);
1700
1874
  }