chainlesschain 0.165.2 → 0.165.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/README.md +151 -29
- package/package.json +2 -2
- package/src/assets/web-panel/assets/{AIOps-lS1R0Cza.js → AIOps-C__nnraW.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BmlgBPsj.js → ActionButton-CsKWHEZ-.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CNKczv1S.js → Analytics-BhIjfjWO.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BuZGJARQ.js → AppLayout-BjuXFzWZ.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-Dm73Sl-O.js → Artifacts-k6whDkZJ.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-BGMW7A5e.js → Audit-C4FBMYRh.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BQ6M54JR.js → BackgroundAgents-C_vRrSXk.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DBzGP0bR.js → Backup-CngFZeVp.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-D1mLCoOV.js → BaseInput-B_H9EBRm.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BUfcN7p8.js → Chat-DLEC5kt7.js} +4 -4
- package/src/assets/web-panel/assets/ChatBubbleRenderer-xijcWkJe.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-Du0Yg5Pi.js → Checkbox-m3ClR4xh.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-B2RXziHW.js → Codegen-CmLSFrgp.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DWhekOrR.js → Col-DFGQteHN.js} +1 -1
- package/src/assets/web-panel/assets/{Community-HQhrkon4.js → Community-EUUVORHE.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-izHNb4uz.js → Compact-2PSg0Yr7.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BDwLy41-.js → Compliance-CcKur7gB.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-DFJhLa7K.js → Cowork-DK_Fezfa.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-DYY9RG7-.js → Cron-Dbw89xl7.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-rr7tJTtv.js → Crosschain-CH66h_Ec.js} +1 -1
- package/src/assets/web-panel/assets/{DID-D2sfHRLi.js → DID-D1igRb17.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-q_eGdhha.js → Dashboard-DVAsrobk.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-Cufrh2Bz.js → Dropdown-Dl7W8AQs.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-B-kdv10f.js → EmailListRenderer-D5tpaEQC.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-D21XjgfG.js → FamilyGuardDashboard-O_VQf8gq.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CAwRTLZH.js → Federation-BTVcgS9n.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-vx3daNDF.js → FormItemContext-BRnkJAIz.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-CRWY2wU4.js → GenericCardRenderer-8OWSCkDj.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Q6SwauyD.js → Git-WXLYTQj2.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-BJ1q4IQZ.js → Governance-BezaUhtc.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CSWjROgD.js → Inference-CuRay3Gu.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-fzuQsWuY.js → KnowledgeGraph-DfWLDW1m.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DVF8Mnns.js → Logs-C55y2pPY.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-hDpWdiBc.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-BQP7LOA4.js → Marketplace-Dk08Uycg.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BNlJCmNc.js → McpTools-C11fSB5V.js} +4 -4
- package/src/assets/web-panel/assets/{Memory-DLLg5WQ4.js → Memory-mr0eZc97.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-CR2skNAF.js → MobileBridge-C0iCSRbb.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-BxVavObl.js → MobileProjects-CY-xMG8Z.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-B17pgqMI.js → Mtc-Bplqc_Wc.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-4UmV5cIL.js → MtcAudit-BlzwsoSM.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-DoMEXEcU.js → Multisig-BBLmTty6.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-h9DMXFX4.js → NLProgramming-DtT1uf1W.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-Cihn-xX8.js → Notes-DcqQAxTK.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BE6ZGa3R.js → NotificationSettings-cb0kWoZe.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-CnwojoSI.js → OrderTableRenderer-kw9HZQNN.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-B2vpwmjb.js → Organization-DlTlbkUN.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-C4z28R0-.js → Overflow-pp1qs-oY.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BVlFkwhW.js → P2P-BESLnyYz.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-BXbEdL5B.js → PdhVaultBrowser-B-J1mGuf.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-C28xs4lp.js → Permissions-B36PeT1_.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-Dgl_rBjM.js → PersonalDataHub-CTK2ad-3.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-3QUIhrKI.js → Pipeline-zJNGXsac.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-8Gh33OZ5.js → Privacy-b9fz0Qf0.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BNmg4tZi.js → ProjectInit-DjZbZgiB.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-vgMfeCf9.js → ProjectSettings-C-hHJXlD.js} +2 -2
- package/src/assets/web-panel/assets/Projects-BC9KSDM6.js +1 -0
- package/src/assets/web-panel/assets/{Providers-CXoOa8eX.js → Providers-Dz-CAYYU.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-BhfTF0oS.js → QrScannerModal-A0yoQ3-3.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-C746HEAj.js → QuickAsk-DrFgFJNC.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BSej8Eo0.js → Recommend-KC8hF1g4.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-f3gmnlG3.js → RemoteSession-DGTPIk6u.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-CyvybpkN.js → Reputation-QmbwM7Yk.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DwV2PeYn.js → Row-BxjJylia.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-11GrzjZy.js → RssFeed-B7Wda1J6.js} +3 -3
- package/src/assets/web-panel/assets/{Search-BjKXkrAY.js → Search-_plQ_YSA.js} +1 -1
- package/src/assets/web-panel/assets/{Security-eWiFb9Yk.js → Security-CD2YJZfx.js} +2 -2
- package/src/assets/web-panel/assets/{Services-CdCsMAtt.js → Services-qQE7NmwE.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-4Q2UTKQ5.js → Skeleton-DgQqkFf7.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-v4rtYrRj.js → Skills-C4C0oFFt.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-CRhsFvd_.js → Sla-Px2N2B5c.js} +1 -1
- package/src/assets/web-panel/assets/SpeechSettings-DN6C3lQd.js +1 -0
- package/src/assets/web-panel/assets/{SyncSettings-D16zonl7.js → SyncSettings-jm5aH_m7.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-Xxozz0i_.js → Tasks-DlkJcv67.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CXJpPtCT.js → Templates-DyrTHUBs.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-XRV0L1ZF.js → Tenant-mC434PtL.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-CYuO1i_w.js → Terminal-o0_s3NgK.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-BXqitWsu.js → TimelineRenderer-DAGlAXOw.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BvPrDHIy.js → Tokens-BnulS_bs.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DhCrSTf5.js → Trigger-suQbVXYM.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-DmsuZD6K.js → Trust-DbIJAPo5.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-D_yrts5C.js → UkeySign-CQNpbIHi.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-B01ihPrm.js → VideoEditing-D8aWCERk.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-DpUjKa-N.js → Wallet-CuLpYfZc.js} +2 -2
- package/src/assets/web-panel/assets/{WebAuthn-CL07yON6.js → WebAuthn-CsfG8ZMc.js} +2 -2
- package/src/assets/web-panel/assets/{WorkflowEditor-CLMflnRr.js → WorkflowEditor-BYsEAZbd.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DtUqe8h_.js → chat-FT4Um3-I.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DPKrgVfy.js → colors-CKbS_Wlt.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BTt2GtOm.js → compact-item-CFJtzuJM.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-D_VeUc1J.js → createContext-B9kSRW6K.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DJZ0gAMu.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-1kndiylj.js → hasIn-DR-x0Xpi.js} +1 -1
- package/src/assets/web-panel/assets/{index-dVc-CXY4.js → index-7jHr_A_k.js} +1 -1
- package/src/assets/web-panel/assets/{index-DFIZ_1Sf.js → index-B3ZX81mK.js} +1 -1
- package/src/assets/web-panel/assets/{index-fk2Rjacw.js → index-B7osrXqy.js} +3 -3
- package/src/assets/web-panel/assets/{index-CHG-KcS4.js → index-BGbPnC5x.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dbbymxpj.js → index-BI5hP_qy.js} +1 -1
- package/src/assets/web-panel/assets/{index-BaZAbw9A.js → index-BK3TiKVq.js} +1 -1
- package/src/assets/web-panel/assets/{index-CzjkKUmR.js → index-BVPU43b1.js} +1 -1
- package/src/assets/web-panel/assets/{index-BAXfRKfG.js → index-BW-t9n-q.js} +1 -1
- package/src/assets/web-panel/assets/{index-8nz_fmlj.js → index-BfFCQHL3.js} +1 -1
- package/src/assets/web-panel/assets/index-Bizb4hkw.js +1 -0
- package/src/assets/web-panel/assets/{index-DdkplL9R.js → index-Bt4fS2eL.js} +1 -1
- package/src/assets/web-panel/assets/{index-DG2MZQ3f.js → index-BwR7yc2h.js} +1 -1
- package/src/assets/web-panel/assets/{index-DfKBRdSS.js → index-Bzz0C1BZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-GsoUQ2M7.js → index-C2JvmYRc.js} +1 -1
- package/src/assets/web-panel/assets/{index-l1BETrDb.js → index-CGaXUsIs.js} +1 -1
- package/src/assets/web-panel/assets/{index-4bna2_SR.js → index-CJmIQ9XR.js} +1 -1
- package/src/assets/web-panel/assets/{index-DfGl8CqG.js → index-C_enk9I_.js} +1 -1
- package/src/assets/web-panel/assets/{index-D95OFht7.js → index-Cr2FLUsD.js} +1 -1
- package/src/assets/web-panel/assets/{index-DsJCDUJG.js → index-CvrCCqJt.js} +1 -1
- package/src/assets/web-panel/assets/{index-sDoMHTNA.js → index-D4LfPvWA.js} +1 -1
- package/src/assets/web-panel/assets/{index-By5n8up9.js → index-DMGmg497.js} +1 -1
- package/src/assets/web-panel/assets/{index-ocf06EVQ.js → index-DShSkww-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bhudc_Ez.js → index-DTxNy0ZU.js} +1 -1
- package/src/assets/web-panel/assets/{index-CX81qSM4.js → index-DW4BWjTk.js} +1 -1
- package/src/assets/web-panel/assets/{index-BlDNVgBt.js → index-DWdqx7zI.js} +1 -1
- package/src/assets/web-panel/assets/{index-CcO04eDn.js → index-Dap9c3eD.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dwqmtk65.js → index-DcfxhKXR.js} +1 -1
- package/src/assets/web-panel/assets/{index-2eyAXE3d.js → index-DdkIhfi-.js} +1 -1
- package/src/assets/web-panel/assets/{index-brCInrzq.js → index-DeSgw-WV.js} +1 -1
- package/src/assets/web-panel/assets/{index-DJ8vXGOa.js → index-DiNUEpSQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHpBMWCh.js → index-DjEP7WkH.js} +1 -1
- package/src/assets/web-panel/assets/{index-m31Ka8hZ.js → index-DtkFqPVA.js} +1 -1
- package/src/assets/web-panel/assets/{index-CtF7EN49.js → index-KqDaCApw.js} +1 -1
- package/src/assets/web-panel/assets/index-OHSl-xCh.js +1 -0
- package/src/assets/web-panel/assets/{index-B9KvcS7R.js → index-OSzjTzGM.js} +1 -1
- package/src/assets/web-panel/assets/{index-CauoBQkH.js → index-QBSeNVO3.js} +1 -1
- package/src/assets/web-panel/assets/{index-FzdwcSy2.js → index-WE08gMJP.js} +1 -1
- package/src/assets/web-panel/assets/{index-DxdTdBix.js → index-r2VI1Ikk.js} +1 -1
- package/src/assets/web-panel/assets/{index-BepLZwgB.js → index-tqSEHPRT.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-CvyYJd7z.js → initDefaultProps-Dd7n7VgI.js} +1 -1
- package/src/assets/web-panel/assets/{motion-DYZkhUdz.js → motion-BwxouRw1.js} +1 -1
- package/src/assets/web-panel/assets/{move-slnJRVT1.js → move-DObN0PG9.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-DVc0CKmy.js → mtc-parser-B3nOUQc7.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BCXAtHCq.js → omit-o9WU2Nbl.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DBsemz_K.js → pickAttrs-CL_vvfQ_.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-BRtkJ-nv.js → placementArrow-CYrM2tyK.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-Cebq7EZn.js → responsiveObserve-k_06cQ96.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DT7qvId2.js → slide-CPKG0pxS.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-pQiITLkG.js → statusUtils-BDDEeLTw.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-c-19BVKQ.js → styleChecker-Cmb7RTh7.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DsS5-0bE.js → useFlexGapSupport-e2IedC4N.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CxGiMe5n.js → useFs-CE_gxVnm.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-D9btVID5.js → usePersonalDataHub-BkMIIKMz.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-CUYFsFEN.js → vnode-DW886XV1.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-CXmn_35j.js → zoom-Dwo_adaf.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +3 -3
- package/src/commands/agent.js +105 -35
- package/src/commands/artifacts.js +363 -33
- package/src/commands/cowork.js +202 -36
- package/src/commands/session-budget.js +155 -0
- package/src/commands/session-location.js +948 -0
- package/src/commands/session.js +72 -46
- package/src/data/changelog.json +26 -0
- package/src/gateways/ws/artifact-protocol.js +77 -13
- package/src/gateways/ws/session-protocol.js +391 -24
- package/src/gateways/ws/ws-agent-handler.js +191 -14
- package/src/gateways/ws/ws-server.js +14 -3
- package/src/gateways/ws/ws-session-gateway.js +101 -5
- package/src/harness/jsonl-session-store.js +1210 -0
- package/src/lib/agent-team/team-runner.js +43 -13
- package/src/lib/artifact-access-ledger.js +461 -0
- package/src/lib/artifact-cleanup-ledger.js +861 -0
- package/src/lib/artifact-deletion-ledger.js +677 -0
- package/src/lib/artifact-store.js +256 -51
- package/src/lib/background-agent-keeper-protocol.js +75 -4
- package/src/lib/background-agent-launch-barrier.js +74 -0
- package/src/lib/background-agent-supervisor.js +149 -5
- package/src/lib/background-turn-bootstrap-protocol.js +4 -0
- package/src/lib/command-lifecycle-report.js +8 -4
- package/src/lib/cowork-adapter.js +9 -5
- package/src/lib/cowork-task-runner.js +20 -0
- package/src/lib/cowork-workflow.js +178 -20
- package/src/lib/direct-model-usage.js +62 -22
- package/src/lib/dynamic-workflow-runtime.js +3184 -111
- package/src/lib/execution-location-result-apply.js +339 -0
- package/src/lib/execution-location-result-artifact.js +271 -0
- package/src/lib/execution-location-result-review.js +253 -0
- package/src/lib/execution-location-result-store.js +331 -0
- package/src/lib/execution-location-result.js +617 -0
- package/src/lib/execution-location-target.js +236 -1
- package/src/lib/managed-tool-checkpoint.js +47 -4
- package/src/lib/process-execution-broker/workspace-transaction.js +3 -0
- package/src/lib/session-budget-production-root.js +376 -0
- package/src/lib/session-budget-runtime.js +109 -18
- package/src/lib/session-budget-usage.js +63 -0
- package/src/lib/session-host-snapshot.js +19 -2
- package/src/lib/session-resource-budget.js +766 -105
- package/src/lib/sub-agent-context.js +69 -22
- package/src/lib/web-ui-server.js +12 -1
- package/src/lib/with-file-lock.js +175 -26
- package/src/repl/agent-repl.js +237 -16
- package/src/runtime/agent-core.js +123 -0
- package/src/runtime/headless-runner.js +135 -46
- package/src/runtime/headless-stream.js +133 -25
- package/src/runtime/policies/agent-policy.js +10 -0
- package/src/workers/background-agent-keeper.js +112 -19
- package/src/workers/background-agent-worker.js +383 -134
- package/src/workers/background-turn-bootstrap.js +13 -8
- package/src/assets/web-panel/assets/ChatBubbleRenderer-CY5m8ZHg.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-BLif4QSg.js +0 -1
- package/src/assets/web-panel/assets/Projects-BhtAVilc.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-DLjKsDVu.js +0 -1
- package/src/assets/web-panel/assets/devWarning-Bj5nUW2v.js +0 -1
- package/src/assets/web-panel/assets/index-CPcM-eqo.js +0 -1
- package/src/assets/web-panel/assets/index-xeSyVoRe.js +0 -1
|
@@ -120,6 +120,16 @@ import {
|
|
|
120
120
|
import executionBroker from "../lib/process-execution-broker/index.js";
|
|
121
121
|
import { extractPluginUsageAttribution } from "../lib/plugin-usage-attribution.js";
|
|
122
122
|
import { formatManagedCheckpointEvent } from "../lib/managed-checkpoint-render.js";
|
|
123
|
+
import {
|
|
124
|
+
openProductionSessionBudgetRoot,
|
|
125
|
+
sessionBudgetAdmissionError,
|
|
126
|
+
} from "../lib/session-budget-production-root.js";
|
|
127
|
+
import {
|
|
128
|
+
beginSessionBudgetUsage,
|
|
129
|
+
markSessionBudgetUsageUnknown,
|
|
130
|
+
recordSessionBudgetUsage,
|
|
131
|
+
rejectSessionBudgetUsageUnknown,
|
|
132
|
+
} from "../lib/session-budget-usage.js";
|
|
123
133
|
|
|
124
134
|
const goalBrokerRunner = executionBroker.spawnSync.bind(executionBroker);
|
|
125
135
|
|
|
@@ -466,11 +476,12 @@ async function withHeadlessSessionHostLease(options, deps, task) {
|
|
|
466
476
|
deps.acquireSessionHostLease ||
|
|
467
477
|
(!hasInjectedSessionStore ? acquireSessionHostLease : null);
|
|
468
478
|
let lease = null;
|
|
479
|
+
let budgetRoot = null;
|
|
469
480
|
try {
|
|
470
481
|
if (authoritySessionId && typeof acquireHostLease === "function") {
|
|
471
482
|
lease = acquireHostLease(authoritySessionId, { hostKind: "headless" });
|
|
472
483
|
}
|
|
473
|
-
|
|
484
|
+
let scopedOptions = lease?.signal
|
|
474
485
|
? {
|
|
475
486
|
...options,
|
|
476
487
|
signal: options.signal
|
|
@@ -478,12 +489,28 @@ async function withHeadlessSessionHostLease(options, deps, task) {
|
|
|
478
489
|
: lease.signal,
|
|
479
490
|
}
|
|
480
491
|
: options;
|
|
492
|
+
budgetRoot = openProductionSessionBudgetRoot(
|
|
493
|
+
authoritySessionId,
|
|
494
|
+
options.sessionBudgetRoot,
|
|
495
|
+
{
|
|
496
|
+
persist: resolution.persist,
|
|
497
|
+
signal: scopedOptions.signal || null,
|
|
498
|
+
table: options.sessionBudgetRoot?.table,
|
|
499
|
+
open: deps.openSessionBudget,
|
|
500
|
+
store: deps.sessionBudgetStore,
|
|
501
|
+
registry: deps.sessionBudgetRegistry,
|
|
502
|
+
},
|
|
503
|
+
);
|
|
504
|
+
if (budgetRoot.enabled) {
|
|
505
|
+
scopedOptions = { ...scopedOptions, ...budgetRoot.options };
|
|
506
|
+
}
|
|
481
507
|
return await task(scopedOptions, {
|
|
482
508
|
...deps,
|
|
483
509
|
[HEADLESS_SESSION_RESOLUTION]: resolution,
|
|
484
510
|
[HEADLESS_SESSION_HOST_LEASE]: lease,
|
|
485
511
|
});
|
|
486
512
|
} finally {
|
|
513
|
+
budgetRoot?.close?.();
|
|
487
514
|
lease?.release?.();
|
|
488
515
|
}
|
|
489
516
|
}
|
|
@@ -773,8 +800,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
773
800
|
const loaded = loadHooks({ cwd, settingsFile: options.settingsFile });
|
|
774
801
|
// Fold in installed plugins' hooks/hooks.json (Phase 3.3c) — plugins ADD
|
|
775
802
|
// to the user's settings hooks, never replace them.
|
|
776
|
-
const { mergePluginHooks } =
|
|
777
|
-
|
|
803
|
+
const { mergePluginHooks } = await import(
|
|
804
|
+
"../lib/plugin-runtime/hooks.js"
|
|
805
|
+
);
|
|
778
806
|
const effectiveHooks = mergePluginHooks(
|
|
779
807
|
attachAuthorityErrors(loaded.hooks, loaded.authorityErrors),
|
|
780
808
|
{ cwd },
|
|
@@ -815,8 +843,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
815
843
|
// the run, so no explicit restore is needed.
|
|
816
844
|
if (!hermeticExecution) {
|
|
817
845
|
try {
|
|
818
|
-
const { applyPluginBinPath } =
|
|
819
|
-
|
|
846
|
+
const { applyPluginBinPath } = await import(
|
|
847
|
+
"../lib/plugin-runtime/bin.js"
|
|
848
|
+
);
|
|
820
849
|
applyPluginBinPath({ cwd });
|
|
821
850
|
} catch {
|
|
822
851
|
/* best-effort — plugin bin PATH never blocks a headless run */
|
|
@@ -827,8 +856,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
827
856
|
// keys not already set; the process exits at the end so no restore is needed.
|
|
828
857
|
if (!hermeticExecution) {
|
|
829
858
|
try {
|
|
830
|
-
const { applyPluginSettingsEnv } =
|
|
831
|
-
|
|
859
|
+
const { applyPluginSettingsEnv } = await import(
|
|
860
|
+
"../lib/plugin-runtime/settings.js"
|
|
861
|
+
);
|
|
832
862
|
applyPluginSettingsEnv({ cwd });
|
|
833
863
|
} catch {
|
|
834
864
|
/* best-effort — plugin settings never block a headless run */
|
|
@@ -961,8 +991,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
961
991
|
if (isHeadlessConfigCommand(prompt)) {
|
|
962
992
|
const cm = await import("../lib/config-manager.js");
|
|
963
993
|
const { getConfigPath } = await import("../lib/paths.js");
|
|
964
|
-
const { runConfigDirective } =
|
|
965
|
-
|
|
994
|
+
const { runConfigDirective } = await import(
|
|
995
|
+
"../lib/headless-config-command.js"
|
|
996
|
+
);
|
|
966
997
|
const { text, isError } = runConfigDirective(prompt, {
|
|
967
998
|
configManager: cm,
|
|
968
999
|
getConfigPath,
|
|
@@ -1038,8 +1069,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
1038
1069
|
model = macro.model;
|
|
1039
1070
|
writeErr(` command: model → ${model}\n`);
|
|
1040
1071
|
try {
|
|
1041
|
-
const { maybeWarnDeprecatedModel } =
|
|
1042
|
-
|
|
1072
|
+
const { maybeWarnDeprecatedModel } = await import(
|
|
1073
|
+
"../lib/model-deprecation.js"
|
|
1074
|
+
);
|
|
1043
1075
|
maybeWarnDeprecatedModel({ model });
|
|
1044
1076
|
} catch {
|
|
1045
1077
|
// deprecation notice is best-effort
|
|
@@ -1076,8 +1108,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
1076
1108
|
|
|
1077
1109
|
// ── Permission + tool resolution ──────────────────────────────────────
|
|
1078
1110
|
if (managedSettings) {
|
|
1079
|
-
const { assertManagedPermissionMode } =
|
|
1080
|
-
|
|
1111
|
+
const { assertManagedPermissionMode } = await import(
|
|
1112
|
+
"../lib/settings-loader.cjs"
|
|
1113
|
+
);
|
|
1081
1114
|
assertManagedPermissionMode(options.permissionMode, managedSettings);
|
|
1082
1115
|
}
|
|
1083
1116
|
const perm = resolvePermissionMode(options.permissionMode);
|
|
@@ -1533,8 +1566,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
1533
1566
|
: null;
|
|
1534
1567
|
if (!hermeticExecution && !instructionExcludes) {
|
|
1535
1568
|
try {
|
|
1536
|
-
const { readStringArraySetting } =
|
|
1537
|
-
|
|
1569
|
+
const { readStringArraySetting } = await import(
|
|
1570
|
+
"../lib/settings-loader.cjs"
|
|
1571
|
+
);
|
|
1538
1572
|
const fromSettings = readStringArraySetting("instructionExcludes", {
|
|
1539
1573
|
cwd,
|
|
1540
1574
|
settingsFile: options.settingsFile,
|
|
@@ -1588,8 +1622,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
1588
1622
|
// settings.json UserPromptSubmit hooks. block → abort the run; context → inject.
|
|
1589
1623
|
if (settingsHooks) {
|
|
1590
1624
|
try {
|
|
1591
|
-
const { runUserPromptSubmitHooks } =
|
|
1592
|
-
|
|
1625
|
+
const { runUserPromptSubmitHooks } = await import(
|
|
1626
|
+
"../lib/settings-hook-events.js"
|
|
1627
|
+
);
|
|
1593
1628
|
const ups = runUserPromptSubmitHooks(settingsHooks, {
|
|
1594
1629
|
prompt: userContent,
|
|
1595
1630
|
cwd,
|
|
@@ -1619,8 +1654,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
1619
1654
|
let instructionsLoadedContext = null;
|
|
1620
1655
|
if (settingsHooks && _loadedInstructions) {
|
|
1621
1656
|
try {
|
|
1622
|
-
const { runInstructionsLoadedHooks } =
|
|
1623
|
-
|
|
1657
|
+
const { runInstructionsLoadedHooks } = await import(
|
|
1658
|
+
"../lib/settings-hook-events.js"
|
|
1659
|
+
);
|
|
1624
1660
|
instructionsLoadedContext = runInstructionsLoadedHooks(settingsHooks, {
|
|
1625
1661
|
files: _loadedInstructions.files,
|
|
1626
1662
|
cwd,
|
|
@@ -1635,8 +1671,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
1635
1671
|
let sessionStartContext = null;
|
|
1636
1672
|
if (settingsHooks) {
|
|
1637
1673
|
try {
|
|
1638
|
-
const { runSessionStartHooks } =
|
|
1639
|
-
|
|
1674
|
+
const { runSessionStartHooks } = await import(
|
|
1675
|
+
"../lib/settings-hook-events.js"
|
|
1676
|
+
);
|
|
1640
1677
|
sessionStartContext = runSessionStartHooks(settingsHooks, {
|
|
1641
1678
|
source: resumeId ? "resume" : "startup",
|
|
1642
1679
|
cwd,
|
|
@@ -1654,8 +1691,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
1654
1691
|
// back up" — e.g. re-run a workspace sanity check. Observe-only, best-effort.
|
|
1655
1692
|
if (settingsHooks && resumeId && history.length > 0) {
|
|
1656
1693
|
try {
|
|
1657
|
-
const { runObserveHooks } =
|
|
1658
|
-
|
|
1694
|
+
const { runObserveHooks } = await import(
|
|
1695
|
+
"../lib/settings-hook-events.js"
|
|
1696
|
+
);
|
|
1659
1697
|
runObserveHooks(
|
|
1660
1698
|
settingsHooks,
|
|
1661
1699
|
"SessionResume",
|
|
@@ -1886,8 +1924,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
1886
1924
|
// --add-dir → workspaceRootDirs = [cwd] and this is a no-op. Best-effort.
|
|
1887
1925
|
if (hostMcp?.mcpClient && additionalDirectories.length > 0) {
|
|
1888
1926
|
try {
|
|
1889
|
-
const { notifyMcpRootsChanged, workspaceRootDirs } =
|
|
1890
|
-
|
|
1927
|
+
const { notifyMcpRootsChanged, workspaceRootDirs } = await import(
|
|
1928
|
+
"../repl/add-dir.js"
|
|
1929
|
+
);
|
|
1891
1930
|
notifyMcpRootsChanged(
|
|
1892
1931
|
[hostMcp.mcpClient],
|
|
1893
1932
|
workspaceRootDirs(options.cwd || process.cwd(), additionalDirectories),
|
|
@@ -1995,8 +2034,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
1995
2034
|
error.code = "CC_REMOTE_APPROVAL_GATE_UNAVAILABLE";
|
|
1996
2035
|
throw error;
|
|
1997
2036
|
}
|
|
1998
|
-
const { startHeadlessRemoteApproval } =
|
|
1999
|
-
|
|
2037
|
+
const { startHeadlessRemoteApproval } = await import(
|
|
2038
|
+
"../lib/remote-approval-bridge.js"
|
|
2039
|
+
);
|
|
2000
2040
|
_remoteApproval = await (
|
|
2001
2041
|
deps.startHeadlessRemoteApproval || startHeadlessRemoteApproval
|
|
2002
2042
|
)({
|
|
@@ -2025,8 +2065,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
2025
2065
|
let _collectorEnabled = false;
|
|
2026
2066
|
if (!hermeticExecution) {
|
|
2027
2067
|
try {
|
|
2028
|
-
const { isOtlpCollectorEnabled } =
|
|
2029
|
-
|
|
2068
|
+
const { isOtlpCollectorEnabled } = await import(
|
|
2069
|
+
"../lib/observability/index.js"
|
|
2070
|
+
);
|
|
2030
2071
|
_collectorEnabled = isOtlpCollectorEnabled();
|
|
2031
2072
|
} catch {
|
|
2032
2073
|
_collectorEnabled = false;
|
|
@@ -2034,8 +2075,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
2034
2075
|
}
|
|
2035
2076
|
if (!hermeticExecution && (options.otlp || _collectorEnabled)) {
|
|
2036
2077
|
try {
|
|
2037
|
-
const { TelemetryRecorder } =
|
|
2038
|
-
|
|
2078
|
+
const { TelemetryRecorder } = await import(
|
|
2079
|
+
"../lib/telemetry/span-recorder.js"
|
|
2080
|
+
);
|
|
2039
2081
|
_otlpRecorder = new TelemetryRecorder({ serviceName: "cc-agent" });
|
|
2040
2082
|
} catch {
|
|
2041
2083
|
_otlpRecorder = null; // telemetry is best-effort, never blocks the run
|
|
@@ -2049,8 +2091,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
2049
2091
|
let _hookSupervisor = null;
|
|
2050
2092
|
if (settingsHooks) {
|
|
2051
2093
|
try {
|
|
2052
|
-
const { AsyncHookSupervisor } =
|
|
2053
|
-
|
|
2094
|
+
const { AsyncHookSupervisor } = await import(
|
|
2095
|
+
"../lib/async-hook-supervisor.js"
|
|
2096
|
+
);
|
|
2054
2097
|
_hookSupervisor = new AsyncHookSupervisor({
|
|
2055
2098
|
persistStats: true,
|
|
2056
2099
|
// Durably park failed-rewake signals keyed by session so a crash before
|
|
@@ -2161,6 +2204,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
2161
2204
|
additionalDirectories,
|
|
2162
2205
|
sandbox: options.sandbox || null,
|
|
2163
2206
|
sessionId,
|
|
2207
|
+
sessionBudget: options.sessionBudget || null,
|
|
2164
2208
|
// Content-free continuity metadata from the same verified sample used for
|
|
2165
2209
|
// replay history and MCP recovery authority.
|
|
2166
2210
|
sessionHostSnapshot: canonicalResume?.snapshot || null,
|
|
@@ -2373,8 +2417,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
2373
2417
|
if (options.goal !== undefined && options.goal !== false) {
|
|
2374
2418
|
try {
|
|
2375
2419
|
const explicitId = typeof options.goal === "string" ? options.goal : null;
|
|
2376
|
-
const { resolveActiveGoal, linkSession } =
|
|
2377
|
-
|
|
2420
|
+
const { resolveActiveGoal, linkSession } = await import(
|
|
2421
|
+
"../lib/goal-store.js"
|
|
2422
|
+
);
|
|
2378
2423
|
const goal = (deps.resolveActiveGoal || resolveActiveGoal)({
|
|
2379
2424
|
explicitId,
|
|
2380
2425
|
sessionId,
|
|
@@ -2502,8 +2547,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
2502
2547
|
let _asyncStopHandled = false;
|
|
2503
2548
|
const _settleAsyncStop = async () => {
|
|
2504
2549
|
if (!settingsHooks || !_hookSupervisor) return { rewakes: [], results: [] };
|
|
2505
|
-
const { dispatchAsyncHooks } =
|
|
2506
|
-
|
|
2550
|
+
const { dispatchAsyncHooks } = await import(
|
|
2551
|
+
"../lib/settings-hook-events.js"
|
|
2552
|
+
);
|
|
2507
2553
|
dispatchAsyncHooks(
|
|
2508
2554
|
settingsHooks,
|
|
2509
2555
|
"Stop",
|
|
@@ -2554,6 +2600,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
2554
2600
|
provider,
|
|
2555
2601
|
model,
|
|
2556
2602
|
source: "model",
|
|
2603
|
+
sessionBudget: options.sessionBudget || null,
|
|
2557
2604
|
call: () =>
|
|
2558
2605
|
chatWithTools([{ role: "user", content: judgePrompt }], {
|
|
2559
2606
|
model,
|
|
@@ -2935,6 +2982,11 @@ async function runAgentHeadlessInWorkspace(
|
|
|
2935
2982
|
),
|
|
2936
2983
|
);
|
|
2937
2984
|
}
|
|
2985
|
+
beginSessionBudgetUsage(
|
|
2986
|
+
options.sessionBudget,
|
|
2987
|
+
event,
|
|
2988
|
+
"headless provider call",
|
|
2989
|
+
);
|
|
2938
2990
|
break;
|
|
2939
2991
|
}
|
|
2940
2992
|
case "model-usage-unknown":
|
|
@@ -2948,6 +3000,10 @@ async function runAgentHeadlessInWorkspace(
|
|
|
2948
3000
|
),
|
|
2949
3001
|
);
|
|
2950
3002
|
}
|
|
3003
|
+
const budgetUsageUnknown = markSessionBudgetUsageUnknown(
|
|
3004
|
+
options.sessionBudget,
|
|
3005
|
+
event,
|
|
3006
|
+
);
|
|
2951
3007
|
if (event.type === "compaction-usage-unknown") {
|
|
2952
3008
|
endReason = "compaction-usage-unknown";
|
|
2953
3009
|
stopForCompactionUsageUnknown = true;
|
|
@@ -2960,6 +3016,14 @@ async function runAgentHeadlessInWorkspace(
|
|
|
2960
3016
|
usage_outcome: "unknown",
|
|
2961
3017
|
});
|
|
2962
3018
|
}
|
|
3019
|
+
if (budgetUsageUnknown) {
|
|
3020
|
+
rejectSessionBudgetUsageUnknown(
|
|
3021
|
+
event,
|
|
3022
|
+
event.type === "compaction-usage-unknown"
|
|
3023
|
+
? "headless semantic compaction"
|
|
3024
|
+
: "headless provider call",
|
|
3025
|
+
);
|
|
3026
|
+
}
|
|
2963
3027
|
break;
|
|
2964
3028
|
}
|
|
2965
3029
|
case "token-usage": {
|
|
@@ -2969,6 +3033,11 @@ async function runAgentHeadlessInWorkspace(
|
|
|
2969
3033
|
store.appendTokenUsage(sessionId, persistedUsage),
|
|
2970
3034
|
);
|
|
2971
3035
|
}
|
|
3036
|
+
recordSessionBudgetUsage(
|
|
3037
|
+
options.sessionBudget,
|
|
3038
|
+
event,
|
|
3039
|
+
"headless usage settlement",
|
|
3040
|
+
);
|
|
2972
3041
|
if (!event.attribution) {
|
|
2973
3042
|
usage.input_tokens += event.usage?.input_tokens || 0;
|
|
2974
3043
|
usage.output_tokens += event.usage?.output_tokens || 0;
|
|
@@ -3222,12 +3291,25 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3222
3291
|
} catch (err) {
|
|
3223
3292
|
const runtimeLedgerPersistenceFailed =
|
|
3224
3293
|
err?.runtimeLedgerPersistence === true;
|
|
3294
|
+
const sessionBudgetFailed =
|
|
3295
|
+
err?.code === "CC_SESSION_BUDGET_EXHAUSTED" ||
|
|
3296
|
+
err?.code === "CC_SESSION_BUDGET_USAGE_UNKNOWN" ||
|
|
3297
|
+
options.sessionBudget?.signal?.aborted === true;
|
|
3225
3298
|
const message = runtimeLedgerPersistenceFailed
|
|
3226
3299
|
? RUNTIME_LEDGER_PERSISTENCE_FAILURE_MESSAGE
|
|
3227
|
-
: err?.
|
|
3300
|
+
: err?.code === "CC_SESSION_BUDGET_USAGE_UNKNOWN"
|
|
3301
|
+
? err.message
|
|
3302
|
+
: sessionBudgetFailed
|
|
3303
|
+
? sessionBudgetAdmissionError(
|
|
3304
|
+
options.sessionBudget?.reason?.() || err?.budgetReason,
|
|
3305
|
+
"run",
|
|
3306
|
+
).message
|
|
3307
|
+
: err?.message || String(err);
|
|
3228
3308
|
const errorSubtype = runtimeLedgerPersistenceFailed
|
|
3229
3309
|
? "error_persistence"
|
|
3230
|
-
:
|
|
3310
|
+
: sessionBudgetFailed
|
|
3311
|
+
? "error_session_budget"
|
|
3312
|
+
: "error";
|
|
3231
3313
|
if (isStream) {
|
|
3232
3314
|
emitStream({
|
|
3233
3315
|
type: "result",
|
|
@@ -3258,7 +3340,10 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3258
3340
|
// Provider/transport failures get their own exit code (5) so CI can tell
|
|
3259
3341
|
// "the model call failed" from "the run itself errored" (1).
|
|
3260
3342
|
loopFailureOutcome = {
|
|
3261
|
-
exitCode:
|
|
3343
|
+
exitCode:
|
|
3344
|
+
runtimeLedgerPersistenceFailed || sessionBudgetFailed
|
|
3345
|
+
? 1
|
|
3346
|
+
: classifyLoopError(err),
|
|
3262
3347
|
result: message,
|
|
3263
3348
|
isError: true,
|
|
3264
3349
|
};
|
|
@@ -3298,8 +3383,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3298
3383
|
await cleanupDeadline.run("settings-hooks", async () => {
|
|
3299
3384
|
if (settingsHooks) {
|
|
3300
3385
|
try {
|
|
3301
|
-
const { runObserveHooks, dispatchAsyncHooks } =
|
|
3302
|
-
|
|
3386
|
+
const { runObserveHooks, dispatchAsyncHooks } = await import(
|
|
3387
|
+
"../lib/settings-hook-events.js"
|
|
3388
|
+
);
|
|
3303
3389
|
const stopPayload = {
|
|
3304
3390
|
reason: pipeState.closed ? "pipe_closed" : endReason,
|
|
3305
3391
|
cwd,
|
|
@@ -3497,6 +3583,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3497
3583
|
provider,
|
|
3498
3584
|
model,
|
|
3499
3585
|
source: "model",
|
|
3586
|
+
sessionBudget: options.sessionBudget || null,
|
|
3500
3587
|
call: () =>
|
|
3501
3588
|
chatWithTools([{ role: "user", content: assessPrompt }], {
|
|
3502
3589
|
model,
|
|
@@ -3561,8 +3648,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3561
3648
|
emitStream({ type: "denials_summary", count: denials.length, denials });
|
|
3562
3649
|
}
|
|
3563
3650
|
try {
|
|
3564
|
-
const { appendRecentDenials } =
|
|
3565
|
-
|
|
3651
|
+
const { appendRecentDenials } = await import(
|
|
3652
|
+
"../lib/permission-denial-store.js"
|
|
3653
|
+
);
|
|
3566
3654
|
appendRecentDenials(denials, {
|
|
3567
3655
|
sessionId,
|
|
3568
3656
|
permissionMode: options.permissionMode || "default",
|
|
@@ -3633,8 +3721,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3633
3721
|
}
|
|
3634
3722
|
if (_collectorEnabled) {
|
|
3635
3723
|
try {
|
|
3636
|
-
const { exportTelemetryRecorder } =
|
|
3637
|
-
|
|
3724
|
+
const { exportTelemetryRecorder } = await import(
|
|
3725
|
+
"../lib/observability/index.js"
|
|
3726
|
+
);
|
|
3638
3727
|
exportTelemetryRecorder(_otlpRecorder);
|
|
3639
3728
|
} catch {
|
|
3640
3729
|
// Telemetry is observational only and never changes the agent result.
|