chainlesschain 0.162.176 → 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 +1 -1
- package/src/assets/web-panel/assets/{AIOps-BDLu5Elz.js → AIOps-DT-VPWuN.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DH5us-CK.js → ActionButton-DyOreOVN.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-BZ0u8IFG.js → Analytics-DslNsKux.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-Duu8xR14.js → AppLayout-BNJJAYME.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-Br2YBbh_.js → Artifacts-DoaAtEcY.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-C3C6a482.js → Audit-DPG3WdJ9.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-CzHvebcj.js → BackgroundAgents-C_JO6R5G.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DZNHYDFd.js → Backup-Cv3BooyX.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-VRiC4fIx.js → BaseInput-D2uQXWu-.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-Cm08WWAD.js → Chat-B4Vczyf3.js} +4 -4
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DE6reP99.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-DtByk7d7.js → Checkbox-qTgk4VeP.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CphXXOfD.js → Codegen-DlLWcIzj.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Hz86TnLR.js → Col-DNO73qp7.js} +1 -1
- package/src/assets/web-panel/assets/{Community-HP03ltpD.js → Community-vRDNpc4j.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-B_N1mqQz.js → Compact-CEWtIXni.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CVztRpi8.js → Compliance-KgYC9Fxi.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-wUVOyZih.js → Cowork-zj5wvkpT.js} +4 -4
- package/src/assets/web-panel/assets/{Cron-DW5TLJKw.js → Cron-BLDoCozU.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CrAFGhWH.js → Crosschain-BYnff4VY.js} +1 -1
- package/src/assets/web-panel/assets/{DID-pA-oD8ke.js → DID-C75VFsVm.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-CXrd5gAw.js → Dashboard-C4Gutni2.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-EweJcsek.js → Dropdown-B5dbO4Kx.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-C9xVLPG4.js → EmailListRenderer-BDipZtHJ.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-CDcEEqlu.js → FamilyGuardDashboard-DmIzt8jj.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DtZda9A_.js → Federation-D9QOS-uW.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CiYdcVz3.js → FormItemContext-B47HRwAm.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-DA13uwA0.js → GenericCardRenderer-3R4mXmgV.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DzRhZD1O.js → Git-DrNXZf1C.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-D5RMgOSb.js → Governance-BGd7JR98.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BgrPfSNk.js → Inference-D-2he1ed.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DzjnD571.js → KnowledgeGraph-C0sHIbK5.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-BhWzVDtN.js → Logs-DiBQO-jL.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-BDape9cx.js → MarkdownRenderer-DL_5eV2D.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-DJtL5GV7.js → Marketplace-VR59OdrC.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-CZcQygI7.js → McpTools-DrPzwSd3.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-DUWSDUUu.js → Memory-CBgKALwQ.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BTwq2WKY.js → MobileBridge-pQ9Tn-Mn.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-mASB6jyj.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-BiGugEQm.js → Mtc-DTMgE7HC.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-DY7a6gUe.js → MtcAudit-CwTnCtiL.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-BQbDu_w7.js → Multisig-ngm6WU8f.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-CM2wXTLv.js → NLProgramming-4YO4Qww9.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-DI6gGs1v.js → Notes-DP1k45mF.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-BsZOLWAB.js → NotificationSettings-r2H8yPKb.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-C48mu09U.js → OrderTableRenderer-CoM_Zw0J.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-Cds0_tXr.js → Organization-DrO7jRWS.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-WunYMD87.js → Overflow-Cnwu4i4t.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-Bo6j4DDv.js → P2P-zi-cDwA_.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-Bh2XPD5f.js → PdhVaultBrowser-DBEryDv7.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-EMvMMC8N.js → Permissions-lqXK2C3x.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-AX3ypUDV.js → PersonalDataHub-b63T3HJM.js} +2 -2
- package/src/assets/web-panel/assets/{Pipeline-BOx8HOgL.js → Pipeline-Kep5KAGW.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-tBeTVQVM.js → Privacy-CHdvOAh1.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CVYg1W4M.js → ProjectInit-BhKfdwe9.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-Dvt5I7y1.js → ProjectSettings-Yavk9K8A.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-Cc7FC9-e.js → Projects-CN8E_5Mq.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-Ct8xqY-E.js → Providers-Bfym6SQn.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-Cni8Ooja.js → QrScannerModal-CLSQcrlR.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-BJVLKdxr.js → QuickAsk-VPa2WKQN.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-DPG8Rbbm.js → Recommend-CGXR8jVU.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-DsdR7dCt.js → RemoteSession-C_20YfMB.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-Csg1YM-b.js → Reputation-awZh68UV.js} +1 -1
- package/src/assets/web-panel/assets/{Row-D9DoFoEf.js → Row-Ctb4oiYN.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BsvKrXMS.js → RssFeed-D3sdjvUV.js} +2 -2
- package/src/assets/web-panel/assets/{Search-DFUStfgQ.js → Search-C-zfA4kT.js} +1 -1
- package/src/assets/web-panel/assets/{Security-ILg1zxdK.js → Security-D9XlmHA3.js} +4 -4
- package/src/assets/web-panel/assets/{Services-Dd41PCaY.js → Services-C3UKnr41.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-Bzo1cN80.js → Skeleton-BQxagZfF.js} +1 -1
- package/src/assets/web-panel/assets/Skills-q6eb6KPZ.js +1 -0
- package/src/assets/web-panel/assets/{Sla-jl7UTiRY.js → Sla-DveENvek.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-BePa-RF6.js → SpeechSettings-BFjXLNgF.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-DiqqDKGZ.js → SyncSettings-BpHgbaP9.js} +2 -2
- package/src/assets/web-panel/assets/Tasks-DvepRb8-.js +1 -0
- package/src/assets/web-panel/assets/{Templates-JiDeI06L.js → Templates-DEiaoyve.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-hhgI6zwS.js → Tenant-ITg774nY.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-D3ZBcvnb.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-B8uB5Llk.js → TimelineRenderer-BsLU6JjU.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-C3b_6r2z.js → Tokens-Cb5Pquc9.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-tIP7HKVe.js → Trigger-Dwfy-m9N.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-vjoc11vJ.js → Trust-CnlSRGG0.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-DUPBnGuH.js → UkeySign-Y4TlvKVo.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CBvhUY5T.js → VideoEditing-BpKLtTTO.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-DUaQ0uA5.js → Wallet-LLBzIq8x.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DllSivjE.js → WebAuthn-BeSRiusP.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-xc8D3uO6.js → WorkflowEditor-BK_l1tXO.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BVicU7oA.js → chat-DYd-X7Wg.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DJzLmhLm.js → colors-C9uip71j.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BvYRfThE.js → compact-item-JBrfjUP6.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DGXxCBKR.js → createContext-D03fbuiq.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-B8LQ8leS.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-SBDJB1y4.js → hasIn-DLQOR6l-.js} +1 -1
- package/src/assets/web-panel/assets/{index-MjC4G09d.js → index-5YN7F5bO.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dm_77jgR.js → index-6GuLRpBQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CtwqO5qo.js → index-B0X76LjX.js} +1 -1
- package/src/assets/web-panel/assets/{index-DRfiXB_p.js → index-B46YcgsV.js} +1 -1
- package/src/assets/web-panel/assets/{index-VMfwIH5G.js → index-BNCdRmWf.js} +1 -1
- package/src/assets/web-panel/assets/{index-hxTODbM1.js → index-BYv-LWdy.js} +1 -1
- package/src/assets/web-panel/assets/{index-DMarmfrv.js → index-Ba-Ps_AJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-xfluRkCT.js → index-BcBZwlnG.js} +1 -1
- package/src/assets/web-panel/assets/{index-BYqz4Wrr.js → index-BdH9l8wl.js} +1 -1
- package/src/assets/web-panel/assets/{index-BO1itZaY.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-Cf-O_g_8.js → index-BnQgRjsm.js} +1 -1
- package/src/assets/web-panel/assets/{index-CKyEivf8.js → index-BpYKLrUT.js} +1 -1
- package/src/assets/web-panel/assets/{index-CoJAO1Lm.js → index-BuNFCZCx.js} +1 -1
- package/src/assets/web-panel/assets/{index-1SdDS6lR.js → index-ByHO3SqZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DnjPdvR6.js → index-C2zmOsyD.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bf-ctERC.js → index-CChQBM1d.js} +1 -1
- package/src/assets/web-panel/assets/{index-DCdRAgjy.js → index-CChaISMb.js} +1 -1
- package/src/assets/web-panel/assets/{index-Crk5NTb0.js → index-CILVyK3b.js} +1 -1
- package/src/assets/web-panel/assets/{index-9gdI7uUW.js → index-CL0ixCxk.js} +1 -1
- package/src/assets/web-panel/assets/{index-BJZf9DhV.js → index-CS63r8h3.js} +1 -1
- package/src/assets/web-panel/assets/{index-DCqRS6da.js → index-CVZWiUE_.js} +1 -1
- package/src/assets/web-panel/assets/{index-DonCnfMr.js → index-Ce0Bf1YF.js} +1 -1
- package/src/assets/web-panel/assets/index-CeVrHLzZ.js +1 -0
- package/src/assets/web-panel/assets/{index-CloCgBUR.js → index-Ck17i0OD.js} +1 -1
- package/src/assets/web-panel/assets/{index-wcCL-miV.js → index-Cpn19c9k.js} +1 -1
- package/src/assets/web-panel/assets/{index-BTrBGBJs.js → index-CqWk1FLG.js} +1 -1
- package/src/assets/web-panel/assets/{index-e4fXH_WO.js → index-CwoDpKzW.js} +1 -1
- package/src/assets/web-panel/assets/{index-DvUTDYXX.js → index-D-1SqEpQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CdGY9P8a.js → index-D4UY5Z60.js} +1 -1
- package/src/assets/web-panel/assets/{index-DKrvvWm4.js → index-D8KvuDz0.js} +1 -1
- package/src/assets/web-panel/assets/{index-lpaGoTH3.js → index-DNMAAUVk.js} +1 -1
- package/src/assets/web-panel/assets/{index-YJkzy8ZF.js → index-DYLZY4uh.js} +1 -1
- package/src/assets/web-panel/assets/{index-FxZzRyE1.js → index-DaokIHt3.js} +1 -1
- package/src/assets/web-panel/assets/{index-DHVLJ8q0.js → index-Q7mmL6w4.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cs2rmLFt.js → index-SO6lgMg0.js} +1 -1
- package/src/assets/web-panel/assets/{index-z1ZylsLq.js → index-iahNhZwm.js} +1 -1
- package/src/assets/web-panel/assets/{index-d5BVd-cL.js → index-l08afIbV.js} +1 -1
- package/src/assets/web-panel/assets/{index-D7HimK0M.js → index-rIxxfdTN.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-C1zO1KnY.js → initDefaultProps-CG9z1c6w.js} +1 -1
- package/src/assets/web-panel/assets/{motion-CWLtEGmC.js → motion-B1Ky7Zff.js} +1 -1
- package/src/assets/web-panel/assets/{move-DzD_C3Vm.js → move-DME8X2P1.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-D880PYJl.js → mtc-parser-cuJYSWB7.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CFR_z2ov.js → omit-UI_EE0uZ.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-srIhgrSC.js → pickAttrs-BIoE_Z_V.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-C1rXpibP.js → placementArrow-B48-9HKN.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-C30gRcSS.js → responsiveObserve-D7x_GDgD.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CvtKiMfV.js → slide-DjzC5_7m.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-DNHO7ITG.js → statusUtils-C6BIymhh.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-Dt_Sl-g4.js → styleChecker-B4dGrdD9.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-Cjev42Gh.js → useFlexGapSupport-Bken4aNE.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-Baxglj2V.js → useFs-BMlqECqv.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-B4NkcLaP.js → usePersonalDataHub-DLdrfmMa.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-mIRkdT7o.js → vnode-CKJQmxa0.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-HzI5DlH_.js → zoom-CaZunuau.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/agenda.js +22 -6
- package/src/commands/agent.js +3 -3
- 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/eval.js +21 -6
- package/src/commands/hook.js +2 -2
- package/src/commands/loop.js +9 -2
- package/src/commands/skill.js +2 -0
- package/src/commands/statusline.js +3 -3
- package/src/data/changelog.json +293 -51
- package/src/harness/background-task-manager.js +18 -6
- package/src/harness/background-task-worker.js +11 -18
- package/src/harness/mcp-client.js +9 -15
- package/src/harness/worktree-isolator.js +18 -21
- package/src/lib/agent-core.js +5 -0
- package/src/lib/agent-ipc-bus.js +12 -3
- package/src/lib/agent-team/team-worktree.js +28 -6
- package/src/lib/agent-worktree.js +20 -19
- package/src/lib/async-hook-supervisor.cjs +134 -24
- 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 +57 -0
- 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/doctor-checkup.js +18 -6
- package/src/lib/eval/tasks.js +25 -31
- package/src/lib/hook-runner.cjs +71 -36
- package/src/lib/hook-runner.js +55 -0
- package/src/lib/host-adb-bridge.js +18 -3
- 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/benchmark.js +20 -4
- package/src/lib/lsp/lsp-client.js +6 -4
- package/src/lib/lsp/lsp-server-registry.js +0 -2
- package/src/lib/orchestrator.js +8 -2
- package/src/lib/packer/pack-update-applier.js +14 -2
- package/src/lib/packer/smoke-runner.js +18 -5
- package/src/lib/paths.js +1 -1
- package/src/lib/plugin-monitor-supervisor.js +20 -13
- package/src/lib/plugin-runtime/install.js +10 -3
- package/src/lib/repl-bang-memorize.js +10 -2
- package/src/lib/repl-goal.js +19 -2
- package/src/lib/settings-hook-events.cjs +13 -8
- package/src/lib/settings-hook-events.js +20 -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/repl/agent-repl.js +48 -43
- package/src/runtime/agent-core.js +133 -49
- package/src/runtime/headless-runner.js +25 -10
- package/src/runtime/headless-stream.js +74 -4
- 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-CGHYrugQ.js +0 -1
- package/src/assets/web-panel/assets/MobileProjects-NZvvfDME.js +0 -1
- package/src/assets/web-panel/assets/Skills-BDHh17P0.js +0 -1
- package/src/assets/web-panel/assets/Tasks-DYQ_6lxj.js +0 -1
- package/src/assets/web-panel/assets/Terminal-CjTZPa37.js +0 -3
- package/src/assets/web-panel/assets/devWarning-BT46Y_QI.js +0 -1
- package/src/assets/web-panel/assets/index-B7nuIywP.js +0 -1
- package/src/assets/web-panel/assets/index-ycwAfC-i.js +0 -1
package/src/repl/agent-repl.js
CHANGED
|
@@ -183,12 +183,12 @@ function persistRecentDenial(record, options = {}) {
|
|
|
183
183
|
* user's attention (e.g. waiting on a permission/risk confirmation). A hook can
|
|
184
184
|
* ring a bell / send a desktop notification. Best-effort, never blocks.
|
|
185
185
|
*/
|
|
186
|
-
async function _fireNotification(message, type = "info") {
|
|
186
|
+
async function _fireNotification(message, type = "info", session = null) {
|
|
187
187
|
// Fire settings.json observe hooks first (best-effort)
|
|
188
188
|
if (_settingsHooks) {
|
|
189
189
|
try {
|
|
190
190
|
const { runObserveHooks } =
|
|
191
|
-
await import("../lib/settings-hook-events.
|
|
191
|
+
await import("../lib/settings-hook-events.js");
|
|
192
192
|
runObserveHooks(
|
|
193
193
|
_settingsHooks,
|
|
194
194
|
"Notification",
|
|
@@ -196,7 +196,7 @@ async function _fireNotification(message, type = "info") {
|
|
|
196
196
|
message,
|
|
197
197
|
type,
|
|
198
198
|
cwd: process.cwd(),
|
|
199
|
-
session_id:
|
|
199
|
+
session_id: session?.sessionId || null,
|
|
200
200
|
},
|
|
201
201
|
{ cwd: process.cwd() },
|
|
202
202
|
);
|
|
@@ -205,10 +205,10 @@ async function _fireNotification(message, type = "info") {
|
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
207
|
// Fire database-registered Notification hooks (interceptable/suppressible)
|
|
208
|
-
if (
|
|
208
|
+
if (session) {
|
|
209
209
|
try {
|
|
210
210
|
const result = await fireNotification(_hookDb, message, {
|
|
211
|
-
session
|
|
211
|
+
session,
|
|
212
212
|
type,
|
|
213
213
|
});
|
|
214
214
|
if (result?.directive?.suppress) {
|
|
@@ -750,6 +750,8 @@ export async function startAgentRepl(options = {}) {
|
|
|
750
750
|
}
|
|
751
751
|
await _fireNotification(
|
|
752
752
|
`Permission needed: ${riskLevel || "medium"}-risk ${tool || "run_shell"}${args?.command ? " — " + args.command : ""}`,
|
|
753
|
+
"info",
|
|
754
|
+
_sessionHandle,
|
|
753
755
|
);
|
|
754
756
|
const local = askGateApprovalLocally({ tool, args, riskLevel });
|
|
755
757
|
if (!_remoteApproval?.bridge) return local.promise;
|
|
@@ -840,6 +842,8 @@ export async function startAgentRepl(options = {}) {
|
|
|
840
842
|
}
|
|
841
843
|
await _fireNotification(
|
|
842
844
|
`Permission needed: ${tool}${rule ? " (" + rule + ")" : ""}`,
|
|
845
|
+
"info",
|
|
846
|
+
_sessionHandle,
|
|
843
847
|
);
|
|
844
848
|
const local = askPermissionLocally({ tool, args, rule, reason });
|
|
845
849
|
if (!_remoteApproval?.bridge) return local.promise;
|
|
@@ -1142,7 +1146,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
1142
1146
|
if (_settingsHooks && _loadedReplInstructions) {
|
|
1143
1147
|
try {
|
|
1144
1148
|
const { runInstructionsLoadedHooks } =
|
|
1145
|
-
await import("../lib/settings-hook-events.
|
|
1149
|
+
await import("../lib/settings-hook-events.js");
|
|
1146
1150
|
const ctx = runInstructionsLoadedHooks(_settingsHooks, {
|
|
1147
1151
|
files: _loadedReplInstructions.files,
|
|
1148
1152
|
cwd: process.cwd(),
|
|
@@ -1158,7 +1162,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
1158
1162
|
if (_settingsHooks) {
|
|
1159
1163
|
try {
|
|
1160
1164
|
const { runSessionStartHooks } =
|
|
1161
|
-
await import("../lib/settings-hook-events.
|
|
1165
|
+
await import("../lib/settings-hook-events.js");
|
|
1162
1166
|
const ctx = runSessionStartHooks(_settingsHooks, {
|
|
1163
1167
|
source: "startup",
|
|
1164
1168
|
cwd: process.cwd(),
|
|
@@ -1466,7 +1470,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
1466
1470
|
if (_settingsHooks && messages.some((m) => m.role !== "system")) {
|
|
1467
1471
|
try {
|
|
1468
1472
|
const { runObserveHooks } =
|
|
1469
|
-
await import("../lib/settings-hook-events.
|
|
1473
|
+
await import("../lib/settings-hook-events.js");
|
|
1470
1474
|
runObserveHooks(
|
|
1471
1475
|
_settingsHooks,
|
|
1472
1476
|
"SessionResume",
|
|
@@ -1764,31 +1768,34 @@ export async function startAgentRepl(options = {}) {
|
|
|
1764
1768
|
|
|
1765
1769
|
// MCP elicitation in the interactive REPL uses the same readline surface as
|
|
1766
1770
|
// approvals, while MCPClient retains the protocol-level response shape.
|
|
1767
|
-
const mcpElicitationClients = [
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
].filter((client) => client?.setElicitationHandler);
|
|
1771
|
+
const mcpElicitationClients = [_adhocMcp?.mcpClient, _bundleMcpClient].filter(
|
|
1772
|
+
(client) => client?.setElicitationHandler,
|
|
1773
|
+
);
|
|
1771
1774
|
for (const client of mcpElicitationClients) {
|
|
1772
1775
|
client.setElicitationHandler(
|
|
1773
1776
|
(request) =>
|
|
1774
1777
|
new Promise((resolve) => {
|
|
1775
|
-
const label =
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1778
|
+
const label =
|
|
1779
|
+
request.message || "MCP server requests additional input";
|
|
1780
|
+
rl.question(
|
|
1781
|
+
chalk.yellow(`\n MCP [${request.server}] ${label}\n > `),
|
|
1782
|
+
(answer) => {
|
|
1783
|
+
const trimmed = String(answer || "").trim();
|
|
1784
|
+
if (!trimmed) {
|
|
1785
|
+
resolve({ action: "cancel" });
|
|
1786
|
+
} else {
|
|
1787
|
+
let content = { value: trimmed };
|
|
1788
|
+
try {
|
|
1789
|
+
const parsed = JSON.parse(trimmed);
|
|
1790
|
+
if (parsed && typeof parsed === "object") content = parsed;
|
|
1791
|
+
} catch {
|
|
1792
|
+
// Plain text remains a valid single-field elicitation answer.
|
|
1793
|
+
}
|
|
1794
|
+
resolve({ action: "accept", content });
|
|
1787
1795
|
}
|
|
1788
|
-
|
|
1789
|
-
}
|
|
1790
|
-
|
|
1791
|
-
});
|
|
1796
|
+
rl.prompt();
|
|
1797
|
+
},
|
|
1798
|
+
);
|
|
1792
1799
|
}),
|
|
1793
1800
|
{ timeoutMs: options.mcpElicitationTimeoutMs },
|
|
1794
1801
|
);
|
|
@@ -1896,7 +1903,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
1896
1903
|
// turn — the session stays open, the current work is suspended. The
|
|
1897
1904
|
// keypress handler can't await, so fire observe-only fire-and-forget.
|
|
1898
1905
|
if (_settingsHooks) {
|
|
1899
|
-
import("../lib/settings-hook-events.
|
|
1906
|
+
import("../lib/settings-hook-events.js")
|
|
1900
1907
|
.then(({ runObserveHooks }) =>
|
|
1901
1908
|
runObserveHooks(
|
|
1902
1909
|
_settingsHooks,
|
|
@@ -2058,7 +2065,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
2058
2065
|
const _costStore = newCostStore(); // running token spend for `/cost`
|
|
2059
2066
|
let _renderStatus = null;
|
|
2060
2067
|
try {
|
|
2061
|
-
const slm = await import("../lib/status-line.
|
|
2068
|
+
const slm = await import("../lib/status-line.js");
|
|
2062
2069
|
const _sl = slm.default || slm;
|
|
2063
2070
|
const _slCfg = _sl.loadStatusLineConfig({ cwd: process.cwd() });
|
|
2064
2071
|
_customStatus = !!_slCfg;
|
|
@@ -3153,12 +3160,12 @@ export async function startAgentRepl(options = {}) {
|
|
|
3153
3160
|
if (_settingsHooks && oldCwd !== newCwd) {
|
|
3154
3161
|
try {
|
|
3155
3162
|
const { runCwdChangedHooks, dispatchAsyncHooks } =
|
|
3156
|
-
await import("../lib/settings-hook-events.
|
|
3163
|
+
await import("../lib/settings-hook-events.js");
|
|
3157
3164
|
const payload = { oldCwd, newCwd, sessionId };
|
|
3158
3165
|
runCwdChangedHooks(_settingsHooks, payload);
|
|
3159
3166
|
if (!_asyncHookSupervisor) {
|
|
3160
3167
|
const { AsyncHookSupervisor } =
|
|
3161
|
-
await import("../lib/async-hook-supervisor.
|
|
3168
|
+
await import("../lib/async-hook-supervisor.js");
|
|
3162
3169
|
_asyncHookSupervisor = new AsyncHookSupervisor({
|
|
3163
3170
|
persistStats: true,
|
|
3164
3171
|
});
|
|
@@ -3739,7 +3746,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
3739
3746
|
if (_settingsHooks) {
|
|
3740
3747
|
try {
|
|
3741
3748
|
const { runObserveHooks, dispatchAsyncHooks } =
|
|
3742
|
-
await import("../lib/settings-hook-events.
|
|
3749
|
+
await import("../lib/settings-hook-events.js");
|
|
3743
3750
|
const payload = {
|
|
3744
3751
|
session_id: sessionId || null,
|
|
3745
3752
|
source: "reload-plugins",
|
|
@@ -3747,7 +3754,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
3747
3754
|
runObserveHooks(_settingsHooks, "ConfigChange", payload, { cwd });
|
|
3748
3755
|
if (!_asyncHookSupervisor) {
|
|
3749
3756
|
const { AsyncHookSupervisor } =
|
|
3750
|
-
await import("../lib/async-hook-supervisor.
|
|
3757
|
+
await import("../lib/async-hook-supervisor.js");
|
|
3751
3758
|
_asyncHookSupervisor = new AsyncHookSupervisor({
|
|
3752
3759
|
persistStats: true,
|
|
3753
3760
|
});
|
|
@@ -5099,7 +5106,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
5099
5106
|
if (_settingsHooks) {
|
|
5100
5107
|
try {
|
|
5101
5108
|
const { runUserPromptSubmitHooks } =
|
|
5102
|
-
await import("../lib/settings-hook-events.
|
|
5109
|
+
await import("../lib/settings-hook-events.js");
|
|
5103
5110
|
const ups = runUserPromptSubmitHooks(_settingsHooks, {
|
|
5104
5111
|
prompt: userContent,
|
|
5105
5112
|
cwd: process.cwd(),
|
|
@@ -5122,10 +5129,10 @@ export async function startAgentRepl(options = {}) {
|
|
|
5122
5129
|
// turn without blocking it; its result/rewake surfaces on a later turn
|
|
5123
5130
|
// via the async-hook drain below. Lazily create the supervisor.
|
|
5124
5131
|
const { dispatchAsyncHooks } =
|
|
5125
|
-
await import("../lib/settings-hook-events.
|
|
5132
|
+
await import("../lib/settings-hook-events.js");
|
|
5126
5133
|
if (!_asyncHookSupervisor) {
|
|
5127
5134
|
const { AsyncHookSupervisor } =
|
|
5128
|
-
await import("../lib/async-hook-supervisor.
|
|
5135
|
+
await import("../lib/async-hook-supervisor.js");
|
|
5129
5136
|
_asyncHookSupervisor = new AsyncHookSupervisor({
|
|
5130
5137
|
persistStats: true,
|
|
5131
5138
|
});
|
|
@@ -5433,7 +5440,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
5433
5440
|
// fire-and-forget; their results/rewakes drain into the next turn above.
|
|
5434
5441
|
if (_settingsHooks && !_asyncHookSupervisor) {
|
|
5435
5442
|
const { AsyncHookSupervisor } =
|
|
5436
|
-
await import("../lib/async-hook-supervisor.
|
|
5443
|
+
await import("../lib/async-hook-supervisor.js");
|
|
5437
5444
|
_asyncHookSupervisor = new AsyncHookSupervisor({ persistStats: true });
|
|
5438
5445
|
}
|
|
5439
5446
|
const {
|
|
@@ -5579,7 +5586,6 @@ export async function startAgentRepl(options = {}) {
|
|
|
5579
5586
|
try {
|
|
5580
5587
|
const rg = await import("../lib/repl-goal.js");
|
|
5581
5588
|
const fsMod = await import("node:fs");
|
|
5582
|
-
const cpMod = await import("node:child_process");
|
|
5583
5589
|
const judge = async (cond, { finalText }) => {
|
|
5584
5590
|
const { chatWithTools } = await import("../runtime/agent-core.js");
|
|
5585
5591
|
const { firstBalancedJson } =
|
|
@@ -5621,7 +5627,6 @@ export async function startAgentRepl(options = {}) {
|
|
|
5621
5627
|
response || "",
|
|
5622
5628
|
{
|
|
5623
5629
|
cwd: process.cwd(),
|
|
5624
|
-
spawnSync: cpMod.spawnSync,
|
|
5625
5630
|
existsSync: fsMod.existsSync,
|
|
5626
5631
|
judge,
|
|
5627
5632
|
},
|
|
@@ -5772,7 +5777,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
5772
5777
|
if (_settingsHooks) {
|
|
5773
5778
|
try {
|
|
5774
5779
|
const { runObserveHooks, dispatchAsyncHooks } =
|
|
5775
|
-
await import("../lib/settings-hook-events.
|
|
5780
|
+
await import("../lib/settings-hook-events.js");
|
|
5776
5781
|
runObserveHooks(
|
|
5777
5782
|
_settingsHooks,
|
|
5778
5783
|
"Stop",
|
|
@@ -5781,7 +5786,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
5781
5786
|
);
|
|
5782
5787
|
if (!_asyncHookSupervisor) {
|
|
5783
5788
|
const { AsyncHookSupervisor } =
|
|
5784
|
-
await import("../lib/async-hook-supervisor.
|
|
5789
|
+
await import("../lib/async-hook-supervisor.js");
|
|
5785
5790
|
_asyncHookSupervisor = new AsyncHookSupervisor({
|
|
5786
5791
|
persistStats: true,
|
|
5787
5792
|
});
|
|
@@ -5879,7 +5884,7 @@ export async function startAgentRepl(options = {}) {
|
|
|
5879
5884
|
if (_settingsHooks) {
|
|
5880
5885
|
try {
|
|
5881
5886
|
const { runObserveHooks } =
|
|
5882
|
-
await import("../lib/settings-hook-events.
|
|
5887
|
+
await import("../lib/settings-hook-events.js");
|
|
5883
5888
|
runObserveHooks(
|
|
5884
5889
|
_settingsHooks,
|
|
5885
5890
|
"SessionEnd",
|
|
@@ -16,15 +16,14 @@
|
|
|
16
16
|
|
|
17
17
|
import fs from "fs";
|
|
18
18
|
import path from "path";
|
|
19
|
-
import { execSync, spawn, spawnSync } from "child_process";
|
|
20
19
|
import broker from "../lib/process-execution-broker/index.js";
|
|
21
20
|
import os from "os";
|
|
22
21
|
import sharedCodingAgentPolicy from "./coding-agent-policy.cjs";
|
|
23
22
|
import sharedShellPolicy from "./coding-agent-shell-policy.cjs";
|
|
24
23
|
import sharedPermissionRules from "../lib/permission-rules.cjs";
|
|
25
24
|
import sharedSettingsHooks from "../lib/settings-hooks.cjs";
|
|
26
|
-
import sharedHookRunner from "../lib/hook-runner.
|
|
27
|
-
import sharedHookEvents from "../lib/settings-hook-events.
|
|
25
|
+
import sharedHookRunner from "../lib/hook-runner.js";
|
|
26
|
+
import sharedHookEvents from "../lib/settings-hook-events.js";
|
|
28
27
|
import { mergeProviderOptions } from "../lib/provider-options.js";
|
|
29
28
|
import { applyCredentialProxy } from "../lib/credential-proxy.js";
|
|
30
29
|
import { describeBackgroundCommand } from "../lib/terminal-context.js";
|
|
@@ -113,6 +112,33 @@ const {
|
|
|
113
112
|
withDeliveryId,
|
|
114
113
|
} = sharedHookEvents;
|
|
115
114
|
|
|
115
|
+
const searchProcessRunner = broker.execSync.bind(broker);
|
|
116
|
+
const runCodeProcessRunner = broker.execFileSync.bind(broker);
|
|
117
|
+
|
|
118
|
+
export const _agentToolProcessDeps = {
|
|
119
|
+
runSearch: searchProcessRunner,
|
|
120
|
+
runCode: runCodeProcessRunner,
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
function runSearchProcess(command, options = {}) {
|
|
124
|
+
return _agentToolProcessDeps.runSearch(command, {
|
|
125
|
+
...options,
|
|
126
|
+
origin: "agent-core:search-files",
|
|
127
|
+
policy: "allow",
|
|
128
|
+
scope: "agent-core",
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function runCodeProcess(file, args, options = {}, origin = "run-code") {
|
|
133
|
+
return _agentToolProcessDeps.runCode(file, args, {
|
|
134
|
+
...options,
|
|
135
|
+
origin: `agent-core:${origin}`,
|
|
136
|
+
policy: "allow",
|
|
137
|
+
scope: "agent-core",
|
|
138
|
+
shell: false,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
|
|
116
142
|
// ─── Background shell tasks ────────────────────────────────────────────────
|
|
117
143
|
//
|
|
118
144
|
// run_shell is synchronous (execSync) and capped at a foreground timeout, which
|
|
@@ -231,25 +257,54 @@ function _releaseBgChildHandles(task) {
|
|
|
231
257
|
}
|
|
232
258
|
}
|
|
233
259
|
|
|
260
|
+
const backgroundTaskRunner = broker.spawn.bind(broker);
|
|
261
|
+
const backgroundTaskSyncRunner = broker.spawnSync.bind(broker);
|
|
262
|
+
|
|
263
|
+
export const _backgroundProcessDeps = {
|
|
264
|
+
run: backgroundTaskRunner,
|
|
265
|
+
runSync: backgroundTaskSyncRunner,
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
export function _runBackgroundTaskkill(pid, { sync = false } = {}) {
|
|
269
|
+
const args = ["/pid", String(pid), "/T", "/F"];
|
|
270
|
+
const options = {
|
|
271
|
+
windowsHide: true,
|
|
272
|
+
origin: "agent-core:background-taskkill",
|
|
273
|
+
policy: "allow",
|
|
274
|
+
scope: "agent-core",
|
|
275
|
+
};
|
|
276
|
+
return sync
|
|
277
|
+
? _backgroundProcessDeps.runSync("taskkill", args, options)
|
|
278
|
+
: _backgroundProcessDeps.run("taskkill", args, options);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
const gitProcessRunner = broker.spawnSync.bind(broker);
|
|
282
|
+
|
|
283
|
+
export const _gitProcessDeps = {
|
|
284
|
+
run: gitProcessRunner,
|
|
285
|
+
};
|
|
286
|
+
|
|
234
287
|
function _killTask(task) {
|
|
235
288
|
const child = task?.child;
|
|
236
289
|
if (!child || child.killed || task?.status !== "running") return false;
|
|
237
290
|
try {
|
|
238
291
|
if (process.platform === "win32") {
|
|
239
292
|
if (child.pid) {
|
|
240
|
-
const tk =
|
|
241
|
-
|
|
242
|
-
});
|
|
243
|
-
// A spawn that fails to launch emits an async 'error' event — with no
|
|
244
|
-
// listener Node rethrows it as an UNCAUGHT exception (the try/catch
|
|
245
|
-
// here can't catch the async emit), crashing the CLI. Handle it and
|
|
246
|
-
// fall back to a direct kill.
|
|
247
|
-
tk.on("error", () => {
|
|
293
|
+
const tk = _runBackgroundTaskkill(child.pid);
|
|
294
|
+
const fallbackDirectKill = () => {
|
|
248
295
|
try {
|
|
249
|
-
child.kill();
|
|
296
|
+
if (!child.killed) child.kill("SIGKILL");
|
|
250
297
|
} catch {
|
|
251
298
|
/* already dead */
|
|
252
299
|
}
|
|
300
|
+
};
|
|
301
|
+
// A launch failure emits 'error'; a permissions/policy failure instead
|
|
302
|
+
// launches taskkill successfully and exits non-zero. Both must fall
|
|
303
|
+
// back or the background command remains alive while teardown reports
|
|
304
|
+
// success.
|
|
305
|
+
tk.once("error", fallbackDirectKill);
|
|
306
|
+
tk.once("close", (code) => {
|
|
307
|
+
if (code !== 0) fallbackDirectKill();
|
|
253
308
|
});
|
|
254
309
|
} else {
|
|
255
310
|
child.kill();
|
|
@@ -310,9 +365,13 @@ function _killTaskSync(task) {
|
|
|
310
365
|
try {
|
|
311
366
|
if (process.platform === "win32") {
|
|
312
367
|
if (child.pid) {
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
368
|
+
const killed = _runBackgroundTaskkill(child.pid, { sync: true });
|
|
369
|
+
if (killed.error || killed.status !== 0) {
|
|
370
|
+
// Restricted runners can execute taskkill but receive a non-zero
|
|
371
|
+
// access/policy result. Direct termination is the synchronous
|
|
372
|
+
// last-resort for the child handle we own.
|
|
373
|
+
child.kill("SIGKILL");
|
|
374
|
+
}
|
|
316
375
|
} else {
|
|
317
376
|
child.kill();
|
|
318
377
|
}
|
|
@@ -693,6 +752,21 @@ export function reloadSkills() {
|
|
|
693
752
|
let _cachedPython = null;
|
|
694
753
|
let _cachedEnvInfo = null;
|
|
695
754
|
|
|
755
|
+
const environmentProbeRunner = broker.execFileSync.bind(broker);
|
|
756
|
+
|
|
757
|
+
export const _environmentProcessDeps = {
|
|
758
|
+
run: environmentProbeRunner,
|
|
759
|
+
};
|
|
760
|
+
|
|
761
|
+
function runEnvironmentProbe(file, args, options = {}) {
|
|
762
|
+
return _environmentProcessDeps.run(file, args, {
|
|
763
|
+
...options,
|
|
764
|
+
origin: "agent-core:environment-probe",
|
|
765
|
+
policy: "allow",
|
|
766
|
+
scope: "agent-core",
|
|
767
|
+
});
|
|
768
|
+
}
|
|
769
|
+
|
|
696
770
|
/**
|
|
697
771
|
* Get cached Python interpreter info (reuses cli-anything-bridge detection).
|
|
698
772
|
* @returns {{ found: boolean, command?: string, version?: string }}
|
|
@@ -716,7 +790,7 @@ export function getEnvironmentInfo() {
|
|
|
716
790
|
let pipAvailable = false;
|
|
717
791
|
if (py.found) {
|
|
718
792
|
try {
|
|
719
|
-
|
|
793
|
+
runEnvironmentProbe(py.command, ["-m", "pip", "--version"], {
|
|
720
794
|
encoding: "utf-8",
|
|
721
795
|
timeout: 10000,
|
|
722
796
|
stdio: ["pipe", "pipe", "pipe"],
|
|
@@ -729,7 +803,7 @@ export function getEnvironmentInfo() {
|
|
|
729
803
|
|
|
730
804
|
let nodeVersion = null;
|
|
731
805
|
try {
|
|
732
|
-
nodeVersion =
|
|
806
|
+
nodeVersion = runEnvironmentProbe(process.execPath, ["--version"], {
|
|
733
807
|
encoding: "utf-8",
|
|
734
808
|
timeout: 5000,
|
|
735
809
|
}).trim();
|
|
@@ -739,7 +813,7 @@ export function getEnvironmentInfo() {
|
|
|
739
813
|
|
|
740
814
|
let gitAvailable = false;
|
|
741
815
|
try {
|
|
742
|
-
|
|
816
|
+
runEnvironmentProbe("git", ["--version"], {
|
|
743
817
|
encoding: "utf-8",
|
|
744
818
|
timeout: 5000,
|
|
745
819
|
stdio: ["pipe", "pipe", "pipe"],
|
|
@@ -1387,11 +1461,11 @@ export async function executeTool(name, args, context = {}) {
|
|
|
1387
1461
|
override.capabilityGranted ?? admission.capabilityGranted,
|
|
1388
1462
|
policyAllowed:
|
|
1389
1463
|
override.policyAllowed ??
|
|
1390
|
-
(context.hostManagedToolPolicy
|
|
1391
|
-
(
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
admission.policyAllowed),
|
|
1464
|
+
(context.hostManagedToolPolicy
|
|
1465
|
+
? (context.hostManagedToolPolicy?.tools ||
|
|
1466
|
+
context.hostManagedToolPolicy?.toolPolicies ||
|
|
1467
|
+
{})[name]?.allowed !== false
|
|
1468
|
+
: admission.policyAllowed),
|
|
1395
1469
|
permissionGranted:
|
|
1396
1470
|
override.permissionGranted ?? admission.permissionGranted,
|
|
1397
1471
|
budgetOk: override.budgetOk ?? admission.budgetOk,
|
|
@@ -3158,9 +3232,8 @@ async function executeToolInner(
|
|
|
3158
3232
|
// from an ambient system command in the process audit log.
|
|
3159
3233
|
let pluginBinProvenance = null;
|
|
3160
3234
|
try {
|
|
3161
|
-
const { resolvePluginBinCommand } =
|
|
3162
|
-
"../lib/plugin-runtime/bin.js"
|
|
3163
|
-
);
|
|
3235
|
+
const { resolvePluginBinCommand } =
|
|
3236
|
+
await import("../lib/plugin-runtime/bin.js");
|
|
3164
3237
|
pluginBinProvenance = resolvePluginBinCommand(args.command, { cwd });
|
|
3165
3238
|
} catch {
|
|
3166
3239
|
pluginBinProvenance = null;
|
|
@@ -3551,12 +3624,15 @@ async function executeToolInner(
|
|
|
3551
3624
|
// command-execution bypass for a prompt-injected agent. Quoted args (a
|
|
3552
3625
|
// commit message) keep their content via the quote-aware tokenizer.
|
|
3553
3626
|
const gitArgs = tokenizeShellWords(normalizedCommand);
|
|
3554
|
-
const res =
|
|
3627
|
+
const res = _gitProcessDeps.run("git", gitArgs, {
|
|
3555
3628
|
cwd: args.cwd || cwd,
|
|
3556
3629
|
encoding: "utf8",
|
|
3557
3630
|
timeout: 60000,
|
|
3558
3631
|
maxBuffer: 1024 * 1024,
|
|
3559
3632
|
windowsHide: true,
|
|
3633
|
+
origin: "agent-core:git-command",
|
|
3634
|
+
policy: "allow",
|
|
3635
|
+
scope: "agent-core",
|
|
3560
3636
|
});
|
|
3561
3637
|
const readOnly = isReadOnlyGitCommand(normalizedCommand);
|
|
3562
3638
|
if (res.error) {
|
|
@@ -4157,7 +4233,7 @@ async function executeToolInner(
|
|
|
4157
4233
|
};
|
|
4158
4234
|
try {
|
|
4159
4235
|
if (!fs.existsSync(root)) continue;
|
|
4160
|
-
const output =
|
|
4236
|
+
const output = runSearchProcess(cmd, {
|
|
4161
4237
|
cwd: root,
|
|
4162
4238
|
encoding: "utf8",
|
|
4163
4239
|
timeout: 10000,
|
|
@@ -4428,7 +4504,7 @@ async function executeToolInner(
|
|
|
4428
4504
|
onWarn: (msg) => {
|
|
4429
4505
|
// Non-fatal — logged as warning, skipped servers captured
|
|
4430
4506
|
// in mountResult.skipped.
|
|
4431
|
-
|
|
4507
|
+
|
|
4432
4508
|
console.warn(msg);
|
|
4433
4509
|
},
|
|
4434
4510
|
});
|
|
@@ -4763,7 +4839,7 @@ async function _executeRunCode(args, cwd) {
|
|
|
4763
4839
|
const start = Date.now();
|
|
4764
4840
|
let output;
|
|
4765
4841
|
try {
|
|
4766
|
-
output =
|
|
4842
|
+
output = runCodeProcess(interpreter, [scriptPath], {
|
|
4767
4843
|
cwd,
|
|
4768
4844
|
encoding: "utf8",
|
|
4769
4845
|
timeout: timeoutSec * 1000,
|
|
@@ -4863,12 +4939,18 @@ async function _executeRunCode(args, cwd) {
|
|
|
4863
4939
|
|
|
4864
4940
|
// Attempt pip install
|
|
4865
4941
|
try {
|
|
4866
|
-
|
|
4867
|
-
|
|
4868
|
-
|
|
4869
|
-
|
|
4870
|
-
|
|
4871
|
-
|
|
4942
|
+
runCodeProcess(
|
|
4943
|
+
interpreter,
|
|
4944
|
+
["-m", "pip", "install", packageName],
|
|
4945
|
+
{
|
|
4946
|
+
cwd,
|
|
4947
|
+
encoding: "utf-8",
|
|
4948
|
+
timeout: 120000,
|
|
4949
|
+
maxBuffer: 2 * 1024 * 1024,
|
|
4950
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
4951
|
+
},
|
|
4952
|
+
"run-code-install",
|
|
4953
|
+
);
|
|
4872
4954
|
recordInstallAudit({
|
|
4873
4955
|
package: packageName,
|
|
4874
4956
|
interpreter,
|
|
@@ -4879,12 +4961,17 @@ async function _executeRunCode(args, cwd) {
|
|
|
4879
4961
|
|
|
4880
4962
|
// Retry execution
|
|
4881
4963
|
const retryStart = Date.now();
|
|
4882
|
-
const retryOutput =
|
|
4883
|
-
|
|
4884
|
-
|
|
4885
|
-
|
|
4886
|
-
|
|
4887
|
-
|
|
4964
|
+
const retryOutput = runCodeProcess(
|
|
4965
|
+
interpreter,
|
|
4966
|
+
[scriptPath],
|
|
4967
|
+
{
|
|
4968
|
+
cwd,
|
|
4969
|
+
encoding: "utf8",
|
|
4970
|
+
timeout: timeoutSec * 1000,
|
|
4971
|
+
maxBuffer: 5 * 1024 * 1024,
|
|
4972
|
+
},
|
|
4973
|
+
"run-code-retry",
|
|
4974
|
+
);
|
|
4888
4975
|
const retryDuration = Date.now() - retryStart;
|
|
4889
4976
|
|
|
4890
4977
|
return {
|
|
@@ -5618,10 +5705,7 @@ async function _executeSpawnSubAgent(args, ctx) {
|
|
|
5618
5705
|
task: subCtx.task,
|
|
5619
5706
|
background: payload?.background === true,
|
|
5620
5707
|
});
|
|
5621
|
-
} else if (
|
|
5622
|
-
type === "sub-agent.completed" ||
|
|
5623
|
-
type === "sub-agent.failed"
|
|
5624
|
-
) {
|
|
5708
|
+
} else if (type === "sub-agent.completed" || type === "sub-agent.failed") {
|
|
5625
5709
|
emitHooksV2Event("TaskCompleted", {
|
|
5626
5710
|
task_id: subCtx.id,
|
|
5627
5711
|
session_id: parentSessionId,
|
|
@@ -7944,9 +8028,9 @@ export async function* agentLoop(messages, options) {
|
|
|
7944
8028
|
let toolArgs;
|
|
7945
8029
|
try {
|
|
7946
8030
|
toolArgs =
|
|
7947
|
-
|
|
7948
|
-
|
|
7949
|
-
|
|
8031
|
+
typeof call.function.arguments === "string"
|
|
8032
|
+
? JSON.parse(call.function.arguments)
|
|
8033
|
+
: call.function.arguments;
|
|
7950
8034
|
} catch {
|
|
7951
8035
|
toolArgs = {};
|
|
7952
8036
|
}
|