chainlesschain 0.162.175 → 0.162.177
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 +10 -10
- package/src/assets/web-panel/assets/{AIOps-DherW0Rh.js → AIOps-DT-VPWuN.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CDGfqt2Y.js → ActionButton-DyOreOVN.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-BYhkzdgD.js → Analytics-DslNsKux.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-cEKk1cpb.js → AppLayout-BNJJAYME.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-_aXR3WWc.js → Artifacts-DoaAtEcY.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CYAf-gY7.js → Audit-DPG3WdJ9.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-D4Q20phR.js → BackgroundAgents-C_JO6R5G.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-Cq0Tyk58.js → Backup-Cv3BooyX.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CPj_CdAv.js → BaseInput-D2uQXWu-.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BQ-Qq0es.js → Chat-B4Vczyf3.js} +4 -4
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DE6reP99.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-rke6l3yg.js → Checkbox-qTgk4VeP.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DiacrIPq.js → Codegen-DlLWcIzj.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Cx3BY-Up.js → Col-DNO73qp7.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DfmWiQy8.js → Community-vRDNpc4j.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DdQnpxy5.js → Compact-CEWtIXni.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-lzliOH_r.js → Compliance-KgYC9Fxi.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CYx4Un5k.js → Cowork-zj5wvkpT.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-BGDcPFlo.js → Cron-BLDoCozU.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-0_X5g2ri.js → Crosschain-BYnff4VY.js} +1 -1
- package/src/assets/web-panel/assets/{DID-C0PEf3Eu.js → DID-C75VFsVm.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-DULQjQ58.js → Dashboard-C4Gutni2.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DGRHRbW6.js → Dropdown-B5dbO4Kx.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-ChX8XPwB.js → EmailListRenderer-BDipZtHJ.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-Dyq6IBNu.js → FamilyGuardDashboard-DmIzt8jj.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DH1NfAL2.js → Federation-D9QOS-uW.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BN1I_uNi.js → FormItemContext-B47HRwAm.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-Dq_2UYpe.js → GenericCardRenderer-3R4mXmgV.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BAy1yvI2.js → Git-DrNXZf1C.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-Db6Q2iSy.js → Governance-BGd7JR98.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-0ub6yHcr.js → Inference-D-2he1ed.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DtLetM36.js → KnowledgeGraph-C0sHIbK5.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-Bcoy7CUd.js → Logs-DiBQO-jL.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-BfEMFAXf.js → MarkdownRenderer-DL_5eV2D.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-tt2rzwRR.js → Marketplace-VR59OdrC.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BhOgX-MU.js → McpTools-DrPzwSd3.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-BJUxeWBL.js → Memory-CBgKALwQ.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BwUY2G9w.js → MobileBridge-pQ9Tn-Mn.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-BLRfHhqi.js → MobileProjects-mASB6jyj.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-B2WMboOm.js → Mtc-DTMgE7HC.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-8pNEXO63.js → MtcAudit-CwTnCtiL.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-C1wm5a_1.js → Multisig-ngm6WU8f.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-C1QpKF7g.js → NLProgramming-4YO4Qww9.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CiQUcxFu.js → Notes-DP1k45mF.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BblDPJ_x.js → NotificationSettings-r2H8yPKb.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-DRjYcPtb.js → OrderTableRenderer-CoM_Zw0J.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-Dp3VKB0X.js → Organization-DrO7jRWS.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Czx161m9.js → Overflow-Cnwu4i4t.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-ClFi6wOs.js → P2P-zi-cDwA_.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CRweW0lz.js → PdhVaultBrowser-DBEryDv7.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-BzcRoqTn.js → Permissions-lqXK2C3x.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-ChGTpNMd.js → PersonalDataHub-b63T3HJM.js} +2 -2
- package/src/assets/web-panel/assets/{Pipeline-BMOOpKWA.js → Pipeline-Kep5KAGW.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-D0AZHObH.js → Privacy-CHdvOAh1.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-yYFlZ6Ja.js → ProjectInit-BhKfdwe9.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-DJNVuMQs.js → ProjectSettings-Yavk9K8A.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-Br0rBWH1.js → Projects-CN8E_5Mq.js} +1 -1
- package/src/assets/web-panel/assets/Providers-Bfym6SQn.js +1 -0
- package/src/assets/web-panel/assets/{QrScannerModal-81NZOitV.js → QrScannerModal-CLSQcrlR.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-Dic2lCbJ.js → QuickAsk-VPa2WKQN.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-Dh9iwViE.js → Recommend-CGXR8jVU.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-Bq9VYEFy.js → RemoteSession-C_20YfMB.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-CxFZ-NbJ.js → Reputation-awZh68UV.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BVSLcaX2.js → Row-Ctb4oiYN.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BbC-5DOH.js → RssFeed-D3sdjvUV.js} +3 -3
- package/src/assets/web-panel/assets/{Search-BfjZ1GCr.js → Search-C-zfA4kT.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CVjhOV5r.js → Security-D9XlmHA3.js} +4 -4
- package/src/assets/web-panel/assets/{Services-D45u-Aqe.js → Services-C3UKnr41.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-WkGoK4he.js → Skeleton-BQxagZfF.js} +1 -1
- package/src/assets/web-panel/assets/Skills-q6eb6KPZ.js +1 -0
- package/src/assets/web-panel/assets/{Sla-Bf4QTF3E.js → Sla-DveENvek.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-DVpZdbMN.js → SpeechSettings-BFjXLNgF.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-DEEojoMS.js → SyncSettings-BpHgbaP9.js} +2 -2
- package/src/assets/web-panel/assets/Tasks-DvepRb8-.js +1 -0
- package/src/assets/web-panel/assets/{Templates-Bzl-9wY5.js → Templates-DEiaoyve.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-0khxUOB8.js → Tenant-ITg774nY.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-DWGYhAYU.js → Terminal-D3ZBcvnb.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-B0Y4LONc.js → TimelineRenderer-BsLU6JjU.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-DEE07SFh.js → Tokens-Cb5Pquc9.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-BM7xvA5z.js → Trigger-Dwfy-m9N.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-Dv3ijvvZ.js → Trust-CnlSRGG0.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-B1-enmMt.js → UkeySign-Y4TlvKVo.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-DYiIPByd.js → VideoEditing-BpKLtTTO.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-D-y374BQ.js → Wallet-LLBzIq8x.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-HBDjcUhi.js → WebAuthn-BeSRiusP.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-sKn4qTID.js → WorkflowEditor-BK_l1tXO.js} +1 -1
- package/src/assets/web-panel/assets/{chat-TVYhaBXj.js → chat-DYd-X7Wg.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DMADxY9v.js → colors-C9uip71j.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-OftcHpO_.js → compact-item-JBrfjUP6.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DW1zVUSN.js → createContext-D03fbuiq.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-B8LQ8leS.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-CaUathNp.js → hasIn-DLQOR6l-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cmdv6Dev.js → index-5YN7F5bO.js} +1 -1
- package/src/assets/web-panel/assets/{index-iDmgT2Dg.js → index-6GuLRpBQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-77kgkUgY.js → index-B0X76LjX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CM8W07sc.js → index-B46YcgsV.js} +1 -1
- package/src/assets/web-panel/assets/{index-C9JoaYSs.js → index-BNCdRmWf.js} +1 -1
- package/src/assets/web-panel/assets/{index-CpDtN0dl.js → index-BYv-LWdy.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZXYI5LU.js → index-Ba-Ps_AJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DWVZ3T0t.js → index-BcBZwlnG.js} +1 -1
- package/src/assets/web-panel/assets/{index--5UvwqH_.js → index-BdH9l8wl.js} +1 -1
- package/src/assets/web-panel/assets/{index-BBNg08cD.js → index-BfOs_bmg.js} +3 -3
- package/src/assets/web-panel/assets/index-Bh8BPtqR.js +1 -0
- package/src/assets/web-panel/assets/{index-s-EnkUCn.js → index-BnQgRjsm.js} +1 -1
- package/src/assets/web-panel/assets/{index-Lr0MO-GU.js → index-BpYKLrUT.js} +1 -1
- package/src/assets/web-panel/assets/{index-B-19mFhn.js → index-BuNFCZCx.js} +1 -1
- package/src/assets/web-panel/assets/{index-CeCIYYG7.js → index-ByHO3SqZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-hXq7QRA_.js → index-C2zmOsyD.js} +1 -1
- package/src/assets/web-panel/assets/{index-8YelceUU.js → index-CChQBM1d.js} +1 -1
- package/src/assets/web-panel/assets/{index-B52Ztt8Q.js → index-CChaISMb.js} +1 -1
- package/src/assets/web-panel/assets/{index-DKjqFpYa.js → index-CILVyK3b.js} +1 -1
- package/src/assets/web-panel/assets/{index-DAfT3EMd.js → index-CL0ixCxk.js} +1 -1
- package/src/assets/web-panel/assets/{index-sm1sGIxW.js → index-CS63r8h3.js} +1 -1
- package/src/assets/web-panel/assets/{index-DHi634g9.js → index-CVZWiUE_.js} +1 -1
- package/src/assets/web-panel/assets/{index-BEzLLVYd.js → index-Ce0Bf1YF.js} +1 -1
- package/src/assets/web-panel/assets/index-CeVrHLzZ.js +1 -0
- package/src/assets/web-panel/assets/{index-pSVCBsG4.js → index-Ck17i0OD.js} +1 -1
- package/src/assets/web-panel/assets/{index-GUKz4Pv9.js → index-Cpn19c9k.js} +1 -1
- package/src/assets/web-panel/assets/{index-CKNdnJRo.js → index-CqWk1FLG.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bg-7FpaL.js → index-CwoDpKzW.js} +1 -1
- package/src/assets/web-panel/assets/{index-DYwwUKDg.js → index-D-1SqEpQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZdT8nio.js → index-D4UY5Z60.js} +1 -1
- package/src/assets/web-panel/assets/{index-BvRw4Fna.js → index-D8KvuDz0.js} +1 -1
- package/src/assets/web-panel/assets/{index-kdMl_0zL.js → index-DNMAAUVk.js} +1 -1
- package/src/assets/web-panel/assets/{index-CK-p7Hji.js → index-DYLZY4uh.js} +1 -1
- package/src/assets/web-panel/assets/{index-DXcqvWBp.js → index-DaokIHt3.js} +1 -1
- package/src/assets/web-panel/assets/{index-BFVbDpqg.js → index-Q7mmL6w4.js} +1 -1
- package/src/assets/web-panel/assets/{index-BJ1PjRY3.js → index-SO6lgMg0.js} +1 -1
- package/src/assets/web-panel/assets/{index-BSp1Ofvx.js → index-iahNhZwm.js} +1 -1
- package/src/assets/web-panel/assets/{index-BupSWDcl.js → index-l08afIbV.js} +1 -1
- package/src/assets/web-panel/assets/{index-D63QVAiJ.js → index-rIxxfdTN.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DdcKTlQR.js → initDefaultProps-CG9z1c6w.js} +1 -1
- package/src/assets/web-panel/assets/{motion-CL-hTBQj.js → motion-B1Ky7Zff.js} +1 -1
- package/src/assets/web-panel/assets/{move-qYSAkxNG.js → move-DME8X2P1.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-ZwRSZtRP.js → mtc-parser-cuJYSWB7.js} +1 -1
- package/src/assets/web-panel/assets/{omit-Bld-8ftI.js → omit-UI_EE0uZ.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DGHs-a9Z.js → pickAttrs-BIoE_Z_V.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DRQPMyI5.js → placementArrow-B48-9HKN.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-C5MJG_Yo.js → responsiveObserve-D7x_GDgD.js} +1 -1
- package/src/assets/web-panel/assets/{slide-VZ-fpZCD.js → slide-DjzC5_7m.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-9ocfCyHk.js → statusUtils-C6BIymhh.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-B6QAwAN5.js → styleChecker-B4dGrdD9.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-Bq1twor3.js → useFlexGapSupport-Bken4aNE.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DKZq96tz.js → useFs-BMlqECqv.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-D0RmRVXf.js → usePersonalDataHub-DLdrfmMa.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-D6kEj_tt.js → vnode-CKJQmxa0.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-2yfasoQf.js → zoom-CaZunuau.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/auth/npm-auth.js +30 -5
- package/src/commands/agenda.js +83 -5
- package/src/commands/agent.js +42 -4
- package/src/commands/background-session.js +11 -4
- package/src/commands/batch.js +79 -27
- package/src/commands/changelog.js +15 -4
- package/src/commands/config.js +70 -5
- package/src/commands/context.js +36 -2
- package/src/commands/eval.js +21 -6
- package/src/commands/hook.js +2 -2
- package/src/commands/hub.js +19 -1
- package/src/commands/loop.js +9 -2
- package/src/commands/memory.js +21 -6
- package/src/commands/permissions.js +57 -1
- package/src/commands/plugin.js +2 -0
- package/src/commands/review.js +23 -11
- package/src/commands/routine.js +31 -8
- package/src/commands/session.js +11 -3
- package/src/commands/skill.js +2 -0
- package/src/commands/statusline.js +3 -3
- package/src/commands/team.js +20 -7
- package/src/commands/update.js +65 -10
- package/src/data/changelog.json +293 -51
- package/src/gateways/terminal/PtyManager.js +8 -1
- package/src/gateways/ws/message-dispatcher.js +3 -0
- package/src/gateways/ws/session-protocol.js +26 -0
- package/src/gateways/ws/ws-agent-handler.js +107 -69
- package/src/gateways/ws/ws-server.js +74 -2
- package/src/harness/background-task-manager.js +18 -6
- package/src/harness/background-task-worker.js +11 -18
- package/src/harness/jsonl-session-store.js +13 -6
- package/src/harness/mcp-client.js +195 -2
- package/src/harness/worktree-isolator.js +18 -21
- package/src/lib/__tests__/personal-data-hub-aichat-wizard.test.js +15 -0
- package/src/lib/agent-coordinator.js +4 -0
- package/src/lib/agent-core.js +5 -0
- package/src/lib/agent-ipc-bus.js +44 -5
- package/src/lib/agent-sandbox.js +16 -2
- package/src/lib/agent-schedule-store.js +55 -0
- package/src/lib/agent-team/team-worktree.js +28 -6
- package/src/lib/agent-tool-admission.js +104 -0
- package/src/lib/agent-worktree.js +20 -19
- package/src/lib/api-key-helper.js +10 -2
- package/src/lib/async-hook-supervisor.cjs +135 -15
- package/src/lib/async-hook-supervisor.js +47 -0
- package/src/lib/background-agent-supervisor.js +35 -12
- package/src/lib/background-task-manager.js +5 -1
- package/src/lib/changelog.js +76 -11
- package/src/lib/channels/channel-manager.js +6 -0
- package/src/lib/channels/telegram-channel.js +11 -1
- package/src/lib/channels/webhook-channel.js +15 -3
- package/src/lib/checkpoint-store.js +10 -2
- package/src/lib/chrome-connector.js +6 -2
- package/src/lib/claude-code-bridge.js +24 -8
- package/src/lib/cli-anything-bridge.js +82 -25
- package/src/lib/cloud/bundle.js +12 -2
- package/src/lib/code-review.js +32 -8
- package/src/lib/computer-use/control-backend.js +18 -3
- package/src/lib/context-breakdown.js +46 -0
- package/src/lib/context-source-ledger.js +43 -0
- package/src/lib/diff-review-follow-up.js +154 -0
- package/src/lib/doctor-checkup.js +18 -6
- package/src/lib/downloader.js +17 -3
- package/src/lib/ensure-utf8.js +11 -3
- package/src/lib/eval/tasks.js +25 -31
- package/src/lib/event-runtime-producer.js +58 -0
- package/src/lib/event-runtime-store.js +354 -0
- package/src/lib/event-runtime-worker.js +109 -0
- package/src/lib/execution-backend.js +72 -21
- package/src/lib/git-integration.js +19 -4
- package/src/lib/hook-manager.js +6 -15
- package/src/lib/hook-runner.cjs +88 -8
- package/src/lib/hook-runner.js +55 -0
- package/src/lib/hooks-v2-producers.js +15 -0
- package/src/lib/hooks-v2-runtime.js +70 -21
- package/src/lib/host-adb-bridge.js +129 -24
- package/src/lib/ide-context.js +128 -1
- package/src/lib/interaction-adapter.js +39 -0
- package/src/lib/json-schema-validate.js +190 -36
- package/src/lib/lan-pairing-preflight.js +13 -2
- package/src/lib/lsp/__tests__/benchmark.test.js +61 -0
- package/src/lib/lsp/__tests__/lsp-client.test.js +6 -1
- package/src/lib/lsp/__tests__/lsp-server-registry.test.js +18 -0
- package/src/lib/lsp/benchmark.js +20 -4
- package/src/lib/lsp/lsp-client.js +22 -3
- package/src/lib/lsp/lsp-manager.js +4 -0
- package/src/lib/lsp/lsp-server-registry.js +11 -2
- package/src/lib/mcp-oauth.js +8 -2
- package/src/lib/npm-invocation.js +29 -0
- package/src/lib/orchestrator.js +8 -2
- package/src/lib/packer/pack-update-applier.js +14 -2
- package/src/lib/packer/pkg-runner.js +13 -2
- package/src/lib/packer/precheck.js +33 -16
- package/src/lib/packer/smoke-runner.js +18 -5
- package/src/lib/packer/web-panel-builder.js +16 -2
- package/src/lib/paths.js +1 -1
- package/src/lib/permission-rules.cjs +5 -1
- package/src/lib/personal-data-hub-aichat-wizard.js +22 -6
- package/src/lib/personal-data-hub-wiring.js +27 -3
- package/src/lib/plan-mode.js +204 -11
- package/src/lib/plugin-monitor-supervisor.js +48 -6
- package/src/lib/plugin-runtime/bin.js +45 -0
- package/src/lib/plugin-runtime/hooks.js +14 -1
- package/src/lib/plugin-runtime/install.js +11 -3
- package/src/lib/plugin-runtime/lsp.js +3 -0
- package/src/lib/plugin-runtime/mcp.js +8 -1
- package/src/lib/plugin-runtime/monitors.js +4 -0
- package/src/lib/plugin-runtime/plugin-options.js +74 -7
- package/src/lib/plugin-runtime/signature.js +45 -0
- package/src/lib/pr-create.js +21 -8
- package/src/lib/pr-link-ledger.js +15 -3
- package/src/lib/process-execution-broker/credential-agent.js +23 -3
- package/src/lib/process-execution-broker/index.js +315 -38
- package/src/lib/process-execution-broker/patch-child-process.js +2 -3
- package/src/lib/process-manager.js +18 -3
- package/src/lib/publish-workspace.js +14 -6
- package/src/lib/repl-bang-memorize.js +10 -2
- package/src/lib/repl-goal.js +19 -2
- package/src/lib/secret-store.js +159 -0
- package/src/lib/service-manager.js +64 -29
- package/src/lib/settings-hook-events.cjs +74 -9
- package/src/lib/settings-hook-events.js +20 -0
- package/src/lib/settings-hooks.cjs +4 -0
- package/src/lib/side-effect-ledger.js +22 -0
- package/src/lib/skill-packs/generator.js +18 -9
- package/src/lib/skill-process-broker.js +71 -0
- package/src/lib/slash-commands.js +10 -2
- package/src/lib/status-line.cjs +28 -7
- package/src/lib/status-line.js +33 -0
- package/src/lib/sub-agent-context.js +5 -0
- package/src/lib/sub-agent-profiles.js +4 -0
- package/src/lib/turn-context.js +14 -8
- package/src/lib/unattended-action-policy.js +83 -0
- package/src/lib/update-notice.js +6 -2
- package/src/lib/with-file-lock.js +7 -0
- package/src/lib/ws-server.js +1 -0
- package/src/repl/agent-repl.js +60 -23
- package/src/repl/clipboard-copy.js +8 -2
- package/src/repl/pr-comments.js +30 -7
- package/src/runtime/agent-core.js +554 -118
- package/src/runtime/agent-runtime.js +1 -0
- package/src/runtime/coding-agent-contract-shared.cjs +52 -0
- package/src/runtime/coding-agent-policy.cjs +20 -0
- package/src/runtime/diagnostics.js +73 -8
- package/src/runtime/headless-runner.js +88 -10
- package/src/runtime/headless-stream.js +343 -21
- package/src/runtime/mcp-config.js +16 -1
- package/src/runtime/session-slash-commands.js +506 -0
- package/src/skills/video-editing/extractors/audio-extractor.js +13 -5
- package/src/skills/video-editing/extractors/video-extractor.js +13 -3
- package/src/skills/video-editing/media-process.js +20 -0
- package/src/skills/video-editing/render/audio-mix.js +13 -3
- package/src/skills/video-editing/render/ffmpeg-concat.js +7 -2
- package/src/skills/video-editing/render/ffmpeg-extract.js +7 -2
- package/src/workers/background-agent-worker.js +6 -2
- package/src/assets/web-panel/assets/ChatBubbleRenderer-Ci97vNTs.js +0 -1
- package/src/assets/web-panel/assets/Providers-zZRhNtSu.js +0 -1
- package/src/assets/web-panel/assets/Skills-D_jvQZcj.js +0 -1
- package/src/assets/web-panel/assets/Tasks-DFwxpLIk.js +0 -1
- package/src/assets/web-panel/assets/devWarning-CLOk6rdE.js +0 -1
- package/src/assets/web-panel/assets/index-CSgUfMTM.js +0 -1
- package/src/assets/web-panel/assets/index-DliSZvAP.js +0 -1
|
@@ -90,6 +90,58 @@ const CODING_AGENT_TOOL_CONTRACTS = Object.freeze([
|
|
|
90
90
|
tags: ["tool:write_file", "contract:coding-agent", "tier:mvp"],
|
|
91
91
|
},
|
|
92
92
|
},
|
|
93
|
+
{
|
|
94
|
+
name: "delete_file",
|
|
95
|
+
title: "Delete File",
|
|
96
|
+
kind: "filesystem",
|
|
97
|
+
tier: "mvp",
|
|
98
|
+
description:
|
|
99
|
+
"Delete one file. Directories are rejected. Read the file first; interactive IDE approval shows an explicit deletion diff before applying it.",
|
|
100
|
+
inputSchema: {
|
|
101
|
+
type: "object",
|
|
102
|
+
properties: {
|
|
103
|
+
path: { type: "string", description: "File path to delete" },
|
|
104
|
+
},
|
|
105
|
+
required: ["path"],
|
|
106
|
+
},
|
|
107
|
+
...TOOL_POLICY_METADATA.delete_file,
|
|
108
|
+
permissions: {
|
|
109
|
+
level: "elevated",
|
|
110
|
+
scopes: ["filesystem:write"],
|
|
111
|
+
},
|
|
112
|
+
telemetry: {
|
|
113
|
+
category: "filesystem",
|
|
114
|
+
tags: ["tool:delete_file", "contract:coding-agent", "tier:mvp"],
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: "move_file",
|
|
119
|
+
title: "Move File",
|
|
120
|
+
kind: "filesystem",
|
|
121
|
+
tier: "mvp",
|
|
122
|
+
description:
|
|
123
|
+
"Rename or move one file without overwriting an existing destination. Directories are rejected. Interactive IDE approval shows the explicit source and destination.",
|
|
124
|
+
inputSchema: {
|
|
125
|
+
type: "object",
|
|
126
|
+
properties: {
|
|
127
|
+
path: { type: "string", description: "Existing source file path" },
|
|
128
|
+
target_path: {
|
|
129
|
+
type: "string",
|
|
130
|
+
description: "New destination file path",
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
required: ["path", "target_path"],
|
|
134
|
+
},
|
|
135
|
+
...TOOL_POLICY_METADATA.move_file,
|
|
136
|
+
permissions: {
|
|
137
|
+
level: "elevated",
|
|
138
|
+
scopes: ["filesystem:write"],
|
|
139
|
+
},
|
|
140
|
+
telemetry: {
|
|
141
|
+
category: "filesystem",
|
|
142
|
+
tags: ["tool:move_file", "contract:coding-agent", "tier:mvp"],
|
|
143
|
+
},
|
|
144
|
+
},
|
|
93
145
|
{
|
|
94
146
|
name: "notebook_edit",
|
|
95
147
|
title: "Edit Notebook",
|
|
@@ -112,6 +112,26 @@ const TOOL_POLICY_METADATA = Object.freeze({
|
|
|
112
112
|
approvalFlow: "plan",
|
|
113
113
|
isReadOnly: false,
|
|
114
114
|
},
|
|
115
|
+
delete_file: {
|
|
116
|
+
riskLevel: RISK_LEVELS.MEDIUM,
|
|
117
|
+
category: TOOL_CATEGORIES.WRITE,
|
|
118
|
+
availableInPlanMode: false,
|
|
119
|
+
planModeBehavior: "blocked",
|
|
120
|
+
requiresPlanApproval: true,
|
|
121
|
+
requiresConfirmation: false,
|
|
122
|
+
approvalFlow: "plan",
|
|
123
|
+
isReadOnly: false,
|
|
124
|
+
},
|
|
125
|
+
move_file: {
|
|
126
|
+
riskLevel: RISK_LEVELS.MEDIUM,
|
|
127
|
+
category: TOOL_CATEGORIES.WRITE,
|
|
128
|
+
availableInPlanMode: false,
|
|
129
|
+
planModeBehavior: "blocked",
|
|
130
|
+
requiresPlanApproval: true,
|
|
131
|
+
requiresConfirmation: false,
|
|
132
|
+
approvalFlow: "plan",
|
|
133
|
+
isReadOnly: false,
|
|
134
|
+
},
|
|
115
135
|
notebook_edit: {
|
|
116
136
|
riskLevel: RISK_LEVELS.MEDIUM,
|
|
117
137
|
category: TOOL_CATEGORIES.WRITE,
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
* Refs: docs/implementation-plans/CLI_RUNTIME_CONVERGENCE_ADR.md
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import { execSync } from "node:child_process";
|
|
16
15
|
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
17
16
|
import { join as pathJoin } from "node:path";
|
|
18
17
|
import { createRequire } from "node:module";
|
|
@@ -30,6 +29,9 @@ import {
|
|
|
30
29
|
import { loadConfig } from "../lib/config-manager.js";
|
|
31
30
|
import { isAppRunning, getAppPid } from "../lib/process-manager.js";
|
|
32
31
|
import { readDiskVersion, versionDiagnosis } from "../lib/version-skew.js";
|
|
32
|
+
import { EventRuntimeStore } from "../lib/event-runtime-store.js";
|
|
33
|
+
import { executionBroker } from "../lib/process-execution-broker/index.js";
|
|
34
|
+
import { resolveNpmInvocation } from "../lib/npm-invocation.js";
|
|
33
35
|
|
|
34
36
|
/** Best-effort read of the npm `latest` cached by the startup update notice. */
|
|
35
37
|
function readCachedLatest() {
|
|
@@ -67,9 +69,31 @@ function readdirSafe(dir) {
|
|
|
67
69
|
}
|
|
68
70
|
}
|
|
69
71
|
|
|
70
|
-
function
|
|
72
|
+
export function diagnosticProcessInvocations(
|
|
73
|
+
platform = process.platform,
|
|
74
|
+
execPath = process.execPath,
|
|
75
|
+
) {
|
|
76
|
+
return {
|
|
77
|
+
npm: resolveNpmInvocation({ platform, execPath }),
|
|
78
|
+
git: { command: "git", prefixArgs: [] },
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export const _diagnosticDeps = {
|
|
83
|
+
execFileSync: (...args) => executionBroker.execFileSync(...args),
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export function runDiagnosticProbe(file, args = [], deps = _diagnosticDeps) {
|
|
71
87
|
try {
|
|
72
|
-
return
|
|
88
|
+
return String(
|
|
89
|
+
deps.execFileSync(file, args, {
|
|
90
|
+
encoding: "utf-8",
|
|
91
|
+
origin: "runtime:diagnostics",
|
|
92
|
+
policy: "allow",
|
|
93
|
+
scope: "diagnostics",
|
|
94
|
+
shell: false,
|
|
95
|
+
}),
|
|
96
|
+
).trim();
|
|
73
97
|
} catch {
|
|
74
98
|
return null;
|
|
75
99
|
}
|
|
@@ -126,6 +150,7 @@ export function checkPdhPackageIntegrity(deps = {}) {
|
|
|
126
150
|
*/
|
|
127
151
|
export async function collectDoctorReport() {
|
|
128
152
|
const checks = [];
|
|
153
|
+
const invocations = diagnosticProcessInvocations();
|
|
129
154
|
|
|
130
155
|
// Node.js
|
|
131
156
|
const nodeVersion = process.versions.node;
|
|
@@ -139,7 +164,10 @@ export async function collectDoctorReport() {
|
|
|
139
164
|
});
|
|
140
165
|
|
|
141
166
|
// npm
|
|
142
|
-
const npmVersion =
|
|
167
|
+
const npmVersion = runDiagnosticProbe(invocations.npm.command, [
|
|
168
|
+
...invocations.npm.prefixArgs,
|
|
169
|
+
"--version",
|
|
170
|
+
]);
|
|
143
171
|
checks.push({
|
|
144
172
|
id: "npm",
|
|
145
173
|
name: npmVersion ? `npm ${npmVersion}` : "npm",
|
|
@@ -168,7 +196,7 @@ export async function collectDoctorReport() {
|
|
|
168
196
|
});
|
|
169
197
|
|
|
170
198
|
// Git
|
|
171
|
-
const gitVersion =
|
|
199
|
+
const gitVersion = runDiagnosticProbe(invocations.git.command, ["--version"]);
|
|
172
200
|
checks.push({
|
|
173
201
|
id: "git",
|
|
174
202
|
name: gitVersion || "Git",
|
|
@@ -316,7 +344,13 @@ export function parseGitWorktrees(porcelain) {
|
|
|
316
344
|
|
|
317
345
|
/** Best-effort live git worktree list for the current repo. */
|
|
318
346
|
export function collectWorktrees() {
|
|
319
|
-
return parseGitWorktrees(
|
|
347
|
+
return parseGitWorktrees(
|
|
348
|
+
runDiagnosticProbe(diagnosticProcessInvocations().git.command, [
|
|
349
|
+
"worktree",
|
|
350
|
+
"list",
|
|
351
|
+
"--porcelain",
|
|
352
|
+
]),
|
|
353
|
+
);
|
|
320
354
|
}
|
|
321
355
|
|
|
322
356
|
/**
|
|
@@ -364,10 +398,37 @@ export function buildDoctorDiagnosticInput(report, signals = {}) {
|
|
|
364
398
|
* services: Array<{ name, state }> | null,
|
|
365
399
|
* note: string | null
|
|
366
400
|
* },
|
|
367
|
-
* ports: Array<{ name, port, open }
|
|
401
|
+
* ports: Array<{ name, port, open }>,
|
|
402
|
+
* eventRuntime: { enabled, health, error }
|
|
368
403
|
* }
|
|
369
404
|
*/
|
|
370
|
-
export
|
|
405
|
+
export function collectEventRuntimeStatus({
|
|
406
|
+
env = process.env,
|
|
407
|
+
store = null,
|
|
408
|
+
} = {}) {
|
|
409
|
+
const enabled = env?.CC_EVENT_RUNTIME_DURABLE === "1";
|
|
410
|
+
if (!enabled && !store) {
|
|
411
|
+
return { enabled: false, health: null, error: null };
|
|
412
|
+
}
|
|
413
|
+
try {
|
|
414
|
+
return {
|
|
415
|
+
enabled,
|
|
416
|
+
health: (store || new EventRuntimeStore()).getHealthSnapshot(),
|
|
417
|
+
error: null,
|
|
418
|
+
};
|
|
419
|
+
} catch (error) {
|
|
420
|
+
return {
|
|
421
|
+
enabled,
|
|
422
|
+
health: null,
|
|
423
|
+
error: {
|
|
424
|
+
code: error?.code || "CC_EVENT_RUNTIME_STATUS_FAILED",
|
|
425
|
+
message: String(error?.message || error),
|
|
426
|
+
},
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
export async function collectStatusReport(options = {}) {
|
|
371
432
|
let config = {};
|
|
372
433
|
try {
|
|
373
434
|
config = loadConfig();
|
|
@@ -443,5 +504,9 @@ export async function collectStatusReport() {
|
|
|
443
504
|
setup,
|
|
444
505
|
docker,
|
|
445
506
|
ports,
|
|
507
|
+
eventRuntime: collectEventRuntimeStatus({
|
|
508
|
+
env: options.eventRuntimeEnv || process.env,
|
|
509
|
+
store: options.eventRuntimeStore || null,
|
|
510
|
+
}),
|
|
446
511
|
};
|
|
447
512
|
}
|
|
@@ -56,6 +56,7 @@ import {
|
|
|
56
56
|
reconcileSideEffects,
|
|
57
57
|
classifyToolSideEffect,
|
|
58
58
|
} from "../lib/side-effect-ledger.js";
|
|
59
|
+
import { DiffReviewFollowUpTracker } from "../lib/diff-review-follow-up.js";
|
|
59
60
|
import { SIDE_EFFECT_LEDGER_EVENT } from "../lib/side-effect-ledger-store.js";
|
|
60
61
|
import { TurnBindingLog, createTurnBindingFeed } from "../lib/turn-binding.js";
|
|
61
62
|
import { TURN_BINDING_EVENT } from "../lib/turn-binding-store.js";
|
|
@@ -80,11 +81,29 @@ import { isolationLevel } from "../lib/agent-sandbox.js";
|
|
|
80
81
|
import { createBackgroundPhaseReporter } from "../lib/background-phase-reporter.js";
|
|
81
82
|
import { withQuietStdout } from "./quiet-stdout.js";
|
|
82
83
|
import { CostBudget } from "../lib/cost-budget.js";
|
|
84
|
+
import { estimateTokens } from "../harness/prompt-compressor.js";
|
|
83
85
|
import {
|
|
84
86
|
classifyDenial,
|
|
85
87
|
recordDenial,
|
|
86
88
|
formatDenials,
|
|
87
89
|
} from "../lib/repl-denials.js";
|
|
90
|
+
import executionBroker from "../lib/process-execution-broker/index.js";
|
|
91
|
+
|
|
92
|
+
const goalBrokerRunner = executionBroker.spawnSync.bind(executionBroker);
|
|
93
|
+
|
|
94
|
+
export const _goalProcessDeps = {
|
|
95
|
+
run: goalBrokerRunner,
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
function runHeadlessGoalCommand(command, options = {}) {
|
|
99
|
+
return _goalProcessDeps.run(command, [], {
|
|
100
|
+
...options,
|
|
101
|
+
timeout: options.timeout ?? 30000,
|
|
102
|
+
origin: "headless-goal:exit-zero",
|
|
103
|
+
policy: "allow",
|
|
104
|
+
scope: "headless-goal",
|
|
105
|
+
});
|
|
106
|
+
}
|
|
88
107
|
|
|
89
108
|
/** Tools that cannot mutate the filesystem or run commands. */
|
|
90
109
|
export const READ_ONLY_TOOLS = Object.freeze([
|
|
@@ -859,6 +878,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
859
878
|
}
|
|
860
879
|
}
|
|
861
880
|
}
|
|
881
|
+
const diffReviewFollowUps = new DiffReviewFollowUpTracker(sideEffectLedger);
|
|
862
882
|
|
|
863
883
|
// ── Wire the persistent ApprovalGate with our non-interactive confirmer
|
|
864
884
|
// and force the session-policy tier dictated by --permission-mode. ──────
|
|
@@ -947,6 +967,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
947
967
|
// (undefined) leaves both paths byte-identical.
|
|
948
968
|
const _leanNoProjectMemory = options.projectMemory === false;
|
|
949
969
|
let _loadedInstructions = null;
|
|
970
|
+
let _loadedPersonaSkills = [];
|
|
950
971
|
const systemContent = composeSystemPrompt(
|
|
951
972
|
buildSystemPrompt(cwd, {
|
|
952
973
|
additionalDirectories,
|
|
@@ -961,6 +982,9 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
961
982
|
onInstructionsLoaded: (loaded) => {
|
|
962
983
|
_loadedInstructions = loaded;
|
|
963
984
|
},
|
|
985
|
+
onSkillsLoaded: (skills) => {
|
|
986
|
+
_loadedPersonaSkills = Array.isArray(skills) ? skills : [];
|
|
987
|
+
},
|
|
964
988
|
},
|
|
965
989
|
);
|
|
966
990
|
|
|
@@ -968,7 +992,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
968
992
|
if (settingsHooks) {
|
|
969
993
|
try {
|
|
970
994
|
const { runUserPromptSubmitHooks } =
|
|
971
|
-
await import("../lib/settings-hook-events.
|
|
995
|
+
await import("../lib/settings-hook-events.js");
|
|
972
996
|
const ups = runUserPromptSubmitHooks(settingsHooks, {
|
|
973
997
|
prompt: userContent,
|
|
974
998
|
cwd,
|
|
@@ -999,7 +1023,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
999
1023
|
if (settingsHooks && _loadedInstructions) {
|
|
1000
1024
|
try {
|
|
1001
1025
|
const { runInstructionsLoadedHooks } =
|
|
1002
|
-
await import("../lib/settings-hook-events.
|
|
1026
|
+
await import("../lib/settings-hook-events.js");
|
|
1003
1027
|
instructionsLoadedContext = runInstructionsLoadedHooks(settingsHooks, {
|
|
1004
1028
|
files: _loadedInstructions.files,
|
|
1005
1029
|
cwd,
|
|
@@ -1015,7 +1039,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
1015
1039
|
if (settingsHooks) {
|
|
1016
1040
|
try {
|
|
1017
1041
|
const { runSessionStartHooks } =
|
|
1018
|
-
await import("../lib/settings-hook-events.
|
|
1042
|
+
await import("../lib/settings-hook-events.js");
|
|
1019
1043
|
sessionStartContext = runSessionStartHooks(settingsHooks, {
|
|
1020
1044
|
source: resumeId ? "resume" : "startup",
|
|
1021
1045
|
cwd,
|
|
@@ -1034,7 +1058,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
1034
1058
|
if (settingsHooks && resumeId && history.length > 0) {
|
|
1035
1059
|
try {
|
|
1036
1060
|
const { runObserveHooks } =
|
|
1037
|
-
await import("../lib/settings-hook-events.
|
|
1061
|
+
await import("../lib/settings-hook-events.js");
|
|
1038
1062
|
runObserveHooks(
|
|
1039
1063
|
settingsHooks,
|
|
1040
1064
|
"SessionResume",
|
|
@@ -1306,7 +1330,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
1306
1330
|
if (settingsHooks) {
|
|
1307
1331
|
try {
|
|
1308
1332
|
const { AsyncHookSupervisor } =
|
|
1309
|
-
await import("../lib/async-hook-supervisor.
|
|
1333
|
+
await import("../lib/async-hook-supervisor.js");
|
|
1310
1334
|
_hookSupervisor = new AsyncHookSupervisor({
|
|
1311
1335
|
persistStats: true,
|
|
1312
1336
|
// Durably park failed-rewake signals keyed by session so a crash before
|
|
@@ -1340,6 +1364,34 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
1340
1364
|
});
|
|
1341
1365
|
}
|
|
1342
1366
|
|
|
1367
|
+
// Persist the admitted runtime schema surface so `cc context --sources` can
|
|
1368
|
+
// attribute MCP cost to the actual server/tool definitions used by this run,
|
|
1369
|
+
// rather than guessing from the current environment on a later invocation.
|
|
1370
|
+
if (
|
|
1371
|
+
persist &&
|
|
1372
|
+
(mcp?.extraToolDefinitions?.length || _loadedPersonaSkills.length)
|
|
1373
|
+
) {
|
|
1374
|
+
try {
|
|
1375
|
+
store.appendEvent(sessionId, "context_sources", {
|
|
1376
|
+
mcp: (mcp?.extraToolDefinitions || []).map((definition) => ({
|
|
1377
|
+
function: {
|
|
1378
|
+
name: definition?.function?.name || null,
|
|
1379
|
+
description: definition?.function?.description || "",
|
|
1380
|
+
parameters: definition?.function?.parameters || {},
|
|
1381
|
+
},
|
|
1382
|
+
})),
|
|
1383
|
+
skills: _loadedPersonaSkills.map((skill) => ({
|
|
1384
|
+
id: skill?.id || skill?.displayName || "skill",
|
|
1385
|
+
displayName: skill?.displayName || skill?.id || "skill",
|
|
1386
|
+
source: skill?.source || "skill",
|
|
1387
|
+
body: typeof skill?.body === "string" ? skill.body : "",
|
|
1388
|
+
})),
|
|
1389
|
+
});
|
|
1390
|
+
} catch {
|
|
1391
|
+
// Source attribution is observability-only; never fail the agent run.
|
|
1392
|
+
}
|
|
1393
|
+
}
|
|
1394
|
+
|
|
1343
1395
|
const loopOptions = {
|
|
1344
1396
|
model,
|
|
1345
1397
|
provider,
|
|
@@ -1382,6 +1434,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
1382
1434
|
enabledToolNames,
|
|
1383
1435
|
disabledTools,
|
|
1384
1436
|
iterationBudget: budget,
|
|
1437
|
+
toolAdmission: options.toolAdmission || null,
|
|
1385
1438
|
// `ask_user_question` in a BACKGROUND turn child (P0 state-machine
|
|
1386
1439
|
// producer for `needs_input`): there is no live channel to a human
|
|
1387
1440
|
// mid-turn, but the question IS the structured needs-input signal. Park
|
|
@@ -1567,7 +1620,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
1567
1620
|
const _settleAsyncStop = async () => {
|
|
1568
1621
|
if (!settingsHooks || !_hookSupervisor) return { rewakes: [], results: [] };
|
|
1569
1622
|
const { dispatchAsyncHooks } =
|
|
1570
|
-
await import("../lib/settings-hook-events.
|
|
1623
|
+
await import("../lib/settings-hook-events.js");
|
|
1571
1624
|
dispatchAsyncHooks(
|
|
1572
1625
|
settingsHooks,
|
|
1573
1626
|
"Stop",
|
|
@@ -1747,7 +1800,6 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
1747
1800
|
process.once("SIGTERM", _onHardSignal);
|
|
1748
1801
|
|
|
1749
1802
|
try {
|
|
1750
|
-
// eslint-disable-next-line no-constant-condition
|
|
1751
1803
|
while (true) {
|
|
1752
1804
|
// P1 turn→checkpoint binding: one drain of the loop = one turn. Anchor
|
|
1753
1805
|
// the conversation offset before the model sees the new user turn. A
|
|
@@ -1811,6 +1863,13 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
1811
1863
|
// P0-2: settle the in-flight side-effect (commit on success, fail on
|
|
1812
1864
|
// a clean error) and persist the updated ledger snapshot.
|
|
1813
1865
|
if (persist && currentSideEffectOpId) {
|
|
1866
|
+
if (event.result?._diffReviewAudit) {
|
|
1867
|
+
diffReviewFollowUps.observe(
|
|
1868
|
+
sideEffectLedger,
|
|
1869
|
+
currentSideEffectOpId,
|
|
1870
|
+
event.result._diffReviewAudit,
|
|
1871
|
+
);
|
|
1872
|
+
}
|
|
1814
1873
|
if (err)
|
|
1815
1874
|
sideEffectLedger.fail(
|
|
1816
1875
|
currentSideEffectOpId,
|
|
@@ -1917,10 +1976,30 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
1917
1976
|
}
|
|
1918
1977
|
case "response-complete": {
|
|
1919
1978
|
finalText = event.content || "";
|
|
1979
|
+
if (
|
|
1980
|
+
persist &&
|
|
1981
|
+
diffReviewFollowUps.complete(sideEffectLedger, {
|
|
1982
|
+
status: "completed-without-reproposal",
|
|
1983
|
+
}).length > 0
|
|
1984
|
+
) {
|
|
1985
|
+
persistSideEffectLedger();
|
|
1986
|
+
}
|
|
1920
1987
|
break;
|
|
1921
1988
|
}
|
|
1922
1989
|
case "run-ended": {
|
|
1923
1990
|
if (event.reason) endReason = event.reason;
|
|
1991
|
+
if (
|
|
1992
|
+
persist &&
|
|
1993
|
+
diffReviewFollowUps.complete(sideEffectLedger, {
|
|
1994
|
+
status:
|
|
1995
|
+
event.reason === "complete"
|
|
1996
|
+
? "completed-without-reproposal"
|
|
1997
|
+
: "interrupted",
|
|
1998
|
+
reason: event.reason || endReason,
|
|
1999
|
+
}).length > 0
|
|
2000
|
+
) {
|
|
2001
|
+
persistSideEffectLedger();
|
|
2002
|
+
}
|
|
1924
2003
|
break;
|
|
1925
2004
|
}
|
|
1926
2005
|
default:
|
|
@@ -2022,8 +2101,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
2022
2101
|
try {
|
|
2023
2102
|
if (_goalHelpers.isDeterministicCondition(cond)) {
|
|
2024
2103
|
const gc = deps.goalCheck || {};
|
|
2025
|
-
const spawnSync =
|
|
2026
|
-
gc.spawnSync || (await import("node:child_process")).spawnSync;
|
|
2104
|
+
const spawnSync = gc.spawnSync || runHeadlessGoalCommand;
|
|
2027
2105
|
const existsSync =
|
|
2028
2106
|
gc.existsSync || (await import("node:fs")).existsSync;
|
|
2029
2107
|
evaluation = _goalHelpers.runDeterministicCheck(cond, {
|
|
@@ -2158,7 +2236,7 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
2158
2236
|
if (settingsHooks) {
|
|
2159
2237
|
try {
|
|
2160
2238
|
const { runObserveHooks, dispatchAsyncHooks } =
|
|
2161
|
-
await import("../lib/settings-hook-events.
|
|
2239
|
+
await import("../lib/settings-hook-events.js");
|
|
2162
2240
|
const stopPayload = { reason: endReason, cwd, session_id: sessionId };
|
|
2163
2241
|
runObserveHooks(settingsHooks, "Stop", stopPayload, { cwd });
|
|
2164
2242
|
// Skip the async Stop dispatch/settle here if the auto-rewake re-drive
|