@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,29 +1,61 @@
1
1
  import { Type } from "@sinclair/typebox";
2
2
  import { defineTool } from "../../agent/types.js";
3
- import { singleLineText, textOutputSchema, toTextBlocks } from "../utils/index.js";
3
+ import { createUnifiedExecOutput, formatUnifiedExecOutput, unifiedExecOutputSchema, } from "./unifiedExecOutput.js";
4
+ import { readSessionWithProgress } from "../utils/readSessionWithProgress.js";
4
5
  export const codexWriteStdinTool = defineTool({
5
6
  name: "write_stdin",
6
7
  label: "write_stdin",
7
- description: "Writes characters to an existing unified exec session and returns recent output.",
8
+ description: "Writes characters to an existing shell session and returns recent output.",
8
9
  arguments: Type.Object({
9
- session_id: Type.Number({ description: "Identifier of the running unified exec session." }),
10
+ session_id: Type.Number({ description: "Identifier of the running shell session." }),
10
11
  chars: Type.Optional(Type.String({
11
12
  description: "Bytes to write to stdin. Defaults to empty, which polls without writing.",
12
13
  })),
13
14
  yield_time_ms: Type.Optional(Type.Number({
14
- description: "Wait before yielding output. Non-empty writes default to 250 ms and cap at 30000 ms; empty polls wait 5000-300000 ms by default.",
15
+ description: "Wait before yielding output. Non-empty writes default to 250 ms; empty polls default to 5000 ms.",
15
16
  })),
16
17
  max_output_tokens: Type.Optional(Type.Number({
17
18
  description: "Output token budget. Defaults to 10000 tokens; larger requests may be capped by policy.",
18
19
  })),
19
20
  }),
20
- returnType: textOutputSchema,
21
- execute: ({ session_id }) => ({
22
- text: `No active Codex unified exec session ${session_id}; this implementation runs exec_command to completion.`,
23
- }),
24
- toLLM: toTextBlocks,
25
- toUI: (result, args) => singleLineText(args.chars === undefined || args.chars.length === 0
26
- ? `Polled session ${args.session_id}: ${result.text}`
27
- : `Sent input to session ${args.session_id}`),
21
+ returnType: unifiedExecOutputSchema,
22
+ execute: async ({ session_id, chars = "", yield_time_ms, max_output_tokens }, context, execution) => {
23
+ const startedAt = Date.now();
24
+ let interrupted = undefined;
25
+ if (chars.includes("\u0003")) {
26
+ interrupted = await context.bash.killSession(session_id);
27
+ if (interrupted === undefined)
28
+ throw new Error("The shell session was not found.");
29
+ }
30
+ else if (chars.length > 0) {
31
+ if (!context.bash.supportsSessionInput) {
32
+ throw new Error("This shell session does not support interactive input.");
33
+ }
34
+ const written = await context.bash.writeSession(session_id, chars);
35
+ if (!written)
36
+ throw new Error("The shell session is no longer accepting input.");
37
+ }
38
+ const defaultWaitMs = chars.length > 0 ? 250 : 5_000;
39
+ const maximumWaitMs = chars.length > 0 ? 30_000 : 300_000;
40
+ const snapshot = interrupted ??
41
+ (await readSessionWithProgress({
42
+ bash: context.bash,
43
+ ...(execution.onProgress === undefined ? {} : { onProgress: execution.onProgress }),
44
+ sessionId: session_id,
45
+ ...(execution.signal === undefined ? {} : { signal: execution.signal }),
46
+ waitMs: Math.max(0, Math.min(maximumWaitMs, yield_time_ms ?? defaultWaitMs)),
47
+ }));
48
+ if (snapshot === undefined)
49
+ throw new Error("The shell session was not found.");
50
+ return createUnifiedExecOutput(snapshot, (Date.now() - startedAt) / 1_000, max_output_tokens);
51
+ },
52
+ toLLM: (result) => [{ type: "text", text: formatUnifiedExecOutput(result) }],
53
+ toUI: (result, args) => args.chars === undefined || args.chars.length === 0
54
+ ? result.session_id === undefined
55
+ ? "The shell command has finished."
56
+ : "Checked the running shell command."
57
+ : result.session_id === undefined
58
+ ? "Sent input; the shell command has finished."
59
+ : "Sent input to the running shell command.",
28
60
  locks: [],
29
61
  });
