chainlesschain 0.166.81 → 0.166.83
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/linux-subreaper/linux-arm64/manifest.json +1 -1
- package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-BZPs-bVl.js → AIOps-D5a4i3N7.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BP1iLSwn.js → ActionButton-DxsRk5n1.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-WxwtPqcd.js → Analytics-D-7EvH4S.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DvcgeNkP.js → AppLayout-DDEWVr-d.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-CtYGOtnT.js → Artifacts-CAlJAjRB.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-BBzFYWMk.js → Audit-tuaWDOAM.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-Dl9wCt0Y.js → BackgroundAgents-CIwRFJ50.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CAL13Eak.js → Backup-CpBepJlH.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-f_lncpU_.js → BaseInput-eKguCzQc.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-DLEbkiqI.js → Chat-CFrUfXDV.js} +4 -4
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-1tCmIvv1.js → ChatBubbleRenderer-DaRtY87l.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-SNvgd2UG.js → Checkbox-o5FEn6a1.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-BG0D-INl.js → Codegen-Dih8HogC.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DUBBZz0e.js → Col-D5r-6WZe.js} +1 -1
- package/src/assets/web-panel/assets/{Community-8LfuBDPs.js → Community-jeQ6bGey.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-GWs7Ka6o.js → Compact-CEP7QsWp.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CXRhB-KC.js → Compliance-B8NydOHd.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-OpW8dLKg.js → Cowork-Bmi1zuPy.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-6e47Syc_.js → Cron-BAL9bwSp.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-D-vGH4nC.js → Crosschain-D8WUi2dS.js} +1 -1
- package/src/assets/web-panel/assets/{DID-zEIa2jNx.js → DID-CQCkYcLY.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-BfUbZxsl.js → Dashboard-DogXg6kh.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BeCD8gf0.js → Dropdown-BJBJyQJn.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-apOBM2r2.js → EmailListRenderer-CxPWquJx.js} +1 -1
- package/src/assets/web-panel/assets/{EvolutionSettings-C2dK36po.js → EvolutionSettings-BijH1x8G.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DPMLWPTR.js → FamilyGuardDashboard-DStwf-00.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CivI2pzm.js → Federation-LU9_sNxC.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-B3zrwBDw.js → FormItemContext-DNfWhj7P.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-jGgdcPck.js → GenericCardRenderer-DWYsPjzk.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Cpfkrasd.js → Git-CA0O9ulB.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-DG8_7YS3.js → Governance-ECShL7BJ.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-TQgUqPXx.js → Inference-9GA2542e.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-By657fHZ.js → KnowledgeGraph-nC5mTbEH.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CFJ_70-E.js → Logs-B7IqgnDy.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-BqlqrJkY.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-BWC3xler.js → Marketplace-CEr0suM8.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-B0NkUzeJ.js → McpTools-DhTPQKOE.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-DBnXwjWD.js → Memory-mHRZP1w4.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BNWDrEJ4.js → MobileBridge-BNfX6Rdo.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-BaE94B_N.js → MobileProjects-8zG8f5li.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-Bp3OAEYb.js → Mtc-CzkV3wsn.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-_1T24zO3.js → MtcAudit-DWYljJik.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-C2i6Yi0B.js → Multisig-kHgtvZY_.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-CBq3ujGE.js → NLProgramming-56uQiPiY.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BxRmci_W.js → Notes-DxGOZqRf.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-CqBLgOdv.js → NotificationSettings-DabaCpmo.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-cODPlpK7.js → OrderTableRenderer-SzeQNlGT.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-DlTnQBlp.js → Organization-D9gnPpK2.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Df2jS2Ep.js → Overflow-Cqp_bXm4.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BwieT0aA.js → P2P-DTeK-r0G.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-Btw816xR.js → PdhVaultBrowser-CsjG85GT.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-BhVYLcqT.js → Permissions-B4ofZq3j.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CPbNKPCA.js → PersonalDataHub-Cvas5cYd.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-B1BuhoY3.js → Pipeline-Er3wmAew.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BWeikVbU.js → Privacy-DMFYeZox.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BVXcimHE.js → ProjectInit-DaVaYPy0.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CX87x3rT.js → ProjectSettings-dPx5q2Ac.js} +2 -2
- package/src/assets/web-panel/assets/Projects-N0JNeCui.js +1 -0
- package/src/assets/web-panel/assets/{Providers-CGm0Wuer.js → Providers-BPQo_gQa.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DJxv7J64.js → QrScannerModal-CD-sEsWh.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DOXBReRk.js → QuickAsk-LOKRJiN_.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend--MiLwmLM.js → Recommend-BwPXqcWy.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-D6LoXH94.js → RemoteSession-BjotndxF.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-G2jToiqh.js → Reputation-BlZ2gcbU.js} +1 -1
- package/src/assets/web-panel/assets/{Row-B79ZV_lZ.js → Row-D399HM-d.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CHQN68w_.js → RssFeed-C7H-ibnY.js} +2 -2
- package/src/assets/web-panel/assets/{Search-j7v5S2Fa.js → Search-CNHCVmM1.js} +1 -1
- package/src/assets/web-panel/assets/{Security-B2ykFZJH.js → Security-C70eDGYY.js} +3 -3
- package/src/assets/web-panel/assets/{Services-H8BK8uX0.js → Services-6xfq9G-H.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-XEUUrOTK.js → Skeleton-BbY2zeZV.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-B387UJPk.js → Skills-DYtyZ7_6.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-CWWBujpe.js → Sla-CkWcl5OH.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-Q2AOv9DV.js → SpeechSettings-CiknYk2P.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-OSNyOUr8.js → SyncSettings-D-8JVip4.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-DfUDrno5.js → Tasks-B2KnR9XC.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CSTkzDRS.js → Templates-CipXkOE-.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BR__gCTG.js → Tenant-DbwgIMmx.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-Bv4DM5OI.js → Terminal-OtCriHEE.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-DUnZuAtn.js → TimelineRenderer-B9LU5qrl.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-Dm0sczRV.js → Tokens-B4iFVxvH.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DsSOp0Ob.js → Trigger-BegM2v8q.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-C0HJtFwV.js → Trust-COkqnnFj.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-BbqIZiX-.js → UkeySign-BzqKPChj.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-D7dDTt3D.js → VideoEditing-D-F2XL3C.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-DJGu0KWq.js → Wallet-22PzRY9T.js} +2 -2
- package/src/assets/web-panel/assets/{WebAuthn-x8OoogZU.js → WebAuthn-eSMq_qtz.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-CC3jIUqx.js → WorkflowEditor-BvdAakpq.js} +1 -1
- package/src/assets/web-panel/assets/{chat-Bqgv5oe8.js → chat-C6jhpF7E.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CbAMqLFr.js → colors-BbbW2Pfv.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-B-zIDFg3.js → compact-item-CVFeLTqt.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-D_s1ZLtZ.js → createContext-DS0m7NZc.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-D50gzPS9.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-Cj_J9Eb9.js → hasIn-DVouP0t6.js} +1 -1
- package/src/assets/web-panel/assets/{index-BtJzqXCQ.js → index--AdzSlH7.js} +1 -1
- package/src/assets/web-panel/assets/{index-D_igPAXH.js → index-54aHB4FL.js} +1 -1
- package/src/assets/web-panel/assets/{index-BivQyKes.js → index-8QbwhE3i.js} +1 -1
- package/src/assets/web-panel/assets/{index-3o8DjHHt.js → index-B5JRIZXi.js} +1 -1
- package/src/assets/web-panel/assets/{index-0je3TLmx.js → index-B8a_c_qZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cz0blpuN.js → index-BE_u-rXr.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cu3FtpNc.js → index-BOOsA080.js} +1 -1
- package/src/assets/web-panel/assets/{index-KY7udrs-.js → index-BXw6ivB8.js} +1 -1
- package/src/assets/web-panel/assets/{index-J4JLWUMK.js → index-BaUah6TO.js} +1 -1
- package/src/assets/web-panel/assets/{index-C6bAvixK.js → index-Be12HoCS.js} +3 -3
- package/src/assets/web-panel/assets/{index-Cy3XOp7S.js → index-BhvnNFfd.js} +1 -1
- package/src/assets/web-panel/assets/{index-C6lO24YD.js → index-BrIv7C9a.js} +1 -1
- package/src/assets/web-panel/assets/{index-BPdH-XTd.js → index-BvCgzl0X.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cg0oYTy5.js → index-Bw-ZGQCH.js} +1 -1
- package/src/assets/web-panel/assets/{index-ab6FUgkq.js → index-BwZnPiFd.js} +1 -1
- package/src/assets/web-panel/assets/{index-DuqVIsHL.js → index-BwozzG6k.js} +1 -1
- package/src/assets/web-panel/assets/{index-B6qoyCkx.js → index-ByLsH9CL.js} +1 -1
- package/src/assets/web-panel/assets/{index-BjfpW5s3.js → index-BzL3LWFX.js} +1 -1
- package/src/assets/web-panel/assets/{index-BFNO6ycz.js → index-C4xmLgLa.js} +1 -1
- package/src/assets/web-panel/assets/{index-dg0JqQDA.js → index-C6q2MkIG.js} +1 -1
- package/src/assets/web-panel/assets/{index-DtplHZ5o.js → index-C74emdKD.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bi1E5h9V.js → index-CIg4nqyp.js} +1 -1
- package/src/assets/web-panel/assets/{index-C-Z13SCI.js → index-CIk7mg6G.js} +1 -1
- package/src/assets/web-panel/assets/{index-JdSkHz64.js → index-CPS8E-J6.js} +1 -1
- package/src/assets/web-panel/assets/index-CgensV-n.js +1 -0
- package/src/assets/web-panel/assets/{index-DVjFV2mg.js → index-CkdYB0_g.js} +1 -1
- package/src/assets/web-panel/assets/{index-CsHTqPTg.js → index-CpTbnbUI.js} +1 -1
- package/src/assets/web-panel/assets/index-Ctkf06Z_.js +1 -0
- package/src/assets/web-panel/assets/{index-nEWJobH4.js → index-CwYFDMn_.js} +1 -1
- package/src/assets/web-panel/assets/{index-BN5sO3kL.js → index-DGYX17YW.js} +1 -1
- package/src/assets/web-panel/assets/{index-CD_A-N7c.js → index-DR6TDz5H.js} +1 -1
- package/src/assets/web-panel/assets/{index-ggeC-_dR.js → index-DUBkae39.js} +1 -1
- package/src/assets/web-panel/assets/{index-D9CqHOgd.js → index-DotRL126.js} +1 -1
- package/src/assets/web-panel/assets/{index-CSzWODfj.js → index-DpReoAGb.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bw88Mk2t.js → index-Ds4wbrgk.js} +1 -1
- package/src/assets/web-panel/assets/{index-BGxI_Qxg.js → index-DuVjTDcW.js} +1 -1
- package/src/assets/web-panel/assets/{index-BLwUCYDf.js → index-JeJqXbUU.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1t2IqNU.js → index-SdFkCtiC.js} +1 -1
- package/src/assets/web-panel/assets/{index-CVPI_iIh.js → index-eaXEQFuP.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DDIGXQ08.js → initDefaultProps-CB5cUnQ5.js} +1 -1
- package/src/assets/web-panel/assets/{motion-97SXSYE4.js → motion-bn_fWhQV.js} +1 -1
- package/src/assets/web-panel/assets/{move-CfDQMFRe.js → move-DY4-Odtu.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-qLYCGwY8.js → mtc-parser-B5l5mjoh.js} +1 -1
- package/src/assets/web-panel/assets/{omit-xVqy1mCI.js → omit-rJ-Ci8CW.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DCGlFyfv.js → pickAttrs-BMwGJd6C.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DYgPuMk3.js → placementArrow-CaiQyGXG.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-7zUIdAWH.js → responsiveObserve-DQTO5wDH.js} +1 -1
- package/src/assets/web-panel/assets/{slide-TyaiZlSh.js → slide-Dg6ZDtbz.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-BPd13Fae.js → statusUtils-bvjrktKc.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-A44XGgQ0.js → styleChecker-C1geIU_x.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-ZX5EUa8B.js → useFlexGapSupport-BzU3RJRi.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-Sh_fBPqz.js → useFs-B7l6OwLe.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DhR6Izei.js → usePersonalDataHub-BYF1L_8x.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DC8g6oRh.js → vnode-6c2GVkT-.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-DRjJmOwj.js → zoom-BYAY6QeD.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/agent.js +21 -10
- package/src/data/changelog.json +39 -0
- package/src/gateways/ws/session-protocol.js +19 -5
- package/src/gateways/ws/ws-agent-handler.js +6 -0
- package/src/gateways/ws/ws-session-gateway.js +133 -21
- package/src/lib/agent-execution-policy.js +177 -0
- package/src/lib/authority-launch-environment.js +99 -0
- package/src/lib/auto-mode-config.js +129 -45
- package/src/lib/claude-project-auto-memory.js +7 -30
- package/src/lib/context-memory-kernel/task-worklog-port.js +73 -24
- package/src/lib/diagnostic-excerpt.js +91 -10
- package/src/lib/diagnostic-workflow.js +2 -0
- package/src/lib/evolution/volcengine-function-replay-store.js +38 -28
- package/src/lib/git-tool-input.js +7 -0
- package/src/lib/host-tool-policy-authority.js +151 -0
- package/src/lib/permission-authority.js +67 -5
- package/src/lib/plugin-runtime/settings.js +9 -1
- package/src/lib/remote-read-loop-guard.js +59 -14
- package/src/lib/sandbox-egress-authority-monitor.js +3 -2
- package/src/lib/session-manager.js +20 -5
- package/src/lib/settings-loader.cjs +175 -19
- package/src/lib/settings-source-observation.cjs +270 -0
- package/src/lib/sub-agent-context.js +36 -18
- package/src/lib/task-progress-tracker.js +112 -12
- package/src/lib/unattended-action-policy.js +456 -38
- package/src/repl/agent-repl.js +58 -29
- package/src/repl/repl-tool-executor.js +39 -0
- package/src/runtime/agent-core.js +272 -5
- package/src/runtime/agent-runtime.js +15 -3
- package/src/runtime/headless-runner.js +13 -4
- package/src/runtime/headless-stream.js +9 -0
- package/src/runtime/policies/agent-policy.js +5 -4
- package/src/assets/web-panel/assets/MarkdownRenderer-BpRWpN1E.js +0 -1
- package/src/assets/web-panel/assets/Projects-3Qo2Mvxb.js +0 -1
- package/src/assets/web-panel/assets/devWarning-QMSC9xgn.js +0 -1
- package/src/assets/web-panel/assets/index-DVq7UuW0.js +0 -1
- package/src/assets/web-panel/assets/index-DYVepsIV.js +0 -1
package/src/repl/agent-repl.js
CHANGED
|
@@ -18,6 +18,11 @@
|
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
import readline from "readline";
|
|
21
|
+
import {
|
|
22
|
+
captureAgentExecutionPolicy,
|
|
23
|
+
resolveAgentToolSelection,
|
|
24
|
+
} from "../lib/agent-execution-policy.js";
|
|
25
|
+
import { createReplToolExecutor } from "./repl-tool-executor.js";
|
|
21
26
|
import chalk from "chalk";
|
|
22
27
|
import fs from "fs";
|
|
23
28
|
import os from "os";
|
|
@@ -151,7 +156,6 @@ import {
|
|
|
151
156
|
AGENT_TOOLS,
|
|
152
157
|
buildSystemPrompt,
|
|
153
158
|
chatWithTools,
|
|
154
|
-
executeTool as coreExecuteTool,
|
|
155
159
|
agentLoop as coreAgentLoop,
|
|
156
160
|
formatToolArgs,
|
|
157
161
|
killAllBackgroundShellTasks,
|
|
@@ -486,6 +490,10 @@ let _respondToBash;
|
|
|
486
490
|
// ApprovalGate confirm) instead of fast-pathing it. false = unset → off.
|
|
487
491
|
let _classifyAllShell = false;
|
|
488
492
|
let _sandbox = null;
|
|
493
|
+
let _toolAdmission = null;
|
|
494
|
+
let _shellPolicyOverrides = null;
|
|
495
|
+
let _directToolExecutor = null;
|
|
496
|
+
let _unattendedActionPolicy = null;
|
|
489
497
|
// Bounded log of tool calls the agent was BLOCKED from running this session
|
|
490
498
|
// (shell-policy / ApprovalGate / settings rule / hook). Surfaced by
|
|
491
499
|
// `/permissions denials` and mirrored to `cc permissions recent`.
|
|
@@ -590,20 +598,9 @@ async function _persistAlwaysAllow(tool, args) {
|
|
|
590
598
|
* Execute a tool call — delegates to agent-core with REPL's hookDb and cwd.
|
|
591
599
|
*/
|
|
592
600
|
async function executeTool(name, args, context = {}) {
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
approvalGate: _approvalGate,
|
|
597
|
-
permissionRules: _permissionRules,
|
|
598
|
-
permissionRulesProvider: _permissionRulesProvider,
|
|
599
|
-
permissionConfirm: _permissionConfirm,
|
|
600
|
-
settingsHooks: _settingsHooks,
|
|
601
|
-
classifyAllShell: _classifyAllShell,
|
|
602
|
-
sandbox: _sandbox,
|
|
603
|
-
sessionId: context.sessionId || null,
|
|
604
|
-
sessionBudget: context.sessionBudget || null,
|
|
605
|
-
signal: context.signal || null,
|
|
606
|
-
});
|
|
601
|
+
if (!_directToolExecutor)
|
|
602
|
+
throw new Error("REPL tool executor is unavailable");
|
|
603
|
+
return _directToolExecutor(name, args, context);
|
|
607
604
|
}
|
|
608
605
|
|
|
609
606
|
/**
|
|
@@ -613,6 +610,12 @@ async function executeTool(name, args, context = {}) {
|
|
|
613
610
|
* unit-testable via the `options._coreLoop` injection seam.
|
|
614
611
|
*/
|
|
615
612
|
export async function agentLoop(messages, options) {
|
|
613
|
+
const executionPolicy = captureAgentExecutionPolicy(options);
|
|
614
|
+
options = {
|
|
615
|
+
...options,
|
|
616
|
+
...executionPolicy,
|
|
617
|
+
...resolveAgentToolSelection(executionPolicy),
|
|
618
|
+
};
|
|
616
619
|
const evolutionIngress =
|
|
617
620
|
options.evolutionIngress == null
|
|
618
621
|
? null
|
|
@@ -2931,6 +2934,11 @@ export function resolveReplPermanentMemoryStorage(
|
|
|
2931
2934
|
|
|
2932
2935
|
/** Start the agentic REPL with non-overridable production bindings. */
|
|
2933
2936
|
export async function startAgentRepl(options = {}) {
|
|
2937
|
+
const executionPolicy = captureAgentExecutionPolicy(options);
|
|
2938
|
+
options = {
|
|
2939
|
+
...options,
|
|
2940
|
+
...executionPolicy,
|
|
2941
|
+
};
|
|
2934
2942
|
const evolutionIngress =
|
|
2935
2943
|
options.evolutionIngress == null
|
|
2936
2944
|
? null
|
|
@@ -3284,6 +3292,10 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
3284
3292
|
// tier but additionally activates the autoMode.decisions classifier wrapper
|
|
3285
3293
|
// (when settings customize it) — gateTierFor() maps mode → real gate tier.
|
|
3286
3294
|
let _sessionTier = "strict";
|
|
3295
|
+
const setSessionTier = (mode) => {
|
|
3296
|
+
_sessionTier = mode;
|
|
3297
|
+
_approvalGate?.setActive?.(mode === "auto");
|
|
3298
|
+
};
|
|
3287
3299
|
// `/goal <condition>`: an optional SESSION completion condition. When set, the
|
|
3288
3300
|
// condition is evaluated + reported after each turn (interactive — no auto
|
|
3289
3301
|
// re-drive; that autonomous loop is headless-only). null = no session goal.
|
|
@@ -3295,7 +3307,8 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
3295
3307
|
const _dontAskActive = () => _sessionTier === "dontAsk";
|
|
3296
3308
|
// Resolved autoMode.decisions map (loaded once at startup); null until the
|
|
3297
3309
|
// gate is wired. The wrapper is installed only when settings customize the
|
|
3298
|
-
// map, and only bites while _sessionTier === "auto"
|
|
3310
|
+
// map, and only bites while _sessionTier === "auto". All mode commits use
|
|
3311
|
+
// setSessionTier so even auto → trusted → auto has an irreversible revision.
|
|
3299
3312
|
let _autoModeResolved = null;
|
|
3300
3313
|
// `/remote-control` (批17/18 REPL 收口): paired-device approvals for this
|
|
3301
3314
|
// interactive session. Holds { bridge, pairing, close } while active; both
|
|
@@ -3365,6 +3378,21 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
3365
3378
|
? options.additionalDirectories
|
|
3366
3379
|
: [];
|
|
3367
3380
|
_sandbox = options.sandbox || null;
|
|
3381
|
+
_toolAdmission = options.toolAdmission;
|
|
3382
|
+
_shellPolicyOverrides = options.shellPolicyOverrides;
|
|
3383
|
+
_classifyAllShell = options.classifyAllShell === true;
|
|
3384
|
+
const toolSelection = resolveAgentToolSelection(options);
|
|
3385
|
+
_directToolExecutor = createReplToolExecutor(options, () => ({
|
|
3386
|
+
hookDb: _hookDb,
|
|
3387
|
+
cwd: process.cwd(),
|
|
3388
|
+
approvalGate: _approvalGate,
|
|
3389
|
+
permissionRules: _permissionRules,
|
|
3390
|
+
permissionRulesProvider: _permissionRulesProvider,
|
|
3391
|
+
permissionConfirm: _permissionConfirm,
|
|
3392
|
+
settingsHooks: _settingsHooks,
|
|
3393
|
+
classifyAllShell: _classifyAllShell,
|
|
3394
|
+
}));
|
|
3395
|
+
_unattendedActionPolicy = options.unattendedActionPolicy;
|
|
3368
3396
|
// Snapshot the work tree before each mutating tool (git engine) so the user
|
|
3369
3397
|
// can `cc checkpoint restore` to just before any tool call.
|
|
3370
3398
|
const autoCheckpoint = options.autoCheckpoint === true;
|
|
@@ -3592,7 +3620,7 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
3592
3620
|
_approvalGate = createAutoModeApprovalGate(
|
|
3593
3621
|
_approvalGate,
|
|
3594
3622
|
_autoModeResolved,
|
|
3595
|
-
{
|
|
3623
|
+
{ active: _sessionTier === "auto" },
|
|
3596
3624
|
);
|
|
3597
3625
|
}
|
|
3598
3626
|
} catch (_err) {
|
|
@@ -3723,6 +3751,7 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
3723
3751
|
});
|
|
3724
3752
|
// Claude-Code 2.1.193 autoMode.classifyAllShell (default OFF when unset).
|
|
3725
3753
|
_classifyAllShell =
|
|
3754
|
+
_classifyAllShell ||
|
|
3726
3755
|
readBooleanSetting("autoMode.classifyAllShell", {
|
|
3727
3756
|
cwd: process.cwd(),
|
|
3728
3757
|
}) === true;
|
|
@@ -4684,7 +4713,7 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
4684
4713
|
const applied = parsePermissionTier(
|
|
4685
4714
|
_bundleResolved.approvalPolicy.default,
|
|
4686
4715
|
);
|
|
4687
|
-
if (applied)
|
|
4716
|
+
if (applied) setSessionTier(applied);
|
|
4688
4717
|
} catch (error) {
|
|
4689
4718
|
logger.warn(`Bundle approval policy was not persisted: ${error.message}`);
|
|
4690
4719
|
}
|
|
@@ -4701,11 +4730,9 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
4701
4730
|
try {
|
|
4702
4731
|
await _approvalGate.setSessionPolicy(sessionId, parsed.tier);
|
|
4703
4732
|
await _approvalGate.awaitPersistence?.();
|
|
4704
|
-
|
|
4705
|
-
? "auto"
|
|
4706
|
-
|
|
4707
|
-
? "dontAsk"
|
|
4708
|
-
: parsed.tier;
|
|
4733
|
+
setSessionTier(
|
|
4734
|
+
parsed.auto ? "auto" : parsed.dontAsk ? "dontAsk" : parsed.tier,
|
|
4735
|
+
);
|
|
4709
4736
|
} catch (error) {
|
|
4710
4737
|
logger.warn(`Approval policy was not persisted: ${error.message}`);
|
|
4711
4738
|
}
|
|
@@ -5418,7 +5445,7 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
5418
5445
|
try {
|
|
5419
5446
|
await _approvalGate.setSessionPolicy(sessionId, next);
|
|
5420
5447
|
await _approvalGate.awaitPersistence?.();
|
|
5421
|
-
|
|
5448
|
+
setSessionTier(next);
|
|
5422
5449
|
process.stdout.write(
|
|
5423
5450
|
"\n" +
|
|
5424
5451
|
chalk.cyan(`⇥ approval: ${next}`) +
|
|
@@ -8850,11 +8877,9 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
8850
8877
|
try {
|
|
8851
8878
|
await _approvalGate.setSessionPolicy(sessionId, parsed.tier);
|
|
8852
8879
|
await _approvalGate.awaitPersistence?.();
|
|
8853
|
-
|
|
8854
|
-
? "auto"
|
|
8855
|
-
|
|
8856
|
-
? "dontAsk"
|
|
8857
|
-
: parsed.tier;
|
|
8880
|
+
setSessionTier(
|
|
8881
|
+
parsed.auto ? "auto" : parsed.dontAsk ? "dontAsk" : parsed.tier,
|
|
8882
|
+
);
|
|
8858
8883
|
logger.info(
|
|
8859
8884
|
`Approval policy → ${chalk.cyan(_sessionTier)} ${chalk.gray(`(${describeTier(_sessionTier)})`)}`,
|
|
8860
8885
|
);
|
|
@@ -9688,7 +9713,11 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
9688
9713
|
skillOutcomeIndex: options.skillOutcomeIndex,
|
|
9689
9714
|
cwd: process.cwd(),
|
|
9690
9715
|
additionalDirectories,
|
|
9716
|
+
...toolSelection,
|
|
9691
9717
|
sandbox: _sandbox,
|
|
9718
|
+
toolAdmission: _toolAdmission,
|
|
9719
|
+
shellPolicyOverrides: _shellPolicyOverrides,
|
|
9720
|
+
unattendedActionPolicy: _unattendedActionPolicy,
|
|
9692
9721
|
autoCheckpoint,
|
|
9693
9722
|
checkpointSession: sessionId,
|
|
9694
9723
|
managedCheckpoint,
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {
|
|
2
|
+
captureAgentExecutionPolicy,
|
|
3
|
+
resolveAgentToolSelection,
|
|
4
|
+
} from "../lib/agent-execution-policy.js";
|
|
5
|
+
import {
|
|
6
|
+
executeTool as coreExecuteTool,
|
|
7
|
+
getAgentToolDefinitions,
|
|
8
|
+
} from "../runtime/agent-core.js";
|
|
9
|
+
|
|
10
|
+
/** Direct /auto and /plan tools share the startup ceiling and live permissions. */
|
|
11
|
+
export function createReplToolExecutor(options, readLiveContext) {
|
|
12
|
+
const policy = captureAgentExecutionPolicy(options);
|
|
13
|
+
const selection = resolveAgentToolSelection(policy);
|
|
14
|
+
const ceiling =
|
|
15
|
+
selection.enabledToolNames !== null || selection.disabledTools.length > 0
|
|
16
|
+
? Object.freeze(
|
|
17
|
+
getAgentToolDefinitions({
|
|
18
|
+
names: selection.enabledToolNames,
|
|
19
|
+
disabledTools: selection.disabledTools,
|
|
20
|
+
exactToolNames: true,
|
|
21
|
+
}).map((tool) => tool.function.name),
|
|
22
|
+
)
|
|
23
|
+
: null;
|
|
24
|
+
return (name, args, context = {}) => {
|
|
25
|
+
const live = readLiveContext();
|
|
26
|
+
return coreExecuteTool(name, args, {
|
|
27
|
+
...live,
|
|
28
|
+
...policy,
|
|
29
|
+
// Managed settings may tighten the explicit startup option while the
|
|
30
|
+
// REPL loads. Neither source can turn off the other's classifier.
|
|
31
|
+
classifyAllShell:
|
|
32
|
+
policy.classifyAllShell === true || live.classifyAllShell === true,
|
|
33
|
+
effectiveAllowedToolNames: ceiling,
|
|
34
|
+
sessionId: context.sessionId || null,
|
|
35
|
+
sessionBudget: context.sessionBudget || null,
|
|
36
|
+
signal: context.signal || null,
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
}
|