chainlesschain 0.163.2 → 0.163.4
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/package.json +3 -2
- package/scripts/command-lifecycle-report.mjs +330 -38
- package/src/assets/web-panel/assets/{AIOps-DnGsmsqJ.js → AIOps-DB5X7qqV.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CrO6fcQ7.js → ActionButton-DxHRtKLk.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DsBdOaP2.js → Analytics-DIH5QrxT.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DmQslKUB.js → AppLayout-uu0oxVz7.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-BvyrT_QQ.js → Artifacts-BNSMiW9Y.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-prndoLiC.js → Audit-DcAzB4_x.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-DOTFyA55.js → BackgroundAgents-ClSsvjIc.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-9zOnPp_8.js → Backup-BMciY0js.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-C4PC6sAG.js → BaseInput-Hn3b57Sh.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BBAF-W9v.js → Chat-CoSlC53V.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-CWhvvloO.js → ChatBubbleRenderer-CFevJ3So.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-BI9iculd.js → Checkbox-B4L4Eu4w.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-3DP9BCKb.js → Codegen-C77FgRxF.js} +1 -1
- package/src/assets/web-panel/assets/{Col-df-2TnJX.js → Col-BrLtJLH3.js} +1 -1
- package/src/assets/web-panel/assets/{Community-CHs8gG_A.js → Community-Be7pXXhA.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-CDfF6q7V.js → Compact-DuGPecjo.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CthrDnO7.js → Compliance-CzS66mjP.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-HjIqsWJw.js → Cowork-CEhjCoyK.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-BKc196fb.js → Cron-D7ir8Vja.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CJnjdc8W.js → Crosschain-BcXmuLxf.js} +1 -1
- package/src/assets/web-panel/assets/{DID-BHUy-8Q2.js → DID-Cto1dtBy.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-QDB7sKeY.js → Dashboard-B7KjgwOX.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DStcVK11.js → Dropdown-COMqxijg.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-BwSUskMJ.js → EmailListRenderer-BZrya-nf.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DgF_kurT.js → FamilyGuardDashboard-AmVeMq0J.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-k8wvv-wN.js → Federation-kZU8c-27.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-C11qoq2r.js → FormItemContext-sOV22v2-.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BIIpr9kg.js → GenericCardRenderer-BUuLtGCz.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BlA1exTe.js → Git-K-ZxsLsH.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CYa1ZYM4.js → Governance-D3OEnawI.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-6_kKVIt6.js → Inference-Bll0gRmP.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-CB4AwxYy.js → KnowledgeGraph-DBXwjr53.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-xf7nHFAe.js → Logs-CEzPwEfP.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-Bf3DEqP6.js → MarkdownRenderer-CLmCbHx6.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-aPg8e4Jt.js → Marketplace-BYyRyOPz.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-C-TNlVUf.js → McpTools-DVu8w_rM.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-DMTPIpGa.js → Memory-tenuZ_hO.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BxyvveRq.js → MobileBridge-Bxgy4ozS.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-DyPCrAyQ.js → MobileProjects-Dgx1D6sc.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BdhqNXp6.js → Mtc-CRfJ8r8j.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-Cz-HFxzW.js → MtcAudit-BBJq4Aiz.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-CIUaFNsx.js → Multisig-B3ii9lai.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-CWe6-J17.js → NLProgramming-FIi-Cubv.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-vYAKeviU.js → Notes-DIq8MPf1.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-DQL9-2d7.js → NotificationSettings-BFOD9eGd.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-DnXj1jBn.js → OrderTableRenderer--41u7vre.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-B3spU8AN.js → Organization-B_0AWztW.js} +2 -2
- package/src/assets/web-panel/assets/{Overflow-DgEwo7vm.js → Overflow-B6I7TuXv.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-hujMRH8X.js → P2P-Cdf6qens.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-C_qhdg9h.js → PdhVaultBrowser-B_0FcQJY.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-vp7LMcSf.js → Permissions-6nFBjsQp.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-Dxr5Hgnq.js → PersonalDataHub-nQYV7xpn.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-DEPZqqH4.js → Pipeline-CBVod5jm.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DTpDiKPe.js → Privacy-D52jW1Nt.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-jDJsRWmF.js → ProjectInit-Bdx3BYhf.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-Dhor5RWH.js → ProjectSettings-b7xr4DUa.js} +2 -2
- package/src/assets/web-panel/assets/Projects-DhfifCKx.js +1 -0
- package/src/assets/web-panel/assets/Providers-Dy_PgDMr.js +1 -0
- package/src/assets/web-panel/assets/{QrScannerModal-CjIw-wIb.js → QrScannerModal-FQKSmc3e.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DX6jcqoi.js → QuickAsk-CSTrhzcF.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-DopXkhar.js → Recommend-CxMABOUh.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BLvqJE9c.js → RemoteSession-Cv2T8yRa.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-DhRj2Me7.js → Reputation-CE1k4Vvu.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DQ53vuPq.js → Row-BNgNcAV_.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BslvwiBD.js → RssFeed-5ZiBZ3ph.js} +3 -3
- package/src/assets/web-panel/assets/{Search-DJKBDNKZ.js → Search-mDOIF1UV.js} +1 -1
- package/src/assets/web-panel/assets/{Security-COhpxHER.js → Security-CtuCTC-e.js} +3 -3
- package/src/assets/web-panel/assets/{Services-dbulD6cI.js → Services-DxFO2Zg7.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-ciIVNfhC.js → Skeleton-CKmKkH9y.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-AiRTkTCk.js → Skills-Bmzl9qkk.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-DDMcWYBc.js → Sla-9RqaWHOC.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-BPxWbpXO.js → SpeechSettings-CGdzFIYw.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BoEOXCyg.js → SyncSettings-CvNuCeBT.js} +2 -2
- package/src/assets/web-panel/assets/Tasks-B_sLdcnw.js +1 -0
- package/src/assets/web-panel/assets/{Templates-UowY8Ixe.js → Templates-D9_YijdK.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-DauSLQXN.js → Tenant-Cuc7BUSP.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-DBj7Jneq.js → Terminal-6VYRnJgd.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-UMrPwoZC.js → TimelineRenderer-GtK8xd8Y.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-4ea96-bn.js → Tokens-BZ94Lt5W.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger--ISCqt4b.js → Trigger-DEcZgDaX.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-D4GVimRJ.js → Trust-CC3z9THe.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-Ci-nXRQc.js → UkeySign-Cvtw8cV3.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-Cjk7mKPw.js → VideoEditing-CL4e6Bn3.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-BgOLOO3Z.js → Wallet-ycEemP27.js} +2 -2
- package/src/assets/web-panel/assets/{WebAuthn-CCX0K29i.js → WebAuthn-DgZ4X_aw.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-Ch3zgIsE.js → WorkflowEditor-D0qMhSv7.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DKOU_2Vb.js → chat-DsAg01Zn.js} +1 -1
- package/src/assets/web-panel/assets/{colors-6OVo4u3C.js → colors-B0oqAhrQ.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BH78Hlsq.js → compact-item-CmX0Rabz.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-CFRpSbbC.js → createContext-Be4cn1Ub.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-CP2qzG6D.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DNQhgcVi.js → hasIn-D5v12kVq.js} +1 -1
- package/src/assets/web-panel/assets/{index-BkN3iTTp.js → index-0eWLkQKT.js} +1 -1
- package/src/assets/web-panel/assets/{index-CkNEMANR.js → index-301ogenv.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3RtTT4K.js → index-5LGY0JbG.js} +1 -1
- package/src/assets/web-panel/assets/{index-dDkoL4Pe.js → index-7VKDn-t1.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHa4WyTZ.js → index-8WvYGnON.js} +1 -1
- package/src/assets/web-panel/assets/{index-CaYqY35Z.js → index-B1YGjOWC.js} +1 -1
- package/src/assets/web-panel/assets/{index-bKm3TUDp.js → index-B3mUHuVc.js} +1 -1
- package/src/assets/web-panel/assets/{index--rq90rL9.js → index-BA4oulaP.js} +1 -1
- package/src/assets/web-panel/assets/{index-DaDgdJYj.js → index-BBREnn1V.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_Z-YoxX.js → index-BBvyHguy.js} +1 -1
- package/src/assets/web-panel/assets/{index-CkqHgG-b.js → index-BKmsS2jj.js} +1 -1
- package/src/assets/web-panel/assets/{index-CrcLHN2F.js → index-BRIqLy1m.js} +1 -1
- package/src/assets/web-panel/assets/{index-BaVE6E8y.js → index-BXGSbelg.js} +3 -3
- package/src/assets/web-panel/assets/{index-BYrnm5Ob.js → index-BaE0Ui07.js} +1 -1
- package/src/assets/web-panel/assets/{index-BDSR7ecX.js → index-BoAIAZ5C.js} +1 -1
- package/src/assets/web-panel/assets/{index-CNuCHHQT.js → index-BqltWojQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Eag8e_mA.js → index-CGiIyTZw.js} +1 -1
- package/src/assets/web-panel/assets/index-CKB0vbJU.js +1 -0
- package/src/assets/web-panel/assets/{index-BepBTpa8.js → index-CZ2wUEgr.js} +1 -1
- package/src/assets/web-panel/assets/{index-HNGGVF6o.js → index-CZpfzcuy.js} +1 -1
- package/src/assets/web-panel/assets/{index-AuBhLqOm.js → index-Ckrk3pIV.js} +1 -1
- package/src/assets/web-panel/assets/{index-7TC3S8SN.js → index-CqoCZ5vR.js} +1 -1
- package/src/assets/web-panel/assets/{index-CFPJ8yzF.js → index-CyWBir7N.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bb6kDrUx.js → index-CyyGTMKd.js} +1 -1
- package/src/assets/web-panel/assets/{index-DKN2noIF.js → index-D0BSkxYQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Du0rnksC.js → index-D5YVopyr.js} +1 -1
- package/src/assets/web-panel/assets/{index-BxRy5LPR.js → index-DKUBj36_.js} +1 -1
- package/src/assets/web-panel/assets/{index-sm7W8AXy.js → index-DM724NgU.js} +1 -1
- package/src/assets/web-panel/assets/{index-BujsOZfc.js → index-DQRsQen0.js} +1 -1
- package/src/assets/web-panel/assets/index-DgoXmwqB.js +1 -0
- package/src/assets/web-panel/assets/{index-Y9MJv28e.js → index-DikJ0Qqe.js} +1 -1
- package/src/assets/web-panel/assets/{index-caye7AOE.js → index-Dn2dSdXx.js} +1 -1
- package/src/assets/web-panel/assets/{index-cdf7fd7d.js → index-DyUaFWEk.js} +1 -1
- package/src/assets/web-panel/assets/{index-BnnXQot_.js → index-Hfe_dEGx.js} +1 -1
- package/src/assets/web-panel/assets/{index-DvHGtNnF.js → index-_JjRLSD0.js} +1 -1
- package/src/assets/web-panel/assets/{index-nbfHl1oV.js → index-frSojpHj.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cu3L4r5l.js → index-jK3ax6Z6.js} +1 -1
- package/src/assets/web-panel/assets/{index-D84id2Y4.js → index-qMuZ-NRR.js} +1 -1
- package/src/assets/web-panel/assets/{index-hPY0fFrd.js → index-q_fQ94SE.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BZ9w6jPL.js → initDefaultProps-D4VdhJ9_.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BnwUiOho.js → motion-CZJA0MQW.js} +1 -1
- package/src/assets/web-panel/assets/{move-ByUKJnNm.js → move-BqEs7Sb1.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-V7yK1KEl.js → mtc-parser-BpHEtsu1.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BEXBBt4j.js → omit-BW94tY9W.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-qDm_46Gi.js → pickAttrs-BnBjPWP9.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-BIbhEo_0.js → placementArrow-uUkjQ_hu.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-NbPbDgA_.js → responsiveObserve-B-klUqXK.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BnUWglZ0.js → slide-CvY1cNAs.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-BX8_wZI5.js → statusUtils-Ix5sEDT2.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BV4OycQX.js → styleChecker-C8qcXOne.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-Od_H5llY.js → useFlexGapSupport-KNF6Kj8f.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-BWI-PyiX.js → useFs-DGJr345n.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BqMuhG3g.js → usePersonalDataHub-BboN99rI.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DNd23z6f.js → vnode-Bgt8Vgte.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-Cjaxnm7l.js → zoom-BhJtErgt.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +2 -2
- package/src/commands/agenda.js +6 -5
- package/src/commands/agent.js +237 -75
- package/src/commands/agents.js +6 -0
- package/src/commands/artifacts.js +98 -0
- package/src/commands/background-session.js +11 -1
- package/src/commands/mcp.js +218 -31
- package/src/commands/review.js +221 -22
- package/src/commands/session-mcp-recovery.js +5 -5
- package/src/data/changelog.json +27 -1
- package/src/gateways/ws/ws-agent-handler.js +492 -14
- package/src/harness/jsonl-session-store.js +39 -1
- package/src/harness/mcp-client.js +414 -71
- package/src/harness/prompt-compressor.js +24 -0
- package/src/harness/provider-backed-compaction.js +205 -0
- package/src/harness/worktree-isolator.js +26 -3
- package/src/lib/agent-worktree.js +41 -2
- package/src/lib/app-preview.js +3 -0
- package/src/lib/background-agent-supervisor.js +790 -186
- package/src/lib/background-command-argv.js +318 -0
- package/src/lib/background-launch-profile.js +1 -0
- package/src/lib/background-phase-reporter.js +22 -2
- package/src/lib/background-worktree-policy.js +109 -0
- package/src/lib/command-lifecycle-report.js +1340 -145
- package/src/lib/cowork-mcp-tools.js +51 -6
- package/src/lib/cowork-task-runner.js +1 -0
- package/src/lib/delivery-coordinator.js +30 -5
- package/src/lib/delivery-production-adapter.js +1777 -0
- package/src/lib/delivery-production-runner.js +240 -0
- package/src/lib/durable-security-store.js +29 -17
- package/src/lib/execution-trace/trace-context.cjs +179 -0
- package/src/lib/execution-trace/trace-context.js +8 -175
- package/src/lib/mcp-call-ledger-store.js +58 -6
- package/src/lib/mcp-headers-helper.js +76 -8
- package/src/lib/mcp-host-recovery-runtime.js +2 -0
- package/src/lib/mcp-ledger-recovery-admission.js +39 -3
- package/src/lib/mcp-recovery-adjudication.js +256 -19
- package/src/lib/mcp-sandbox-policy.js +184 -0
- package/src/lib/mcp-stdio-capsule-builder-worker.cjs +495 -0
- package/src/lib/mcp-stdio-executable-identity.js +33 -2
- package/src/lib/mcp-stdio-execution-authority.js +163 -0
- package/src/lib/mcp-stdio-immutable-vfs-resolver.cjs +830 -0
- package/src/lib/mcp-stdio-package-materialization.js +721 -333
- package/src/lib/mcp-stdio-workspace-authority.js +252 -0
- package/src/lib/observability/index.js +2 -0
- package/src/lib/observability/otlp-exporter.js +2 -2
- package/src/lib/packer/pack-update-applier.js +8 -1
- package/src/lib/packer/pkg-config-generator.js +34 -0
- package/src/lib/plugin-runtime/sandbox-policy.js +42 -2
- package/src/lib/process-execution-broker/index.js +213 -109
- package/src/lib/process-execution-broker/platform-sandbox.js +1024 -169
- package/src/lib/process-tree-termination.js +17 -1
- package/src/lib/scheduler-kernel/contract.js +315 -0
- package/src/lib/scheduler-kernel/store.js +1345 -0
- package/src/lib/session-host-lease.js +403 -30
- package/src/lib/session-persistence-failure.js +4 -1
- package/src/lib/skill-mcp.js +65 -4
- package/src/lib/sub-agent-context.js +8 -0
- package/src/lib/web-fetch.js +4 -4
- package/src/repl/agent-repl.js +285 -38
- package/src/runtime/agent-core.js +1044 -90
- package/src/runtime/agent-runtime.js +61 -8
- package/src/runtime/headless-runner.js +260 -166
- package/src/runtime/headless-stream.js +254 -25
- package/src/runtime/mcp-config.js +235 -28
- package/src/workers/background-agent-worker.js +492 -71
- package/src/assets/web-panel/assets/Projects-08xUDZGt.js +0 -1
- package/src/assets/web-panel/assets/Providers-BGs47s1a.js +0 -1
- package/src/assets/web-panel/assets/Tasks-CEYFJwmr.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DEMblAIm.js +0 -1
- package/src/assets/web-panel/assets/index-BTvq-36D.js +0 -1
- package/src/assets/web-panel/assets/index-hUpvk6Jl.js +0 -1
|
@@ -33,10 +33,17 @@ import {
|
|
|
33
33
|
} from "../lib/hooks-v2-producers.js";
|
|
34
34
|
import { runWithHostHooksV2Workspace } from "../lib/hooks-v2-workspace-context.js";
|
|
35
35
|
import { bootstrap } from "./bootstrap.js";
|
|
36
|
-
import {
|
|
36
|
+
import {
|
|
37
|
+
buildSystemPrompt,
|
|
38
|
+
chatWithTools as coreChatWithTools,
|
|
39
|
+
agentLoop as coreAgentLoop,
|
|
40
|
+
} from "./agent-core.js";
|
|
37
41
|
import { composeSystemPrompt } from "./system-prompt.js";
|
|
38
42
|
import { collapseConsecutiveMessagesInPlace } from "./message-roles.js";
|
|
39
43
|
import { sanitizeToolPairs } from "../harness/prompt-compressor.js";
|
|
44
|
+
import { compactConversationWithProvider } from "../harness/provider-backed-compaction.js";
|
|
45
|
+
import { projectCanonicalResumeMessages } from "../lib/session-message-provenance.js";
|
|
46
|
+
import { isAbortError } from "../lib/abort-utils.js";
|
|
40
47
|
import { expandFileRefsAsync } from "./file-ref-expander.js";
|
|
41
48
|
// Per-turn helpers resolved at module load (not re-`await import`ed inside the
|
|
42
49
|
// turn loop). image-input + ide-context are pure local modules; pulling them up
|
|
@@ -85,6 +92,7 @@ import {
|
|
|
85
92
|
appendAssistantMessage as jsonlAppendAssistantMessage,
|
|
86
93
|
appendToolCallCompact as jsonlAppendToolCallCompact,
|
|
87
94
|
appendLlmRetryCompact as jsonlAppendLlmRetryCompact,
|
|
95
|
+
appendCompactEventIfMessagesMatch as jsonlAppendCompactEventIfMessagesMatch,
|
|
88
96
|
appendEvent as jsonlAppendEvent,
|
|
89
97
|
appendAuthorityEvent as jsonlAppendAuthorityEvent,
|
|
90
98
|
readEvents as jsonlReadEvents,
|
|
@@ -803,6 +811,7 @@ async function runTurn(
|
|
|
803
811
|
let finalText = "";
|
|
804
812
|
let endReason = "complete";
|
|
805
813
|
let stopForCost = false;
|
|
814
|
+
let stopForCompactionUsageUnknown = false;
|
|
806
815
|
let responseCompleted = false;
|
|
807
816
|
// P0-2: the side-effect op currently in flight (at most one — the loop runs
|
|
808
817
|
// tools serially). Non-null only between a dangerous tool's tool-executing
|
|
@@ -1012,6 +1021,18 @@ async function runTurn(
|
|
|
1012
1021
|
}
|
|
1013
1022
|
}
|
|
1014
1023
|
break;
|
|
1024
|
+
case "compaction-usage-unknown":
|
|
1025
|
+
emit({
|
|
1026
|
+
type: "compaction_usage_unknown",
|
|
1027
|
+
provider: event.provider,
|
|
1028
|
+
model: event.model,
|
|
1029
|
+
source: event.source || "semantic-compaction",
|
|
1030
|
+
reason: event.reason || "provider_transport_outcome_unknown",
|
|
1031
|
+
usage_outcome: "unknown",
|
|
1032
|
+
});
|
|
1033
|
+
endReason = "compaction-usage-unknown";
|
|
1034
|
+
stopForCompactionUsageUnknown = true;
|
|
1035
|
+
break;
|
|
1015
1036
|
case "iteration-warning":
|
|
1016
1037
|
emit({ type: "iteration_warning", message: event.message });
|
|
1017
1038
|
break;
|
|
@@ -1033,7 +1054,7 @@ async function runTurn(
|
|
|
1033
1054
|
await waitForOutput?.();
|
|
1034
1055
|
// Hard cost cap reached — stop consuming the loop (break the for-await, not
|
|
1035
1056
|
// just the switch) so no further paid LLM call is made.
|
|
1036
|
-
if (stopForCost) break;
|
|
1057
|
+
if (stopForCost || stopForCompactionUsageUnknown) break;
|
|
1037
1058
|
}
|
|
1038
1059
|
if (
|
|
1039
1060
|
sideEffects &&
|
|
@@ -1181,6 +1202,7 @@ async function withStreamSessionHostLease(options, deps, streamCleanup, task) {
|
|
|
1181
1202
|
typeof deps.sessionHasPersistedEvidence === "function" ||
|
|
1182
1203
|
typeof deps.sessionExists === "function" ||
|
|
1183
1204
|
typeof deps.rebuildMessages === "function" ||
|
|
1205
|
+
typeof deps.appendCompactEventIfMessagesMatch === "function" ||
|
|
1184
1206
|
typeof deps.appendEvent === "function" ||
|
|
1185
1207
|
typeof deps.appendAuthorityEvent === "function" ||
|
|
1186
1208
|
typeof deps.readVerifiedEvents === "function" ||
|
|
@@ -1379,6 +1401,7 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
1379
1401
|
typeof deps.sessionHasPersistedEvidence === "function" ||
|
|
1380
1402
|
typeof deps.sessionExists === "function" ||
|
|
1381
1403
|
typeof deps.rebuildMessages === "function" ||
|
|
1404
|
+
typeof deps.appendCompactEventIfMessagesMatch === "function" ||
|
|
1382
1405
|
typeof deps.appendEvent === "function" ||
|
|
1383
1406
|
typeof deps.appendAuthorityEvent === "function" ||
|
|
1384
1407
|
typeof deps.readVerifiedEvents === "function" ||
|
|
@@ -1739,6 +1762,11 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
1739
1762
|
appendLlmRetryCompact:
|
|
1740
1763
|
deps.appendLlmRetryCompact ||
|
|
1741
1764
|
(hasInjectedSessionStore ? () => true : jsonlAppendLlmRetryCompact),
|
|
1765
|
+
appendCompactEventIfMessagesMatch:
|
|
1766
|
+
deps.appendCompactEventIfMessagesMatch ||
|
|
1767
|
+
(hasInjectedSessionStore
|
|
1768
|
+
? unavailableAuthorityCapability("appendCompactEventIfMessagesMatch")
|
|
1769
|
+
: jsonlAppendCompactEventIfMessagesMatch),
|
|
1742
1770
|
appendEvent:
|
|
1743
1771
|
deps.appendEvent ||
|
|
1744
1772
|
(hasInjectedSessionStore ? () => true : jsonlAppendEvent),
|
|
@@ -2495,6 +2523,7 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
2495
2523
|
sink: mcpLedgerSink,
|
|
2496
2524
|
recovery: mcpLedgerRecovery,
|
|
2497
2525
|
recoveryError: mcpLedgerRecoveryError,
|
|
2526
|
+
dispatchAdmission: sessionHostLease?.admitMcpDispatch || null,
|
|
2498
2527
|
});
|
|
2499
2528
|
const hostMcp = mcp
|
|
2500
2529
|
? { ...mcp, mcpClient: mcpRecoveryRuntime.client || mcp.mcpClient }
|
|
@@ -2730,6 +2759,26 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
2730
2759
|
// A null sink disables durable writes, not recovery admission. Retain the
|
|
2731
2760
|
// guarded ledger so outcome-unknown calls cannot be retried in-process.
|
|
2732
2761
|
mcpCallLedger: mcpRecoveryRuntime.ledger,
|
|
2762
|
+
mcpDispatchAdmission: sessionHostLease?.admitMcpDispatch || null,
|
|
2763
|
+
onCompaction: persist
|
|
2764
|
+
? (stats, compacted, settlement = {}) => {
|
|
2765
|
+
sessionHostLease?.assert?.();
|
|
2766
|
+
return requireSynchronousRecoveryResult(
|
|
2767
|
+
store.appendCompactEventIfMessagesMatch(
|
|
2768
|
+
sessionId,
|
|
2769
|
+
{
|
|
2770
|
+
...stats,
|
|
2771
|
+
trigger: settlement.trigger || "auto",
|
|
2772
|
+
messages: projectCanonicalResumeMessages(compacted, {
|
|
2773
|
+
strict: true,
|
|
2774
|
+
}),
|
|
2775
|
+
},
|
|
2776
|
+
settlement.expectedMessages,
|
|
2777
|
+
),
|
|
2778
|
+
"appendCompactEventIfMessagesMatch",
|
|
2779
|
+
);
|
|
2780
|
+
}
|
|
2781
|
+
: undefined,
|
|
2733
2782
|
chatFn: deps.chatFn || options.chatFn || undefined,
|
|
2734
2783
|
signal: options.signal || undefined,
|
|
2735
2784
|
// --include-partial-messages: stream live assistant-text deltas as
|
|
@@ -3035,31 +3084,194 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
3035
3084
|
continue;
|
|
3036
3085
|
}
|
|
3037
3086
|
|
|
3038
|
-
// Manual `/compact`
|
|
3039
|
-
//
|
|
3040
|
-
//
|
|
3041
|
-
// `compaction` event the panel renders as "compacted N→M, saved …".
|
|
3087
|
+
// Manual `/compact` uses the same provider-backed structured handoff as the
|
|
3088
|
+
// other long-lived hosts. Provider/schema failures degrade to the shared
|
|
3089
|
+
// extractive handoff instead of silently dropping all but recent turns.
|
|
3042
3090
|
if (parsed.compact) {
|
|
3043
|
-
const { microCompact } = await import("../lib/micro-compact.js");
|
|
3044
3091
|
const before = messages.length;
|
|
3045
|
-
const
|
|
3046
|
-
|
|
3047
|
-
|
|
3048
|
-
|
|
3049
|
-
|
|
3050
|
-
|
|
3051
|
-
|
|
3052
|
-
|
|
3053
|
-
|
|
3054
|
-
|
|
3055
|
-
|
|
3056
|
-
|
|
3057
|
-
|
|
3058
|
-
|
|
3059
|
-
|
|
3060
|
-
|
|
3061
|
-
|
|
3062
|
-
|
|
3092
|
+
const expectedMessages = [...messages];
|
|
3093
|
+
let compacted;
|
|
3094
|
+
let stats;
|
|
3095
|
+
let degradedEvent;
|
|
3096
|
+
let usageEvent;
|
|
3097
|
+
let usageUnknownEvent;
|
|
3098
|
+
try {
|
|
3099
|
+
({
|
|
3100
|
+
messages: compacted,
|
|
3101
|
+
stats,
|
|
3102
|
+
degradedEvent,
|
|
3103
|
+
usageEvent,
|
|
3104
|
+
usageUnknownEvent,
|
|
3105
|
+
} = await compactConversationWithProvider(messages, {
|
|
3106
|
+
provider,
|
|
3107
|
+
model,
|
|
3108
|
+
baseUrl,
|
|
3109
|
+
apiKey,
|
|
3110
|
+
signal: options.signal,
|
|
3111
|
+
force: true,
|
|
3112
|
+
preserveCompletedExchange: true,
|
|
3113
|
+
llmQuery:
|
|
3114
|
+
deps.compactionLlmQuery || options.compactionLlmQuery || null,
|
|
3115
|
+
chatFn:
|
|
3116
|
+
deps.compactionChatFn ||
|
|
3117
|
+
options.compactionChatFn ||
|
|
3118
|
+
coreChatWithTools,
|
|
3119
|
+
chatOptions: { cwd, sessionId },
|
|
3120
|
+
maxOutputTokens: options.compactionMaxOutputTokens,
|
|
3121
|
+
summaryInputMaxChars: options.compactionInputMaxChars,
|
|
3122
|
+
}));
|
|
3123
|
+
} catch (error) {
|
|
3124
|
+
if (isAbortError(error) || options.signal?.aborted) throw error;
|
|
3125
|
+
emit({
|
|
3126
|
+
type: "compaction-degraded",
|
|
3127
|
+
reason: `compaction_failed:${String(error?.message || error).slice(0, 240)}`,
|
|
3128
|
+
summaryMode: "none",
|
|
3129
|
+
});
|
|
3130
|
+
continue;
|
|
3131
|
+
}
|
|
3132
|
+
if (degradedEvent) {
|
|
3133
|
+
emit({ type: "compaction-degraded", ...degradedEvent });
|
|
3134
|
+
}
|
|
3135
|
+
if (usageUnknownEvent) {
|
|
3136
|
+
emit({
|
|
3137
|
+
type: "compaction_usage_unknown",
|
|
3138
|
+
...usageUnknownEvent,
|
|
3139
|
+
usage_outcome: "unknown",
|
|
3140
|
+
});
|
|
3141
|
+
emit({
|
|
3142
|
+
type: "result",
|
|
3143
|
+
subtype: "error_compaction_usage_unknown",
|
|
3144
|
+
is_error: true,
|
|
3145
|
+
code: "CC_COMPACTION_USAGE_UNKNOWN",
|
|
3146
|
+
error:
|
|
3147
|
+
"Compaction provider usage is unknown; the paid compaction is not retried",
|
|
3148
|
+
session_id: sessionId,
|
|
3149
|
+
...(costBudget ? { budget_state: "unverifiable" } : {}),
|
|
3150
|
+
});
|
|
3151
|
+
sawError = true;
|
|
3152
|
+
break;
|
|
3153
|
+
}
|
|
3154
|
+
let costExceeded = false;
|
|
3155
|
+
if (usageEvent) {
|
|
3156
|
+
emit({ type: "token_usage", ...usageEvent });
|
|
3157
|
+
if (costBudget) {
|
|
3158
|
+
costBudget.add(usageEvent);
|
|
3159
|
+
costExceeded = costBudget.exceeded();
|
|
3160
|
+
}
|
|
3161
|
+
}
|
|
3162
|
+
|
|
3163
|
+
// Provider work above is intentionally outside the canonical writer
|
|
3164
|
+
// lock. Settle the candidate once, under the JSONL message-projection CAS,
|
|
3165
|
+
// before replacing the live history. A stale/unknown settlement is never
|
|
3166
|
+
// retried here: that could duplicate either the paid summary call or a
|
|
3167
|
+
// compact event whose fsync outcome is unknown.
|
|
3168
|
+
const shouldPersistCompact = stats?.strategy !== "none";
|
|
3169
|
+
let settlementError = null;
|
|
3170
|
+
let persistenceFailure = null;
|
|
3171
|
+
if (persist && shouldPersistCompact) {
|
|
3172
|
+
try {
|
|
3173
|
+
sessionHostLease?.assert?.();
|
|
3174
|
+
requireSynchronousRecoveryResult(
|
|
3175
|
+
store.appendCompactEventIfMessagesMatch(
|
|
3176
|
+
sessionId,
|
|
3177
|
+
{
|
|
3178
|
+
...stats,
|
|
3179
|
+
trigger: "manual",
|
|
3180
|
+
messages: projectCanonicalResumeMessages(compacted, {
|
|
3181
|
+
strict: true,
|
|
3182
|
+
}),
|
|
3183
|
+
},
|
|
3184
|
+
expectedMessages,
|
|
3185
|
+
),
|
|
3186
|
+
"appendCompactEventIfMessagesMatch",
|
|
3187
|
+
);
|
|
3188
|
+
} catch (error) {
|
|
3189
|
+
settlementError = error;
|
|
3190
|
+
const normalized = createSessionPersistenceFailure(error, {
|
|
3191
|
+
sessionId,
|
|
3192
|
+
operation: "append-authority-event",
|
|
3193
|
+
});
|
|
3194
|
+
persistenceFailure = projectSessionPersistenceFailure(normalized, {
|
|
3195
|
+
phase: "after-model",
|
|
3196
|
+
});
|
|
3197
|
+
if (persistenceFailure) {
|
|
3198
|
+
terminalPersistenceFailure = persistenceFailure;
|
|
3199
|
+
try {
|
|
3200
|
+
deps.onPersistenceFailure?.(persistenceFailure);
|
|
3201
|
+
} catch {
|
|
3202
|
+
// Observability cannot change persistence semantics.
|
|
3203
|
+
}
|
|
3204
|
+
}
|
|
3205
|
+
}
|
|
3206
|
+
}
|
|
3207
|
+
|
|
3208
|
+
if (!settlementError) {
|
|
3209
|
+
messages.length = 0;
|
|
3210
|
+
messages.push(...compacted);
|
|
3211
|
+
emit({
|
|
3212
|
+
type: "compaction",
|
|
3213
|
+
stats,
|
|
3214
|
+
messages_before: before,
|
|
3215
|
+
messages_after: messages.length,
|
|
3216
|
+
});
|
|
3217
|
+
emitHooksV2Event("PostCompact", {
|
|
3218
|
+
schema_version: 1,
|
|
3219
|
+
trigger: "manual",
|
|
3220
|
+
session_id: sessionId,
|
|
3221
|
+
messages_before: before,
|
|
3222
|
+
messages_after: messages.length,
|
|
3223
|
+
stats,
|
|
3224
|
+
cwd,
|
|
3225
|
+
});
|
|
3226
|
+
} else {
|
|
3227
|
+
const stale = settlementError?.code === "SESSION_REVISION_STALE";
|
|
3228
|
+
const code = stale
|
|
3229
|
+
? "CC_COMPACTION_REVISION_STALE"
|
|
3230
|
+
: persistenceFailure?.code ||
|
|
3231
|
+
settlementError?.code ||
|
|
3232
|
+
"CC_COMPACTION_SETTLEMENT_FAILED";
|
|
3233
|
+
emit({
|
|
3234
|
+
type: "compaction-degraded",
|
|
3235
|
+
reason: stale
|
|
3236
|
+
? "session_messages_changed_during_compaction"
|
|
3237
|
+
: "canonical_compaction_settlement_failed",
|
|
3238
|
+
summaryMode: "none",
|
|
3239
|
+
code,
|
|
3240
|
+
});
|
|
3241
|
+
emit({
|
|
3242
|
+
type: "result",
|
|
3243
|
+
subtype: persistenceFailure
|
|
3244
|
+
? "error_persistence"
|
|
3245
|
+
: stale
|
|
3246
|
+
? "error_compaction_stale"
|
|
3247
|
+
: "error_session_persistence",
|
|
3248
|
+
is_error: true,
|
|
3249
|
+
code,
|
|
3250
|
+
error: "Canonical compaction was not settled",
|
|
3251
|
+
session_id: sessionId,
|
|
3252
|
+
...(persistenceFailure ? { persistence: persistenceFailure } : {}),
|
|
3253
|
+
});
|
|
3254
|
+
sawError = true;
|
|
3255
|
+
}
|
|
3256
|
+
|
|
3257
|
+
if (costExceeded) {
|
|
3258
|
+
sawError = true;
|
|
3259
|
+
emit({
|
|
3260
|
+
type: "cost_budget_exhausted",
|
|
3261
|
+
limit_usd: options.maxCostUsd,
|
|
3262
|
+
spent_usd: costBudget.spentUsd,
|
|
3263
|
+
session_id: sessionId,
|
|
3264
|
+
turn: turns,
|
|
3265
|
+
});
|
|
3266
|
+
}
|
|
3267
|
+
if (settlementError || costExceeded) {
|
|
3268
|
+
break;
|
|
3269
|
+
}
|
|
3270
|
+
if (!shouldPersistCompact && persist) {
|
|
3271
|
+
// A repeated `/compact` against an already-compact context is a no-op:
|
|
3272
|
+
// do not grow the canonical chain with duplicate checkpoints.
|
|
3273
|
+
sessionHostLease?.assert?.();
|
|
3274
|
+
}
|
|
3063
3275
|
continue;
|
|
3064
3276
|
}
|
|
3065
3277
|
|
|
@@ -3596,6 +3808,23 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
3596
3808
|
}
|
|
3597
3809
|
currentAbort = null;
|
|
3598
3810
|
|
|
3811
|
+
if (outcome.endReason === "compaction-usage-unknown") {
|
|
3812
|
+
sawError = true;
|
|
3813
|
+
emit({
|
|
3814
|
+
type: "result",
|
|
3815
|
+
subtype: "error_compaction_usage_unknown",
|
|
3816
|
+
is_error: true,
|
|
3817
|
+
code: "CC_COMPACTION_USAGE_UNKNOWN",
|
|
3818
|
+
error:
|
|
3819
|
+
"Compaction provider usage is unknown; the paid compaction is not retried",
|
|
3820
|
+
session_id: sessionId,
|
|
3821
|
+
turn: turns,
|
|
3822
|
+
usage: outcome.usage,
|
|
3823
|
+
...(costBudget ? { budget_state: "unverifiable" } : {}),
|
|
3824
|
+
});
|
|
3825
|
+
break;
|
|
3826
|
+
}
|
|
3827
|
+
|
|
3599
3828
|
// §3.5.18 出境台账: report what left the device this turn (the cloud-LLM
|
|
3600
3829
|
// call + any egress-classed tool) so the Android transparency ledger —
|
|
3601
3830
|
// which cannot see the cc subprocess's cloud call — records it. PDH-gated
|