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.
Files changed (189) hide show
  1. package/package.json +1 -1
  2. package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
  3. package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
  4. package/src/assets/web-panel/assets/{AIOps-BZPs-bVl.js → AIOps-D5a4i3N7.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-BP1iLSwn.js → ActionButton-DxsRk5n1.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-WxwtPqcd.js → Analytics-D-7EvH4S.js} +3 -3
  7. package/src/assets/web-panel/assets/{AppLayout-DvcgeNkP.js → AppLayout-DDEWVr-d.js} +5 -5
  8. package/src/assets/web-panel/assets/{Artifacts-CtYGOtnT.js → Artifacts-CAlJAjRB.js} +1 -1
  9. package/src/assets/web-panel/assets/{Audit-BBzFYWMk.js → Audit-tuaWDOAM.js} +1 -1
  10. package/src/assets/web-panel/assets/{BackgroundAgents-Dl9wCt0Y.js → BackgroundAgents-CIwRFJ50.js} +1 -1
  11. package/src/assets/web-panel/assets/{Backup-CAL13Eak.js → Backup-CpBepJlH.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-f_lncpU_.js → BaseInput-eKguCzQc.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-DLEbkiqI.js → Chat-CFrUfXDV.js} +4 -4
  14. package/src/assets/web-panel/assets/{ChatBubbleRenderer-1tCmIvv1.js → ChatBubbleRenderer-DaRtY87l.js} +1 -1
  15. package/src/assets/web-panel/assets/{Checkbox-SNvgd2UG.js → Checkbox-o5FEn6a1.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-BG0D-INl.js → Codegen-Dih8HogC.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-DUBBZz0e.js → Col-D5r-6WZe.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-8LfuBDPs.js → Community-jeQ6bGey.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-GWs7Ka6o.js → Compact-CEP7QsWp.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-CXRhB-KC.js → Compliance-B8NydOHd.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-OpW8dLKg.js → Cowork-Bmi1zuPy.js} +2 -2
  22. package/src/assets/web-panel/assets/{Cron-6e47Syc_.js → Cron-BAL9bwSp.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-D-vGH4nC.js → Crosschain-D8WUi2dS.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-zEIa2jNx.js → DID-CQCkYcLY.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dashboard-BfUbZxsl.js → Dashboard-DogXg6kh.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dropdown-BeCD8gf0.js → Dropdown-BJBJyQJn.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer-apOBM2r2.js → EmailListRenderer-CxPWquJx.js} +1 -1
  28. package/src/assets/web-panel/assets/{EvolutionSettings-C2dK36po.js → EvolutionSettings-BijH1x8G.js} +1 -1
  29. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DPMLWPTR.js → FamilyGuardDashboard-DStwf-00.js} +1 -1
  30. package/src/assets/web-panel/assets/{Federation-CivI2pzm.js → Federation-LU9_sNxC.js} +1 -1
  31. package/src/assets/web-panel/assets/{FormItemContext-B3zrwBDw.js → FormItemContext-DNfWhj7P.js} +1 -1
  32. package/src/assets/web-panel/assets/{GenericCardRenderer-jGgdcPck.js → GenericCardRenderer-DWYsPjzk.js} +1 -1
  33. package/src/assets/web-panel/assets/{Git-Cpfkrasd.js → Git-CA0O9ulB.js} +2 -2
  34. package/src/assets/web-panel/assets/{Governance-DG8_7YS3.js → Governance-ECShL7BJ.js} +1 -1
  35. package/src/assets/web-panel/assets/{Inference-TQgUqPXx.js → Inference-9GA2542e.js} +1 -1
  36. package/src/assets/web-panel/assets/{KnowledgeGraph-By657fHZ.js → KnowledgeGraph-nC5mTbEH.js} +1 -1
  37. package/src/assets/web-panel/assets/{Logs-CFJ_70-E.js → Logs-B7IqgnDy.js} +2 -2
  38. package/src/assets/web-panel/assets/MarkdownRenderer-BqlqrJkY.js +1 -0
  39. package/src/assets/web-panel/assets/{Marketplace-BWC3xler.js → Marketplace-CEr0suM8.js} +1 -1
  40. package/src/assets/web-panel/assets/{McpTools-B0NkUzeJ.js → McpTools-DhTPQKOE.js} +3 -3
  41. package/src/assets/web-panel/assets/{Memory-DBnXwjWD.js → Memory-mHRZP1w4.js} +2 -2
  42. package/src/assets/web-panel/assets/{MobileBridge-BNWDrEJ4.js → MobileBridge-BNfX6Rdo.js} +1 -1
  43. package/src/assets/web-panel/assets/{MobileProjects-BaE94B_N.js → MobileProjects-8zG8f5li.js} +1 -1
  44. package/src/assets/web-panel/assets/{Mtc-Bp3OAEYb.js → Mtc-CzkV3wsn.js} +5 -5
  45. package/src/assets/web-panel/assets/{MtcAudit-_1T24zO3.js → MtcAudit-DWYljJik.js} +4 -4
  46. package/src/assets/web-panel/assets/{Multisig-C2i6Yi0B.js → Multisig-kHgtvZY_.js} +3 -3
  47. package/src/assets/web-panel/assets/{NLProgramming-CBq3ujGE.js → NLProgramming-56uQiPiY.js} +1 -1
  48. package/src/assets/web-panel/assets/{Notes-BxRmci_W.js → Notes-DxGOZqRf.js} +3 -3
  49. package/src/assets/web-panel/assets/{NotificationSettings-CqBLgOdv.js → NotificationSettings-DabaCpmo.js} +1 -1
  50. package/src/assets/web-panel/assets/{OrderTableRenderer-cODPlpK7.js → OrderTableRenderer-SzeQNlGT.js} +1 -1
  51. package/src/assets/web-panel/assets/{Organization-DlTnQBlp.js → Organization-D9gnPpK2.js} +4 -4
  52. package/src/assets/web-panel/assets/{Overflow-Df2jS2Ep.js → Overflow-Cqp_bXm4.js} +1 -1
  53. package/src/assets/web-panel/assets/{P2P-BwieT0aA.js → P2P-DTeK-r0G.js} +2 -2
  54. package/src/assets/web-panel/assets/{PdhVaultBrowser-Btw816xR.js → PdhVaultBrowser-CsjG85GT.js} +3 -3
  55. package/src/assets/web-panel/assets/{Permissions-BhVYLcqT.js → Permissions-B4ofZq3j.js} +4 -4
  56. package/src/assets/web-panel/assets/{PersonalDataHub-CPbNKPCA.js → PersonalDataHub-Cvas5cYd.js} +4 -4
  57. package/src/assets/web-panel/assets/{Pipeline-B1BuhoY3.js → Pipeline-Er3wmAew.js} +1 -1
  58. package/src/assets/web-panel/assets/{Privacy-BWeikVbU.js → Privacy-DMFYeZox.js} +1 -1
  59. package/src/assets/web-panel/assets/{ProjectInit-BVXcimHE.js → ProjectInit-DaVaYPy0.js} +2 -2
  60. package/src/assets/web-panel/assets/{ProjectSettings-CX87x3rT.js → ProjectSettings-dPx5q2Ac.js} +2 -2
  61. package/src/assets/web-panel/assets/Projects-N0JNeCui.js +1 -0
  62. package/src/assets/web-panel/assets/{Providers-CGm0Wuer.js → Providers-BPQo_gQa.js} +1 -1
  63. package/src/assets/web-panel/assets/{QrScannerModal-DJxv7J64.js → QrScannerModal-CD-sEsWh.js} +1 -1
  64. package/src/assets/web-panel/assets/{QuickAsk-DOXBReRk.js → QuickAsk-LOKRJiN_.js} +1 -1
  65. package/src/assets/web-panel/assets/{Recommend--MiLwmLM.js → Recommend-BwPXqcWy.js} +1 -1
  66. package/src/assets/web-panel/assets/{RemoteSession-D6LoXH94.js → RemoteSession-BjotndxF.js} +3 -3
  67. package/src/assets/web-panel/assets/{Reputation-G2jToiqh.js → Reputation-BlZ2gcbU.js} +1 -1
  68. package/src/assets/web-panel/assets/{Row-B79ZV_lZ.js → Row-D399HM-d.js} +1 -1
  69. package/src/assets/web-panel/assets/{RssFeed-CHQN68w_.js → RssFeed-C7H-ibnY.js} +2 -2
  70. package/src/assets/web-panel/assets/{Search-j7v5S2Fa.js → Search-CNHCVmM1.js} +1 -1
  71. package/src/assets/web-panel/assets/{Security-B2ykFZJH.js → Security-C70eDGYY.js} +3 -3
  72. package/src/assets/web-panel/assets/{Services-H8BK8uX0.js → Services-6xfq9G-H.js} +2 -2
  73. package/src/assets/web-panel/assets/{Skeleton-XEUUrOTK.js → Skeleton-BbY2zeZV.js} +1 -1
  74. package/src/assets/web-panel/assets/{Skills-B387UJPk.js → Skills-DYtyZ7_6.js} +1 -1
  75. package/src/assets/web-panel/assets/{Sla-CWWBujpe.js → Sla-CkWcl5OH.js} +1 -1
  76. package/src/assets/web-panel/assets/{SpeechSettings-Q2AOv9DV.js → SpeechSettings-CiknYk2P.js} +1 -1
  77. package/src/assets/web-panel/assets/{SyncSettings-OSNyOUr8.js → SyncSettings-D-8JVip4.js} +2 -2
  78. package/src/assets/web-panel/assets/{Tasks-DfUDrno5.js → Tasks-B2KnR9XC.js} +1 -1
  79. package/src/assets/web-panel/assets/{Templates-CSTkzDRS.js → Templates-CipXkOE-.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tenant-BR__gCTG.js → Tenant-DbwgIMmx.js} +1 -1
  81. package/src/assets/web-panel/assets/{Terminal-Bv4DM5OI.js → Terminal-OtCriHEE.js} +2 -2
  82. package/src/assets/web-panel/assets/{TimelineRenderer-DUnZuAtn.js → TimelineRenderer-B9LU5qrl.js} +1 -1
  83. package/src/assets/web-panel/assets/{Tokens-Dm0sczRV.js → Tokens-B4iFVxvH.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trigger-DsSOp0Ob.js → Trigger-BegM2v8q.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trust-C0HJtFwV.js → Trust-COkqnnFj.js} +1 -1
  86. package/src/assets/web-panel/assets/{UkeySign-BbqIZiX-.js → UkeySign-BzqKPChj.js} +1 -1
  87. package/src/assets/web-panel/assets/{VideoEditing-D7dDTt3D.js → VideoEditing-D-F2XL3C.js} +1 -1
  88. package/src/assets/web-panel/assets/{Wallet-DJGu0KWq.js → Wallet-22PzRY9T.js} +2 -2
  89. package/src/assets/web-panel/assets/{WebAuthn-x8OoogZU.js → WebAuthn-eSMq_qtz.js} +4 -4
  90. package/src/assets/web-panel/assets/{WorkflowEditor-CC3jIUqx.js → WorkflowEditor-BvdAakpq.js} +1 -1
  91. package/src/assets/web-panel/assets/{chat-Bqgv5oe8.js → chat-C6jhpF7E.js} +1 -1
  92. package/src/assets/web-panel/assets/{colors-CbAMqLFr.js → colors-BbbW2Pfv.js} +1 -1
  93. package/src/assets/web-panel/assets/{compact-item-B-zIDFg3.js → compact-item-CVFeLTqt.js} +1 -1
  94. package/src/assets/web-panel/assets/{createContext-D_s1ZLtZ.js → createContext-DS0m7NZc.js} +1 -1
  95. package/src/assets/web-panel/assets/devWarning-D50gzPS9.js +1 -0
  96. package/src/assets/web-panel/assets/{hasIn-Cj_J9Eb9.js → hasIn-DVouP0t6.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BtJzqXCQ.js → index--AdzSlH7.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-D_igPAXH.js → index-54aHB4FL.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BivQyKes.js → index-8QbwhE3i.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-3o8DjHHt.js → index-B5JRIZXi.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-0je3TLmx.js → index-B8a_c_qZ.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-Cz0blpuN.js → index-BE_u-rXr.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-Cu3FtpNc.js → index-BOOsA080.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-KY7udrs-.js → index-BXw6ivB8.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-J4JLWUMK.js → index-BaUah6TO.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-C6bAvixK.js → index-Be12HoCS.js} +3 -3
  107. package/src/assets/web-panel/assets/{index-Cy3XOp7S.js → index-BhvnNFfd.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-C6lO24YD.js → index-BrIv7C9a.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BPdH-XTd.js → index-BvCgzl0X.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Cg0oYTy5.js → index-Bw-ZGQCH.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-ab6FUgkq.js → index-BwZnPiFd.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DuqVIsHL.js → index-BwozzG6k.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-B6qoyCkx.js → index-ByLsH9CL.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-BjfpW5s3.js → index-BzL3LWFX.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BFNO6ycz.js → index-C4xmLgLa.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-dg0JqQDA.js → index-C6q2MkIG.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DtplHZ5o.js → index-C74emdKD.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-Bi1E5h9V.js → index-CIg4nqyp.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-C-Z13SCI.js → index-CIk7mg6G.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-JdSkHz64.js → index-CPS8E-J6.js} +1 -1
  121. package/src/assets/web-panel/assets/index-CgensV-n.js +1 -0
  122. package/src/assets/web-panel/assets/{index-DVjFV2mg.js → index-CkdYB0_g.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-CsHTqPTg.js → index-CpTbnbUI.js} +1 -1
  124. package/src/assets/web-panel/assets/index-Ctkf06Z_.js +1 -0
  125. package/src/assets/web-panel/assets/{index-nEWJobH4.js → index-CwYFDMn_.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BN5sO3kL.js → index-DGYX17YW.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CD_A-N7c.js → index-DR6TDz5H.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-ggeC-_dR.js → index-DUBkae39.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-D9CqHOgd.js → index-DotRL126.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-CSzWODfj.js → index-DpReoAGb.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-Bw88Mk2t.js → index-Ds4wbrgk.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-BGxI_Qxg.js → index-DuVjTDcW.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-BLwUCYDf.js → index-JeJqXbUU.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-D1t2IqNU.js → index-SdFkCtiC.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-CVPI_iIh.js → index-eaXEQFuP.js} +1 -1
  136. package/src/assets/web-panel/assets/{initDefaultProps-DDIGXQ08.js → initDefaultProps-CB5cUnQ5.js} +1 -1
  137. package/src/assets/web-panel/assets/{motion-97SXSYE4.js → motion-bn_fWhQV.js} +1 -1
  138. package/src/assets/web-panel/assets/{move-CfDQMFRe.js → move-DY4-Odtu.js} +1 -1
  139. package/src/assets/web-panel/assets/{mtc-parser-qLYCGwY8.js → mtc-parser-B5l5mjoh.js} +1 -1
  140. package/src/assets/web-panel/assets/{omit-xVqy1mCI.js → omit-rJ-Ci8CW.js} +1 -1
  141. package/src/assets/web-panel/assets/{pickAttrs-DCGlFyfv.js → pickAttrs-BMwGJd6C.js} +1 -1
  142. package/src/assets/web-panel/assets/{placementArrow-DYgPuMk3.js → placementArrow-CaiQyGXG.js} +1 -1
  143. package/src/assets/web-panel/assets/{responsiveObserve-7zUIdAWH.js → responsiveObserve-DQTO5wDH.js} +1 -1
  144. package/src/assets/web-panel/assets/{slide-TyaiZlSh.js → slide-Dg6ZDtbz.js} +1 -1
  145. package/src/assets/web-panel/assets/{statusUtils-BPd13Fae.js → statusUtils-bvjrktKc.js} +1 -1
  146. package/src/assets/web-panel/assets/{styleChecker-A44XGgQ0.js → styleChecker-C1geIU_x.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFlexGapSupport-ZX5EUa8B.js → useFlexGapSupport-BzU3RJRi.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFs-Sh_fBPqz.js → useFs-B7l6OwLe.js} +1 -1
  149. package/src/assets/web-panel/assets/{usePersonalDataHub-DhR6Izei.js → usePersonalDataHub-BYF1L_8x.js} +1 -1
  150. package/src/assets/web-panel/assets/{vnode-DC8g6oRh.js → vnode-6c2GVkT-.js} +1 -1
  151. package/src/assets/web-panel/assets/{zoom-DRjJmOwj.js → zoom-BYAY6QeD.js} +1 -1
  152. package/src/assets/web-panel/index.html +1 -1
  153. package/src/commands/agent.js +21 -10
  154. package/src/data/changelog.json +39 -0
  155. package/src/gateways/ws/session-protocol.js +19 -5
  156. package/src/gateways/ws/ws-agent-handler.js +6 -0
  157. package/src/gateways/ws/ws-session-gateway.js +133 -21
  158. package/src/lib/agent-execution-policy.js +177 -0
  159. package/src/lib/authority-launch-environment.js +99 -0
  160. package/src/lib/auto-mode-config.js +129 -45
  161. package/src/lib/claude-project-auto-memory.js +7 -30
  162. package/src/lib/context-memory-kernel/task-worklog-port.js +73 -24
  163. package/src/lib/diagnostic-excerpt.js +91 -10
  164. package/src/lib/diagnostic-workflow.js +2 -0
  165. package/src/lib/evolution/volcengine-function-replay-store.js +38 -28
  166. package/src/lib/git-tool-input.js +7 -0
  167. package/src/lib/host-tool-policy-authority.js +151 -0
  168. package/src/lib/permission-authority.js +67 -5
  169. package/src/lib/plugin-runtime/settings.js +9 -1
  170. package/src/lib/remote-read-loop-guard.js +59 -14
  171. package/src/lib/sandbox-egress-authority-monitor.js +3 -2
  172. package/src/lib/session-manager.js +20 -5
  173. package/src/lib/settings-loader.cjs +175 -19
  174. package/src/lib/settings-source-observation.cjs +270 -0
  175. package/src/lib/sub-agent-context.js +36 -18
  176. package/src/lib/task-progress-tracker.js +112 -12
  177. package/src/lib/unattended-action-policy.js +456 -38
  178. package/src/repl/agent-repl.js +58 -29
  179. package/src/repl/repl-tool-executor.js +39 -0
  180. package/src/runtime/agent-core.js +272 -5
  181. package/src/runtime/agent-runtime.js +15 -3
  182. package/src/runtime/headless-runner.js +13 -4
  183. package/src/runtime/headless-stream.js +9 -0
  184. package/src/runtime/policies/agent-policy.js +5 -4
  185. package/src/assets/web-panel/assets/MarkdownRenderer-BpRWpN1E.js +0 -1
  186. package/src/assets/web-panel/assets/Projects-3Qo2Mvxb.js +0 -1
  187. package/src/assets/web-panel/assets/devWarning-QMSC9xgn.js +0 -1
  188. package/src/assets/web-panel/assets/index-DVq7UuW0.js +0 -1
  189. package/src/assets/web-panel/assets/index-DYVepsIV.js +0 -1
@@ -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
- return coreExecuteTool(name, args, {
594
- hookDb: _hookDb,
595
- cwd: process.cwd(),
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" (isActive predicate).
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
- { isActive: () => _sessionTier === "auto" },
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) _sessionTier = 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
- _sessionTier = parsed.auto
4705
- ? "auto"
4706
- : parsed.dontAsk
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
- _sessionTier = next;
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
- _sessionTier = parsed.auto
8854
- ? "auto"
8855
- : parsed.dontAsk
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
+ }