@@ -0,0 +1,11 @@
1
+ export declare const createGoalTool: import("../../agent/types.js").DefinedTool<import("@sinclair/typebox").TObject<{
2
+ objective: import("@sinclair/typebox").TString;
3
+ }>, import("@sinclair/typebox").TObject<{
4
+ goal: import("@sinclair/typebox").TObject<{
5
+ createdAt: import("@sinclair/typebox").TNumber;
6
+ objective: import("@sinclair/typebox").TString;
7
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"active">, import("@sinclair/typebox").TLiteral<"paused">, import("@sinclair/typebox").TLiteral<"blocked">, import("@sinclair/typebox").TLiteral<"complete">]>;
8
+ updatedAt: import("@sinclair/typebox").TNumber;
9
+ }>;
10
+ }>>;
11
+ //# sourceMappingURL=create_goal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_goal.d.ts","sourceRoot":"","sources":["../../../sources/tools/goals/create_goal.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,cAAc;;;;;;;;;GA4BzB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { defineTool } from "../../agent/types.js";
3
+ import { sessionGoalSchema } from "./goalSchemas.js";
4
+ export const createGoalTool = defineTool({
5
+ name: "create_goal",
6
+ label: "create_goal",
7
+ description: `Create a persistent goal only when the user explicitly asks for long-running goal execution.
8
+ Do not infer a goal from an ordinary task. A new goal cannot replace an unfinished goal.`,
9
+ arguments: Type.Object({
10
+ objective: Type.String({
11
+ description: "The concrete objective to pursue until it is complete or blocked.",
12
+ }),
13
+ }, { additionalProperties: false }),
14
+ returnType: Type.Object({ goal: sessionGoalSchema }),
15
+ execute({ objective }, context) {
16
+ if (context.goals === undefined) {
17
+ throw new Error("Goal tracking is unavailable in this session.");
18
+ }
19
+ return { goal: context.goals.create({ objective }) };
20
+ },
21
+ toLLM: ({ goal }) => [
22
+ {
23
+ type: "text",
24
+ text: `Goal created and active.\nObjective: ${goal.objective}`,
25
+ },
26
+ ],
27
+ toUI: ({ goal }) => `Started goal: ${goal.objective}`,
28
+ locks: ["goal"],
29
+ });
@@ -0,0 +1,9 @@
1
+ export declare const getGoalTool: import("../../agent/types.js").DefinedTool<import("@sinclair/typebox").TObject<{}>, import("@sinclair/typebox").TObject<{
2
+ goal: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
3
+ createdAt: import("@sinclair/typebox").TNumber;
4
+ objective: import("@sinclair/typebox").TString;
5
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"active">, import("@sinclair/typebox").TLiteral<"paused">, import("@sinclair/typebox").TLiteral<"blocked">, import("@sinclair/typebox").TLiteral<"complete">]>;
6
+ updatedAt: import("@sinclair/typebox").TNumber;
7
+ }>, import("@sinclair/typebox").TNull]>;
8
+ }>>;
9
+ //# sourceMappingURL=get_goal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_goal.d.ts","sourceRoot":"","sources":["../../../sources/tools/goals/get_goal.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW;;;;;;;GAuBtB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { defineTool } from "../../agent/types.js";
3
+ import { sessionGoalSchema } from "./goalSchemas.js";
4
+ export const getGoalTool = defineTool({
5
+ name: "get_goal",
6
+ label: "get_goal",
7
+ description: "Get the persistent goal for this session, including its objective and status.",
8
+ arguments: Type.Object({}, { additionalProperties: false }),
9
+ returnType: Type.Object({ goal: Type.Union([sessionGoalSchema, Type.Null()]) }),
10
+ execute(_args, context) {
11
+ if (context.goals === undefined) {
12
+ throw new Error("Goal tracking is unavailable in this session.");
13
+ }
14
+ return { goal: context.goals.get() ?? null };
15
+ },
16
+ toLLM: ({ goal }) => [
17
+ {
18
+ type: "text",
19
+ text: goal === null
20
+ ? "This session has no goal."
21
+ : `Goal status: ${goal.status}\nObjective: ${goal.objective}`,
22
+ },
23
+ ],
24
+ toUI: ({ goal }) => (goal === null ? "No active goal" : `Read ${goal.status} goal`),
25
+ locks: [],
26
+ });
@@ -0,0 +1,8 @@
1
+ export declare const goalStatusSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"active">, import("@sinclair/typebox").TLiteral<"paused">, import("@sinclair/typebox").TLiteral<"blocked">, import("@sinclair/typebox").TLiteral<"complete">]>;
2
+ export declare const sessionGoalSchema: import("@sinclair/typebox").TObject<{
3
+ createdAt: import("@sinclair/typebox").TNumber;
4
+ objective: import("@sinclair/typebox").TString;
5
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"active">, import("@sinclair/typebox").TLiteral<"paused">, import("@sinclair/typebox").TLiteral<"blocked">, import("@sinclair/typebox").TLiteral<"complete">]>;
6
+ updatedAt: import("@sinclair/typebox").TNumber;
7
+ }>;
8
+ //# sourceMappingURL=goalSchemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goalSchemas.d.ts","sourceRoot":"","sources":["../../../sources/tools/goals/goalSchemas.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,yOAK3B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;EAQ7B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ export const goalStatusSchema = Type.Union([
3
+ Type.Literal("active"),
4
+ Type.Literal("paused"),
5
+ Type.Literal("blocked"),
6
+ Type.Literal("complete"),
7
+ ]);
8
+ export const sessionGoalSchema = Type.Object({
9
+ createdAt: Type.Number(),
10
+ objective: Type.String(),
11
+ status: goalStatusSchema,
12
+ updatedAt: Type.Number(),
13
+ }, { additionalProperties: false });
@@ -0,0 +1,30 @@
1
+ export { createGoalTool } from "./create_goal.js";
2
+ export { getGoalTool } from "./get_goal.js";
3
+ export { updateGoalTool } from "./update_goal.js";
4
+ export declare const goalTools: readonly [import("../../agent/types.js").DefinedTool<import("@sinclair/typebox").TObject<{
5
+ objective: import("@sinclair/typebox").TString;
6
+ }>, import("@sinclair/typebox").TObject<{
7
+ goal: import("@sinclair/typebox").TObject<{
8
+ createdAt: import("@sinclair/typebox").TNumber;
9
+ objective: import("@sinclair/typebox").TString;
10
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"active">, import("@sinclair/typebox").TLiteral<"paused">, import("@sinclair/typebox").TLiteral<"blocked">, import("@sinclair/typebox").TLiteral<"complete">]>;
11
+ updatedAt: import("@sinclair/typebox").TNumber;
12
+ }>;
13
+ }>>, import("../../agent/types.js").DefinedTool<import("@sinclair/typebox").TObject<{}>, import("@sinclair/typebox").TObject<{
14
+ goal: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
15
+ createdAt: import("@sinclair/typebox").TNumber;
16
+ objective: import("@sinclair/typebox").TString;
17
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"active">, import("@sinclair/typebox").TLiteral<"paused">, import("@sinclair/typebox").TLiteral<"blocked">, import("@sinclair/typebox").TLiteral<"complete">]>;
18
+ updatedAt: import("@sinclair/typebox").TNumber;
19
+ }>, import("@sinclair/typebox").TNull]>;
20
+ }>>, import("../../agent/types.js").DefinedTool<import("@sinclair/typebox").TObject<{
21
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"complete">, import("@sinclair/typebox").TLiteral<"blocked">]>;
22
+ }>, import("@sinclair/typebox").TObject<{
23
+ goal: import("@sinclair/typebox").TObject<{
24
+ createdAt: import("@sinclair/typebox").TNumber;
25
+ objective: import("@sinclair/typebox").TString;
26
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"active">, import("@sinclair/typebox").TLiteral<"paused">, import("@sinclair/typebox").TLiteral<"blocked">, import("@sinclair/typebox").TLiteral<"complete">]>;
27
+ updatedAt: import("@sinclair/typebox").TNumber;
28
+ }>;
29
+ }>>];
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../sources/tools/goals/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMlD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;IAAyD,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { createGoalTool } from "./create_goal.js";
2
+ export { getGoalTool } from "./get_goal.js";
3
+ export { updateGoalTool } from "./update_goal.js";
4
+ import { createGoalTool } from "./create_goal.js";
5
+ import { getGoalTool } from "./get_goal.js";
6
+ import { updateGoalTool } from "./update_goal.js";
7
+ export const goalTools = [createGoalTool, getGoalTool, updateGoalTool];
@@ -0,0 +1,11 @@
1
+ export declare const updateGoalTool: import("../../agent/types.js").DefinedTool<import("@sinclair/typebox").TObject<{
2
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"complete">, import("@sinclair/typebox").TLiteral<"blocked">]>;
3
+ }>, import("@sinclair/typebox").TObject<{
4
+ goal: import("@sinclair/typebox").TObject<{
5
+ createdAt: import("@sinclair/typebox").TNumber;
6
+ objective: import("@sinclair/typebox").TString;
7
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"active">, import("@sinclair/typebox").TLiteral<"paused">, import("@sinclair/typebox").TLiteral<"blocked">, import("@sinclair/typebox").TLiteral<"complete">]>;
8
+ updatedAt: import("@sinclair/typebox").TNumber;
9
+ }>;
10
+ }>>;
11
+ //# sourceMappingURL=update_goal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update_goal.d.ts","sourceRoot":"","sources":["../../../sources/tools/goals/update_goal.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,cAAc;;;;;;;;;GAiCzB,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { defineTool } from "../../agent/types.js";
3
+ import { sessionGoalSchema } from "./goalSchemas.js";
4
+ export const updateGoalTool = defineTool({
5
+ name: "update_goal",
6
+ label: "update_goal",
7
+ description: `Mark the persistent goal complete or blocked.
8
+ Use complete only when the full objective is achieved and verified with no required work remaining.
9
+ Use blocked only when meaningful progress cannot continue without user input or an external state change.
10
+ Pausing, resuming, and clearing a goal are controlled by the user.`,
11
+ arguments: Type.Object({
12
+ status: Type.Union([Type.Literal("complete"), Type.Literal("blocked")], {
13
+ description: "The terminal status for the current goal.",
14
+ }),
15
+ }, { additionalProperties: false }),
16
+ returnType: Type.Object({ goal: sessionGoalSchema }),
17
+ execute({ status }, context) {
18
+ if (context.goals === undefined) {
19
+ throw new Error("Goal tracking is unavailable in this session.");
20
+ }
21
+ return { goal: context.goals.update(status) };
22
+ },
23
+ toLLM: ({ goal }) => [
24
+ {
25
+ type: "text",
26
+ text: goal.status === "complete"
27
+ ? "Goal marked complete."
28
+ : "Goal marked blocked. Explain the blocker and what the user needs to provide or change.",
29
+ },
30
+ ],
31
+ toUI: ({ goal }) => (goal.status === "complete" ? "Completed goal" : "Blocked goal"),
32
+ locks: ["goal"],
33
+ });
@@ -1,5 +1,6 @@
1
1
  export * from "./claude/index.js";
