@slopus/rig 0.0.4 → 0.0.6

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 (374) hide show
  1. package/README.md +144 -1
  2. package/dist/agent/Agent.d.ts +16 -0
  3. package/dist/agent/Agent.d.ts.map +1 -1
  4. package/dist/agent/Agent.js +106 -0
  5. package/dist/agent/compaction/compactConversation.d.ts +22 -0
  6. package/dist/agent/compaction/compactConversation.d.ts.map +1 -0
  7. package/dist/agent/compaction/compactConversation.js +77 -0
  8. package/dist/agent/compaction/estimateMessagesTokens.d.ts +3 -0
  9. package/dist/agent/compaction/estimateMessagesTokens.d.ts.map +1 -0
  10. package/dist/agent/compaction/estimateMessagesTokens.js +39 -0
  11. package/dist/agent/compaction/formatMessagesForCompaction.d.ts +3 -0
  12. package/dist/agent/compaction/formatMessagesForCompaction.d.ts.map +1 -0
  13. package/dist/agent/compaction/formatMessagesForCompaction.js +30 -0
  14. package/dist/agent/compaction/requestCompactionSummary.d.ts +11 -0
  15. package/dist/agent/compaction/requestCompactionSummary.d.ts.map +1 -0
  16. package/dist/agent/compaction/requestCompactionSummary.js +43 -0
  17. package/dist/agent/context/AgentContext.d.ts +8 -0
  18. package/dist/agent/context/AgentContext.d.ts.map +1 -1
  19. package/dist/agent/context/BashContext.d.ts +23 -0
  20. package/dist/agent/context/BashContext.d.ts.map +1 -1
  21. package/dist/agent/context/GoalContext.d.ts +7 -0
  22. package/dist/agent/context/GoalContext.d.ts.map +1 -0
  23. package/dist/agent/context/GoalContext.js +1 -0
  24. package/dist/agent/context/SubagentContext.d.ts +20 -1
  25. package/dist/agent/context/SubagentContext.d.ts.map +1 -1
  26. package/dist/agent/context/TaskContext.d.ts +8 -0
  27. package/dist/agent/context/TaskContext.d.ts.map +1 -0
  28. package/dist/agent/context/TaskContext.js +1 -0
  29. package/dist/agent/context/UserInputContext.d.ts +7 -0
  30. package/dist/agent/context/UserInputContext.d.ts.map +1 -0
  31. package/dist/agent/context/UserInputContext.js +1 -0
  32. package/dist/agent/context/assertCanWritePath.d.ts +3 -0
  33. package/dist/agent/context/assertCanWritePath.d.ts.map +1 -0
  34. package/dist/agent/context/assertCanWritePath.js +11 -0
  35. package/dist/agent/context/createJustBashBashContext.d.ts.map +1 -1
  36. package/dist/agent/context/createJustBashBashContext.js +127 -0
  37. package/dist/agent/context/createNodeAgentContext.d.ts +8 -0
  38. package/dist/agent/context/createNodeAgentContext.d.ts.map +1 -1
  39. package/dist/agent/context/createNodeAgentContext.js +15 -2
  40. package/dist/agent/context/createNodeBashContext.d.ts +2 -0
  41. package/dist/agent/context/createNodeBashContext.d.ts.map +1 -1
  42. package/dist/agent/context/createNodeBashContext.js +123 -4
  43. package/dist/agent/context/createNodeFileSystemContext.d.ts +2 -0
  44. package/dist/agent/context/createNodeFileSystemContext.d.ts.map +1 -1
  45. package/dist/agent/context/createNodeFileSystemContext.js +18 -8
  46. package/dist/agent/context/createSandboxedCommand.d.ts +7 -0
  47. package/dist/agent/context/createSandboxedCommand.d.ts.map +1 -0
  48. package/dist/agent/context/createSandboxedCommand.js +47 -0
  49. package/dist/agent/context/findGitWritablePaths.d.ts +2 -0
  50. package/dist/agent/context/findGitWritablePaths.d.ts.map +1 -0
  51. package/dist/agent/context/findGitWritablePaths.js +54 -0
  52. package/dist/agent/context/isPathInsideWorkspace.d.ts +2 -0
  53. package/dist/agent/context/isPathInsideWorkspace.d.ts.map +1 -0
  54. package/dist/agent/context/isPathInsideWorkspace.js +14 -0
  55. package/dist/agent/context/resolvePotentialPath.d.ts +2 -0
  56. package/dist/agent/context/resolvePotentialPath.d.ts.map +1 -0
  57. package/dist/agent/context/resolvePotentialPath.js +32 -0
  58. package/dist/agent/createPermissionInstructions.d.ts +3 -0
  59. package/dist/agent/createPermissionInstructions.d.ts.map +1 -0
  60. package/dist/agent/createPermissionInstructions.js +12 -0
  61. package/dist/agent/createSubagentInstructions.js +1 -1
  62. package/dist/agent/createSystemPrompt.d.ts.map +1 -1
  63. package/dist/agent/createSystemPrompt.js +4 -0
  64. package/dist/agent/index.d.ts +7 -3
  65. package/dist/agent/index.d.ts.map +1 -1
  66. package/dist/agent/loop.d.ts +16 -2
  67. package/dist/agent/loop.d.ts.map +1 -1
  68. package/dist/agent/loop.js +115 -15
  69. package/dist/agent/printAgentMessageToConsole.d.ts +1 -0
  70. package/dist/agent/printAgentMessageToConsole.d.ts.map +1 -1
  71. package/dist/agent/types.d.ts +1 -0
  72. package/dist/agent/types.d.ts.map +1 -1
  73. package/dist/app/CodingAssistantAgentBackend.d.ts +11 -1
  74. package/dist/app/CodingAssistantAgentBackend.d.ts.map +1 -1
  75. package/dist/app/CodingAssistantApp.d.ts +7 -1
  76. package/dist/app/CodingAssistantApp.d.ts.map +1 -1
  77. package/dist/app/CodingAssistantApp.js +678 -45
  78. package/dist/app/ScrollbackPreservingTerminal.d.ts +5 -0
  79. package/dist/app/ScrollbackPreservingTerminal.d.ts.map +1 -0
  80. package/dist/app/ScrollbackPreservingTerminal.js +7 -0
  81. package/dist/app/StartupStatusApp.js +1 -1
  82. package/dist/app/createCodingAssistantAgent.d.ts +6 -1
  83. package/dist/app/createCodingAssistantAgent.d.ts.map +1 -1
  84. package/dist/app/createCodingAssistantAgent.js +22 -5
  85. package/dist/app/createSlashCommands.d.ts.map +1 -1
  86. package/dist/app/createSlashCommands.js +42 -0
  87. package/dist/app/highlightAgentCode.d.ts.map +1 -1
  88. package/dist/app/highlightAgentCode.js +10 -7
  89. package/dist/app/humanizeGoalStatus.d.ts +3 -0
  90. package/dist/app/humanizeGoalStatus.d.ts.map +1 -0
  91. package/dist/app/humanizeGoalStatus.js +9 -0
  92. package/dist/app/humanizePermissionMode.d.ts +3 -0
  93. package/dist/app/humanizePermissionMode.d.ts.map +1 -0
  94. package/dist/app/humanizePermissionMode.js +9 -0
  95. package/dist/app/humanizeToolName.d.ts +2 -0
  96. package/dist/app/humanizeToolName.d.ts.map +1 -0
  97. package/dist/app/humanizeToolName.js +40 -0
  98. package/dist/app/main.d.ts.map +1 -1
  99. package/dist/app/main.js +4 -0
  100. package/dist/app/renderAgentMarkdown.d.ts.map +1 -1
  101. package/dist/app/renderAgentMarkdown.js +2 -1
  102. package/dist/app/runApp.d.ts +2 -0
  103. package/dist/app/runApp.d.ts.map +1 -1
  104. package/dist/app/runApp.js +48 -3
  105. package/dist/app/sanitizeTerminalText.d.ts +2 -0
  106. package/dist/app/sanitizeTerminalText.d.ts.map +1 -0
  107. package/dist/app/sanitizeTerminalText.js +55 -0
  108. package/dist/app/upsertSubagentSummary.d.ts +3 -0
  109. package/dist/app/upsertSubagentSummary.d.ts.map +1 -0
  110. package/dist/app/upsertSubagentSummary.js +6 -0
  111. package/dist/client/ProtocolHttpClient.d.ts +12 -1
  112. package/dist/client/ProtocolHttpClient.d.ts.map +1 -1
  113. package/dist/client/ProtocolHttpClient.js +21 -0
  114. package/dist/client/RemoteAgent.d.ts +11 -1
  115. package/dist/client/RemoteAgent.d.ts.map +1 -1
  116. package/dist/client/RemoteAgent.js +91 -1
  117. package/dist/config/createConfigFile.d.ts.map +1 -1
  118. package/dist/config/createConfigFile.js +5 -0
  119. package/dist/config/defaultConfig.d.ts.map +1 -1
  120. package/dist/config/defaultConfig.js +2 -0
  121. package/dist/config/mergeConfigValues.d.ts.map +1 -1
  122. package/dist/config/mergeConfigValues.js +8 -1
  123. package/dist/config/parseConfigToml.d.ts.map +1 -1
  124. package/dist/config/parseConfigToml.js +88 -0
  125. package/dist/config/serializeMcpServers.d.ts +3 -0
  126. package/dist/config/serializeMcpServers.d.ts.map +1 -0
  127. package/dist/config/serializeMcpServers.js +34 -0
  128. package/dist/config/types.d.ts +6 -0
  129. package/dist/config/types.d.ts.map +1 -1
  130. package/dist/config/writeRuntimeConfig.d.ts.map +1 -1
  131. package/dist/config/writeRuntimeConfig.js +3 -0
  132. package/dist/goals/SessionGoal.d.ts +14 -0
  133. package/dist/goals/SessionGoal.d.ts.map +1 -0
  134. package/dist/goals/SessionGoal.js +1 -0
  135. package/dist/goals/createGoalContinuationPrompt.d.ts +3 -0
  136. package/dist/goals/createGoalContinuationPrompt.d.ts.map +1 -0
  137. package/dist/goals/createGoalContinuationPrompt.js +17 -0
  138. package/dist/goals/index.d.ts +5 -0
  139. package/dist/goals/index.d.ts.map +1 -0
  140. package/dist/goals/index.js +3 -0
  141. package/dist/goals/isGoalStatus.d.ts +3 -0
  142. package/dist/goals/isGoalStatus.d.ts.map +1 -0
  143. package/dist/goals/isGoalStatus.js +3 -0
  144. package/dist/goals/normalizeGoalObjective.d.ts +3 -0
  145. package/dist/goals/normalizeGoalObjective.d.ts.map +1 -0
  146. package/dist/goals/normalizeGoalObjective.js +11 -0
  147. package/dist/mcp/McpClientManager.d.ts +12 -0
  148. package/dist/mcp/McpClientManager.d.ts.map +1 -0
  149. package/dist/mcp/McpClientManager.js +123 -0
  150. package/dist/mcp/connectMcpServer.d.ts +8 -0
  151. package/dist/mcp/connectMcpServer.d.ts.map +1 -0
  152. package/dist/mcp/connectMcpServer.js +47 -0
  153. package/dist/mcp/createMcpTool.d.ts +11 -0
  154. package/dist/mcp/createMcpTool.d.ts.map +1 -0
  155. package/dist/mcp/createMcpTool.js +43 -0
  156. package/dist/mcp/index.d.ts +5 -0
  157. package/dist/mcp/index.d.ts.map +1 -0
  158. package/dist/mcp/index.js +3 -0
  159. package/dist/mcp/loadMcpServerConfigs.d.ts +4 -0
  160. package/dist/mcp/loadMcpServerConfigs.d.ts.map +1 -0
  161. package/dist/mcp/loadMcpServerConfigs.js +122 -0
  162. package/dist/mcp/mcpResultToContentBlocks.d.ts +3 -0
  163. package/dist/mcp/mcpResultToContentBlocks.d.ts.map +1 -0
  164. package/dist/mcp/mcpResultToContentBlocks.js +51 -0
  165. package/dist/mcp/mergeMcpTools.d.ts +7 -0
  166. package/dist/mcp/mergeMcpTools.d.ts.map +1 -0
  167. package/dist/mcp/mergeMcpTools.js +34 -0
  168. package/dist/mcp/normalizeMcpName.d.ts +2 -0
  169. package/dist/mcp/normalizeMcpName.d.ts.map +1 -0
  170. package/dist/mcp/normalizeMcpName.js +3 -0
  171. package/dist/mcp/types.d.ts +37 -0
  172. package/dist/mcp/types.d.ts.map +1 -0
  173. package/dist/mcp/types.js +1 -0
  174. package/dist/permissions/PermissionContext.d.ts +7 -0
  175. package/dist/permissions/PermissionContext.d.ts.map +1 -0
  176. package/dist/permissions/PermissionContext.js +1 -0
  177. package/dist/permissions/PermissionMode.d.ts +3 -0
  178. package/dist/permissions/PermissionMode.d.ts.map +1 -0
  179. package/dist/permissions/PermissionMode.js +1 -0
  180. package/dist/permissions/createPermissionContext.d.ts +4 -0
  181. package/dist/permissions/createPermissionContext.d.ts.map +1 -0
  182. package/dist/permissions/createPermissionContext.js +16 -0
  183. package/dist/permissions/index.d.ts +13 -0
  184. package/dist/permissions/index.d.ts.map +1 -0
  185. package/dist/permissions/index.js +9 -0
  186. package/dist/permissions/isPermissionMode.d.ts +3 -0
  187. package/dist/permissions/isPermissionMode.d.ts.map +1 -0
  188. package/dist/permissions/isPermissionMode.js +6 -0
  189. package/dist/permissions/parseAutoPermissionReview.d.ts +7 -0
  190. package/dist/permissions/parseAutoPermissionReview.d.ts.map +1 -0
  191. package/dist/permissions/parseAutoPermissionReview.js +33 -0
  192. package/dist/permissions/parsePermissionMode.d.ts +3 -0
  193. package/dist/permissions/parsePermissionMode.d.ts.map +1 -0
  194. package/dist/permissions/parsePermissionMode.js +6 -0
  195. package/dist/permissions/requestAutoPermissionApproval.d.ts +9 -0
  196. package/dist/permissions/requestAutoPermissionApproval.d.ts.map +1 -0
  197. package/dist/permissions/requestAutoPermissionApproval.js +26 -0
  198. package/dist/permissions/reviewAutoPermission.d.ts +13 -0
  199. package/dist/permissions/reviewAutoPermission.d.ts.map +1 -0
  200. package/dist/permissions/reviewAutoPermission.js +70 -0
  201. package/dist/permissions/shouldElevateToolInAutoMode.d.ts +2 -0
  202. package/dist/permissions/shouldElevateToolInAutoMode.d.ts.map +1 -0
  203. package/dist/permissions/shouldElevateToolInAutoMode.js +37 -0
  204. package/dist/permissions/shouldReviewToolInAutoMode.d.ts +2 -0
  205. package/dist/permissions/shouldReviewToolInAutoMode.d.ts.map +1 -0
  206. package/dist/permissions/shouldReviewToolInAutoMode.js +85 -0
  207. package/dist/permissions/summarizePermissionAction.d.ts +2 -0
  208. package/dist/permissions/summarizePermissionAction.d.ts.map +1 -0
  209. package/dist/permissions/summarizePermissionAction.js +29 -0
  210. package/dist/protocol/SessionProtocol.d.ts +49 -2
  211. package/dist/protocol/SessionProtocol.d.ts.map +1 -1
  212. package/dist/protocol/index.d.ts +4 -1
  213. package/dist/protocol/index.d.ts.map +1 -1
  214. package/dist/providers/claude-sdk.d.ts.map +1 -1
  215. package/dist/providers/claude-sdk.js +7 -6
  216. package/dist/providers/models.d.ts +12 -12
  217. package/dist/providers/models.d.ts.map +1 -1
  218. package/dist/providers/models.js +18 -0
  219. package/dist/providers/types.d.ts +3 -0
  220. package/dist/providers/types.d.ts.map +1 -1
  221. package/dist/review/createCodeReviewPrompt.d.ts +2 -0
  222. package/dist/review/createCodeReviewPrompt.d.ts.map +1 -0
  223. package/dist/review/createCodeReviewPrompt.js +11 -0
  224. package/dist/review/index.d.ts +2 -0
  225. package/dist/review/index.d.ts.map +1 -0
  226. package/dist/review/index.js +1 -0
  227. package/dist/server/AgentSessionManager.d.ts +10 -1
  228. package/dist/server/AgentSessionManager.d.ts.map +1 -1
  229. package/dist/server/AgentSessionManager.js +203 -12
  230. package/dist/server/InMemorySession.d.ts +34 -1
  231. package/dist/server/InMemorySession.d.ts.map +1 -1
  232. package/dist/server/InMemorySession.js +558 -10
  233. package/dist/server/InMemorySessionStore.d.ts +2 -0
  234. package/dist/server/InMemorySessionStore.d.ts.map +1 -1
  235. package/dist/server/InMemorySessionStore.js +7 -0
  236. package/dist/server/PersistentSessionStore.d.ts +2 -0
  237. package/dist/server/PersistentSessionStore.d.ts.map +1 -1
  238. package/dist/server/PersistentSessionStore.js +80 -5
  239. package/dist/server/createGoalTitle.d.ts +2 -0
  240. package/dist/server/createGoalTitle.d.ts.map +1 -0
  241. package/dist/server/createGoalTitle.js +4 -0
  242. package/dist/server/createProtocolHttpServer.d.ts.map +1 -1
  243. package/dist/server/createProtocolHttpServer.js +119 -2
  244. package/dist/server/runLocalProtocolServer.d.ts.map +1 -1
  245. package/dist/server/runLocalProtocolServer.js +18 -2
  246. package/dist/tasks/index.d.ts +2 -0
  247. package/dist/tasks/index.d.ts.map +1 -0
  248. package/dist/tasks/index.js +1 -0
  249. package/dist/tasks/types.d.ts +39 -0
  250. package/dist/tasks/types.d.ts.map +1 -0
  251. package/dist/tasks/types.js +1 -0
  252. package/dist/tools/Agent.d.ts +13 -3
  253. package/dist/tools/Agent.d.ts.map +1 -1
  254. package/dist/tools/Agent.js +40 -12
  255. package/dist/tools/claude/AskUserQuestion.d.ts +23 -0
  256. package/dist/tools/claude/AskUserQuestion.d.ts.map +1 -0
  257. package/dist/tools/claude/AskUserQuestion.js +52 -0
  258. package/dist/tools/claude/Bash.d.ts +2 -0
  259. package/dist/tools/claude/Bash.d.ts.map +1 -1
  260. package/dist/tools/claude/Bash.js +20 -2
  261. package/dist/tools/claude/SendMessage.d.ts +10 -0
  262. package/dist/tools/claude/SendMessage.d.ts.map +1 -0
  263. package/dist/tools/claude/SendMessage.js +33 -0
  264. package/dist/tools/claude/TaskCreate.d.ts +12 -0
  265. package/dist/tools/claude/TaskCreate.d.ts.map +1 -0
  266. package/dist/tools/claude/TaskCreate.js +34 -0
  267. package/dist/tools/claude/TaskGet.d.ts +16 -0
  268. package/dist/tools/claude/TaskGet.d.ts.map +1 -0
  269. package/dist/tools/claude/TaskGet.js +44 -0
  270. package/dist/tools/claude/TaskList.d.ts +10 -0
  271. package/dist/tools/claude/TaskList.d.ts.map +1 -0
  272. package/dist/tools/claude/TaskList.js +51 -0
  273. package/dist/tools/claude/TaskOutput.d.ts +17 -0
  274. package/dist/tools/claude/TaskOutput.d.ts.map +1 -0
  275. package/dist/tools/claude/TaskOutput.js +74 -0
  276. package/dist/tools/claude/TaskStop.d.ts +10 -0
  277. package/dist/tools/claude/TaskStop.d.ts.map +1 -0
  278. package/dist/tools/claude/TaskStop.js +42 -0
  279. package/dist/tools/claude/TaskUpdate.d.ts +21 -0
  280. package/dist/tools/claude/TaskUpdate.d.ts.map +1 -0
  281. package/dist/tools/claude/TaskUpdate.js +55 -0
  282. package/dist/tools/claude/index.d.ts +111 -5
  283. package/dist/tools/claude/index.d.ts.map +1 -1
  284. package/dist/tools/claude/index.js +24 -2
  285. package/dist/tools/claude/parseBackgroundTaskId.d.ts +2 -0
  286. package/dist/tools/claude/parseBackgroundTaskId.d.ts.map +1 -0
  287. package/dist/tools/claude/parseBackgroundTaskId.js +7 -0
  288. package/dist/tools/claude/taskSchemas.d.ts +14 -0
  289. package/dist/tools/claude/taskSchemas.d.ts.map +1 -0
  290. package/dist/tools/claude/taskSchemas.js +18 -0
  291. package/dist/tools/codex/exec_command.d.ts +8 -6
  292. package/dist/tools/codex/exec_command.d.ts.map +1 -1
  293. package/dist/tools/codex/exec_command.js +37 -18
  294. package/dist/tools/codex/followup_task.d.ts +11 -0
  295. package/dist/tools/codex/followup_task.d.ts.map +1 -0
  296. package/dist/tools/codex/followup_task.js +18 -0
  297. package/dist/tools/codex/humanizeTaskName.d.ts +2 -0
  298. package/dist/tools/codex/humanizeTaskName.d.ts.map +1 -0
  299. package/dist/tools/codex/humanizeTaskName.js +4 -0
  300. package/dist/tools/codex/index.d.ts +90 -7
  301. package/dist/tools/codex/index.d.ts.map +1 -1
  302. package/dist/tools/codex/index.js +24 -0
  303. package/dist/tools/codex/interrupt_agent.d.ts +10 -0
  304. package/dist/tools/codex/interrupt_agent.d.ts.map +1 -0
  305. package/dist/tools/codex/interrupt_agent.js +17 -0
  306. package/dist/tools/codex/list_agents.d.ts +12 -0
  307. package/dist/tools/codex/list_agents.d.ts.map +1 -0
  308. package/dist/tools/codex/list_agents.js +23 -0
  309. package/dist/tools/codex/request_user_input.d.ts +16 -0
  310. package/dist/tools/codex/request_user_input.d.ts.map +1 -0
  311. package/dist/tools/codex/request_user_input.js +58 -0
  312. package/dist/tools/codex/requireSubagentContext.d.ts +3 -0
  313. package/dist/tools/codex/requireSubagentContext.d.ts.map +1 -0
  314. package/dist/tools/codex/requireSubagentContext.js +6 -0
  315. package/dist/tools/codex/spawn_agent.d.ts +9 -0
  316. package/dist/tools/codex/spawn_agent.d.ts.map +1 -0
  317. package/dist/tools/codex/spawn_agent.js +35 -0
  318. package/dist/tools/codex/subagentSchemas.d.ts +8 -0
  319. package/dist/tools/codex/subagentSchemas.d.ts.map +1 -0
  320. package/dist/tools/codex/subagentSchemas.js +13 -0
  321. package/dist/tools/codex/unifiedExecOutput.d.ts +14 -0
  322. package/dist/tools/codex/unifiedExecOutput.d.ts.map +1 -0
  323. package/dist/tools/codex/unifiedExecOutput.js +44 -0
  324. package/dist/tools/codex/update_plan.d.ts +10 -0
  325. package/dist/tools/codex/update_plan.d.ts.map +1 -0
  326. package/dist/tools/codex/update_plan.js +34 -0
  327. package/dist/tools/codex/wait_agent.d.ts +13 -0
  328. package/dist/tools/codex/wait_agent.d.ts.map +1 -0
  329. package/dist/tools/codex/wait_agent.js +32 -0
  330. package/dist/tools/codex/write_stdin.d.ts +6 -1
  331. package/dist/tools/codex/write_stdin.d.ts.map +1 -1
  332. package/dist/tools/codex/write_stdin.js +44 -12
  333. package/dist/tools/goals/create_goal.d.ts +11 -0
  334. package/dist/tools/goals/create_goal.d.ts.map +1 -0
  335. package/dist/tools/goals/create_goal.js +29 -0
  336. package/dist/tools/goals/get_goal.d.ts +9 -0
  337. package/dist/tools/goals/get_goal.d.ts.map +1 -0
  338. package/dist/tools/goals/get_goal.js +26 -0
  339. package/dist/tools/goals/goalSchemas.d.ts +8 -0
  340. package/dist/tools/goals/goalSchemas.d.ts.map +1 -0
  341. package/dist/tools/goals/goalSchemas.js +13 -0
  342. package/dist/tools/goals/index.d.ts +30 -0
  343. package/dist/tools/goals/index.d.ts.map +1 -0
  344. package/dist/tools/goals/index.js +7 -0
  345. package/dist/tools/goals/update_goal.d.ts +11 -0
  346. package/dist/tools/goals/update_goal.d.ts.map +1 -0
  347. package/dist/tools/goals/update_goal.js +33 -0
  348. package/dist/tools/index.d.ts +1 -0
  349. package/dist/tools/index.d.ts.map +1 -1
  350. package/dist/tools/index.js +1 -0
  351. package/dist/tools/pi/bash.d.ts.map +1 -1
  352. package/dist/tools/pi/bash.js +2 -0
  353. package/dist/tools/utils/readSessionWithProgress.d.ts +9 -0
  354. package/dist/tools/utils/readSessionWithProgress.d.ts.map +1 -0
  355. package/dist/tools/utils/readSessionWithProgress.js +27 -0
  356. package/dist/tools/utils/shell.d.ts +2 -0
  357. package/dist/tools/utils/shell.d.ts.map +1 -1
  358. package/dist/tools/utils/shell.js +37 -0
  359. package/dist/tools/utils/summarizeShellOutput.d.ts.map +1 -1
  360. package/dist/tools/utils/summarizeShellOutput.js +2 -0
  361. package/dist/user-input/index.d.ts +2 -0
  362. package/dist/user-input/index.d.ts.map +1 -0
  363. package/dist/user-input/index.js +1 -0
  364. package/dist/user-input/types.d.ts +19 -0
  365. package/dist/user-input/types.d.ts.map +1 -0
  366. package/dist/user-input/types.js +1 -0
  367. package/dist/web/assets/highlighted-body-OFNGDK62-BuJOCQJD.js +1 -0
  368. package/dist/web/assets/highlighted-body-OFNGDK62-TwhCqUaJ.js +1 -0
  369. package/dist/web/assets/index-B6Bc6sUJ.css +1 -0
  370. package/dist/web/assets/index-BC99-iZC.js +341 -0
  371. package/dist/web/assets/index-BZN9jSiw.js +341 -0
  372. package/dist/web/assets/index-CcF0unjO.css +1 -0
  373. package/dist/web/index.html +2 -2
  374. package/package.json +2 -1
