chainlesschain 0.166.10 → 0.166.14

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 (244) hide show
  1. package/README.md +33 -0
  2. package/bin/chainlesschain.js +5 -0
  3. package/package.json +4 -2
  4. package/src/assets/web-panel/assets/{AIOps-CLYBDAGv.js → AIOps-C8SyFhOo.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-CpeSttcu.js → ActionButton-Dup5gFK0.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-Ba1TNLG0.js → Analytics-8FyOWA7V.js} +3 -3
  7. package/src/assets/web-panel/assets/{AppLayout-xBy8EOeg.js → AppLayout-DBzdU9dg.js} +3 -3
  8. package/src/assets/web-panel/assets/{Artifacts-CJ_3TFb8.js → Artifacts-C_0Z8gNy.js} +1 -1
  9. package/src/assets/web-panel/assets/{Audit-DUATFCG3.js → Audit-Cf2a-58m.js} +1 -1
  10. package/src/assets/web-panel/assets/{BackgroundAgents-BRXYPIGp.js → BackgroundAgents-M7w-2zgB.js} +1 -1
  11. package/src/assets/web-panel/assets/{Backup-D8auLx7y.js → Backup-CCTHQXoL.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-CBgdslQ3.js → BaseInput-DjXpeFwJ.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-B32LvAiE.js → Chat-cAvchsJU.js} +5 -5
  14. package/src/assets/web-panel/assets/{ChatBubbleRenderer-CVfvAy-n.js → ChatBubbleRenderer-DvEvxlZv.js} +1 -1
  15. package/src/assets/web-panel/assets/{Checkbox-BwzBxOpC.js → Checkbox-DKs6qvOn.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-0U5vrg1H.js → Codegen-DlkA7b9X.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-dZ2i4aAj.js → Col-CkfdKhyJ.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-UVvpLr8c.js → Community-iNXMHzj6.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-BDNEb1Bd.js → Compact-DQxPEd09.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-BrzQPxyS.js → Compliance-CSKvMCjs.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-BbgGsu-9.js → Cowork-CkWqazpD.js} +2 -2
  22. package/src/assets/web-panel/assets/{Cron-G321XPhp.js → Cron-k6W8IzhB.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-CgLNUyMn.js → Crosschain-C8MS1OuY.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-BAfRj18q.js → DID-DJuCcgiQ.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dashboard-BNIxA4TK.js → Dashboard-LeThKzp3.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dropdown-BLAUmCAN.js → Dropdown-BvxwgpE4.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer-CsnhTW22.js → EmailListRenderer-n3e_a1M3.js} +1 -1
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-zcQ7Ip1n.js → FamilyGuardDashboard-509W6W6v.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-KFwxodNU.js → Federation-xgZReQm0.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-3CYRLEHG.js → FormItemContext-jZOhKcQx.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-D3d9D8L9.js → GenericCardRenderer-Jo0ULzHv.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git-BJ202nJY.js → Git-BsRcyWQP.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-ClnnXVQ-.js → Governance-JlpMYTAk.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-DNU-PTkc.js → Inference-CUEz872-.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-DJuinbuY.js → KnowledgeGraph-DgrvvEDU.js} +1 -1
  36. package/src/assets/web-panel/assets/{Logs-D4No-46s.js → Logs-Df-KY4U3.js} +2 -2
  37. package/src/assets/web-panel/assets/MarkdownRenderer-BEPDcSwz.js +1 -0
  38. package/src/assets/web-panel/assets/{Marketplace-Ba-KqRN3.js → Marketplace-kPZDTOeI.js} +1 -1
  39. package/src/assets/web-panel/assets/{McpTools-DVoxnPgE.js → McpTools-CRRzPqNX.js} +2 -2
  40. package/src/assets/web-panel/assets/{Memory-D_C8gzAZ.js → Memory-D6pNSkg9.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-DnzTPcDH.js → MobileBridge-g-pvtwRC.js} +1 -1
  42. package/src/assets/web-panel/assets/MobileProjects-Bzayfrfe.js +1 -0
  43. package/src/assets/web-panel/assets/{Mtc-CvEHmHId.js → Mtc-B7S3W-XL.js} +2 -2
  44. package/src/assets/web-panel/assets/{MtcAudit-VNJmWqmv.js → MtcAudit-B8OMEWVb.js} +2 -2
  45. package/src/assets/web-panel/assets/{Multisig-BO0x_Vsa.js → Multisig-CowRp7GH.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-CM2gI1UY.js → NLProgramming-BkQNyi4c.js} +1 -1
  47. package/src/assets/web-panel/assets/{Notes-CMc1HsML.js → Notes-Cm7gtkKz.js} +3 -3
  48. package/src/assets/web-panel/assets/{NotificationSettings-DGNmSKGM.js → NotificationSettings-CbPTVh9m.js} +1 -1
  49. package/src/assets/web-panel/assets/{OrderTableRenderer-Du-Kct3p.js → OrderTableRenderer-Dswi26mJ.js} +1 -1
  50. package/src/assets/web-panel/assets/{Organization-DRtRZjas.js → Organization-BkjQ9yy7.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-Dp4OeWsn.js → Overflow-DmRFXP7Y.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P-DXMJVls8.js → P2P-DQE1toAu.js} +2 -2
  53. package/src/assets/web-panel/assets/PdhVaultBrowser-BujyoDRG.js +7 -0
  54. package/src/assets/web-panel/assets/{Permissions-D1Hbb51o.js → Permissions-xSjfOaiU.js} +4 -4
  55. package/src/assets/web-panel/assets/{PersonalDataHub-BridiDhr.js → PersonalDataHub-B9ICLqVP.js} +3 -3
  56. package/src/assets/web-panel/assets/{Pipeline-B4bUNCm1.js → Pipeline-CUNwyN9E.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-BTu_HEqK.js → Privacy-SOoCricX.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-SVtL2hnt.js → ProjectInit-CSaFul0F.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-B2Sh7JZ2.js → ProjectSettings-CueiB_oe.js} +2 -2
  60. package/src/assets/web-panel/assets/{Projects-BwU1xalW.js → Projects-BOeXvU7y.js} +1 -1
  61. package/src/assets/web-panel/assets/{Providers-BWdWQSDw.js → Providers-CTqf_31h.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-Brzc-Sxb.js → QrScannerModal-C8ZP31E9.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-DIBz7FCe.js → QuickAsk-CPgn4713.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-CZ8RriIJ.js → Recommend-8_e0zw0i.js} +1 -1
  65. package/src/assets/web-panel/assets/{RemoteSession-CM0KJQ3t.js → RemoteSession-iT7lbGqw.js} +3 -3
  66. package/src/assets/web-panel/assets/{Reputation-D_wo8H0O.js → Reputation-B4q9SUOz.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-D1G1fD7N.js → Row-CA_nASyL.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-dKCVtA0K.js → RssFeed-Cwb0E3yv.js} +2 -2
  69. package/src/assets/web-panel/assets/{Search-Be1D61xo.js → Search-D9iVsOxJ.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-IbNiR6OC.js → Security-DPLbYchG.js} +3 -3
  71. package/src/assets/web-panel/assets/{Services-nuHK8y8p.js → Services-DGMVL_LF.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-DnM5jdnC.js → Skeleton-B_6kym0D.js} +1 -1
  73. package/src/assets/web-panel/assets/{Skills-DCTdoq_q.js → Skills-Ds6r0dXB.js} +1 -1
  74. package/src/assets/web-panel/assets/{Sla-DlWun-Ui.js → Sla-BLHAbBhb.js} +1 -1
  75. package/src/assets/web-panel/assets/{SpeechSettings-C19kv2sd.js → SpeechSettings-CZuddd14.js} +1 -1
  76. package/src/assets/web-panel/assets/{SyncSettings-CkQIR_Hu.js → SyncSettings-CdBq7oSl.js} +2 -2
  77. package/src/assets/web-panel/assets/{Tasks-DdbqOEbs.js → Tasks-DfT60Nyl.js} +1 -1
  78. package/src/assets/web-panel/assets/{Templates-B7GpIXeo.js → Templates-RLfsKy2V.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-ByEstFhY.js → Tenant-Cw8xCNLE.js} +1 -1
  80. package/src/assets/web-panel/assets/{Terminal-BKRVID1a.js → Terminal-BOUkNu4f.js} +2 -2
  81. package/src/assets/web-panel/assets/{TimelineRenderer-CNS3dHNv.js → TimelineRenderer-CgGZWaRm.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-BykqylCL.js → Tokens-CpwjVyir.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-ByNxq51W.js → Trigger-DL21H-eb.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-BlrFsdaS.js → Trust-B3ffFclW.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-Dg26A-sd.js → UkeySign-CkBeb5aI.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-C1wUxNn0.js → VideoEditing-U2iVaE3r.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-OphEUzI4.js → Wallet-CQk2wzYd.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-_8lL08hF.js → WebAuthn-DYIuIYzT.js} +5 -5
  89. package/src/assets/web-panel/assets/{WorkflowEditor-BnTuIvnP.js → WorkflowEditor-tg1c2mZQ.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-3N3VLQYr.js → chat-CtL61spq.js} +1 -1
  91. package/src/assets/web-panel/assets/{colors-Bo_G96gg.js → colors-DKpbeo8s.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-DjubfjI_.js → compact-item-gPZsrswt.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-Cx_HSLCk.js → createContext-CfHlwzVr.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-DdqnMhzi.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-D5OjAOlA.js → hasIn-MV47g_6X.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-x7o-2T3S.js → index-6G0ETFTW.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-CqZq3zWr.js → index-BBw52sEl.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-C-4sfa0l.js → index-BN-wxSQ8.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-uAcJUJkx.js → index-BOyGUuBE.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CC7RnaPP.js → index-BQp5M0s1.js} +1 -1
  101. package/src/assets/web-panel/assets/index-BcK8o4ke.js +1 -0
  102. package/src/assets/web-panel/assets/{index-CNmsP0Xf.js → index-BjlPD7GO.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CVPDhmVH.js → index-C4lF-f_z.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-CRKk1JPX.js → index-C6nC_DyY.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-B905-Mcs.js → index-C9RF4ieu.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-3_CEBEEf.js → index-C9gtY4nG.js} +3 -3
  107. package/src/assets/web-panel/assets/{index-Y-H7j25u.js → index-CB1HnbNK.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-C5IwN9q3.js → index-CRv_uMLV.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Q_vn0t8d.js → index-C_B9LiKs.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Cz5tQ5PY.js → index-Cjv0kKCU.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-BgPb37tI.js → index-CmM9jqwe.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-Dbdr8tVi.js → index-CmPJpLoD.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-DrVjatPe.js → index-CzfxTSPW.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-C-_Cy0k_.js → index-D1XB5-t5.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-C8dPFFhy.js → index-DGtEBodr.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-UnpsQ6A0.js → index-DIeJmlAA.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-BxgIE4PD.js → index-DMMvlLp9.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DlcbE0sX.js → index-DU4rZpiK.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-EZr3bvz2.js → index-D_Pl1GnW.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-BScGr1BY.js → index-Dd19vRwy.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-Ce8EWU6r.js → index-Ddcpj1El.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-CCjq3g32.js → index-Df9sWKpl.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-ydnEPOzZ.js → index-DfLyHCWi.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-C4MAnkl5.js → index-DnZ_zS1M.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-DXJqa1-I.js → index-DsH-i_3d.js} +1 -1
  126. package/src/assets/web-panel/assets/index-DvbAjyYI.js +1 -0
  127. package/src/assets/web-panel/assets/{index-DBvZhdCb.js → index-ExAGPAnX.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-DD1zSPZH.js → index-Rb7CRMw9.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-DE4XtzMl.js → index-Zvkt9xqi.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-CmLwI-Y8.js → index-bSFrAszw.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-HioDjvUF.js → index-fYcS7NS0.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-BvYo09C0.js → index-srBc9U_s.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-Bj7S5IJw.js → index-xUlgG0Xe.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-DaU60K3A.js → index-yxxXlqBA.js} +1 -1
  135. package/src/assets/web-panel/assets/{initDefaultProps-DurpENJY.js → initDefaultProps-BeOZoSZ4.js} +1 -1
  136. package/src/assets/web-panel/assets/{motion-CIh-z-gR.js → motion-BXE8VMKx.js} +1 -1
  137. package/src/assets/web-panel/assets/{move-Uc_yI2NA.js → move-I9sdvPGX.js} +1 -1
  138. package/src/assets/web-panel/assets/{mtc-parser-DUevj5wz.js → mtc-parser-d25zrJd0.js} +1 -1
  139. package/src/assets/web-panel/assets/{omit-85eMYyur.js → omit-D71V_T4e.js} +1 -1
  140. package/src/assets/web-panel/assets/{pickAttrs-AuxDD20F.js → pickAttrs-BNZKpIAR.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-DOWn8dd1.js → placementArrow-jOcgxTTz.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-CPxTWodH.js → responsiveObserve-pta_O8AU.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-BqvbGPjx.js → slide-Dlq6om7z.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-BzXKkV8d.js → statusUtils-BnkO_yRv.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-B2O7yRk3.js → styleChecker-p8NfWmcG.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-DRWp7px1.js → useFlexGapSupport-KcjZZ5U7.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-Dp0V7sjM.js → useFs-gqonDMWB.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-CyCrG3ql.js → usePersonalDataHub-jIIfE4go.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-CXhoFpFo.js → vnode-Dyo7fBrM.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-0z3mtwEg.js → zoom-6l8BMg9W.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 +76 -23
  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/record-replay.js +772 -0
  162. package/src/commands/serve.js +94 -10
  163. package/src/commands/session.js +2 -3
  164. package/src/commands/skill.js +3 -0
  165. package/src/commands/team.js +7 -1
  166. package/src/data/changelog.json +41 -2
  167. package/src/gateways/ws/session-core-protocol.js +62 -3
  168. package/src/gateways/ws/session-protocol.js +123 -15
  169. package/src/gateways/ws/ws-agent-handler.js +157 -9
  170. package/src/gateways/ws/ws-session-gateway.js +204 -30
  171. package/src/generated/cc-agent-protocol.schema.json +2094 -4
  172. package/src/harness/prompt-compressor.js +5 -55
  173. package/src/lib/agent-sandbox.js +8 -2
  174. package/src/lib/agent-team/team-distributed-graph-bridge.js +3 -3
  175. package/src/lib/agent-team/team-message-tools.js +23 -5
  176. package/src/lib/app-server/context-memory-notifications.js +54 -0
  177. package/src/lib/app-server/rollout-store-factory.js +115 -0
  178. package/src/lib/app-server/rollout-store.js +310 -23
  179. package/src/lib/app-server/server.js +184 -7
  180. package/src/lib/app-server/sqlite-rollout-store.js +59 -16
  181. package/src/lib/auto-mode-config.js +26 -0
  182. package/src/lib/causal-observability.js +13 -1
  183. package/src/lib/context-memory-kernel/authority.js +95 -0
  184. package/src/lib/context-memory-kernel/durable-memory-port.js +296 -0
  185. package/src/lib/context-memory-kernel/index.js +8 -0
  186. package/src/lib/context-memory-kernel/jsonl-session-context-port.js +232 -0
  187. package/src/lib/context-memory-kernel/live-compaction.js +375 -0
  188. package/src/lib/context-memory-kernel/memory-service.js +667 -0
  189. package/src/lib/context-memory-kernel/message-adapter.js +451 -0
  190. package/src/lib/context-memory-kernel/privacy-purge-port.js +244 -0
  191. package/src/lib/context-memory-kernel/provider-context.js +192 -0
  192. package/src/lib/context-memory-kernel/runtime.js +61 -0
  193. package/src/lib/direct-model-usage.js +22 -18
  194. package/src/lib/graph-kernel/cutover-authority-resolver.js +4 -5
  195. package/src/lib/graph-kernel/cutover-ledger.js +2 -2
  196. package/src/lib/graph-kernel/event-store.js +3 -5
  197. package/src/lib/graph-kernel/migration-saga.js +2 -2
  198. package/src/lib/graph-kernel/production-cutover-evidence.js +8 -1
  199. package/src/lib/hierarchical-memory.js +22 -0
  200. package/src/lib/hook-audit-store.js +170 -0
  201. package/src/lib/hook-event-bus.cjs +0 -0
  202. package/src/lib/hook-manager.js +25 -83
  203. package/src/lib/hook-runtime-adapters.js +233 -0
  204. package/src/lib/hook-runtime-contract.cjs +291 -0
  205. package/src/lib/hook-runtime-contract.js +21 -0
  206. package/src/lib/hook-trust.js +210 -0
  207. package/src/lib/hooks-v2-producers.js +52 -6
  208. package/src/lib/hooks-v2-runtime.js +443 -178
  209. package/src/lib/llm-pricing.js +10 -0
  210. package/src/lib/memory-manager.js +29 -4
  211. package/src/lib/model-context-window.js +52 -0
  212. package/src/lib/permanent-memory.js +17 -0
  213. package/src/lib/plan-mode.js +8 -4
  214. package/src/lib/process-execution-broker/credential-transport.js +31 -0
  215. package/src/lib/process-execution-broker/index.js +282 -16
  216. package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
  217. package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
  218. package/src/lib/process-execution-broker/windows-sandbox.cs +7 -3
  219. package/src/lib/record-replay/browser-target-policy.js +406 -0
  220. package/src/lib/record-replay/index.js +4 -0
  221. package/src/lib/record-replay/playwright-ui-driver.js +83 -20
  222. package/src/lib/record-replay/playwright-ui-recorder.js +611 -0
  223. package/src/lib/record-replay/recorded-skill-package.js +486 -0
  224. package/src/lib/record-replay/recorded-skill-store.js +1166 -0
  225. package/src/lib/record-replay/skill-recorder.js +634 -64
  226. package/src/lib/runtime-usage-ledger.js +20 -0
  227. package/src/lib/session-consolidator.js +59 -0
  228. package/src/lib/session-core-singletons.js +17 -4
  229. package/src/lib/session-hooks.js +29 -2
  230. package/src/lib/session-transcript-migration.js +188 -0
  231. package/src/lib/settings-hook-events.cjs +37 -401
  232. package/src/lib/settings-hook-events.js +210 -8
  233. package/src/lib/settings-hooks.cjs +42 -83
  234. package/src/lib/ws-session-manager.js +4 -1
  235. package/src/repl/agent-repl.js +186 -53
  236. package/src/runtime/agent-core.js +376 -350
  237. package/src/runtime/headless-runner.js +112 -84
  238. package/src/runtime/headless-stream.js +131 -30
  239. package/src/assets/web-panel/assets/MarkdownRenderer-Dt8hH_qA.js +0 -1
  240. package/src/assets/web-panel/assets/MobileProjects-Jg2dVUc-.js +0 -1
  241. package/src/assets/web-panel/assets/PdhVaultBrowser-0jYeVmyY.js +0 -7
  242. package/src/assets/web-panel/assets/devWarning-BX944k9E.js +0 -1
  243. package/src/assets/web-panel/assets/index-C_9Jt_SR.js +0 -1
  244. package/src/assets/web-panel/assets/index-DL2EFx7m.js +0 -1
@@ -69,6 +69,31 @@ export function openMemoryEditor(editor, filePath, deps = _deps) {
69
69
  });