2
2
  export * from "./codex/index.js";
3
+ export * from "./goals/index.js";
3
4
  export * from "./pi/index.js";
4
5
  export * from "./testing/createJustBashToolHarness.js";
5
6
  export * from "./utils/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../sources/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,wCAAwC,CAAC;AACvD,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../sources/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,wCAAwC,CAAC;AACvD,cAAc,kBAAkB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  export * from "./claude/index.js";
2
2
  export * from "./codex/index.js";
3
+ export * from "./goals/index.js";
3
4
  export * from "./pi/index.js";
4
5
  export * from "./testing/createJustBashToolHarness.js";
5
6
  export * from "./utils/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../../sources/tools/pi/bash.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,UAAU;;;;;GAyBrB,CAAC"}
1
+ {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../../sources/tools/pi/bash.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,UAAU;;;;;GA0BrB,CAAC"}
@@ -16,6 +16,8 @@ export const piBashTool = defineTool({
16
16
  const options = { maxOutputBytes: 512_000 };
17
17
  if (timeout !== undefined)
18
18
  options.timeoutMs = timeout * 1000;
19
+ if (execution.onProgress !== undefined)
20
+ options.onProgress = execution.onProgress;
19
21
  if (execution.signal !== undefined)
20
22
  options.signal = execution.signal;
21
23
  const result = await runShellCommand(command, options, context);
@@ -0,0 +1,9 @@
1
+ import type { BashContext, BashSessionSnapshot } from "../../agent/index.js";
2
+ export declare function readSessionWithProgress(options: {
3
+ bash: BashContext;
4
+ onProgress?: (display: string) => void;
5
+ sessionId: number;
6
+ signal?: AbortSignal;
7
+ waitMs?: number;
8
+ }): Promise<BashSessionSnapshot | undefined>;
9
+ //# sourceMappingURL=readSessionWithProgress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readSessionWithProgress.d.ts","sourceRoot":"","sources":["../../../sources/tools/utils/readSessionWithProgress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAI7E,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IACnD,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CA4B3C"}
@@ -0,0 +1,27 @@
1
+ const PROGRESS_POLL_MS = 100;
2
+ export async function readSessionWithProgress(options) {
3
+ const deadline = options.waitMs === undefined ? undefined : Date.now() + options.waitMs;
4
+ let stderrDelta = "";
5
+ let stdoutDelta = "";
6
+ let snapshot;
7
+ do {
8
+ const remaining = deadline === undefined ? PROGRESS_POLL_MS : Math.max(0, deadline - Date.now());
9
+ snapshot = await options.bash.readSession(options.sessionId, {
10
+ ...(options.signal === undefined ? {} : { signal: options.signal }),
11
+ waitMs: Math.min(PROGRESS_POLL_MS, remaining),
12
+ });
13
+ if (snapshot === undefined)
14
+ return undefined;
15
+ stdoutDelta += snapshot.stdoutDelta;
16
+ stderrDelta += snapshot.stderrDelta;
17
+ const progress = [stdoutDelta, stderrDelta].filter(Boolean).join("\n");
18
+ if (progress.length > 0)
19
+ options.onProgress?.(progress.slice(-2_000));
20
+ if (snapshot.status !== "running" ||
21
+ options.signal?.aborted ||
22
+ (deadline !== undefined && remaining === 0)) {
23
+ break;
24
+ }
25
+ } while (deadline === undefined || Date.now() < deadline);
26
+ return snapshot === undefined ? undefined : { ...snapshot, stderrDelta, stdoutDelta };
27
+ }
@@ -2,6 +2,7 @@ import { type Static } from "@sinclair/typebox";
2
2
  import type { AgentContext } from "../../agent/context/AgentContext.js";
3
3
  import type { ContentBlock } from "../../agent/types.js";
4
4
  export declare const shellToolOutputSchema: import("@sinclair/typebox").TObject<{
5
+ backgroundTaskId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
5
6
  stdout: import("@sinclair/typebox").TString;
6
7
  stderr: import("@sinclair/typebox").TString;
7
8
  exitCode: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TNumber, import("@sinclair/typebox").TNull]>;
@@ -13,6 +14,7 @@ export interface RunCommandOptions {
13
14
  cwd?: string;
14
15
  timeoutMs?: number;
15
16
  maxOutputBytes?: number;
17
+ onProgress?: (display: string) => void;
16
18
  signal?: AbortSignal;
17
19
  }
18
20
  export interface RunCommandResult {
@@ -1 +1 @@
1
- {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../sources/tools/utils/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,eAAO,MAAM,qBAAqB;;;;;EAKhC,CAAC;AAEH,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,eAAe,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,MAAM,CAAC,YAAK,EACzD,OAAO,EAAE,YAAY,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAS3B;AAED,wBAAsB,UAAU,CAC5B,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,YAAY,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAS3B;AAUD,wBAAgB,iBAAiB,CAC7B,MAAM,EAAE,MAAM,CAAC,OAAO,qBAAqB,CAAC,GAC7C,SAAS,YAAY,EAAE,CAQzB"}
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../sources/tools/utils/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,eAAO,MAAM,qBAAqB;;;;;;EAMhC,CAAC;AAEH,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,eAAe,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,MAAM,CAAC,YAAK,EACzD,OAAO,EAAE,YAAY,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAiC3B;AAED,wBAAsB,UAAU,CAC5B,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,YAAY,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAS3B;AAUD,wBAAgB,iBAAiB,CAC7B,MAAM,EAAE,MAAM,CAAC,OAAO,qBAAqB,CAAC,GAC7C,SAAS,YAAY,EAAE,CAgBzB"}
@@ -1,5 +1,7 @@
1
1
  import { Type } from "@sinclair/typebox";
2
+ import { readSessionWithProgress } from "./readSessionWithProgress.js";
2
3
  export const shellToolOutputSchema = Type.Object({
4
+ backgroundTaskId: Type.Optional(Type.String()),
3
5
  stdout: Type.String(),
4
6
  stderr: Type.String(),
5
7
  exitCode: Type.Union([Type.Number(), Type.Null()]),
@@ -16,6 +18,33 @@ export async function runShellCommand(command, options = {}, context) {
16
18
  runOptions.maxOutputBytes = options.maxOutputBytes;
17
19
  if (options.signal !== undefined)
18
20
  runOptions.signal = options.signal;
21
+ if (options.onProgress !== undefined) {
22
+ const { signal: _signal, ...sessionOptions } = runOptions;
23
+ const sessionId = await context.bash.startSession(sessionOptions);
24
+ const abort = () => void context.bash.killSession(sessionId);
25
+ options.signal?.addEventListener("abort", abort, { once: true });
26
+ if (options.signal?.aborted)
27
+ abort();
28
+ try {
29
+ const snapshot = await readSessionWithProgress({
30
+ bash: context.bash,
31
+ onProgress: options.onProgress,
32
+ sessionId,
33
+ ...(options.signal === undefined ? {} : { signal: options.signal }),
34
+ });
35
+ if (snapshot === undefined)
36
+ throw new Error("The shell session was not found.");
37
+ return {
38
+ stdout: snapshot.stdout,
39
+ stderr: snapshot.stderr,
40
+ exitCode: snapshot.exitCode,
41
+ timedOut: snapshot.timedOut,
42
+ };
43
+ }
44
+ finally {
45
+ options.signal?.removeEventListener("abort", abort);
46
+ }
47
+ }
19
48
  return context.bash.run(runOptions);
20
49
  }
21
50
  export async function runCommand(options, context) {
@@ -38,6 +67,14 @@ function shellQuote(value) {
38
67
  return `'${value.replaceAll("'", "'\\''")}'`;
39
68
  }
40
69
  export function shellOutputToText(result) {
70
+ if (result.backgroundTaskId !== undefined) {
71
+ return [
72
+ {
73
+ type: "text",
74
+ text: `Command running in background with task ID ${result.backgroundTaskId}. Use TaskOutput to read its output or TaskStop to stop it.`,
75
+ },
76
+ ];
77
+ }
41
78
  const chunks = [
42
79
  result.stdout ? `stdout:\n${result.stdout}` : "",
43
80
  result.stderr ? `stderr:\n${result.stderr}` : "",
@@ -1 +1 @@
1
- {"version":3,"file":"summarizeShellOutput.d.ts","sourceRoot":"","sources":["../../../sources/tools/utils/summarizeShellOutput.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAIxD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,qBAAqB,CAAC,GAAG,MAAM,CAQzF"}
1
+ {"version":3,"file":"summarizeShellOutput.d.ts","sourceRoot":"","sources":["../../../sources/tools/utils/summarizeShellOutput.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAIxD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,qBAAqB,CAAC,GAAG,MAAM,CASzF"}
@@ -1,6 +1,8 @@
1
1
  import { singleLineText } from "./singleLineText.js";
2
2
  import { summarizeTextOutput } from "./summarizeTextOutput.js";
3
3
  export function summarizeShellOutput(result) {
4
+ if (result.backgroundTaskId !== undefined)
5
+ return "Command started in the background.";
4
6
  const suffix = result.timedOut
5
7
  ? " (timed out)"
6
8
  : result.exitCode !== null && result.exitCode !== 0
@@ -0,0 +1,2 @@
1
+ export type { UserInputOption, UserInputQuestion, UserInputRequest, UserInputResponse, } from "./types.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../sources/user-input/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACR,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GACpB,MAAM,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ export interface UserInputOption {
2
+ description: string;
3
+ label: string;
4
+ }
5
+ export interface UserInputQuestion {
6
+ header: string;
7
+ id: string;
8
+ multiSelect: boolean;
9
+ options: readonly UserInputOption[];
10
+ question: string;
11
+ }
12
+ export interface UserInputRequest {
13
+ questions: readonly UserInputQuestion[];
14
+ requestId: string;
15
+ }
16
+ export interface UserInputResponse {
17
+ answers: Readonly<Record<string, readonly string[]>>;
18
+ }
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../sources/user-input/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC7B,SAAS,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CACxD"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ import{r,R as x,L as d,j as f,A as p}from"./index-BC99-iZC.js";var N=({code:i,language:e,raw:a,className:u,startLine:n,lineNumbers:g,...m})=>{let{shikiTheme:l}=r.useContext(x),s=d(),[h,t]=r.useState(a);return r.useEffect(()=>{if(!s){t(a);return}let o=s.highlight({code:i,language:e,themes:l},c=>{t(c)});o&&t(o)},[i,e,l,s,a]),f.jsx(p,{className:u,language:e,lineNumbers:g,result:h,startLine:n,...m})};export{N as HighlightedCodeBlockBody};
@@ -0,0 +1 @@
1
+ import{r,R as x,L as d,j as f,A as p}from"./index-BZN9jSiw.js";var N=({code:i,language:e,raw:a,className:u,startLine:n,lineNumbers:g,...m})=>{let{shikiTheme:l}=r.useContext(x),s=d(),[h,t]=r.useState(a);return r.useEffect(()=>{if(!s){t(a);return}let o=s.highlight({code:i,language:e,themes:l},c=>{t(c)});o&&t(o)},[i,e,l,s,a]),f.jsx(p,{className:u,language:e,lineNumbers:g,result:h,startLine:n,...m})};export{N as HighlightedCodeBlockBody};