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
@@ -0,0 +1,192 @@
1
+ import {
2
+ canonicalDigest,
3
+ canonicalJson,
4
+ normalizeContextItem,
5
+ } from "@chainlesschain/context-memory-kernel";
6
+ import { getContextWindow } from "../model-context-window.js";
7
+ import { createCliContextMemoryRuntime } from "./runtime.js";
8
+ import {
9
+ contextItemsToMessages,
10
+ memoryRecordsToContextItems,
11
+ messagesToContextItems,
12
+ } from "./message-adapter.js";
13
+
14
+ function defaultAdmissions(sessionId, options) {
15
+ const candidates = [
16
+ { scope: "session", scopeId: sessionId },
17
+ { scope: "agent", scopeId: options.agentId || sessionId },
18
+ { scope: "user", scopeId: options.userId || "local-user" },
19
+ ];
20
+ const configured = options.contextMemoryScopeAdmissions;
21
+ const admissions = Array.isArray(configured) && configured.length > 0
22
+ ? configured
23
+ : candidates;
24
+ const seen = new Set();
25
+ return admissions.filter((entry) => {
26
+ const key = `${entry.scope}\0${entry.scopeId || ""}`;
27
+ if (seen.has(key)) return false;
28
+ seen.add(key);
29
+ return true;
30
+ });
31
+ }
32
+
33
+ function toolDefinitionsToContextItems(definitionsInput, { sessionId, sink }) {
34
+ const definitions = Array.isArray(definitionsInput) ? definitionsInput : [];
35
+ return definitions.map((definition, index) => {
36
+ const content = canonicalJson(definition);
37
+ const name = String(
38
+ definition?.function?.name || definition?.name || `tool-${index}`,
39
+ );
40
+ const sourceDigest = canonicalDigest(
41
+ definition,
42
+ "chainlesschain.cli-tool-schema/v1",
43
+ );
44
+ return normalizeContextItem({
45
+ schemaVersion: 1,
46
+ itemId: `cli-tool-${sourceDigest.slice(7, 39)}`,
47
+ kind: "tool-schema",
48
+ scope: "session",
49
+ scopeId: sessionId,
50
+ sourceRef: {
51
+ store: "cli-tool-registry",
52
+ id: name,
53
+ digest: sourceDigest,
54
+ },
55
+ provenance: {
56
+ source: "cli-tool-registry",
57
+ observedAt: "1970-01-01T00:00:00.000Z",
58
+ },
59
+ trust: "host",
60
+ sensitivity: "internal",
61
+ allowedSinks: [sink],
62
+ tokenEstimate: Math.max(
63
+ 1,
64
+ Math.ceil(Buffer.byteLength(content, "utf8") / 4),
65
+ ),
66
+ priority: Math.max(500_000, 600_000 - index),
67
+ pinned: false,
68
+ createdAt: "1970-01-01T00:00:00.000Z",
69
+ content,
70
+ });
71
+ });
72
+ }
73
+
74
+ /**
75
+ * Bind every paid provider request to one canonical plan and memory revision.
76
+ * The returned messages are ephemeral; the authoritative transcript remains
77
+ * the JSONL/session port and recalled memories remain independently deletable.
78
+ */
79
+ export async function prepareCanonicalProviderContext(
80
+ messagesInput,
81
+ options = {},
82
+ ) {
83
+ const messages = Array.isArray(messagesInput) ? messagesInput : [];
84
+ const sessionId = String(options.sessionId || "ephemeral-cli-session");
85
+ const runtime = createCliContextMemoryRuntime({
86
+ env: options.contextMemoryEnv || process.env,
87
+ sessionId,
88
+ scopeKey: `cli:provider:${sessionId}`,
89
+ ...(options.contextMemoryFilePath
90
+ ? { memoryFilePath: options.contextMemoryFilePath }
91
+ : {}),
92
+ });
93
+ if (!runtime.decision.canonical || options.contextMemorySkipPlanning === true) {
94
+ return { messages, plan: null, recall: null, decision: runtime.decision };
95
+ }
96
+
97
+ const provider = String(options.provider || "local");
98
+ const sink = String(options.contextMemorySink || `provider.${provider}`);
99
+ const scopeAdmissions = defaultAdmissions(sessionId, options);
100
+ const lastUser = [...messages]
101
+ .reverse()
102
+ .find((message) => message?.role === "user");
103
+ const query =
104
+ typeof lastUser?.content === "string" && lastUser.content.trim()
105
+ ? lastUser.content.trim().slice(0, 32 * 1024)
106
+ : "*";
107
+ const recall = await runtime.kernel.recallMemory({
108
+ query,
109
+ sink,
110
+ scopeAdmissions,
111
+ limit: Math.max(1, Math.min(32, Number(options.contextMemoryRecallLimit) || 12)),
112
+ tokenBudget: Math.max(
113
+ 1,
114
+ Math.min(32_768, Number(options.contextMemoryRecallTokens) || 4096),
115
+ ),
116
+ });
117
+ const messageItems = messagesToContextItems(messages, {
118
+ sessionId,
119
+ allowedSinks: [sink],
120
+ trustCurrentSystemPolicy: true,
121
+ trustedSystemIndexes: options.contextMemoryTrustedSystemIndexes,
122
+ });
123
+ const memoryItems = memoryRecordsToContextItems(
124
+ recall.results.map((entry) => entry.record),
125
+ { insertionSequence: Math.max(0, messages.length - 1) },
126
+ );
127
+ const toolItems = toolDefinitionsToContextItems(
128
+ options.contextMemoryToolDefinitions,
129
+ { sessionId, sink },
130
+ );
131
+ const items = [...messageItems, ...memoryItems, ...toolItems];
132
+ const modelWindowTokens = Math.max(
133
+ 1024,
134
+ Number(options.contextMemoryModelWindowTokens) ||
135
+ getContextWindow(options.model, provider) ||
136
+ 128 * 1024,
137
+ );
138
+ const reservedOutputTokens = Math.min(
139
+ modelWindowTokens - 1,
140
+ Math.max(256, Number(options.maxOutputTokens) || 4096),
141
+ );
142
+ const safetyMarginTokens = Math.min(
143
+ modelWindowTokens - reservedOutputTokens - 1,
144
+ Math.max(64, Math.floor(modelWindowTokens * 0.05)),
145
+ );
146
+ const inputBudget =
147
+ modelWindowTokens - reservedOutputTokens - safetyMarginTokens;
148
+ const recoveryReserveTokens = Math.min(
149
+ Math.max(32, Math.floor(inputBudget * 0.05)),
150
+ Math.max(0, inputBudget - 1),
151
+ );
152
+ const sessionHead =
153
+ options.contextMemorySessionHead ||
154
+ canonicalDigest(
155
+ messageItems.map((item) => item.digest),
156
+ "chainlesschain.cli-provider-context-head/v1",
157
+ );
158
+ const plan = await runtime.kernel.planContext({
159
+ modelWindowTokens,
160
+ reservedOutputTokens,
161
+ safetyMarginTokens,
162
+ recoveryReserveTokens,
163
+ items,
164
+ sink,
165
+ scopeAdmissions,
166
+ partitionCeilings: {
167
+ "trusted-system": inputBudget,
168
+ "working-state": inputBudget,
169
+ "tools-and-skills": inputBudget,
170
+ conversation: inputBudget,
171
+ "tool-evidence": inputBudget,
172
+ "memory-and-rules": Math.max(1, Math.floor(inputBudget * 0.12)),
173
+ },
174
+ policyVersion: String(options.contextMemoryPolicyVersion || "cli-provider-v1"),
175
+ modelProfile: `${provider}:${String(options.model || "default")}`.slice(0, 256),
176
+ sessionHead,
177
+ memoryRevision: recall.memoryRevision,
178
+ });
179
+ return {
180
+ messages: contextItemsToMessages(
181
+ plan.selected.filter((item) => item.kind !== "tool-schema"),
182
+ ),
183
+ selectedToolNames: toolItems
184
+ .filter((item) => plan.selectedItemIds.includes(item.itemId))
185
+ .map((item) => item.sourceRef.id),
186
+ plan,
187
+ recall,
188
+ decision: runtime.decision,
189
+ };
190
+ }
191
+
192
+ export { defaultAdmissions, toolDefinitionsToContextItems };
@@ -0,0 +1,61 @@
1
+ import { ContextMemoryKernel } from "@chainlesschain/context-memory-kernel";
2
+ import { DurableJsonMemoryPort } from "./durable-memory-port.js";
3
+ import { JsonlSessionContextPort } from "./jsonl-session-context-port.js";
4
+ import { CliLegacyMemoryPrivacyPurgePort } from "./privacy-purge-port.js";
5
+ import {
6
+ createCliAuthority,
7
+ resolveCliContextMemoryCutover,
8
+ } from "./authority.js";
9
+
10
+ export function createCliContextMemoryRuntime(options = {}) {
11
+ const scopeKey = options.scopeKey ||
12
+ (options.sessionId ? `cli:session:${options.sessionId}` : "cli:memory");
13
+ const decision = resolveCliContextMemoryCutover({
14
+ env: options.env,
15
+ scopeKey,
16
+ });
17
+ const authority = createCliAuthority({
18
+ decision,
19
+ now: options.clock || Date.now,
20
+ });
21
+ const memoryPort =
22
+ options.memoryPort ||
23
+ new DurableJsonMemoryPort({
24
+ ...(options.memoryFilePath ? { filePath: options.memoryFilePath } : {}),
25
+ });
26
+ const sessionPort =
27
+ options.sessionPort ||
28
+ (options.sessionId
29
+ ? new JsonlSessionContextPort({
30
+ sessionId: options.sessionId,
31
+ allowedSinks: options.allowedSinks || ["*"],
32
+ })
33
+ : null);
34
+ const purgePorts = options.purgePorts || [
35
+ new CliLegacyMemoryPrivacyPurgePort({
36
+ ...(options.legacyMemoryStorePath
37
+ ? { memoryStorePath: options.legacyMemoryStorePath }
38
+ : {}),
39
+ ...(options.legacyDb ? { legacyDb: options.legacyDb } : {}),
40
+ }),
41
+ ];
42
+ const kernel = new ContextMemoryKernel({
43
+ sessionPort,
44
+ memoryPort,
45
+ reconciliationPort: memoryPort,
46
+ authorityRegistry: authority.registry,
47
+ writer: authority.writer,
48
+ mode: decision.canonical ? "canonical" : "shadow",
49
+ clock: options.clock || Date.now,
50
+ ...(options.randomUUID ? { randomUUID: options.randomUUID } : {}),
51
+ purgePorts,
52
+ });
53
+ return Object.freeze({
54
+ decision,
55
+ kernel,
56
+ memoryPort,
57
+ sessionPort,
58
+ authorityRegistry: authority.registry,
59
+ writer: authority.writer,
60
+ });
61
+ }
@@ -36,9 +36,16 @@ async function persistUsageEvent(persist, type, event) {
36
36
  }