70
70
  }
71
71
 
72
+ async function resolveCanonicalMemory(ctx) {
73
+ const { createCliCanonicalMemoryService } =
74
+ await import("../lib/context-memory-kernel/index.js");
75
+ const legacyDb = ctx?.db?.getDatabase?.() || null;
76
+ const service = createCliCanonicalMemoryService({ legacyDb });
77
+ if (service.decision.canonical && ctx?.db) {
78
+ await service.migrateLegacyEntries(exportMemory(ctx.db.getDatabase()));
79
+ }
80
+ return service;
81
+ }
82
+
83
+ async function resolveScopedMemory() {
84
+ const [{ createCliCanonicalMemoryService }, { getMemoryStore }] =
85
+ await Promise.all([
86
+ import("../lib/context-memory-kernel/index.js"),
87
+ import("../lib/session-core-singletons.js"),
88
+ ]);
89
+ const service = createCliCanonicalMemoryService();
90
+ const legacyStore = getMemoryStore();
91
+ if (service.decision.canonical) {
92
+ await service.migrateLegacyScopedEntries(legacyStore.list());
93
+ }
94
+ return { service, legacyStore };
95
+ }
96
+
72
97
  export function registerMemoryCommand(program) {
73
98
  const memory = program
74
99
  .command("memory")
@@ -145,15 +170,20 @@ export function registerMemoryCommand(program) {
145
170
  .action(async (options) => {
146
171
  try {
147
172
  const ctx = await bootstrap({ verbose: program.opts().verbose });
148
- if (!ctx.db) {
173
+ const service = await resolveCanonicalMemory(ctx);
174
+ if (!ctx.db && !service.decision.canonical) {
149
175
  logger.error("Database not available");
150
176
  process.exit(1);
151
177
  }
152
- const db = ctx.db.getDatabase();
153
- const entries = listMemory(db, {
154
- limit: Math.max(1, parseInt(options.limit) || 20),
155
- category: options.category,
156
- });
178
+ const entries = service.decision.canonical
179
+ ? await service.list({
180
+ limit: Math.max(1, parseInt(options.limit) || 20),
181
+ category: options.category,
182
+ })
183
+ : listMemory(ctx.db.getDatabase(), {
184
+ limit: Math.max(1, parseInt(options.limit) || 20),
185
+ category: options.category,
186
+ });
157
187
 
158
188
  if (options.json) {
159
189
  console.log(JSON.stringify(entries, null, 2));
@@ -193,11 +223,14 @@ export function registerMemoryCommand(program) {
193
223
  .action(async (options) => {
194
224
  try {
195
225
  const ctx = await bootstrap({ verbose: program.opts().verbose });
196
- if (!ctx.db) {
226
+ const service = await resolveCanonicalMemory(ctx);
227
+ if (!ctx.db && !service.decision.canonical) {
197
228
  logger.error("Database not available");
198
229
  process.exit(1);
199
230
  }
200
- const entries = exportMemory(ctx.db.getDatabase());
231
+ const entries = service.decision.canonical
232
+ ? await service.export()
233
+ : exportMemory(ctx.db.getDatabase());
201
234
  if (options.output) {
202
235
  const fs = await import("fs");
203
236
  fs.writeFileSync(options.output, JSON.stringify(entries), "utf-8");
@@ -240,11 +273,14 @@ export function registerMemoryCommand(program) {
240
273
  throw new Error("import: expected a JSON array of memory entries");
241
274
  }
242
275
  const ctx = await bootstrap({ verbose: program.opts().verbose });
243
- if (!ctx.db) {
276
+ const service = await resolveCanonicalMemory(ctx);
277
+ if (!ctx.db && !service.decision.canonical) {
244
278
  logger.error("Database not available");
245
279
  process.exit(1);
246
280
  }
247
- const result = importMemory(ctx.db.getDatabase(), entries);
281
+ const result = service.decision.canonical
282
+ ? await service.import(entries)
283
+ : importMemory(ctx.db.getDatabase(), entries);
248
284
  if (options.json) {
249
285
  console.log(JSON.stringify(result));
250
286
  } else {
@@ -269,18 +305,27 @@ export function registerMemoryCommand(program) {
269
305
  .action(async (text, options) => {
270
306
  try {
271
307
  const ctx = await bootstrap({ verbose: program.opts().verbose });
272
- if (!ctx.db) {
308
+ const service = await resolveCanonicalMemory(ctx);
309
+ if (!ctx.db && !service.decision.canonical) {
273
310
  logger.error("Database not available");
274
311
  process.exit(1);
275
312
  }
276
- const db = ctx.db.getDatabase();
277
- const entry = addMemory(db, text, {
313
+ const normalizedOptions = {
278
314
  category: options.category,
279
315
  importance: Math.max(
280
316
  1,
281
317
  Math.min(5, parseInt(options.importance) || 3),
282
318
  ),
283
- });
319
+ };
320
+ let entry;
321
+ if (service.decision.canonical) {
322
+ entry = await service.add(text, normalizedOptions);
323
+ } else {
324
+ if (service.decision.shadow) {
325
+ service.validateLegacyProposal(text, normalizedOptions);
326
+ }
327
+ entry = addMemory(ctx.db.getDatabase(), text, normalizedOptions);
328
+ }
284
329
 
285
330
  if (options.json) {
286
331
  console.log(JSON.stringify(entry, null, 2));
@@ -307,14 +352,18 @@ export function registerMemoryCommand(program) {
307
352
  .action(async (query, options) => {
308
353
  try {
309
354
  const ctx = await bootstrap({ verbose: program.opts().verbose });
310
- if (!ctx.db) {
355
+ const service = await resolveCanonicalMemory(ctx);
356
+ if (!ctx.db && !service.decision.canonical) {
311
357
  logger.error("Database not available");
312
358
  process.exit(1);
313
359
  }
314
- const db = ctx.db.getDatabase();
315
- const results = searchMemory(db, query, {
316
- limit: Math.max(1, parseInt(options.limit) || 20),
317
- });
360
+ const limit = Math.max(1, parseInt(options.limit) || 20);
361
+ const recalled = service.decision.canonical
362
+ ? await service.search(query, { limit })
363
+ : null;
364
+ const results = service.decision.canonical
365
+ ? recalled.entries
366
+ : searchMemory(ctx.db.getDatabase(), query, { limit });
318
367
 
319
368
  if (options.json) {
320
369
  console.log(JSON.stringify(results, null, 2));
@@ -351,14 +400,28 @@ export function registerMemoryCommand(program) {
351
400
  .action(async (id) => {
352
401
  try {
353
402
  const ctx = await bootstrap({ verbose: program.opts().verbose });
354
- if (!ctx.db) {
403
+ const service = await resolveCanonicalMemory(ctx);
404
+ if (!ctx.db && !service.decision.canonical) {
355
405
  logger.error("Database not available");
356
406
  process.exit(1);
357
407
  }
358
- const db = ctx.db.getDatabase();
359
- const ok = deleteMemory(db, id);
408
+ const deletion = service.decision.canonical
409
+ ? await service.delete(id)
410
+ : null;
411
+ const ok = service.decision.canonical
412
+ ? deletion?.status === "purged"
413
+ : deleteMemory(ctx.db.getDatabase(), id);
360
414
  if (ok) {
361
- logger.success("Memory entry deleted");
415
+ logger.success(
416
+ service.decision.canonical
417
+ ? `Memory entry deleted (${deletion.digest})`
418
+ : "Memory entry deleted",
419
+ );
420
+ } else if (deletion) {
421
+ logger.warn(
422
+ `Memory deletion is ${deletion.status}; reconcile request ${deletion.requestId} before treating it as globally purged`,
423
+ );
424
+ process.exitCode = 2;
362
425
  } else {
363
426
  logger.error(`Memory entry not found: ${id}`);
364
427
  }
@@ -370,6 +433,35 @@ export function registerMemoryCommand(program) {
370
433
  }
371
434
  });
372
435
 
436
+ memory
437
+ .command("reconcile")
438
+ .description("Resume a pending canonical memory deletion")
439
+ .argument("<operation-id>", "Deletion request ID")
440
+ .option("--json", "Output the reconciliation receipt as JSON")
441
+ .action(async (operationId, options) => {
442
+ try {
443
+ const ctx = await bootstrap({ verbose: program.opts().verbose });
444
+ const service = await resolveCanonicalMemory(ctx);
445
+ if (!service.decision.canonical) {
446
+ throw new Error("memory reconcile requires canonical Context/Memory");
447
+ }
448
+ const result = await service.reconcile(operationId);
449
+ if (options.json) console.log(JSON.stringify(result, null, 2));
450
+ else if (result.status === "purged") {
451
+ logger.success(`Memory deletion reconciled: ${result.digest}`);
452
+ } else {
453
+ logger.warn(
454
+ `Memory deletion remains ${result.status}: ${result.reason || operationId}`,
455
+ );
456
+ process.exitCode = 2;
457
+ }
458
+ await shutdown();
459
+ } catch (err) {
460
+ logger.error(`Failed: ${err.message}`);
461
+ process.exit(1);
462
+ }
463
+ });
464
+
373
465
  // memory daily
374
466
  memory
375
467
  .command("daily")
@@ -382,6 +474,7 @@ export function registerMemoryCommand(program) {
382
474
  try {
383
475
  const ctx = await bootstrap({ verbose: program.opts().verbose });
384
476
  const memoryDir = getMemoryDir(ctx.env.dataDir);
477
+ const service = await resolveCanonicalMemory(ctx);
385
478
 
386
479
  if (options.list) {
387
480
  const notes = listDailyNotes(memoryDir);
@@ -402,8 +495,21 @@ export function registerMemoryCommand(program) {
402
495
  }
403
496
 
404
497
  if (options.append) {
405
- const result = appendDailyNote(memoryDir, options.append);
406
- logger.success(`Added to daily note: ${chalk.cyan(result.date)}`);
498
+ const today = new Date().toISOString().slice(0, 10);
499
+ if (service.decision.canonical) {
500
+ await service.addScoped(options.append, {
501
+ scope: "user",
502
+ scopeId: "local-user",
503
+ category: "daily-note",
504
+ tags: ["daily-note", `date:${today}`],
505
+ source: "cli-memory-daily",
506
+ evidenceStore: "cli-command",
507
+ evidenceId: `daily-${today}`,
508
+ });
509
+ } else {
510
+ appendDailyNote(memoryDir, options.append);
511
+ }
512
+ logger.success(`Added to daily note: ${chalk.cyan(today)}`);
407
513
  await shutdown();
408
514
  return;
409
515
  }
@@ -443,23 +549,23 @@ export function registerMemoryCommand(program) {
443
549
  .option("--json", "Output as JSON")
444
550
  .action(async (query, options) => {
445
551
  try {
446
- const { getMemoryStore } =
447
- await import("../lib/session-core-singletons.js");
448
- const store = getMemoryStore();
552
+ const { service, legacyStore } = await resolveScopedMemory();
449
553
  const tags = options.tags
450
554
  ? options.tags
451
555
  .split(",")
452
556
  .map((t) => t.trim())
453
557
  .filter(Boolean)
454
558
  : null;
455
- const results = store.recall({
456
- query: query || "",
559
+ const recallOptions = {
457
560
  scope: options.scope,
458
561
  scopeId: options.scopeId,
459
562
  category: options.category,
460
563
  tags,
461
564
  limit: Math.max(1, parseInt(options.limit) || 10),
462
- });
565
+ };
566
+ const results = service.decision.canonical
567
+ ? (await service.recallScoped(query || "", recallOptions)).results
568
+ : legacyStore.recall({ query: query || "", ...recallOptions });
463
569
 
464
570
  if (options.json) {
465
571
  console.log(JSON.stringify(results, null, 2));
@@ -494,22 +600,28 @@ export function registerMemoryCommand(program) {
494
600
  .option("--json", "Output as JSON")
495
601
  .action(async (content, options) => {
496
602
  try {
497
- const { getMemoryStore } =
498
- await import("../lib/session-core-singletons.js");
499
- const store = getMemoryStore();
603
+ const { service, legacyStore } = await resolveScopedMemory();
500
604
  const tags = options.tags
501
605
  ? options.tags
502
606
  .split(",")
503
607
  .map((t) => t.trim())
504
608
  .filter(Boolean)
505
609
  : [];
506
- const m = store.add({
610
+ const proposal = {
507
611
  scope: options.scope,
508
612
  scopeId: options.scopeId || null,
509
613
  category: options.category,
510
- content,
511
614
  tags,
512
- });
615
+ };
616
+ let m;
617
+ if (service.decision.canonical) {
618
+ m = await service.addScoped(content, proposal);
619
+ } else {
620
+ if (service.decision.shadow) {
621
+ service.validateLegacyScopedProposal(content, proposal);
622
+ }
623
+ m = legacyStore.add({ content, ...proposal });
624
+ }
513
625
  if (options.json) console.log(JSON.stringify(m, null, 2));
514
626
  else
515
627
  logger.success(
@@ -576,11 +688,58 @@ export function registerMemoryCommand(program) {
576
688
  return;
577
689
  }
578
690
 
579
- const result = await consolidateJsonlSession(options.session, {
580
- scope: options.scope,
581
- scopeId: options.scopeId || null,
582
- agentId: options.agentId || null,
583
- });
691
+ const { service } = await resolveScopedMemory();
692
+ let result;
693
+ if (service.decision.canonical) {
694
+ const { readEvents } =
695
+ await import("../harness/jsonl-session-store.js");
696
+ const { defaultMemoryExtractor } =
697
+ await import("@chainlesschain/session-core");
698
+ const events = readEvents(options.session);
699
+ const trace = buildTraceStoreFromJsonl(options.session, events);
700
+ const traceEvents = trace.query(options.session, {
701
+ limit: Number.MAX_SAFE_INTEGER,
702
+ });
703
+ const facts = defaultMemoryExtractor(traceEvents);
704
+ const scope = options.scope || "agent";
705
+ const scopeId =
706
+ scope === "global"
707
+ ? null
708
+ : options.scopeId ||
709
+ (scope === "session"
710
+ ? options.session
711
+ : options.agentId || options.session);
712
+ const written = [];
713
+ for (const [index, fact] of facts.entries()) {
714
+ written.push(
715
+ await service.addScoped(String(fact.content || ""), {
716
+ scope,
717
+ scopeId,
718
+ category: fact.category || "general",
719
+ tags: fact.tags || [],
720
+ score: fact.score,
721
+ source: "cli-session-consolidator",
722
+ evidenceStore: "cli-jsonl-session",
723
+ evidenceId: `${options.session}-${index}`,
724
+ }),
725
+ );
726
+ }
727
+ result = {
728
+ sessionId: options.session,
729
+ scope,
730
+ scopeId,
731
+ eventCount: traceEvents.length,
732
+ factCount: facts.length,
733
+ writtenCount: written.length,
734
+ written,
735
+ };
736
+ } else {
737
+ result = await consolidateJsonlSession(options.session, {
738
+ scope: options.scope,
739
+ scopeId: options.scopeId || null,
740
+ agentId: options.agentId || null,
741
+ });
742
+ }
584
743
  await new Promise((r) => setImmediate(r)); // let adapter flush
585
744
 
586
745
  if (options.json) {
@@ -613,8 +772,16 @@ export function registerMemoryCommand(program) {
613
772
  const ctx = await bootstrap({ verbose: program.opts().verbose });
614
773
  const memoryDir = getMemoryDir(ctx.env.dataDir);
615
774
  const content = getMemoryFile(memoryDir);
775
+ const service = await resolveCanonicalMemory(ctx);
616
776
 
617
777
  if (options.edit) {
778
+ if (service.decision.canonical) {
779
+ const error = new Error(
780
+ "MEMORY.md is a read-only legacy projection after canonical cutover; use 'cc memory add' instead",
781
+ );
782
+ error.code = "legacy_writer_fenced";
783
+ throw error;
784
+ }
618
785
  const editor =
619
786
  process.env.EDITOR ||
620
787
  process.env.VISUAL ||
@@ -31,12 +31,29 @@ import {
31
31
  autoFailStuckPcompRunsV2,
32
32
  getPromptCompressorGovStatsV2,
33
33
  } from "../lib/prompt-compressor.js";
34
+ import {
35
+ assertLegacyMutationAllowed,
36
+ resolveCliContextMemoryCutover,
37
+ } from "../lib/context-memory-kernel/authority.js";
34
38
 
35
39
  export function registerPromcompCommand(program) {
36
40
  const pc = program
37
41
  .command("promcomp")
38
42
  .description("Prompt Compressor V2 governance (in-memory, CLI v0.143.0)");
39
43
 
44
+ pc.hook("preAction", (_thisCommand, actionCommand) => {
45
+ const decision = resolveCliContextMemoryCutover({
46
+ scopeKey: `cli:promcomp:${actionCommand.name()}`,
47
+ });
48
+ try {
49
+ assertLegacyMutationAllowed(decision);
50
+ } catch (error) {
51
+ error.message += "; use `cc context` or `cc compact`";
52
+ error.replacement = "cc compact";
53
+ throw error;
54
+ }
55
+ });
56
+
40
57
  pc.command("enums-v2")
41
58
  .description("Show V2 enums")
42
59
  .action(() =>