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.
- package/README.md +33 -0
- package/bin/chainlesschain.js +5 -0
- package/package.json +4 -2
- package/src/assets/web-panel/assets/{AIOps-CLYBDAGv.js → AIOps-C8SyFhOo.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CpeSttcu.js → ActionButton-Dup5gFK0.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-Ba1TNLG0.js → Analytics-8FyOWA7V.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-xBy8EOeg.js → AppLayout-DBzdU9dg.js} +3 -3
- package/src/assets/web-panel/assets/{Artifacts-CJ_3TFb8.js → Artifacts-C_0Z8gNy.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-DUATFCG3.js → Audit-Cf2a-58m.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BRXYPIGp.js → BackgroundAgents-M7w-2zgB.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-D8auLx7y.js → Backup-CCTHQXoL.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CBgdslQ3.js → BaseInput-DjXpeFwJ.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-B32LvAiE.js → Chat-cAvchsJU.js} +5 -5
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-CVfvAy-n.js → ChatBubbleRenderer-DvEvxlZv.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-BwzBxOpC.js → Checkbox-DKs6qvOn.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-0U5vrg1H.js → Codegen-DlkA7b9X.js} +1 -1
- package/src/assets/web-panel/assets/{Col-dZ2i4aAj.js → Col-CkfdKhyJ.js} +1 -1
- package/src/assets/web-panel/assets/{Community-UVvpLr8c.js → Community-iNXMHzj6.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BDNEb1Bd.js → Compact-DQxPEd09.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BrzQPxyS.js → Compliance-CSKvMCjs.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-BbgGsu-9.js → Cowork-CkWqazpD.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-G321XPhp.js → Cron-k6W8IzhB.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CgLNUyMn.js → Crosschain-C8MS1OuY.js} +1 -1
- package/src/assets/web-panel/assets/{DID-BAfRj18q.js → DID-DJuCcgiQ.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-BNIxA4TK.js → Dashboard-LeThKzp3.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BLAUmCAN.js → Dropdown-BvxwgpE4.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-CsnhTW22.js → EmailListRenderer-n3e_a1M3.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-zcQ7Ip1n.js → FamilyGuardDashboard-509W6W6v.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-KFwxodNU.js → Federation-xgZReQm0.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-3CYRLEHG.js → FormItemContext-jZOhKcQx.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-D3d9D8L9.js → GenericCardRenderer-Jo0ULzHv.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BJ202nJY.js → Git-BsRcyWQP.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-ClnnXVQ-.js → Governance-JlpMYTAk.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DNU-PTkc.js → Inference-CUEz872-.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DJuinbuY.js → KnowledgeGraph-DgrvvEDU.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-D4No-46s.js → Logs-Df-KY4U3.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-BEPDcSwz.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-Ba-KqRN3.js → Marketplace-kPZDTOeI.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DVoxnPgE.js → McpTools-CRRzPqNX.js} +2 -2
- package/src/assets/web-panel/assets/{Memory-D_C8gzAZ.js → Memory-D6pNSkg9.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-DnzTPcDH.js → MobileBridge-g-pvtwRC.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-Bzayfrfe.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-CvEHmHId.js → Mtc-B7S3W-XL.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-VNJmWqmv.js → MtcAudit-B8OMEWVb.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-BO0x_Vsa.js → Multisig-CowRp7GH.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-CM2gI1UY.js → NLProgramming-BkQNyi4c.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CMc1HsML.js → Notes-Cm7gtkKz.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-DGNmSKGM.js → NotificationSettings-CbPTVh9m.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-Du-Kct3p.js → OrderTableRenderer-Dswi26mJ.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-DRtRZjas.js → Organization-BkjQ9yy7.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Dp4OeWsn.js → Overflow-DmRFXP7Y.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-DXMJVls8.js → P2P-DQE1toAu.js} +2 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-BujyoDRG.js +7 -0
- package/src/assets/web-panel/assets/{Permissions-D1Hbb51o.js → Permissions-xSjfOaiU.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-BridiDhr.js → PersonalDataHub-B9ICLqVP.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-B4bUNCm1.js → Pipeline-CUNwyN9E.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BTu_HEqK.js → Privacy-SOoCricX.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-SVtL2hnt.js → ProjectInit-CSaFul0F.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-B2Sh7JZ2.js → ProjectSettings-CueiB_oe.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-BwU1xalW.js → Projects-BOeXvU7y.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-BWdWQSDw.js → Providers-CTqf_31h.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-Brzc-Sxb.js → QrScannerModal-C8ZP31E9.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DIBz7FCe.js → QuickAsk-CPgn4713.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CZ8RriIJ.js → Recommend-8_e0zw0i.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-CM0KJQ3t.js → RemoteSession-iT7lbGqw.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-D_wo8H0O.js → Reputation-B4q9SUOz.js} +1 -1
- package/src/assets/web-panel/assets/{Row-D1G1fD7N.js → Row-CA_nASyL.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-dKCVtA0K.js → RssFeed-Cwb0E3yv.js} +2 -2
- package/src/assets/web-panel/assets/{Search-Be1D61xo.js → Search-D9iVsOxJ.js} +1 -1
- package/src/assets/web-panel/assets/{Security-IbNiR6OC.js → Security-DPLbYchG.js} +3 -3
- package/src/assets/web-panel/assets/{Services-nuHK8y8p.js → Services-DGMVL_LF.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DnM5jdnC.js → Skeleton-B_6kym0D.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DCTdoq_q.js → Skills-Ds6r0dXB.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-DlWun-Ui.js → Sla-BLHAbBhb.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-C19kv2sd.js → SpeechSettings-CZuddd14.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-CkQIR_Hu.js → SyncSettings-CdBq7oSl.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-DdbqOEbs.js → Tasks-DfT60Nyl.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-B7GpIXeo.js → Templates-RLfsKy2V.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-ByEstFhY.js → Tenant-Cw8xCNLE.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-BKRVID1a.js → Terminal-BOUkNu4f.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-CNS3dHNv.js → TimelineRenderer-CgGZWaRm.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BykqylCL.js → Tokens-CpwjVyir.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-ByNxq51W.js → Trigger-DL21H-eb.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BlrFsdaS.js → Trust-B3ffFclW.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-Dg26A-sd.js → UkeySign-CkBeb5aI.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-C1wUxNn0.js → VideoEditing-U2iVaE3r.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-OphEUzI4.js → Wallet-CQk2wzYd.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-_8lL08hF.js → WebAuthn-DYIuIYzT.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-BnTuIvnP.js → WorkflowEditor-tg1c2mZQ.js} +1 -1
- package/src/assets/web-panel/assets/{chat-3N3VLQYr.js → chat-CtL61spq.js} +1 -1
- package/src/assets/web-panel/assets/{colors-Bo_G96gg.js → colors-DKpbeo8s.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-DjubfjI_.js → compact-item-gPZsrswt.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-Cx_HSLCk.js → createContext-CfHlwzVr.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DdqnMhzi.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-D5OjAOlA.js → hasIn-MV47g_6X.js} +1 -1
- package/src/assets/web-panel/assets/{index-x7o-2T3S.js → index-6G0ETFTW.js} +1 -1
- package/src/assets/web-panel/assets/{index-CqZq3zWr.js → index-BBw52sEl.js} +1 -1
- package/src/assets/web-panel/assets/{index-C-4sfa0l.js → index-BN-wxSQ8.js} +1 -1
- package/src/assets/web-panel/assets/{index-uAcJUJkx.js → index-BOyGUuBE.js} +1 -1
- package/src/assets/web-panel/assets/{index-CC7RnaPP.js → index-BQp5M0s1.js} +1 -1
- package/src/assets/web-panel/assets/index-BcK8o4ke.js +1 -0
- package/src/assets/web-panel/assets/{index-CNmsP0Xf.js → index-BjlPD7GO.js} +1 -1
- package/src/assets/web-panel/assets/{index-CVPDhmVH.js → index-C4lF-f_z.js} +1 -1
- package/src/assets/web-panel/assets/{index-CRKk1JPX.js → index-C6nC_DyY.js} +1 -1
- package/src/assets/web-panel/assets/{index-B905-Mcs.js → index-C9RF4ieu.js} +1 -1
- package/src/assets/web-panel/assets/{index-3_CEBEEf.js → index-C9gtY4nG.js} +3 -3
- package/src/assets/web-panel/assets/{index-Y-H7j25u.js → index-CB1HnbNK.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5IwN9q3.js → index-CRv_uMLV.js} +1 -1
- package/src/assets/web-panel/assets/{index-Q_vn0t8d.js → index-C_B9LiKs.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cz5tQ5PY.js → index-Cjv0kKCU.js} +1 -1
- package/src/assets/web-panel/assets/{index-BgPb37tI.js → index-CmM9jqwe.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dbdr8tVi.js → index-CmPJpLoD.js} +1 -1
- package/src/assets/web-panel/assets/{index-DrVjatPe.js → index-CzfxTSPW.js} +1 -1
- package/src/assets/web-panel/assets/{index-C-_Cy0k_.js → index-D1XB5-t5.js} +1 -1
- package/src/assets/web-panel/assets/{index-C8dPFFhy.js → index-DGtEBodr.js} +1 -1
- package/src/assets/web-panel/assets/{index-UnpsQ6A0.js → index-DIeJmlAA.js} +1 -1
- package/src/assets/web-panel/assets/{index-BxgIE4PD.js → index-DMMvlLp9.js} +1 -1
- package/src/assets/web-panel/assets/{index-DlcbE0sX.js → index-DU4rZpiK.js} +1 -1
- package/src/assets/web-panel/assets/{index-EZr3bvz2.js → index-D_Pl1GnW.js} +1 -1
- package/src/assets/web-panel/assets/{index-BScGr1BY.js → index-Dd19vRwy.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ce8EWU6r.js → index-Ddcpj1El.js} +1 -1
- package/src/assets/web-panel/assets/{index-CCjq3g32.js → index-Df9sWKpl.js} +1 -1
- package/src/assets/web-panel/assets/{index-ydnEPOzZ.js → index-DfLyHCWi.js} +1 -1
- package/src/assets/web-panel/assets/{index-C4MAnkl5.js → index-DnZ_zS1M.js} +1 -1
- package/src/assets/web-panel/assets/{index-DXJqa1-I.js → index-DsH-i_3d.js} +1 -1
- package/src/assets/web-panel/assets/index-DvbAjyYI.js +1 -0
- package/src/assets/web-panel/assets/{index-DBvZhdCb.js → index-ExAGPAnX.js} +1 -1
- package/src/assets/web-panel/assets/{index-DD1zSPZH.js → index-Rb7CRMw9.js} +1 -1
- package/src/assets/web-panel/assets/{index-DE4XtzMl.js → index-Zvkt9xqi.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmLwI-Y8.js → index-bSFrAszw.js} +1 -1
- package/src/assets/web-panel/assets/{index-HioDjvUF.js → index-fYcS7NS0.js} +1 -1
- package/src/assets/web-panel/assets/{index-BvYo09C0.js → index-srBc9U_s.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bj7S5IJw.js → index-xUlgG0Xe.js} +1 -1
- package/src/assets/web-panel/assets/{index-DaU60K3A.js → index-yxxXlqBA.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DurpENJY.js → initDefaultProps-BeOZoSZ4.js} +1 -1
- package/src/assets/web-panel/assets/{motion-CIh-z-gR.js → motion-BXE8VMKx.js} +1 -1
- package/src/assets/web-panel/assets/{move-Uc_yI2NA.js → move-I9sdvPGX.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-DUevj5wz.js → mtc-parser-d25zrJd0.js} +1 -1
- package/src/assets/web-panel/assets/{omit-85eMYyur.js → omit-D71V_T4e.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-AuxDD20F.js → pickAttrs-BNZKpIAR.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DOWn8dd1.js → placementArrow-jOcgxTTz.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CPxTWodH.js → responsiveObserve-pta_O8AU.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BqvbGPjx.js → slide-Dlq6om7z.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-BzXKkV8d.js → statusUtils-BnkO_yRv.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-B2O7yRk3.js → styleChecker-p8NfWmcG.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DRWp7px1.js → useFlexGapSupport-KcjZZ5U7.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-Dp0V7sjM.js → useFs-gqonDMWB.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-CyCrG3ql.js → usePersonalDataHub-jIIfE4go.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-CXhoFpFo.js → vnode-Dyo7fBrM.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-0z3mtwEg.js → zoom-6l8BMg9W.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +5 -5
- package/src/commands/agent.js +76 -23
- package/src/commands/compact.js +349 -3
- package/src/commands/context.js +72 -1
- package/src/commands/graph.js +26 -15
- package/src/commands/hmemory.js +21 -0
- package/src/commands/hook.js +256 -28
- package/src/commands/memory.js +209 -42
- package/src/commands/promcomp.js +17 -0
- package/src/commands/record-replay.js +772 -0
- package/src/commands/serve.js +94 -10
- package/src/commands/session.js +2 -3
- package/src/commands/skill.js +3 -0
- package/src/commands/team.js +7 -1
- package/src/data/changelog.json +41 -2
- package/src/gateways/ws/session-core-protocol.js +62 -3
- package/src/gateways/ws/session-protocol.js +123 -15
- package/src/gateways/ws/ws-agent-handler.js +157 -9
- package/src/gateways/ws/ws-session-gateway.js +204 -30
- package/src/generated/cc-agent-protocol.schema.json +2094 -4
- package/src/harness/prompt-compressor.js +5 -55
- package/src/lib/agent-sandbox.js +8 -2
- package/src/lib/agent-team/team-distributed-graph-bridge.js +3 -3
- package/src/lib/agent-team/team-message-tools.js +23 -5
- package/src/lib/app-server/context-memory-notifications.js +54 -0
- package/src/lib/app-server/rollout-store-factory.js +115 -0
- package/src/lib/app-server/rollout-store.js +310 -23
- package/src/lib/app-server/server.js +184 -7
- package/src/lib/app-server/sqlite-rollout-store.js +59 -16
- package/src/lib/auto-mode-config.js +26 -0
- package/src/lib/causal-observability.js +13 -1
- package/src/lib/context-memory-kernel/authority.js +95 -0
- package/src/lib/context-memory-kernel/durable-memory-port.js +296 -0
- package/src/lib/context-memory-kernel/index.js +8 -0
- package/src/lib/context-memory-kernel/jsonl-session-context-port.js +232 -0
- package/src/lib/context-memory-kernel/live-compaction.js +375 -0
- package/src/lib/context-memory-kernel/memory-service.js +667 -0
- package/src/lib/context-memory-kernel/message-adapter.js +451 -0
- package/src/lib/context-memory-kernel/privacy-purge-port.js +244 -0
- package/src/lib/context-memory-kernel/provider-context.js +192 -0
- package/src/lib/context-memory-kernel/runtime.js +61 -0
- package/src/lib/direct-model-usage.js +22 -18
- package/src/lib/graph-kernel/cutover-authority-resolver.js +4 -5
- package/src/lib/graph-kernel/cutover-ledger.js +2 -2
- package/src/lib/graph-kernel/event-store.js +3 -5
- package/src/lib/graph-kernel/migration-saga.js +2 -2
- package/src/lib/graph-kernel/production-cutover-evidence.js +8 -1
- package/src/lib/hierarchical-memory.js +22 -0
- package/src/lib/hook-audit-store.js +170 -0
- package/src/lib/hook-event-bus.cjs +0 -0
- package/src/lib/hook-manager.js +25 -83
- package/src/lib/hook-runtime-adapters.js +233 -0
- package/src/lib/hook-runtime-contract.cjs +291 -0
- package/src/lib/hook-runtime-contract.js +21 -0
- package/src/lib/hook-trust.js +210 -0
- package/src/lib/hooks-v2-producers.js +52 -6
- package/src/lib/hooks-v2-runtime.js +443 -178
- package/src/lib/llm-pricing.js +10 -0
- package/src/lib/memory-manager.js +29 -4
- package/src/lib/model-context-window.js +52 -0
- package/src/lib/permanent-memory.js +17 -0
- package/src/lib/plan-mode.js +8 -4
- package/src/lib/process-execution-broker/credential-transport.js +31 -0
- package/src/lib/process-execution-broker/index.js +282 -16
- package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
- package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
- package/src/lib/process-execution-broker/windows-sandbox.cs +7 -3
- package/src/lib/record-replay/browser-target-policy.js +406 -0
- package/src/lib/record-replay/index.js +4 -0
- package/src/lib/record-replay/playwright-ui-driver.js +83 -20
- package/src/lib/record-replay/playwright-ui-recorder.js +611 -0
- package/src/lib/record-replay/recorded-skill-package.js +486 -0
- package/src/lib/record-replay/recorded-skill-store.js +1166 -0
- package/src/lib/record-replay/skill-recorder.js +634 -64
- package/src/lib/runtime-usage-ledger.js +20 -0
- package/src/lib/session-consolidator.js +59 -0
- package/src/lib/session-core-singletons.js +17 -4
- package/src/lib/session-hooks.js +29 -2
- package/src/lib/session-transcript-migration.js +188 -0
- package/src/lib/settings-hook-events.cjs +37 -401
- package/src/lib/settings-hook-events.js +210 -8
- package/src/lib/settings-hooks.cjs +42 -83
- package/src/lib/ws-session-manager.js +4 -1
- package/src/repl/agent-repl.js +186 -53
- package/src/runtime/agent-core.js +376 -350
- package/src/runtime/headless-runner.js +112 -84
- package/src/runtime/headless-stream.js +131 -30
- package/src/assets/web-panel/assets/MarkdownRenderer-Dt8hH_qA.js +0 -1
- package/src/assets/web-panel/assets/MobileProjects-Jg2dVUc-.js +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-0jYeVmyY.js +0 -7
- package/src/assets/web-panel/assets/devWarning-BX944k9E.js +0 -1
- package/src/assets/web-panel/assets/index-C_9Jt_SR.js +0 -1
- package/src/assets/web-panel/assets/index-DL2EFx7m.js +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const MAX_LABEL_LENGTH = 160;
|
|
2
2
|
const MAX_CALL_ID_LENGTH = 128;
|
|
3
|
+
const MAX_OPERATION_ID_LENGTH = 160;
|
|
3
4
|
const MAX_ATTRIBUTION_ID_LENGTH = 256;
|
|
4
5
|
let fallbackToolSequence = 0;
|
|
5
6
|
const USAGE_FIELDS = Object.freeze([
|
|
@@ -65,6 +66,21 @@ function callId(value, { required = false } = {}) {
|
|
|
65
66
|
return value.trim();
|
|
66
67
|
}
|
|
67
68
|
|
|
69
|
+
function operationId(value) {
|
|
70
|
+
if (value === undefined) return null;
|
|
71
|
+
if (
|
|
72
|
+
typeof value !== "string" ||
|
|
73
|
+
!value.trim() ||
|
|
74
|
+
value.length > MAX_OPERATION_ID_LENGTH ||
|
|
75
|
+
/\p{Cc}/u.test(value)
|
|
76
|
+
) {
|
|
77
|
+
throw new TypeError(
|
|
78
|
+
"runtime usage boundary requires a bounded operation id",
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
return value.trim();
|
|
82
|
+
}
|
|
83
|
+
|
|
68
84
|
function projectAttribution(value) {
|
|
69
85
|
if (!value || typeof value !== "object" || Array.isArray(value)) return null;
|
|
70
86
|
const projected = {};
|
|
@@ -120,12 +136,14 @@ export function projectRuntimeTokenUsage(event = {}) {
|
|
|
120
136
|
}
|
|
121
137
|
}
|
|
122
138
|
const projectedCallId = callId(event.callId);
|
|
139
|
+
const projectedOperationId = operationId(event.operationId);
|
|
123
140
|
const attribution = projectAttribution(event.attribution);
|
|
124
141
|
return {
|
|
125
142
|
provider: cleanLabel(event.provider),
|
|
126
143
|
model: cleanLabel(event.model),
|
|
127
144
|
usage,
|
|
128
145
|
...(projectedCallId ? { callId: projectedCallId } : {}),
|
|
146
|
+
...(projectedOperationId ? { operationId: projectedOperationId } : {}),
|
|
129
147
|
...(event.source ? { source: source(event.source) } : {}),
|
|
130
148
|
...(attribution ? { attribution } : {}),
|
|
131
149
|
};
|
|
@@ -138,11 +156,13 @@ export function projectRuntimeUsageBoundary(event = {}, outcome) {
|
|
|
138
156
|
"runtime usage boundary outcome must be started or unknown",
|
|
139
157
|
);
|
|
140
158
|
}
|
|
159
|
+
const projectedOperationId = operationId(event.operationId);
|
|
141
160
|
const projected = {
|
|
142
161
|
callId: callId(event.callId, { required: true }),
|
|
143
162
|
provider: cleanLabel(event.provider),
|
|
144
163
|
model: cleanLabel(event.model),
|
|
145
164
|
source: source(event.source),
|
|
165
|
+
...(projectedOperationId ? { operationId: projectedOperationId } : {}),
|
|
146
166
|
};
|
|
147
167
|
const attribution = projectAttribution(event.attribution);
|
|
148
168
|
if (attribution) projected.attribution = attribution;
|
|
@@ -20,6 +20,8 @@ import {
|
|
|
20
20
|
} from "@chainlesschain/session-core";
|
|
21
21
|
import { readEvents, sessionExists } from "../harness/jsonl-session-store.js";
|
|
22
22
|
import { getMemoryStore } from "./session-core-singletons.js";
|
|
23
|
+
import { createCliCanonicalMemoryService } from "./context-memory-kernel/memory-service.js";
|
|
24
|
+
import { resolveCliContextMemoryCutover } from "./context-memory-kernel/authority.js";
|
|
23
25
|
|
|
24
26
|
/**
|
|
25
27
|
* Build an in-memory TraceStore populated with events from a JSONL session.
|
|
@@ -108,6 +110,63 @@ export async function consolidateJsonlSession(sessionId, options = {}) {
|
|
|
108
110
|
}
|
|
109
111
|
|
|
110
112
|
const trace = buildTraceStoreFromJsonl(sessionId, options.events);
|
|
113
|
+
const decision = resolveCliContextMemoryCutover({
|
|
114
|
+
env: options.env,
|
|
115
|
+
scopeKey: `cli:session-consolidator:${sessionId}`,
|
|
116
|
+
});
|
|
117
|
+
if (decision.canonical) {
|
|
118
|
+
const traceEvents = trace.query(sessionId, {
|
|
119
|
+
limit: Number.MAX_SAFE_INTEGER,
|
|
120
|
+
});
|
|
121
|
+
const { defaultMemoryExtractor } = await import(
|
|
122
|
+
"@chainlesschain/session-core"
|
|
123
|
+
);
|
|
124
|
+
const facts = defaultMemoryExtractor(traceEvents);
|
|
125
|
+
const scope = options.scope || "agent";
|
|
126
|
+
const scopeId =
|
|
127
|
+
scope === "global"
|
|
128
|
+
? null
|
|
129
|
+
: options.scopeId ||
|
|
130
|
+
(scope === "session" ? sessionId : options.agentId || sessionId);
|
|
131
|
+
if (options.dryRun) {
|
|
132
|
+
return {
|
|
133
|
+
sessionId,
|
|
134
|
+
scope,
|
|
135
|
+
scopeId,
|
|
136
|
+
eventCount: traceEvents.length,
|
|
137
|
+
factCount: facts.length,
|
|
138
|
+
writtenCount: 0,
|
|
139
|
+
written: [],
|
|
140
|
+
facts,
|
|
141
|
+
dryRun: true,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
const service = createCliCanonicalMemoryService({ env: options.env });
|
|
145
|
+
const written = [];
|
|
146
|
+
for (const [index, fact] of facts.entries()) {
|
|
147
|
+
written.push(
|
|
148
|
+
await service.addScoped(String(fact.content || ""), {
|
|
149
|
+
scope,
|
|
150
|
+
scopeId,
|
|
151
|
+
category: fact.category || "general",
|
|
152
|
+
tags: fact.tags || [],
|
|
153
|
+
score: fact.score,
|
|
154
|
+
source: "cli-session-consolidator",
|
|
155
|
+
evidenceStore: "cli-jsonl-session",
|
|
156
|
+
evidenceId: `${sessionId}-${index}`,
|
|
157
|
+
}),
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
sessionId,
|
|
162
|
+
scope,
|
|
163
|
+
scopeId,
|
|
164
|
+
eventCount: traceEvents.length,
|
|
165
|
+
factCount: facts.length,
|
|
166
|
+
writtenCount: written.length,
|
|
167
|
+
written,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
111
170
|
const memoryStore = options.memoryStore || getMemoryStore();
|
|
112
171
|
const consolidator = new MemoryConsolidator({
|
|
113
172
|
memoryStore,
|
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
import { join } from "node:path";
|
|
11
11
|
import { promises as fsp, existsSync, mkdirSync } from "node:fs";
|
|
12
12
|
import { getHomeDir } from "./paths.js";
|
|
13
|
+
import {
|
|
14
|
+
assertLegacyMutationAllowed,
|
|
15
|
+
resolveCliContextMemoryCutover,
|
|
16
|
+
} from "./context-memory-kernel/authority.js";
|
|
13
17
|
import {
|
|
14
18
|
ensureTrustedSessionLifecycleScope,
|
|
15
19
|
resolveTrustedSessionLifecycleScope,
|
|
@@ -50,7 +54,15 @@ export function getApprovalPoliciesPath() {
|
|
|
50
54
|
export function getMemoryStore() {
|
|
51
55
|
if (_memoryStore) return _memoryStore;
|
|
52
56
|
const adapter = createMemoryFileAdapter(getMemoryStorePath());
|
|
53
|
-
_memoryStore = new MemoryStore({
|
|
57
|
+
_memoryStore = new MemoryStore({
|
|
58
|
+
adapter,
|
|
59
|
+
writeGuard: () =>
|
|
60
|
+
assertLegacyMutationAllowed(
|
|
61
|
+
resolveCliContextMemoryCutover({
|
|
62
|
+
scopeKey: "cli:legacy-session-core-memory",
|
|
63
|
+
}),
|
|
64
|
+
),
|
|
65
|
+
});
|
|
54
66
|
hydrateMemoryStore(_memoryStore, adapter);
|
|
55
67
|
return _memoryStore;
|
|
56
68
|
}
|
|
@@ -66,12 +78,13 @@ export async function getBetaFlags() {
|
|
|
66
78
|
export async function getApprovalGate() {
|
|
67
79
|
if (_approvalGate) return _approvalGate;
|
|
68
80
|
const store = createApprovalGateFileAdapter(getApprovalPoliciesPath());
|
|
69
|
-
|
|
81
|
+
const gate = new ApprovalGate({
|
|
70
82
|
defaultPolicy: APPROVAL_POLICY.STRICT,
|
|
71
83
|
store,
|
|
72
84
|
});
|
|
73
|
-
await
|
|
74
|
-
|
|
85
|
+
await gate.load();
|
|
86
|
+
_approvalGate = gate;
|
|
87
|
+
return gate;
|
|
75
88
|
}
|
|
76
89
|
|
|
77
90
|
export function getParkedSessionsPath(options = {}) {
|
package/src/lib/session-hooks.js
CHANGED
|
@@ -9,7 +9,34 @@
|
|
|
9
9
|
* - Notification
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import { HookEvents
|
|
12
|
+
import { HookEvents } from "./hook-manager.js";
|
|
13
|
+
import { executeHooksV2Event } from "./hooks-v2-producers.js";
|
|
14
|
+
|
|
15
|
+
async function executeCanonicalDatabaseHooks(db, event, context) {
|
|
16
|
+
const outcome = await executeHooksV2Event(event, context, { hookDb: db });
|
|
17
|
+
return (outcome.results || [])
|
|
18
|
+
.filter(
|
|
19
|
+
(entry) =>
|
|
20
|
+
!String(entry?.hookId || "").startsWith(
|
|
21
|
+
"database:adapter-read-failure:",
|
|
22
|
+
),
|
|
23
|
+
)
|
|
24
|
+
.map((entry) => ({
|
|
25
|
+
hookId: entry.hookId,
|
|
26
|
+
hookName: entry.hookName || entry.hookId,
|
|
27
|
+
success: entry.status === "success",
|
|
28
|
+
result: entry.result,
|
|
29
|
+
stdout:
|
|
30
|
+
typeof entry.result === "string"
|
|
31
|
+
? entry.result
|
|
32
|
+
: entry.result?.raw ||
|
|
33
|
+
(entry.result && typeof entry.result === "object"
|
|
34
|
+
? JSON.stringify(entry.result)
|
|
35
|
+
: null),
|
|
36
|
+
error: entry.error || null,
|
|
37
|
+
executionTime: entry.durationMs || 0,
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
13
40
|
|
|
14
41
|
// 会话钩子白名单
|
|
15
42
|
export const SESSION_HOOK_EVENTS = Object.freeze([
|
|
@@ -22,7 +49,7 @@ export const SESSION_HOOK_EVENTS = Object.freeze([
|
|
|
22
49
|
|
|
23
50
|
// 依赖注入点(用于测试)
|
|
24
51
|
export const _deps = {
|
|
25
|
-
executeHooks,
|
|
52
|
+
executeHooks: executeCanonicalDatabaseHooks,
|
|
26
53
|
logFailure: (_db, event, error) => {
|
|
27
54
|
console.error(`[session-hooks] Failed to fire ${event}:`, error);
|
|
28
55
|
},
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
appendEvent,
|
|
5
|
+
findLatestEvent,
|
|
6
|
+
listSessionAuthoritySummaries,
|
|
7
|
+
readVerifiedMessages,
|
|
8
|
+
sessionHasPersistedEvidence,
|
|
9
|
+
startSession,
|
|
10
|
+
} from "../harness/jsonl-session-store.js";
|
|
11
|
+
import {
|
|
12
|
+
getSession as getDatabaseSession,
|
|
13
|
+
listSessions as listDatabaseSessions,
|
|
14
|
+
} from "./session-manager.js";
|
|
15
|
+
import { sanitizePersistedMessages } from "./session-message-provenance.js";
|
|
16
|
+
|
|
17
|
+
export const SESSION_STORE_MIGRATION_EVENT = "session_store_migrated";
|
|
18
|
+
export const SESSION_STORE_MIGRATION_SCHEMA =
|
|
19
|
+
"chainlesschain.session-store-migration/v1";
|
|
20
|
+
|
|
21
|
+
function migrationError(code, message, details = {}) {
|
|
22
|
+
const error = new Error(message);
|
|
23
|
+
error.name = "SessionTranscriptMigrationError";
|
|
24
|
+
error.code = code;
|
|
25
|
+
Object.assign(error, details);
|
|
26
|
+
return error;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function timestampEpoch(value) {
|
|
30
|
+
if (typeof value !== "string" || !value) return 0;
|
|
31
|
+
const normalized =
|
|
32
|
+
value.includes(" ") && !value.includes("T")
|
|
33
|
+
? `${value.replace(" ", "T")}Z`
|
|
34
|
+
: value;
|
|
35
|
+
const parsed = Date.parse(normalized);
|
|
36
|
+
return Number.isFinite(parsed) ? parsed : 0;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function canonicalMessages(messages, { stripLeadingSystem = true } = {}) {
|
|
40
|
+
const sanitized = sanitizePersistedMessages(messages || [], { strict: true });
|
|
41
|
+
let start = 0;
|
|
42
|
+
// Legacy WS sessions own exactly the first system message as their host
|
|
43
|
+
// prompt. Later leading system messages can be recovery notices or compacted
|
|
44
|
+
// summaries and therefore remain logical transcript content.
|
|
45
|
+
if (stripLeadingSystem && sanitized[0]?.role === "system") start = 1;
|
|
46
|
+
return sanitized.slice(start);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function messagesDigest(messages) {
|
|
50
|
+
return `sha256:${createHash("sha256")
|
|
51
|
+
.update(JSON.stringify(messages))
|
|
52
|
+
.digest("hex")}`;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Import a legacy physical session snapshot into the verified canonical
|
|
57
|
+
* transcript. The two-event sequence is restartable: a crash after
|
|
58
|
+
* session_start leaves an empty verified prefix which a retry can complete.
|
|
59
|
+
*/
|
|
60
|
+
export function ensureCanonicalSessionTranscript(
|
|
61
|
+
{
|
|
62
|
+
sessionId,
|
|
63
|
+
title = "Untitled",
|
|
64
|
+
provider = "",
|
|
65
|
+
model = "",
|
|
66
|
+
messages = [],
|
|
67
|
+
source = "legacy",
|
|
68
|
+
stripLeadingSystem = true,
|
|
69
|
+
},
|
|
70
|
+
dependencies = {},
|
|
71
|
+
) {
|
|
72
|
+
const deps = {
|
|
73
|
+
appendEvent,
|
|
74
|
+
findLatestEvent,
|
|
75
|
+
readVerifiedMessages,
|
|
76
|
+
sessionHasPersistedEvidence,
|
|
77
|
+
startSession,
|
|
78
|
+
...dependencies,
|
|
79
|
+
};
|
|
80
|
+
const id = String(sessionId || "").trim();
|
|
81
|
+
if (!id) {
|
|
82
|
+
throw migrationError(
|
|
83
|
+
"CC_SESSION_MIGRATION_INVALID",
|
|
84
|
+
"sessionId is required for transcript migration",
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
const importedMessages = canonicalMessages(messages, { stripLeadingSystem });
|
|
88
|
+
const digest = messagesDigest(importedMessages);
|
|
89
|
+
|
|
90
|
+
const existed = deps.sessionHasPersistedEvidence(id);
|
|
91
|
+
if (!existed) {
|
|
92
|
+
deps.startSession(id, { title, provider, model });
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const completed = deps.findLatestEvent(id, SESSION_STORE_MIGRATION_EVENT);
|
|
96
|
+
if (completed) {
|
|
97
|
+
if (
|
|
98
|
+
completed.data?.source !== source ||
|
|
99
|
+
completed.data?.messagesDigest !== digest
|
|
100
|
+
) {
|
|
101
|
+
throw migrationError(
|
|
102
|
+
"CC_SESSION_MIGRATION_CONFLICT",
|
|
103
|
+
`session ${id} was already imported from different content`,
|
|
104
|
+
{ sessionId: id },
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
return Object.freeze({
|
|
108
|
+
sessionId: id,
|
|
109
|
+
migrated: false,
|
|
110
|
+
messages: deps.readVerifiedMessages(id),
|
|
111
|
+
source,
|
|
112
|
+
messagesDigest: digest,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const currentMessages = deps.readVerifiedMessages(id);
|
|
117
|
+
if (currentMessages.length > 0) {
|
|
118
|
+
if (messagesDigest(currentMessages) !== digest) {
|
|
119
|
+
throw migrationError(
|
|
120
|
+
"CC_SESSION_MIGRATION_CONFLICT",
|
|
121
|
+
`canonical transcript already contains different messages: ${id}`,
|
|
122
|
+
{ sessionId: id },
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
} else if (importedMessages.length > 0) {
|
|
126
|
+
deps.appendEvent(id, "compact", {
|
|
127
|
+
messages: importedMessages,
|
|
128
|
+
originalMessages: importedMessages.length,
|
|
129
|
+
compressedMessages: importedMessages.length,
|
|
130
|
+
reason: "physical-store-import",
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
deps.appendEvent(id, SESSION_STORE_MIGRATION_EVENT, {
|
|
135
|
+
schema: SESSION_STORE_MIGRATION_SCHEMA,
|
|
136
|
+
source,
|
|
137
|
+
messagesDigest: digest,
|
|
138
|
+
messageCount: importedMessages.length,
|
|
139
|
+
});
|
|
140
|
+
return Object.freeze({
|
|
141
|
+
sessionId: id,
|
|
142
|
+
migrated: true,
|
|
143
|
+
messages: deps.readVerifiedMessages(id),
|
|
144
|
+
source,
|
|
145
|
+
messagesDigest: digest,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export function ensureCanonicalSessionFromDatabase(
|
|
150
|
+
database,
|
|
151
|
+
sessionId,
|
|
152
|
+
dependencies = {},
|
|
153
|
+
) {
|
|
154
|
+
if (!database) return null;
|
|
155
|
+
const readDatabaseSession =
|
|
156
|
+
dependencies.getDatabaseSession || getDatabaseSession;
|
|
157
|
+
const session = readDatabaseSession(database, sessionId);
|
|
158
|
+
if (!session) return null;
|
|
159
|
+
return ensureCanonicalSessionTranscript(
|
|
160
|
+
{
|
|
161
|
+
sessionId: session.id,
|
|
162
|
+
title: session.title || "Untitled",
|
|
163
|
+
provider: session.provider || "",
|
|
164
|
+
model: session.model || "",
|
|
165
|
+
messages: session.messages || [],
|
|
166
|
+
source: "sqlite:llm_sessions",
|
|
167
|
+
stripLeadingSystem: true,
|
|
168
|
+
},
|
|
169
|
+
dependencies,
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/** Resolve the newest readable logical session across JSONL and legacy DB. */
|
|
174
|
+
export function getLastLogicalSessionId(database = null, dependencies = {}) {
|
|
175
|
+
const listCanonical =
|
|
176
|
+
dependencies.listSessionAuthoritySummaries || listSessionAuthoritySummaries;
|
|
177
|
+
const listLegacy = dependencies.listDatabaseSessions || listDatabaseSessions;
|
|
178
|
+
const canonical = listCanonical({ limit: 1 }).find(
|
|
179
|
+
(session) => session?._blocked !== true,
|
|
180
|
+
);
|
|
181
|
+
const legacy = database ? listLegacy(database, { limit: 1 })[0] : null;
|
|
182
|
+
if (!canonical) return legacy?.id || null;
|
|
183
|
+
if (!legacy || canonical.id === legacy.id) return canonical.id;
|
|
184
|
+
return timestampEpoch(legacy.updated_at) >
|
|
185
|
+
timestampEpoch(canonical.updated_at)
|
|
186
|
+
? legacy.id
|
|
187
|
+
: canonical.id;
|
|
188
|
+
}
|