37
37
  }
38
38
 
39
- function unknownUsageEvent({ callId, provider, model, source, code }) {
39
+ function unknownUsageEvent({
40
+ callId,
41
+ provider,
42
+ model,
43
+ source,
44
+ operationId,
45
+ code,
46
+ }) {
40
47
  return projectRuntimeUsageBoundary(
41
- { callId, provider, model, source, code },
48
+ { callId, provider, model, source, operationId, code },
42
49
  "unknown",
43
50
  );
44
51
  }
@@ -54,6 +61,7 @@ export async function runMeteredDirectModelCall({
54
61
  provider,
55
62
  model,
56
63
  source = "model",
64
+ operationId = undefined,
57
65
  sessionBudget = null,
58
66
  call,
59
67
  }) {
@@ -77,11 +85,14 @@ export async function runMeteredDirectModelCall({
77
85
  await persistUsageEvent(
78
86
  persist,
79
87
  runtimeUsageEventType("started"),
80
- projectRuntimeUsageBoundary({ callId, provider, model, source }, "started"),
88
+ projectRuntimeUsageBoundary(
89
+ { callId, provider, model, source, operationId },
90
+ "started",
91
+ ),
81
92
  );
82
93
  beginSessionBudgetUsage(
83
94
  sessionBudget,
84
- { callId, provider, model, source },
95
+ { callId, provider, model, source, operationId },
85
96
  `direct model call ${source}`,
86
97
  );
87
98
  let result;
@@ -93,13 +104,10 @@ export async function runMeteredDirectModelCall({
93
104
  provider,
94
105
  model,
95
106
  source,
107
+ operationId,
96
108
  code: "provider_call_failed",
97
109
  });
98
- await persistUsageEvent(
99
- persist,
100
- runtimeUsageEventType("unknown"),
101
- unknown,
102
- );
110
+ await persistUsageEvent(persist, runtimeUsageEventType("unknown"), unknown);
103
111
  markSessionBudgetUsageUnknown(sessionBudget, unknown);
104
112
  throw error;
105
113
  }
@@ -111,6 +119,7 @@ export async function runMeteredDirectModelCall({
111
119
  provider,
112
120
  model,
113
121
  source,
122
+ operationId,
114
123
  usage: result.usage,
115
124
  });
116
125
  } catch {
@@ -119,6 +128,7 @@ export async function runMeteredDirectModelCall({
119
128
  provider,
120
129
  model,
121
130
  source,
131
+ operationId,
122
132
  code: "provider_usage_missing",
123
133
  });
124
134
  await persistUsageEvent(
@@ -127,10 +137,7 @@ export async function runMeteredDirectModelCall({
127
137
  unknown,
128
138
  );
129
139
  if (markSessionBudgetUsageUnknown(sessionBudget, unknown)) {
130
- rejectSessionBudgetUsageUnknown(
131
- unknown,
132
- `direct model call ${source}`,
133
- );
140
+ rejectSessionBudgetUsageUnknown(unknown, `direct model call ${source}`);
134
141
  }
135
142
  return result;
136
143
  }
@@ -146,13 +153,10 @@ export async function runMeteredDirectModelCall({
146
153
  provider,
147
154
  model,
148
155
  source,
156
+ operationId,
149
157
  code: "provider_usage_missing",
150
158
  });
151
- await persistUsageEvent(
152
- persist,
153
- runtimeUsageEventType("unknown"),
154
- unknown,
155
- );
159
+ await persistUsageEvent(persist, runtimeUsageEventType("unknown"), unknown);
156
160
  if (markSessionBudgetUsageUnknown(sessionBudget, unknown)) {
157
161
  rejectSessionBudgetUsageUnknown(unknown, `direct model call ${source}`);
158
162
  }
@@ -1,8 +1,6 @@
1
1
  import path from "node:path";
2
- import {
3
- defaultRolloutStoreDirectory,
4
- JsonlRolloutStore,
5
- } from "../app-server/rollout-store.js";
2
+ import { defaultRolloutStoreDirectory } from "../app-server/rollout-store.js";
3
+ import { createRolloutStore } from "../app-server/rollout-store-factory.js";
6
4
  import { GraphCutoverLedger } from "./cutover-ledger.js";
7
5
  import {
8
6
  graphRuntimeEntryManifestDigest,
@@ -230,7 +228,8 @@ export function createRuntimeGraphCutoverAuthorityResolver({
230
228
  const resolvedLedger =
231
229
  ledger ||
232
230
  new GraphCutoverLedger({
233
- store: new JsonlRolloutStore({
231
+ store: createRolloutStore({
232
+ backend: env.CHAINLESSCHAIN_ROLLOUT_STORE,
234
233
  directory: path.resolve(
235
234
  stateDirectory ||
236
235
  env.CHAINLESSCHAIN_GRAPH_CUTOVER_STATE_DIR ||
@@ -1,5 +1,5 @@
1
1
  import { createHash } from "node:crypto";
2
- import { JsonlRolloutStore } from "../app-server/rollout-store.js";
2
+ import { createRolloutStore } from "../app-server/rollout-store-factory.js";
3
3
  import { assertGraphCutoverTransition } from "./authority.js";
4
4
  import { graphDigest } from "./compiler.js";
5
5
  import {
@@ -478,7 +478,7 @@ function projection(state, events) {
478
478
  }
479
479
 
480
480
  export class GraphCutoverLedger {
481
- constructor({ store = new JsonlRolloutStore(), now = Date.now } = {}) {
481
+ constructor({ store = createRolloutStore(), now = Date.now } = {}) {
482
482
  this.store = store;
483
483
  this.now = now;
484
484
  }
@@ -1,8 +1,6 @@
1
1
  import path from "node:path";
2
- import {
3
- JsonlRolloutStore,
4
- defaultRolloutStoreDirectory,
5
- } from "../app-server/rollout-store.js";
2
+ import { defaultRolloutStoreDirectory } from "../app-server/rollout-store.js";
3
+ import { createRolloutStore } from "../app-server/rollout-store-factory.js";
6
4
 
7
5
  export const GRAPH_EVENT_SCHEMA = "chainlesschain.graph-event/v1";
8
6
 
@@ -16,7 +14,7 @@ function clone(value) {
16
14
 
17
15
  export class GraphEventStore {
18
16
  constructor({
19
- rolloutStore = new JsonlRolloutStore({
17
+ rolloutStore = createRolloutStore({
20
18
  directory: defaultGraphEventStoreDirectory(),
21
19
  }),
22
20
  } = {}) {
@@ -9,3 +9,5 @@ export * from "./adapters.js";
9
9
  export * from "./authority.js";
10
10
  export * from "./runtime-surface-manifest.js";
11
11
  export * from "./migration-saga.js";
12
+ export * from "./production-cutover-evidence.js";
13
+ export * from "./retirement-evidence.js";
@@ -1,5 +1,5 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { JsonlRolloutStore } from "../app-server/rollout-store.js";
2
+ import { createRolloutStore } from "../app-server/rollout-store-factory.js";
3
3
  import { createGraphAuthorityBinding } from "./authority.js";
4
4
 
5
5
  export const GRAPH_MIGRATION_SCHEMA =
@@ -84,7 +84,7 @@ function stateFromEvents(events, migrationId) {
84
84
  * this API intentionally has no "fall back to legacy" operation.
85
85
  */
86
86
  export class GraphAuthorityMigrationSaga {
87
- constructor({ store = new JsonlRolloutStore(), now = Date.now } = {}) {
87
+ constructor({ store = createRolloutStore(), now = Date.now } = {}) {
88
88
  this.store = store;
89
89
  this.now = now;
90
90
  }