@@ -1,33 +1,41 @@
1
1
  import { existsSync } from "node:fs";
2
2
  import { mkdir, readFile, readdir, rm, stat, writeFile } from "node:fs/promises";
3
3
  import { homedir } from "node:os";
4
+ import { isAbsolute, resolve } from "node:path";
5
+ import { assertCanWritePath } from "./assertCanWritePath.js";
4
6
  export function createNodeFileSystemContext(cwd, options = {}) {
7
+ const permissionMode = options.permissionMode ?? (() => "full_access");
8
+ const resolvePath = (path) => (isAbsolute(path) ? path : resolve(cwd, path));
5
9
  return {
6
10
  cwd,
7
11
  home: options.home ?? homedir(),
8
12
  async exists(path) {
9
- return existsSync(path);
13
+ return existsSync(resolvePath(path));
10
14
  },
11
15
  async mkdir(path, options) {
12
- await mkdir(path, { recursive: options?.recursive ?? false });
16
+ const target = resolvePath(path);
17
+ await assertCanWritePath(cwd, target, permissionMode());
18
+ await mkdir(target, { recursive: options?.recursive ?? false });
13
19
  },
14
20
  async readFile(path) {
15
- return readFile(path, "utf8");
21
+ return readFile(resolvePath(path), "utf8");
16
22
  },
17
23
  async readFileBuffer(path) {
18
- return readFile(path);
24
+ return readFile(resolvePath(path));
19
25
  },
20
26
  async readdir(path) {
21
- return readdir(path);
27
+ return readdir(resolvePath(path));
22
28
  },
23
29
  async rm(path, options) {
24
- await rm(path, {
30
+ const target = resolvePath(path);
31
+ await assertCanWritePath(cwd, target, permissionMode());
32
+ await rm(target, {
25
33
  recursive: options?.recursive ?? false,
26
34
  force: options?.force ?? false,
27
35
  });
28
36
  },
29
37
  async stat(path) {
30
- const stats = await stat(path);
38
+ const stats = await stat(resolvePath(path));
31
39
  return {
32
40
  isFile: stats.isFile(),
33
41
  isDirectory: stats.isDirectory(),
@@ -37,7 +45,9 @@ export function createNodeFileSystemContext(cwd, options = {}) {
37
45
  };
38
46
  },
39
47
  async writeFile(path, content) {
40
- await writeFile(path, content);
48
+ const target = resolvePath(path);
49
+ await assertCanWritePath(cwd, target, permissionMode());
50
+ await writeFile(target, content);
41
51
  },
42
52
  };
43
53
  }
@@ -0,0 +1,7 @@
1
+ import type { PermissionMode } from "../../permissions/index.js";
2
+ export declare function createSandboxedCommand(options: {
3
+ command: string;
4
+ cwd: string;
5
+ mode: PermissionMode;
6
+ }): Promise<string>;
7
+ //# sourceMappingURL=createSandboxedCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSandboxedCommand.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/createSandboxedCommand.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAKjE,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,cAAc,CAAC;CACxB,GAAG,OAAO,CAAC,MAAM,CAAC,CAoClB"}
@@ -0,0 +1,47 @@
1
+ import { createHash } from "node:crypto";
2
+ import { createRequire } from "node:module";
3
+ import { mkdtemp, writeFile } from "node:fs/promises";
4
+ import { tmpdir } from "node:os";
5
+ import { dirname, join } from "node:path";
6
+ import { findGitWritablePaths } from "./findGitWritablePaths.js";
7
+ const require = createRequire(import.meta.url);
8
+ let configDirectoryPromise;
9
+ export async function createSandboxedCommand(options) {
10
+ if (options.mode === "full_access")
11
+ return options.command;
12
+ const writablePaths = [tmpdir()];
13
+ if (options.mode === "workspace_write" || options.mode === "auto") {
14
+ writablePaths.push(options.cwd);
15
+ writablePaths.push(...(await findGitWritablePaths(options.cwd)));
16
+ }
17
+ const config = {
18
+ network: { allowedDomains: [], deniedDomains: [] },
19
+ filesystem: {
20
+ denyRead: [],
21
+ allowRead: [],
22
+ allowWrite: writablePaths,
23
+ denyWrite: [],
24
+ },
25
+ };
26
+ configDirectoryPromise ??= mkdtemp(join(tmpdir(), "rig-sandbox-"));
27
+ const configDirectory = await configDirectoryPromise;
28
+ const key = createHash("sha256")
29
+ .update(`${options.cwd}\0${options.mode}`)
30
+ .digest("hex")
31
+ .slice(0, 20);
32
+ const configPath = join(configDirectory, `${key}.json`);
33
+ await writeFile(configPath, JSON.stringify(config), { mode: 0o600 });
34
+ const packageEntry = require.resolve("@anthropic-ai/sandbox-runtime");
35
+ const cliPath = join(dirname(packageEntry), "cli.js");
36
+ return [
37
+ shellQuote(process.execPath),
38
+ shellQuote(cliPath),
39
+ "--settings",
40
+ shellQuote(configPath),
41
+ "-c",
42
+ shellQuote(options.command),
43
+ ].join(" ");
44
+ }
45
+ function shellQuote(value) {
46
+ return `'${value.replaceAll("'", `'"'"'`)}'`;
47
+ }
@@ -0,0 +1,2 @@
1
+ export declare function findGitWritablePaths(cwd: string): Promise<readonly string[]>;
2
+ //# sourceMappingURL=findGitWritablePaths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findGitWritablePaths.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/findGitWritablePaths.ts"],"names":[],"mappings":"AAGA,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAwBlF"}
@@ -0,0 +1,54 @@
1
+ import { lstat, readFile, realpath } from "node:fs/promises";
2
+ import { dirname, join, parse, resolve, sep } from "node:path";
3
+ export async function findGitWritablePaths(cwd) {
4
+ const dotGit = await findDotGit(cwd);
5
+ if (dotGit === undefined)
6
+ return [];
7
+ const metadata = await lstat(dotGit);
8
+ if (metadata.isDirectory())
9
+ return [await realpath(dotGit)];
10
+ if (!metadata.isFile())
11
+ return [];
12
+ const contents = await readFile(dotGit, "utf8");
13
+ const match = /^gitdir:\s*(.+)\s*$/imu.exec(contents);
14
+ if (match?.[1] === undefined)
15
+ return [];
16
+ const gitDirectory = await realpath(resolve(dirname(dotGit), match[1]));
17
+ const parts = gitDirectory.split(sep);
18
+ const dotGitIndex = parts.lastIndexOf(".git");
19
+ const metadataKind = parts[dotGitIndex + 1];
20
+ if (dotGitIndex < 0 || (metadataKind !== "worktrees" && metadataKind !== "modules"))
21
+ return [];
22
+ if (metadataKind === "modules")
23
+ return [gitDirectory];
24
+ const commonDirectory = await findCommonGitDirectory(gitDirectory);
25
+ const expectedCommonDirectory = parts.slice(0, dotGitIndex + 1).join(sep) || sep;
26
+ return commonDirectory === expectedCommonDirectory
27
+ ? [gitDirectory, commonDirectory]
28
+ : [gitDirectory];
29
+ }
30
+ async function findDotGit(cwd) {
31
+ let directory = resolve(cwd);
32
+ for (;;) {
33
+ const candidate = join(directory, ".git");
34
+ try {
35
+ await lstat(candidate);
36
+ return candidate;
37
+ }
38
+ catch {
39
+ const parent = dirname(directory);
40
+ if (parent === directory || directory === parse(directory).root)
41
+ return undefined;
42
+ directory = parent;
43
+ }
44
+ }
45
+ }
46
+ async function findCommonGitDirectory(gitDirectory) {
47
+ try {
48
+ const commonDirectory = await realpath(resolve(gitDirectory, (await readFile(join(gitDirectory, "commondir"), "utf8")).trim()));
49
+ return commonDirectory;
50
+ }
51
+ catch {
52
+ return undefined;
53
+ }
54
+ }
@@ -0,0 +1,2 @@
1
+ export declare function isPathInsideWorkspace(cwd: string, path: string): Promise<boolean>;
2
+ //# sourceMappingURL=isPathInsideWorkspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isPathInsideWorkspace.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/isPathInsideWorkspace.ts"],"names":[],"mappings":"AAKA,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASvF"}
@@ -0,0 +1,14 @@
1
+ import { realpath } from "node:fs/promises";
2
+ import { isAbsolute, resolve, sep } from "node:path";
3
+ import { resolvePotentialPath } from "./resolvePotentialPath.js";
4
+ export async function isPathInsideWorkspace(cwd, path) {
5
+ try {
6
+ const root = await realpath(cwd);
7
+ const target = isAbsolute(path) ? path : resolve(cwd, path);
8
+ const canonicalTarget = await resolvePotentialPath(target);
9
+ return canonicalTarget === root || canonicalTarget.startsWith(`${root}${sep}`);
10
+ }
11
+ catch {
12
+ return false;
13
+ }
14
+ }
@@ -0,0 +1,2 @@
1
+ export declare function resolvePotentialPath(target: string, symlinkDepth?: number): Promise<string>;
2
+ //# sourceMappingURL=resolvePotentialPath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolvePotentialPath.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/resolvePotentialPath.ts"],"names":[],"mappings":"AAGA,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,SAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAgC5F"}
@@ -0,0 +1,32 @@
1
+ import { lstat, readlink } from "node:fs/promises";
2
+ import { dirname, join, parse, resolve, sep } from "node:path";
3
+ export async function resolvePotentialPath(target, symlinkDepth = 0) {
4
+ if (symlinkDepth > 40)
5
+ throw new Error(`Cannot resolve symbolic link chain for ${target}.`);
6
+ const pathRoot = parse(target).root;
7
+ const parts = target.slice(pathRoot.length).split(sep).filter(Boolean);
8
+ let current = pathRoot;
9
+ for (let index = 0; index < parts.length; index += 1) {
10
+ const part = parts[index];
11
+ if (part === undefined)
12
+ continue;
13
+ const candidate = join(current, part);
14
+ try {
15
+ const metadata = await lstat(candidate);
16
+ if (metadata.isSymbolicLink()) {
17
+ const destination = resolve(dirname(candidate), await readlink(candidate));
18
+ return resolvePotentialPath(join(destination, ...parts.slice(index + 1)), symlinkDepth + 1);
19
+ }
20
+ current = candidate;
21
+ }
22
+ catch (error) {
23
+ if (error instanceof Error &&
24
+ "code" in error &&
25
+ error.code === "ENOENT") {
26
+ return join(current, ...parts.slice(index));
27
+ }
28
+ throw error;
29
+ }
30
+ }
31
+ return current;
32
+ }
@@ -0,0 +1,3 @@
1
+ import type { PermissionMode } from "../permissions/index.js";
2
+ export declare function createPermissionInstructions(mode: PermissionMode): string;
3
+ //# sourceMappingURL=createPermissionInstructions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createPermissionInstructions.d.ts","sourceRoot":"","sources":["../../sources/agent/createPermissionInstructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAWzE"}
@@ -0,0 +1,12 @@
1
+ export function createPermissionInstructions(mode) {
2
+ if (mode === "auto") {
3
+ return "You are in Auto mode. Routine reads and workspace edits run automatically. Permission-sensitive actions are reviewed automatically; low-risk actions proceed, while potentially unsafe actions require one-time user approval. Shell commands remain workspace-sandboxed unless you explicitly request escalation with the tool's sandbox option. Request escalation only when the sandbox blocks necessary work, and give a clear reason. Do not work around a denied permission or retry the same action unchanged.";
4
+ }
5
+ if (mode === "read_only") {
6
+ return "You are in Read only mode. You may inspect files and run non-mutating shell commands. File tools cannot make changes; shell commands may only write temporary files, and shell network access is blocked.";
7
+ }
8
+ if (mode === "workspace_write") {
9
+ return "You are in Workspace write mode. You may modify files inside the working directory. Shell writes outside it and shell network access are blocked.";
10
+ }
11
+ return "You are in Full access mode. Filesystem, shell, and network access are unrestricted.";
12
+ }
@@ -6,7 +6,7 @@ export function createSubagentInstructions(parentInstructions, depth, maxDepth)
6
6
  return [
7
7
  baseInstructions,
8
8
  "You are a subagent working on one delegated step. Complete the task independently and return a concise result to the parent agent.",
9
- "Your conversation is read-only after this step finishes, so do not expect follow-up messages or a resumed session.",
9
+ "The parent agent may send follow-up work after this step. Continue from your existing context when it does.",
10
10
  depth < maxDepth
11
11
  ? `You may delegate focused work to another subagent. The current depth is ${depth} of ${maxDepth}.`
12
12
  : "You are at the maximum subagent depth and must complete the task directly.",
@@ -1 +1 @@
1
- {"version":3,"file":"createSystemPrompt.d.ts","sourceRoot":"","sources":["../../sources/agent/createSystemPrompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAK9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,yBAAyB;IACtC,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,OAAO,EAAE,YAAY,CAAC;CACzB;AAED,wBAAsB,kBAAkB,CACpC,OAAO,EAAE,yBAAyB,GACnC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA4B7B"}
1
+ {"version":3,"file":"createSystemPrompt.d.ts","sourceRoot":"","sources":["../../sources/agent/createSystemPrompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAM9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,yBAAyB;IACtC,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,OAAO,EAAE,YAAY,CAAC;CACzB;AAED,wBAAsB,kBAAkB,CACpC,OAAO,EAAE,yBAAyB,GACnC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgC7B"}
@@ -1,3 +1,4 @@
1
+ import { createPermissionInstructions } from "./createPermissionInstructions.js";
1
2
  import { loadAgentsMdInstructions } from "./loadAgentsMdInstructions.js";
2
3
  import { selectSystemPromptForModel } from "./selectSystemPromptForModel.js";
3
4
  import { loadSkillInstructions } from "./skills/loadSkillInstructions.js";
@@ -24,5 +25,8 @@ export async function createSystemPrompt(options) {
24
25
  if (skillInstructions !== undefined) {
25
26
  parts.push(skillInstructions);
26
27
  }
28
+ if (options.context.permissions !== undefined) {
29
+ parts.push(createPermissionInstructions(options.context.permissions.mode));
30
+ }
27
31
  return parts.length > 0 ? parts.join("\n\n") : undefined;
28
32
  }
@@ -1,5 +1,5 @@
1
1
  export { Agent } from "./Agent.js";
2
- export type { AgentOptions, AgentRunOptions, AgentRunResult, AgentSnapshot, AgentStatus, QueuedAgentMessage, } from "./Agent.js";
2
+ export type { AgentOptions, AgentCompactionResult, AgentRunOptions, AgentRunResult, AgentSnapshot, AgentStatus, QueuedAgentMessage, } from "./Agent.js";
3
3
  export { runAgentLoop } from "./loop.js";
4
4
  export type { AgentLoopEvent, AgentLoopResult, RunAgentLoopOptions } from "./loop.js";
5
5
  export { createSystemPrompt } from "./createSystemPrompt.js";
@@ -20,9 +20,13 @@ export { selectToolsForModel } from "./selectToolsForModel.js";
20
20
  export type { SelectToolsForModelOptions } from "./selectToolsForModel.js";
21
21
  export type { AgentBlock, AgentMessage, AnyDefinedTool, ContentBlock, DefinedTool, ImageBlock, Message, SystemMessage, TextBlock, ThinkingBlock, ToolCallBlock, ToolResultBlock, UserMessage, } from "./types.js";
22
22
  export type { AgentContext } from "./context/AgentContext.js";
23
- export type { BashContext, BashRunOptions, BashRunResult } from "./context/BashContext.js";
23
+ export type { PermissionMode } from "../permissions/index.js";
24
+ export type { BashContext, BashRunOptions, BashRunResult, BashSessionReadOptions, BashSessionSnapshot, BashSessionStatus, } from "./context/BashContext.js";
24
25
  export type { FileSystemContext, FileSystemStat } from "./context/FileSystemContext.js";
25
- export type { SpawnSubagentRequest, SpawnSubagentResult, SubagentContext, SubagentRunStatus, } from "./context/SubagentContext.js";
26
+ export type { GoalContext } from "./context/GoalContext.js";
27
+ export type { UserInputContext } from "./context/UserInputContext.js";
28
+ export type { TaskContext } from "./context/TaskContext.js";
29
+ export type { ManagedSubagent, SpawnSubagentRequest, SpawnSubagentResult, SubagentContext, SubagentRunStatus, WaitForSubagentResult, } from "./context/SubagentContext.js";
26
30
  export { createJustBashAgentContext } from "./context/createJustBashAgentContext.js";
27
31
  export { createJustBashBashContext } from "./context/createJustBashBashContext.js";
28
32
  export { createJustBashFileSystemContext } from "./context/createJustBashFileSystemContext.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../sources/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EACR,YAAY,EACZ,eAAe,EACf,cAAc,EACd,aAAa,EACb,WAAW,EACX,kBAAkB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,YAAY,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,YAAY,EACR,UAAU,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,WAAW,EACX,UAAU,EACV,OAAO,EACP,aAAa,EACb,SAAS,EACT,aAAa,EACb,aAAa,EACb,eAAe,EACf,WAAW,GACd,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC3F,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACxF,YAAY,EACR,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,GACpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAE,+BAA+B,EAAE,MAAM,8CAA8C,CAAC;AAC/F,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../sources/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EACR,YAAY,EACZ,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,aAAa,EACb,WAAW,EACX,kBAAkB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,YAAY,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,YAAY,EACR,UAAU,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,WAAW,EACX,UAAU,EACV,OAAO,EACP,aAAa,EACb,SAAS,EACT,aAAa,EACb,aAAa,EACb,eAAe,EACf,WAAW,GACd,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EACR,WAAW,EACX,cAAc,EACd,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,GACpB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACxF,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,YAAY,EACR,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,GACxB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAE,+BAA+B,EAAE,MAAM,8CAA8C,CAAC;AAC/F,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { AgentContext } from "./context/AgentContext.js";
2
- import type { AnyDefinedTool, Message } from "./types.js";
3
- import type { AssistantMessageEvent, Provider, StopReason } from "../providers/types.js";
2
+ import type { AnyDefinedTool, Message, ToolResultBlock, UserMessage } from "./types.js";
3
+ import type { AssistantMessageEvent, Provider, StopReason, ToolCall as ProviderToolCall } from "../providers/types.js";
4
4
  export interface RunAgentLoopOptions {
5
5
  provider: Provider;
6
6
  modelId: string;
@@ -8,20 +8,34 @@ export interface RunAgentLoopOptions {
8
8
  tools: readonly AnyDefinedTool[];
9
9
  instructions?: string;
10
10
  messages: readonly Message[];
11
+ /** Model-facing history, when the visible transcript has been compacted. */
12
+ contextMessages?: readonly Message[];
11
13
  signal?: AbortSignal;
12
14
  sessionId?: string;
13
15
  idFactory?: () => string;
14
16
  now?: () => number;
15
17
  onEvent?: (event: AgentLoopEvent) => void | Promise<void>;
16
18
  onMessage?: (message: Message) => void | Promise<void>;
19
+ takeSteering?: () => readonly UserMessage[];
17
20
  context: AgentContext;
18
21
  }
19
22
  export type AgentLoopEvent = AssistantMessageEvent | {
20
23
  type: "inference_iteration_start";
21
24
  iteration: number;
25
+ } | {
26
+ type: "tool_execution_start";
27
+ toolCall: ProviderToolCall;
28
+ } | {
29
+ type: "tool_execution_end";
30
+ result: Pick<ToolResultBlock, "display" | "isError" | "toolCallId" | "toolName" | "type">;
31
+ } | {
32
+ type: "tool_execution_progress";
33
+ display: string;
34
+ toolCallId: string;
22
35
  };
23
36
  export interface AgentLoopResult {
24
37
  messages: readonly Message[];
38
+ contextMessages: readonly Message[];
25
39
  stopReason: StopReason;
26
40
  }
27
41
  export declare function runAgentLoop(options: RunAgentLoopOptions): Promise<AgentLoopResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../sources/agent/loop.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAK9D,OAAO,KAAK,EAGR,cAAc,EAEd,OAAO,EAGV,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAGR,qBAAqB,EAIrB,QAAQ,EACR,UAAU,EAQb,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,mBAAmB;IAChC,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,MAAM,cAAc,GACpB,qBAAqB,GACrB;IACI,IAAI,EAAE,2BAA2B,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAER,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC;CAC1B;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CAmLzF"}
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../sources/agent/loop.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAK9D,OAAO,KAAK,EAGR,cAAc,EAEd,OAAO,EACP,eAAe,EACf,WAAW,EACd,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAGR,qBAAqB,EAIrB,QAAQ,EACR,UAAU,EAGV,QAAQ,IAAI,gBAAgB,EAK/B,MAAM,uBAAuB,CAAC;AAS/B,MAAM,WAAW,mBAAmB;IAChC,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,4EAA4E;IAC5E,eAAe,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IACrC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,MAAM,SAAS,WAAW,EAAE,CAAC;IAC5C,OAAO,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,MAAM,cAAc,GACpB,qBAAqB,GACrB;IACI,IAAI,EAAE,2BAA2B,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CACrB,GACD;IACI,IAAI,EAAE,sBAAsB,CAAC;IAC7B,QAAQ,EAAE,gBAAgB,CAAC;CAC9B,GACD;IACI,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC,CAAC;CAC7F,GACD;IACI,IAAI,EAAE,yBAAyB,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAER,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,eAAe,EAAE,SAAS,OAAO,EAAE,CAAC;IACpC,UAAU,EAAE,UAAU,CAAC;CAC1B;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CAwOzF"}
@@ -5,12 +5,14 @@ import { isInvalidImageRequestError } from "./isInvalidImageRequestError.js";
5
5
  import { prepareProviderMessageImages } from "./prepareProviderMessageImages.js";
6
6
  import { replaceLastTurnToolResultImages } from "./replaceLastTurnToolResultImages.js";
7
7
  import { createSystemPrompt } from "./createSystemPrompt.js";
8
+ import { requestAutoPermissionApproval, reviewAutoPermission, shouldElevateToolInAutoMode, shouldReviewToolInAutoMode, summarizePermissionAction, } from "../permissions/index.js";
8
9
  export async function runAgentLoop(options) {
9
10
  const model = findModel(options.provider, options.modelId);
10
11
  const idFactory = options.idFactory ?? createId;
11
12
  const now = options.now ?? Date.now;
12
13
  const transcript = [...options.messages];
13
- const providerMessages = toProviderMessages(options.messages, {
14
+ const contextTranscript = [...(options.contextMessages ?? options.messages)];
15
+ const providerMessages = toProviderMessages(contextTranscript, {
14
16
  model,
15
17
  now,
16
18
  providerId: options.provider.id,
@@ -19,7 +21,7 @@ export async function runAgentLoop(options) {
19
21
  provider: options.provider,
20
22
  model,
21
23
  ...(options.instructions !== undefined ? { instructions: options.instructions } : {}),
22
- messages: options.messages,
24
+ messages: contextTranscript,
23
25
  context: options.context,
24
26
  });
25
27
  const providerTools = options.tools.map(toProviderTool);
@@ -28,7 +30,11 @@ export async function runAgentLoop(options) {
28
30
  let iteration = 0;
29
31
  for (;;) {
30
32
  if (options.signal?.aborted) {
31
- return { messages: transcript, stopReason: "aborted" };
33
+ return {
34
+ messages: transcript,
35
+ contextMessages: contextTranscript,
36
+ stopReason: "aborted",
37
+ };
32
38
  }
33
39
  iteration += 1;
34
40
  await options.onEvent?.({
@@ -60,12 +66,17 @@ export async function runAgentLoop(options) {
60
66
  }
61
67
  catch (error) {
62
68
  if (options.signal?.aborted) {
63
- return { messages: transcript, stopReason: "aborted" };
69
+ return {
70
+ messages: transcript,
71
+ contextMessages: contextTranscript,
72
+ stopReason: "aborted",
73
+ };
64
74
  }
65
75
  if (isInvalidImageRequestError(error)) {
66
76
  const replacements = replaceLastTurnToolResultImages(transcript, "Invalid image");
67
77
  if (replacements.length > 0) {
68
- providerMessages.splice(0, providerMessages.length, ...toProviderMessages(transcript, {
78
+ replaceLastTurnToolResultImages(contextTranscript, "Invalid image");
79
+ providerMessages.splice(0, providerMessages.length, ...toProviderMessages(contextTranscript, {
69
80
  model,
70
81
  now,
71
82
  providerId: options.provider.id,
@@ -81,7 +92,8 @@ export async function runAgentLoop(options) {
81
92
  if (isInvalidImageRequestError(assistantMessage)) {
82
93
  const replacements = replaceLastTurnToolResultImages(transcript, "Invalid image");
83
94
  if (replacements.length > 0) {
84
- providerMessages.splice(0, providerMessages.length, ...toProviderMessages(transcript, {
95
+ replaceLastTurnToolResultImages(contextTranscript, "Invalid image");
96
+ providerMessages.splice(0, providerMessages.length, ...toProviderMessages(contextTranscript, {
85
97
  model,
86
98
  now,
87
99
  providerId: options.provider.id,
@@ -101,34 +113,77 @@ export async function runAgentLoop(options) {
101
113
  providerMessages.push(assistantMessage);
102
114
  const agentMessage = assistantMessageToAgentMessage(assistantMessage, idFactory);
103
115
  transcript.push(agentMessage);
116
+ contextTranscript.push(agentMessage);
104
117
  await options.onMessage?.(agentMessage);
105
- if (assistantMessage.stopReason === "aborted" ||
106
- assistantMessage.stopReason === "error" ||
107
- assistantMessage.stopReason !== "toolUse") {
118
+ if (assistantMessage.stopReason === "aborted" || assistantMessage.stopReason === "error") {
108
119
  return {
109
120
  messages: transcript,
121
+ contextMessages: contextTranscript,
122
+ stopReason: assistantMessage.stopReason,
123
+ };
124
+ }
125
+ if (assistantMessage.stopReason !== "toolUse") {
126
+ if (appendSteering(options, transcript, contextTranscript, providerMessages, now) > 0) {
127
+ continue;
128
+ }
129
+ return {
130
+ messages: transcript,
131
+ contextMessages: contextTranscript,
110
132
  stopReason: assistantMessage.stopReason,
111
133
  };
112
134
  }
113
135
  const toolCalls = assistantMessage.content.filter(isProviderToolCall);
114
136
  if (toolCalls.length === 0) {
115
- return { messages: transcript, stopReason: assistantMessage.stopReason };
137
+ return {
138
+ messages: transcript,
139
+ contextMessages: contextTranscript,
140
+ stopReason: assistantMessage.stopReason,
141
+ };
116
142
  }
117
143
  if (options.signal?.aborted) {
118
144
  return appendInterruptedToolResults({
119
145
  toolCalls,
120
146
  transcript,
147
+ contextTranscript,
121
148
  providerMessages,
122
149
  idFactory,
123
150
  now,
124
151
  onMessage: options.onMessage,
125
152
  });
126
153
  }
127
- const toolResultBlocks = await Promise.all(toolCalls.map((toolCall) => executeToolCall(toolCall, toolsByName, toolContext, options.signal)));
154
+ const toolResultBlocks = await Promise.all(toolCalls.map(async (toolCall) => {
155
+ await options.onEvent?.({ type: "tool_execution_start", toolCall });
156
+ const result = await executeToolCall(toolCall, toolsByName, toolContext, {
157
+ messages: contextTranscript,
158
+ model,
159
+ now,
160
+ onProgress: (display) => {
161
+ void options.onEvent?.({
162
+ type: "tool_execution_progress",
163
+ display,
164
+ toolCallId: toolCall.id,
165
+ });
166
+ },
167
+ provider: options.provider,
168
+ ...(options.signal === undefined ? {} : { signal: options.signal }),
169
+ });
170
+ await options.onEvent?.({
171
+ type: "tool_execution_end",
172
+ result: {
173
+ type: "tool_result",
174
+ toolCallId: result.toolCallId,
175
+ toolName: result.toolName,
176
+ display: result.display,
177
+ ...(result.isError === undefined ? {} : { isError: result.isError }),
178
+ },
179
+ });
180
+ return result;
181
+ }));
128
182
  if (options.signal?.aborted) {
129
183
  return appendInterruptedToolResults({
130
184
  toolCalls,
131
185
  transcript,
186
+ contextTranscript,
132
187
  providerMessages,
133
188
  idFactory,
134
189
  now,
@@ -144,9 +199,20 @@ export async function runAgentLoop(options) {
144
199
  blocks: toolResultBlocks,
145
200
  };
146
201
  transcript.push(toolResultMessage);
202
+ contextTranscript.push(toolResultMessage);
147
203
  await options.onMessage?.(toolResultMessage);
204
+ appendSteering(options, transcript, contextTranscript, providerMessages, now);
148
205
  }
149
206
  }
207
+ function appendSteering(options, transcript, contextTranscript, providerMessages, now) {
208
+ const steering = options.takeSteering?.() ?? [];
209
+ for (const message of steering) {
210
+ transcript.push(message);
211
+ contextTranscript.push(message);
212
+ providerMessages.push(toProviderUserMessage(message, now));
213
+ }
214
+ return steering.length;
215
+ }
150
216
  async function appendInterruptedToolResults(options) {
151
217
  const toolResultBlocks = options.toolCalls.map(interruptedToolResultBlock);
152
218
  for (const resultBlock of toolResultBlocks) {
@@ -158,9 +224,11 @@ async function appendInterruptedToolResults(options) {
158
224
  blocks: toolResultBlocks,
159
225
  };
160
226
  options.transcript.push(toolResultMessage);
227
+ options.contextTranscript.push(toolResultMessage);
161
228
  await options.onMessage?.(toolResultMessage);
162
229
  return {
163
230
  messages: options.transcript,
231
+ contextMessages: options.contextTranscript,
164
232
  stopReason: "aborted",
165
233
  };
166
234
  }
@@ -294,7 +362,7 @@ function toProviderToolResultMessage(block, now) {
294
362
  timestamp: now(),
295
363
  };
296
364
  }
297
- async function executeToolCall(toolCall, toolsByName, context, signal) {
365
+ async function executeToolCall(toolCall, toolsByName, context, options) {
298
366
  const tool = toolsByName.get(toolCall.name);
299
367
  if (!tool) {
300
368
  return errorToolResultBlock(toolCall, `Unknown tool '${toolCall.name}' requested by model`);
@@ -303,15 +371,47 @@ async function executeToolCall(toolCall, toolsByName, context, signal) {
303
371
  return errorToolResultBlock(toolCall, `Invalid arguments for tool '${tool.name}'`);
304
372
  }
305
373
  try {
374
+ let runWithFullAccess = false;
375
+ if (context.permissions?.mode === "auto" &&
376
+ (await shouldReviewToolInAutoMode(tool.name, toolCall.arguments, context.fs.cwd))) {
377
+ const review = await reviewAutoPermission({
378
+ args: toolCall.arguments,
379
+ messages: options.messages,
380
+ model: options.model,
381
+ now: options.now,
382
+ provider: options.provider,
383
+ ...(options.signal === undefined ? {} : { signal: options.signal }),
384
+ toolName: tool.name,
385
+ });
386
+ if (review.decision === "ask") {
387
+ const action = summarizePermissionAction(tool.name, toolCall.arguments);
388
+ const approved = await requestAutoPermissionApproval({
389
+ action,
390
+ reason: review.reason,
391
+ ...(options.signal === undefined ? {} : { signal: options.signal }),
392
+ toolCallId: toolCall.id,
393
+ userInput: context.userInput,
394
+ });
395
+ if (!approved) {
396
+ return errorToolResultBlock(toolCall, `Auto mode did not approve ${action}. Reason: ${review.reason}`);
397
+ }
398
+ }
399
+ runWithFullAccess = await shouldElevateToolInAutoMode(tool.name, toolCall.arguments, context.fs.cwd);
400
+ }
306
401
  const execute = tool.execute;
307
402
  const toLLM = tool.toLLM;
308
403
  const toUI = tool.toUI;
309
404
  const executionOptions = {
310
405
  toolCallId: toolCall.id,
311
406
  };
312
- if (signal !== undefined)
313
- executionOptions.signal = signal;
314
- const result = await execute(toolCall.arguments, context, executionOptions);
407
+ if (options.onProgress !== undefined)
408
+ executionOptions.onProgress = options.onProgress;
409
+ if (options.signal !== undefined)
410
+ executionOptions.signal = options.signal;
411
+ const run = () => execute(toolCall.arguments, context, executionOptions);
412
+ const result = runWithFullAccess && context.permissions !== undefined
413
+ ? await context.permissions.runWithMode("full_access", run)
414
+ : await run();
315
415
  return {
316
416
  type: "tool_result",
317
417
  toolCallId: toolCall.id,
@@ -1,5 +1,6 @@
1
1
  import type { Message } from "./types.js";
2
2
  export interface AgentConsole {
3
+ error?(...data: unknown[]): void;
3
4
  log(...data: unknown[]): void;
4
5
  }
5
6
  export declare function printAgentMessageToConsole(message: Message, output?: AgentConsole): void;