@slopus/rig 0.0.3 → 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 (382) 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/selectSystemPromptForModel.js +1 -1
  72. package/dist/agent/types.d.ts +1 -0
  73. package/dist/agent/types.d.ts.map +1 -1
  74. package/dist/app/CodingAssistantAgentBackend.d.ts +11 -1
  75. package/dist/app/CodingAssistantAgentBackend.d.ts.map +1 -1
  76. package/dist/app/CodingAssistantApp.d.ts +7 -1
  77. package/dist/app/CodingAssistantApp.d.ts.map +1 -1
  78. package/dist/app/CodingAssistantApp.js +678 -45
  79. package/dist/app/ScrollbackPreservingTerminal.d.ts +5 -0
  80. package/dist/app/ScrollbackPreservingTerminal.d.ts.map +1 -0
  81. package/dist/app/ScrollbackPreservingTerminal.js +7 -0
  82. package/dist/app/StartupStatusApp.js +1 -1
  83. package/dist/app/createCodingAssistantAgent.d.ts +6 -1
  84. package/dist/app/createCodingAssistantAgent.d.ts.map +1 -1
  85. package/dist/app/createCodingAssistantAgent.js +24 -7
  86. package/dist/app/createSlashCommands.d.ts.map +1 -1
  87. package/dist/app/createSlashCommands.js +42 -0
  88. package/dist/app/describeReasoningLevel.d.ts.map +1 -1
  89. package/dist/app/describeReasoningLevel.js +1 -0
  90. package/dist/app/highlightAgentCode.d.ts.map +1 -1
  91. package/dist/app/highlightAgentCode.js +10 -7
  92. package/dist/app/humanizeGoalStatus.d.ts +3 -0
  93. package/dist/app/humanizeGoalStatus.d.ts.map +1 -0
  94. package/dist/app/humanizeGoalStatus.js +9 -0
  95. package/dist/app/humanizePermissionMode.d.ts +3 -0
  96. package/dist/app/humanizePermissionMode.d.ts.map +1 -0
  97. package/dist/app/humanizePermissionMode.js +9 -0
  98. package/dist/app/humanizeReasoningLevel.d.ts.map +1 -1
  99. package/dist/app/humanizeReasoningLevel.js +3 -0
  100. package/dist/app/humanizeToolName.d.ts +2 -0
  101. package/dist/app/humanizeToolName.d.ts.map +1 -0
  102. package/dist/app/humanizeToolName.js +40 -0
  103. package/dist/app/main.d.ts.map +1 -1
  104. package/dist/app/main.js +4 -0
  105. package/dist/app/renderAgentMarkdown.d.ts.map +1 -1
  106. package/dist/app/renderAgentMarkdown.js +2 -1
  107. package/dist/app/runApp.d.ts +2 -0
  108. package/dist/app/runApp.d.ts.map +1 -1
  109. package/dist/app/runApp.js +48 -3
  110. package/dist/app/sanitizeTerminalText.d.ts +2 -0
  111. package/dist/app/sanitizeTerminalText.d.ts.map +1 -0
  112. package/dist/app/sanitizeTerminalText.js +55 -0
  113. package/dist/app/upsertSubagentSummary.d.ts +3 -0
  114. package/dist/app/upsertSubagentSummary.d.ts.map +1 -0
  115. package/dist/app/upsertSubagentSummary.js +6 -0
  116. package/dist/client/ProtocolHttpClient.d.ts +12 -1
  117. package/dist/client/ProtocolHttpClient.d.ts.map +1 -1
  118. package/dist/client/ProtocolHttpClient.js +21 -0
  119. package/dist/client/RemoteAgent.d.ts +11 -1
  120. package/dist/client/RemoteAgent.d.ts.map +1 -1
  121. package/dist/client/RemoteAgent.js +91 -1
  122. package/dist/config/createConfigFile.d.ts.map +1 -1
  123. package/dist/config/createConfigFile.js +5 -0
  124. package/dist/config/defaultConfig.d.ts.map +1 -1
  125. package/dist/config/defaultConfig.js +2 -0
  126. package/dist/config/mergeConfigValues.d.ts.map +1 -1
  127. package/dist/config/mergeConfigValues.js +8 -1
  128. package/dist/config/parseConfigToml.d.ts.map +1 -1
  129. package/dist/config/parseConfigToml.js +88 -0
  130. package/dist/config/serializeMcpServers.d.ts +3 -0
  131. package/dist/config/serializeMcpServers.d.ts.map +1 -0
  132. package/dist/config/serializeMcpServers.js +34 -0
  133. package/dist/config/types.d.ts +6 -0
  134. package/dist/config/types.d.ts.map +1 -1
  135. package/dist/config/writeRuntimeConfig.d.ts.map +1 -1
  136. package/dist/config/writeRuntimeConfig.js +3 -0
  137. package/dist/goals/SessionGoal.d.ts +14 -0
  138. package/dist/goals/SessionGoal.d.ts.map +1 -0
  139. package/dist/goals/SessionGoal.js +1 -0
  140. package/dist/goals/createGoalContinuationPrompt.d.ts +3 -0
  141. package/dist/goals/createGoalContinuationPrompt.d.ts.map +1 -0
  142. package/dist/goals/createGoalContinuationPrompt.js +17 -0
  143. package/dist/goals/index.d.ts +5 -0
  144. package/dist/goals/index.d.ts.map +1 -0
  145. package/dist/goals/index.js +3 -0
  146. package/dist/goals/isGoalStatus.d.ts +3 -0
  147. package/dist/goals/isGoalStatus.d.ts.map +1 -0
  148. package/dist/goals/isGoalStatus.js +3 -0
  149. package/dist/goals/normalizeGoalObjective.d.ts +3 -0
  150. package/dist/goals/normalizeGoalObjective.d.ts.map +1 -0
  151. package/dist/goals/normalizeGoalObjective.js +11 -0
  152. package/dist/mcp/McpClientManager.d.ts +12 -0
  153. package/dist/mcp/McpClientManager.d.ts.map +1 -0
  154. package/dist/mcp/McpClientManager.js +123 -0
  155. package/dist/mcp/connectMcpServer.d.ts +8 -0
  156. package/dist/mcp/connectMcpServer.d.ts.map +1 -0
  157. package/dist/mcp/connectMcpServer.js +47 -0
  158. package/dist/mcp/createMcpTool.d.ts +11 -0
  159. package/dist/mcp/createMcpTool.d.ts.map +1 -0
  160. package/dist/mcp/createMcpTool.js +43 -0
  161. package/dist/mcp/index.d.ts +5 -0
  162. package/dist/mcp/index.d.ts.map +1 -0
  163. package/dist/mcp/index.js +3 -0
  164. package/dist/mcp/loadMcpServerConfigs.d.ts +4 -0
  165. package/dist/mcp/loadMcpServerConfigs.d.ts.map +1 -0
  166. package/dist/mcp/loadMcpServerConfigs.js +122 -0
  167. package/dist/mcp/mcpResultToContentBlocks.d.ts +3 -0
  168. package/dist/mcp/mcpResultToContentBlocks.d.ts.map +1 -0
  169. package/dist/mcp/mcpResultToContentBlocks.js +51 -0
  170. package/dist/mcp/mergeMcpTools.d.ts +7 -0
  171. package/dist/mcp/mergeMcpTools.d.ts.map +1 -0
  172. package/dist/mcp/mergeMcpTools.js +34 -0
  173. package/dist/mcp/normalizeMcpName.d.ts +2 -0
  174. package/dist/mcp/normalizeMcpName.d.ts.map +1 -0
  175. package/dist/mcp/normalizeMcpName.js +3 -0
  176. package/dist/mcp/types.d.ts +37 -0
  177. package/dist/mcp/types.d.ts.map +1 -0
  178. package/dist/mcp/types.js +1 -0
  179. package/dist/permissions/PermissionContext.d.ts +7 -0
  180. package/dist/permissions/PermissionContext.d.ts.map +1 -0
  181. package/dist/permissions/PermissionContext.js +1 -0
  182. package/dist/permissions/PermissionMode.d.ts +3 -0
  183. package/dist/permissions/PermissionMode.d.ts.map +1 -0
  184. package/dist/permissions/PermissionMode.js +1 -0
  185. package/dist/permissions/createPermissionContext.d.ts +4 -0
  186. package/dist/permissions/createPermissionContext.d.ts.map +1 -0
  187. package/dist/permissions/createPermissionContext.js +16 -0
  188. package/dist/permissions/index.d.ts +13 -0
  189. package/dist/permissions/index.d.ts.map +1 -0
  190. package/dist/permissions/index.js +9 -0
  191. package/dist/permissions/isPermissionMode.d.ts +3 -0
  192. package/dist/permissions/isPermissionMode.d.ts.map +1 -0
  193. package/dist/permissions/isPermissionMode.js +6 -0
  194. package/dist/permissions/parseAutoPermissionReview.d.ts +7 -0
  195. package/dist/permissions/parseAutoPermissionReview.d.ts.map +1 -0
  196. package/dist/permissions/parseAutoPermissionReview.js +33 -0
  197. package/dist/permissions/parsePermissionMode.d.ts +3 -0
  198. package/dist/permissions/parsePermissionMode.d.ts.map +1 -0
  199. package/dist/permissions/parsePermissionMode.js +6 -0
  200. package/dist/permissions/requestAutoPermissionApproval.d.ts +9 -0
  201. package/dist/permissions/requestAutoPermissionApproval.d.ts.map +1 -0
  202. package/dist/permissions/requestAutoPermissionApproval.js +26 -0
  203. package/dist/permissions/reviewAutoPermission.d.ts +13 -0
  204. package/dist/permissions/reviewAutoPermission.d.ts.map +1 -0
  205. package/dist/permissions/reviewAutoPermission.js +70 -0
  206. package/dist/permissions/shouldElevateToolInAutoMode.d.ts +2 -0
  207. package/dist/permissions/shouldElevateToolInAutoMode.d.ts.map +1 -0
  208. package/dist/permissions/shouldElevateToolInAutoMode.js +37 -0
  209. package/dist/permissions/shouldReviewToolInAutoMode.d.ts +2 -0
  210. package/dist/permissions/shouldReviewToolInAutoMode.d.ts.map +1 -0
  211. package/dist/permissions/shouldReviewToolInAutoMode.js +85 -0
  212. package/dist/permissions/summarizePermissionAction.d.ts +2 -0
  213. package/dist/permissions/summarizePermissionAction.d.ts.map +1 -0
  214. package/dist/permissions/summarizePermissionAction.js +29 -0
  215. package/dist/protocol/SessionProtocol.d.ts +49 -2
  216. package/dist/protocol/SessionProtocol.d.ts.map +1 -1
  217. package/dist/protocol/index.d.ts +4 -1
  218. package/dist/protocol/index.d.ts.map +1 -1
  219. package/dist/providers/claude-sdk.d.ts.map +1 -1
  220. package/dist/providers/claude-sdk.js +7 -6
  221. package/dist/providers/codex.d.ts.map +1 -1
  222. package/dist/providers/codex.js +52 -6
  223. package/dist/providers/models.d.ts +12 -9
  224. package/dist/providers/models.d.ts.map +1 -1
  225. package/dist/providers/models.js +36 -0
  226. package/dist/providers/types.d.ts +3 -0
  227. package/dist/providers/types.d.ts.map +1 -1
  228. package/dist/review/createCodeReviewPrompt.d.ts +2 -0
  229. package/dist/review/createCodeReviewPrompt.d.ts.map +1 -0
  230. package/dist/review/createCodeReviewPrompt.js +11 -0
  231. package/dist/review/index.d.ts +2 -0
  232. package/dist/review/index.d.ts.map +1 -0
  233. package/dist/review/index.js +1 -0
  234. package/dist/server/AgentSessionManager.d.ts +10 -1
  235. package/dist/server/AgentSessionManager.d.ts.map +1 -1
  236. package/dist/server/AgentSessionManager.js +203 -12
  237. package/dist/server/InMemorySession.d.ts +34 -1
  238. package/dist/server/InMemorySession.d.ts.map +1 -1
  239. package/dist/server/InMemorySession.js +558 -10
  240. package/dist/server/InMemorySessionStore.d.ts +2 -0
  241. package/dist/server/InMemorySessionStore.d.ts.map +1 -1
  242. package/dist/server/InMemorySessionStore.js +7 -0
  243. package/dist/server/PersistentSessionStore.d.ts +2 -0
  244. package/dist/server/PersistentSessionStore.d.ts.map +1 -1
  245. package/dist/server/PersistentSessionStore.js +80 -5
  246. package/dist/server/createGoalTitle.d.ts +2 -0
  247. package/dist/server/createGoalTitle.d.ts.map +1 -0
  248. package/dist/server/createGoalTitle.js +4 -0
  249. package/dist/server/createModelCatalog.js +2 -2
  250. package/dist/server/createProtocolHttpServer.d.ts.map +1 -1
  251. package/dist/server/createProtocolHttpServer.js +119 -2
  252. package/dist/server/runLocalProtocolServer.d.ts.map +1 -1
  253. package/dist/server/runLocalProtocolServer.js +18 -2
  254. package/dist/tasks/index.d.ts +2 -0
  255. package/dist/tasks/index.d.ts.map +1 -0
  256. package/dist/tasks/index.js +1 -0
  257. package/dist/tasks/types.d.ts +39 -0
  258. package/dist/tasks/types.d.ts.map +1 -0
  259. package/dist/tasks/types.js +1 -0
  260. package/dist/tools/Agent.d.ts +13 -3
  261. package/dist/tools/Agent.d.ts.map +1 -1
  262. package/dist/tools/Agent.js +40 -12
  263. package/dist/tools/claude/AskUserQuestion.d.ts +23 -0
  264. package/dist/tools/claude/AskUserQuestion.d.ts.map +1 -0
  265. package/dist/tools/claude/AskUserQuestion.js +52 -0
  266. package/dist/tools/claude/Bash.d.ts +2 -0
  267. package/dist/tools/claude/Bash.d.ts.map +1 -1
  268. package/dist/tools/claude/Bash.js +20 -2
  269. package/dist/tools/claude/SendMessage.d.ts +10 -0
  270. package/dist/tools/claude/SendMessage.d.ts.map +1 -0
  271. package/dist/tools/claude/SendMessage.js +33 -0
  272. package/dist/tools/claude/TaskCreate.d.ts +12 -0
  273. package/dist/tools/claude/TaskCreate.d.ts.map +1 -0
  274. package/dist/tools/claude/TaskCreate.js +34 -0
  275. package/dist/tools/claude/TaskGet.d.ts +16 -0
  276. package/dist/tools/claude/TaskGet.d.ts.map +1 -0
  277. package/dist/tools/claude/TaskGet.js +44 -0
  278. package/dist/tools/claude/TaskList.d.ts +10 -0
  279. package/dist/tools/claude/TaskList.d.ts.map +1 -0
  280. package/dist/tools/claude/TaskList.js +51 -0
  281. package/dist/tools/claude/TaskOutput.d.ts +17 -0
  282. package/dist/tools/claude/TaskOutput.d.ts.map +1 -0
  283. package/dist/tools/claude/TaskOutput.js +74 -0
  284. package/dist/tools/claude/TaskStop.d.ts +10 -0
  285. package/dist/tools/claude/TaskStop.d.ts.map +1 -0
  286. package/dist/tools/claude/TaskStop.js +42 -0
  287. package/dist/tools/claude/TaskUpdate.d.ts +21 -0
  288. package/dist/tools/claude/TaskUpdate.d.ts.map +1 -0
  289. package/dist/tools/claude/TaskUpdate.js +55 -0
  290. package/dist/tools/claude/index.d.ts +111 -5
  291. package/dist/tools/claude/index.d.ts.map +1 -1
  292. package/dist/tools/claude/index.js +24 -2
  293. package/dist/tools/claude/parseBackgroundTaskId.d.ts +2 -0
  294. package/dist/tools/claude/parseBackgroundTaskId.d.ts.map +1 -0
  295. package/dist/tools/claude/parseBackgroundTaskId.js +7 -0
  296. package/dist/tools/claude/taskSchemas.d.ts +14 -0
  297. package/dist/tools/claude/taskSchemas.d.ts.map +1 -0
  298. package/dist/tools/claude/taskSchemas.js +18 -0
  299. package/dist/tools/codex/exec_command.d.ts +8 -6
  300. package/dist/tools/codex/exec_command.d.ts.map +1 -1
  301. package/dist/tools/codex/exec_command.js +37 -18
  302. package/dist/tools/codex/followup_task.d.ts +11 -0
  303. package/dist/tools/codex/followup_task.d.ts.map +1 -0
  304. package/dist/tools/codex/followup_task.js +18 -0
  305. package/dist/tools/codex/humanizeTaskName.d.ts +2 -0
  306. package/dist/tools/codex/humanizeTaskName.d.ts.map +1 -0
  307. package/dist/tools/codex/humanizeTaskName.js +4 -0
  308. package/dist/tools/codex/index.d.ts +90 -7
  309. package/dist/tools/codex/index.d.ts.map +1 -1
  310. package/dist/tools/codex/index.js +24 -0
  311. package/dist/tools/codex/interrupt_agent.d.ts +10 -0
  312. package/dist/tools/codex/interrupt_agent.d.ts.map +1 -0
  313. package/dist/tools/codex/interrupt_agent.js +17 -0
  314. package/dist/tools/codex/list_agents.d.ts +12 -0
  315. package/dist/tools/codex/list_agents.d.ts.map +1 -0
  316. package/dist/tools/codex/list_agents.js +23 -0
  317. package/dist/tools/codex/request_user_input.d.ts +16 -0
  318. package/dist/tools/codex/request_user_input.d.ts.map +1 -0
  319. package/dist/tools/codex/request_user_input.js +58 -0
  320. package/dist/tools/codex/requireSubagentContext.d.ts +3 -0
  321. package/dist/tools/codex/requireSubagentContext.d.ts.map +1 -0
  322. package/dist/tools/codex/requireSubagentContext.js +6 -0
  323. package/dist/tools/codex/spawn_agent.d.ts +9 -0
  324. package/dist/tools/codex/spawn_agent.d.ts.map +1 -0
  325. package/dist/tools/codex/spawn_agent.js +35 -0
  326. package/dist/tools/codex/subagentSchemas.d.ts +8 -0
  327. package/dist/tools/codex/subagentSchemas.d.ts.map +1 -0
  328. package/dist/tools/codex/subagentSchemas.js +13 -0
  329. package/dist/tools/codex/unifiedExecOutput.d.ts +14 -0
  330. package/dist/tools/codex/unifiedExecOutput.d.ts.map +1 -0
  331. package/dist/tools/codex/unifiedExecOutput.js +44 -0
  332. package/dist/tools/codex/update_plan.d.ts +10 -0
  333. package/dist/tools/codex/update_plan.d.ts.map +1 -0
  334. package/dist/tools/codex/update_plan.js +34 -0
  335. package/dist/tools/codex/wait_agent.d.ts +13 -0
  336. package/dist/tools/codex/wait_agent.d.ts.map +1 -0
  337. package/dist/tools/codex/wait_agent.js +32 -0
  338. package/dist/tools/codex/write_stdin.d.ts +6 -1
  339. package/dist/tools/codex/write_stdin.d.ts.map +1 -1
  340. package/dist/tools/codex/write_stdin.js +44 -12
  341. package/dist/tools/goals/create_goal.d.ts +11 -0
  342. package/dist/tools/goals/create_goal.d.ts.map +1 -0
  343. package/dist/tools/goals/create_goal.js +29 -0
  344. package/dist/tools/goals/get_goal.d.ts +9 -0
  345. package/dist/tools/goals/get_goal.d.ts.map +1 -0
  346. package/dist/tools/goals/get_goal.js +26 -0
  347. package/dist/tools/goals/goalSchemas.d.ts +8 -0
  348. package/dist/tools/goals/goalSchemas.d.ts.map +1 -0
  349. package/dist/tools/goals/goalSchemas.js +13 -0
  350. package/dist/tools/goals/index.d.ts +30 -0
  351. package/dist/tools/goals/index.d.ts.map +1 -0
  352. package/dist/tools/goals/index.js +7 -0
  353. package/dist/tools/goals/update_goal.d.ts +11 -0
  354. package/dist/tools/goals/update_goal.d.ts.map +1 -0
  355. package/dist/tools/goals/update_goal.js +33 -0
  356. package/dist/tools/index.d.ts +1 -0
  357. package/dist/tools/index.d.ts.map +1 -1
  358. package/dist/tools/index.js +1 -0
  359. package/dist/tools/pi/bash.d.ts.map +1 -1
  360. package/dist/tools/pi/bash.js +2 -0
  361. package/dist/tools/utils/readSessionWithProgress.d.ts +9 -0
  362. package/dist/tools/utils/readSessionWithProgress.d.ts.map +1 -0
  363. package/dist/tools/utils/readSessionWithProgress.js +27 -0
  364. package/dist/tools/utils/shell.d.ts +2 -0
  365. package/dist/tools/utils/shell.d.ts.map +1 -1
  366. package/dist/tools/utils/shell.js +37 -0
  367. package/dist/tools/utils/summarizeShellOutput.d.ts.map +1 -1
  368. package/dist/tools/utils/summarizeShellOutput.js +2 -0
  369. package/dist/user-input/index.d.ts +2 -0
  370. package/dist/user-input/index.d.ts.map +1 -0
  371. package/dist/user-input/index.js +1 -0
  372. package/dist/user-input/types.d.ts +19 -0
  373. package/dist/user-input/types.d.ts.map +1 -0
  374. package/dist/user-input/types.js +1 -0
  375. package/dist/web/assets/highlighted-body-OFNGDK62-BuJOCQJD.js +1 -0
  376. package/dist/web/assets/highlighted-body-OFNGDK62-TwhCqUaJ.js +1 -0
  377. package/dist/web/assets/index-B6Bc6sUJ.css +1 -0
  378. package/dist/web/assets/index-BC99-iZC.js +341 -0
  379. package/dist/web/assets/index-BZN9jSiw.js +341 -0
  380. package/dist/web/assets/index-CcF0unjO.css +1 -0
  381. package/dist/web/index.html +2 -2
  382. package/package.json +2 -1
@@ -0,0 +1,43 @@
1
+ import { formatMessagesForCompaction } from "./formatMessagesForCompaction.js";
2
+ const COMPACTION_SYSTEM_PROMPT = `Create a detailed continuation brief for a coding agent that will continue this conversation without access to the original history.
3
+
4
+ Preserve the user's requests and constraints, important technical facts, decisions and rationale, files examined or changed, concrete edits, commands and test results, errors and fixes, and all unfinished work. Distinguish completed work from pending work. Include exact identifiers, paths, and short code fragments when they are needed to continue accurately. Do not continue the work or address the user. Return only the continuation brief.`;
5
+ export async function requestCompactionSummary(options) {
6
+ const streamOptions = {};
7
+ if (options.effort !== undefined)
8
+ streamOptions.thinking = options.effort;
9
+ if (options.signal !== undefined)
10
+ streamOptions.signal = options.signal;
11
+ const stream = options.provider.stream(options.model, {
12
+ systemPrompt: COMPACTION_SYSTEM_PROMPT,
13
+ messages: [
14
+ {
15
+ role: "user",
16
+ content: formatMessagesForCompaction(options.messages),
17
+ timestamp: options.now(),
18
+ },
19
+ ],
20
+ tools: [],
21
+ }, streamOptions);
22
+ for await (const _event of stream) {
23
+ if (options.signal?.aborted) {
24
+ throw new Error("Conversation compaction was stopped.");
25
+ }
26
+ }
27
+ const response = await stream.result();
28
+ if (response.stopReason === "aborted") {
29
+ throw new Error("Conversation compaction was stopped.");
30
+ }
31
+ if (response.stopReason === "error") {
32
+ throw new Error(response.errorMessage ?? "The model could not compact this conversation.");
33
+ }
34
+ const summary = response.content
35
+ .filter((block) => block.type === "text")
36
+ .map((block) => block.text)
37
+ .join("\n")
38
+ .trim();
39
+ if (summary.length === 0) {
40
+ throw new Error("The model returned an empty conversation summary.");
41
+ }
42
+ return summary;
43
+ }
@@ -1,9 +1,17 @@
1
1
  import type { BashContext } from "./BashContext.js";
2
2
  import type { FileSystemContext } from "./FileSystemContext.js";
3
+ import type { GoalContext } from "./GoalContext.js";
3
4
  import type { SubagentContext } from "./SubagentContext.js";
5
+ import type { UserInputContext } from "./UserInputContext.js";
6
+ import type { TaskContext } from "./TaskContext.js";
7
+ import type { PermissionContext } from "../../permissions/index.js";
4
8
  export interface AgentContext {
5
9
  fs: FileSystemContext;
6
10
  bash: BashContext;
11
+ goals?: GoalContext;
12
+ permissions?: PermissionContext;
7
13
  subagents?: SubagentContext;
14
+ tasks?: TaskContext;
15
+ userInput?: UserInputContext;
8
16
  }
9
17
  //# sourceMappingURL=AgentContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentContext.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/AgentContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,iBAAiB,CAAC;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B"}
1
+ {"version":3,"file":"AgentContext.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/AgentContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,iBAAiB,CAAC;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAChC"}
@@ -3,6 +3,7 @@ export interface BashRunOptions {
3
3
  cwd?: string;
4
4
  timeoutMs?: number;
5
5
  maxOutputBytes?: number;
6
+ shell?: string;
6
7
  signal?: AbortSignal;
7
8
  }
8
9
  export interface BashRunResult {
@@ -11,8 +12,30 @@ export interface BashRunResult {
11
12
  exitCode: number | null;
12
13
  timedOut: boolean;
13
14
  }
15
+ export type BashSessionStatus = "completed" | "killed" | "running";
16
+ export interface BashSessionSnapshot {
17
+ command: string;
18
+ cwd: string;
19
+ exitCode: number | null;
20
+ sessionId: number;
21
+ status: BashSessionStatus;
22
+ stderr: string;
23
+ stderrDelta: string;
24
+ stdout: string;
25
+ stdoutDelta: string;
26
+ timedOut: boolean;
27
+ }
28
+ export interface BashSessionReadOptions {
29
+ signal?: AbortSignal;
30
+ waitMs?: number;
31
+ }
14
32
  export interface BashContext {
15
33
  cwd: string;
34
+ killSession(sessionId: number): Promise<BashSessionSnapshot | undefined>;
35
+ readSession(sessionId: number, options?: BashSessionReadOptions): Promise<BashSessionSnapshot | undefined>;
16
36
  run(options: BashRunOptions): Promise<BashRunResult>;
37
+ startSession(options: Omit<BashRunOptions, "signal">): Promise<number>;
38
+ supportsSessionInput: boolean;
39
+ writeSession(sessionId: number, data: string | Uint8Array): Promise<boolean>;
17
40
  }
18
41
  //# sourceMappingURL=BashContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BashContext.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/BashContext.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,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,aAAa;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACxD"}
1
+ {"version":3,"file":"BashContext.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/BashContext.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEnE,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;IACzE,WAAW,CACP,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,sBAAsB,GACjC,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;IAC5C,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACrD,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,oBAAoB,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAChF"}
@@ -0,0 +1,7 @@
1
+ import type { CreateGoalRequest, GoalStatus, SessionGoal } from "../../goals/index.js";
2
+ export interface GoalContext {
3
+ create(request: CreateGoalRequest): SessionGoal;
4
+ get(): SessionGoal | undefined;
5
+ update(status: Extract<GoalStatus, "blocked" | "complete">): SessionGoal;
6
+ }
7
+ //# sourceMappingURL=GoalContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GoalContext.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/GoalContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEvF,MAAM,WAAW,WAAW;IACxB,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,WAAW,CAAC;IAChD,GAAG,IAAI,WAAW,GAAG,SAAS,CAAC;IAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,SAAS,GAAG,UAAU,CAAC,GAAG,WAAW,CAAC;CAC5E"}
@@ -0,0 +1 @@
1
+ export {};
@@ -1,18 +1,37 @@
1
- export type SubagentRunStatus = "aborted" | "completed" | "error";
1
+ export type SubagentRunStatus = "aborted" | "completed" | "error" | "running";
2
+ export interface ManagedSubagent {
3
+ description: string;
4
+ path: string;
5
+ sessionId: string;
6
+ status: SubagentRunStatus;
7
+ taskName: string;
8
+ }
2
9
  export interface SpawnSubagentRequest {
10
+ background?: boolean;
3
11
  description: string;
4
12
  parentToolCallId?: string;
5
13
  prompt: string;
14
+ taskName?: string;
6
15
  }
7
16
  export interface SpawnSubagentResult {
8
17
  output: string;
18
+ path: string;
9
19
  sessionId: string;
10
20
  status: SubagentRunStatus;
21
+ taskName: string;
22
+ }
23
+ export interface WaitForSubagentResult {
24
+ agents: readonly ManagedSubagent[];
25
+ timedOut: boolean;
11
26
  }
12
27
  export interface SubagentContext {
13
28
  canSpawn: boolean;
14
29
  depth: number;
30
+ followUp(target: string, message: string): ManagedSubagent;
31
+ interrupt(target: string): ManagedSubagent;
32
+ list(pathPrefix?: string): readonly ManagedSubagent[];
15
33
  maxDepth: number;
16
34
  spawn(request: SpawnSubagentRequest, signal?: AbortSignal): Promise<SpawnSubagentResult>;
35
+ wait(timeoutMs?: number, signal?: AbortSignal): Promise<WaitForSubagentResult>;
17
36
  }
18
37
  //# sourceMappingURL=SubagentContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SubagentContext.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/SubagentContext.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAElE,MAAM,WAAW,oBAAoB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAC5F"}
1
+ {"version":3,"file":"SubagentContext.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/SubagentContext.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;AAE9E,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IAClC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAAC;IAC3D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC;IAC3C,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,eAAe,EAAE,CAAC;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACzF,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAClF"}
@@ -0,0 +1,8 @@
1
+ import type { CreateTaskRequest, SessionTask, UpdateTaskRequest, UpdateTaskResult } from "../../tasks/index.js";
2
+ export interface TaskContext {
3
+ create(request: CreateTaskRequest): SessionTask;
4
+ get(taskId: string): SessionTask | undefined;
5
+ list(): readonly SessionTask[];
6
+ update(taskId: string, request: UpdateTaskRequest): UpdateTaskResult;
7
+ }
8
+ //# sourceMappingURL=TaskContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskContext.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/TaskContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EACnB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,WAAW;IACxB,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,WAAW,CAAC;IAChD,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAC7C,IAAI,IAAI,SAAS,WAAW,EAAE,CAAC;IAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAAC;CACxE"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import type { UserInputRequest, UserInputResponse } from "../../user-input/index.js";
2
+ export interface UserInputContext {
3
+ request(request: UserInputRequest, options?: {
4
+ signal?: AbortSignal;
5
+ }): Promise<UserInputResponse>;
6
+ }
7
+ //# sourceMappingURL=UserInputContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserInputContext.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/UserInputContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAErF,MAAM,WAAW,gBAAgB;IAC7B,OAAO,CACH,OAAO,EAAE,gBAAgB,EACzB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACnC,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACjC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { PermissionMode } from "../../permissions/index.js";
2
+ export declare function assertCanWritePath(cwd: string, targetPath: string, mode: PermissionMode): Promise<void>;
3
+ //# sourceMappingURL=assertCanWritePath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertCanWritePath.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/assertCanWritePath.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,wBAAsB,kBAAkB,CACpC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC,CAWf"}
@@ -0,0 +1,11 @@
1
+ import { isPathInsideWorkspace } from "./isPathInsideWorkspace.js";
2
+ export async function assertCanWritePath(cwd, targetPath, mode) {
3
+ if (mode === "full_access")
4
+ return;
5
+ if (mode === "read_only") {
6
+ throw new Error("File changes are disabled in read-only mode.");
7
+ }
8
+ if (!(await isPathInsideWorkspace(cwd, targetPath))) {
9
+ throw new Error(`Workspace write mode cannot modify files outside the working directory: ${cwd}.`);
10
+ }
11
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"createJustBashBashContext.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/createJustBashBashContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CA6B9E"}
1
+ {"version":3,"file":"createJustBashBashContext.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/createJustBashBashContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,KAAK,EAAE,WAAW,EAAsC,MAAM,kBAAkB,CAAC;AAoBxF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CA0J9E"}
@@ -1,7 +1,73 @@
1
1
  import { capOutput } from "./capOutput.js";
2
+ const MAX_RETAINED_SESSIONS = 64;
2
3
  export function createJustBashBashContext(bash, cwd) {
4
+ const sessions = new Map();
5
+ let nextSessionId = 1;
6
+ const trimSessions = () => {
7
+ while (sessions.size > MAX_RETAINED_SESSIONS) {
8
+ const completed = [...sessions.values()].find((session) => session.result !== undefined);
9
+ if (completed === undefined)
10
+ return;
11
+ sessions.delete(completed.sessionId);
12
+ }
13
+ };
14
+ const readSession = async (sessionId, readOptions = {}) => {
15
+ const session = sessions.get(sessionId);
16
+ if (session === undefined)
17
+ return undefined;
18
+ const waitMs = Math.max(0, readOptions.waitMs ?? 0);
19
+ if (session.result === undefined && waitMs > 0 && !readOptions.signal?.aborted) {
20
+ await new Promise((resolveWait) => {
21
+ let settled = false;
22
+ let timer;
23
+ const finish = () => {
24
+ if (settled)
25
+ return;
26
+ settled = true;
27
+ if (timer !== undefined)
28
+ clearTimeout(timer);
29
+ readOptions.signal?.removeEventListener("abort", finish);
30
+ resolveWait();
31
+ };
32
+ timer = setTimeout(finish, waitMs);
33
+ readOptions.signal?.addEventListener("abort", finish, { once: true });
34
+ void session.completion.then(finish);
35
+ if (readOptions.signal?.aborted)
36
+ finish();
37
+ });
38
+ }
39
+ const result = session.result;
40
+ const stdout = result?.stdout ?? "";
41
+ const stderr = result?.stderr ?? "";
42
+ const stdoutDelta = stdout.slice(session.stdoutOffset);
43
+ const stderrDelta = stderr.slice(session.stderrOffset);
44
+ session.stdoutOffset = stdout.length;
45
+ session.stderrOffset = stderr.length;
46
+ return {
47
+ command: session.command,
48
+ cwd: session.cwd,
49
+ exitCode: result?.exitCode ?? null,
50
+ sessionId,
51
+ status: result === undefined ? "running" : session.killed ? "killed" : "completed",
52
+ stderr,
53
+ stderrDelta,
54
+ stdout,
55
+ stdoutDelta,
56
+ timedOut: session.timedOut,
57
+ };
58
+ };
3
59
  return {
4
60
  cwd,
61
+ async killSession(sessionId) {
62
+ const session = sessions.get(sessionId);
63
+ if (session === undefined)
64
+ return undefined;
65
+ session.killed = true;
66
+ session.controller.abort();
67
+ await session.completion;
68
+ return readSession(sessionId);
69
+ },
70
+ readSession,
5
71
  async run(runOptions) {
6
72
  const controller = new AbortController();
7
73
  const timeout = runOptions.timeoutMs === undefined
@@ -27,5 +93,66 @@ export function createJustBashBashContext(bash, cwd) {
27
93
  runOptions.signal?.removeEventListener("abort", abort);
28
94
  }
29
95
  },
96
+ async startSession(runOptions) {
97
+ const controller = new AbortController();
98
+ const sessionId = nextSessionId;
99
+ nextSessionId += 1;
100
+ const session = {
101
+ command: runOptions.command,
102
+ completion: Promise.resolve({
103
+ exitCode: null,
104
+ stderr: "",
105
+ stdout: "",
106
+ timedOut: false,
107
+ }),
108
+ controller,
109
+ cwd: runOptions.cwd ?? cwd,
110
+ killed: false,
111
+ ...(runOptions.maxOutputBytes === undefined
112
+ ? {}
113
+ : { maxOutputBytes: runOptions.maxOutputBytes }),
114
+ sessionId,
115
+ stderrOffset: 0,
116
+ stdoutOffset: 0,
117
+ timedOut: false,
118
+ };
119
+ session.completion = bash
120
+ .exec(runOptions.command, {
121
+ cwd: session.cwd,
122
+ signal: controller.signal,
123
+ })
124
+ .then((result) => ({
125
+ stdout: capOutput(result.stdout, session.maxOutputBytes),
126
+ stderr: capOutput(result.stderr, session.maxOutputBytes),
127
+ exitCode: result.exitCode,
128
+ timedOut: session.timedOut,
129
+ }))
130
+ .catch((error) => ({
131
+ stdout: "",
132
+ stderr: error instanceof Error ? error.message : String(error),
133
+ exitCode: null,
134
+ timedOut: session.timedOut,
135
+ }));
136
+ sessions.set(sessionId, session);
137
+ if (runOptions.timeoutMs !== undefined) {
138
+ session.timeout = setTimeout(() => {
139
+ session.timedOut = true;
140
+ session.killed = true;
141
+ controller.abort();
142
+ }, runOptions.timeoutMs);
143
+ }
144
+ void session.completion.then((result) => {
145
+ session.result = result;
146
+ if (session.timeout !== undefined)
147
+ clearTimeout(session.timeout);
148
+ trimSessions();
149
+ });
150
+ trimSessions();
151
+ return sessionId;
152
+ },
153
+ supportsSessionInput: false,
154
+ async writeSession() {
155
+ return false;
156
+ },
30
157
  };
31
158
  }
@@ -1,8 +1,16 @@
1
1
  import type { NativeProxessManager } from "../../processes/index.js";
2
2
  import type { AgentContext } from "./AgentContext.js";
3
+ import type { GoalContext } from "./GoalContext.js";
4
+ import type { UserInputContext } from "./UserInputContext.js";
5
+ import type { TaskContext } from "./TaskContext.js";
6
+ import { type PermissionMode } from "../../permissions/index.js";
3
7
  export interface CreateNodeAgentContextOptions {
4
8
  cwd: string;
9
+ goals?: GoalContext;
5
10
  processManager: NativeProxessManager;
11
+ permissionMode?: PermissionMode;
12
+ tasks?: TaskContext;
13
+ userInput?: UserInputContext;
6
14
  }
7
15
  export declare function createNodeAgentContext(options: CreateNodeAgentContextOptions): AgentContext;
8
16
  //# sourceMappingURL=createNodeAgentContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createNodeAgentContext.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/createNodeAgentContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,MAAM,WAAW,6BAA6B;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,oBAAoB,CAAC;CACxC;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,6BAA6B,GAAG,YAAY,CAQ3F"}
1
+ {"version":3,"file":"createNodeAgentContext.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/createNodeAgentContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAGH,KAAK,cAAc,EACtB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,6BAA6B;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,cAAc,EAAE,oBAAoB,CAAC;IACrC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAChC;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,6BAA6B,GAAG,YAAY,CAiB3F"}
@@ -1,11 +1,24 @@
1
1
  import { createNodeBashContext } from "./createNodeBashContext.js";
2
2
  import { createNodeFileSystemContext } from "./createNodeFileSystemContext.js";
3
+ import { createPermissionContext, DEFAULT_PERMISSION_MODE, } from "../../permissions/index.js";
3
4
  export function createNodeAgentContext(options) {
4
- return {
5
- fs: createNodeFileSystemContext(options.cwd),
5
+ const permissions = createPermissionContext(options.permissionMode ?? DEFAULT_PERMISSION_MODE);
6
+ const context = {
7
+ fs: createNodeFileSystemContext(options.cwd, {
8
+ permissionMode: () => permissions.mode,
9
+ }),
6
10
  bash: createNodeBashContext({
7
11
  cwd: options.cwd,
8
12
  processManager: options.processManager,
13
+ permissions,
9
14
  }),
15
+ permissions,
10
16
  };
17
+ if (options.userInput !== undefined)
18
+ context.userInput = options.userInput;
19
+ if (options.goals !== undefined)
20
+ context.goals = options.goals;
21
+ if (options.tasks !== undefined)
22
+ context.tasks = options.tasks;
23
+ return context;
11
24
  }
@@ -1,8 +1,10 @@
1
1
  import type { NativeProxessManager } from "../../processes/index.js";
2
+ import type { PermissionContext } from "../../permissions/index.js";
2
3
  import type { BashContext } from "./BashContext.js";
3
4
  export interface CreateNodeBashContextOptions {
4
5
  cwd: string;
5
6
  processManager: NativeProxessManager;
7
+ permissions: PermissionContext;
6
8
  }
7
9
  export declare function createNodeBashContext(options: CreateNodeBashContextOptions): BashContext;
8
10
  //# sourceMappingURL=createNodeBashContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createNodeBashContext.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/createNodeBashContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,4BAA4B;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,oBAAoB,CAAC;CACxC;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,GAAG,WAAW,CAuBxF"}
1
+ {"version":3,"file":"createNodeBashContext.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/createNodeBashContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAER,oBAAoB,EAEvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,kBAAkB,CAAC;AAGzE,MAAM,WAAW,4BAA4B;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,oBAAoB,CAAC;IACrC,WAAW,EAAE,iBAAiB,CAAC;CAClC;AAiBD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,GAAG,WAAW,CA4IxF"}
@@ -1,16 +1,84 @@
1
+ import { isAbsolute, resolve } from "node:path";
2
+ import { createSandboxedCommand } from "./createSandboxedCommand.js";
3
+ const MAX_RETAINED_SESSIONS = 64;
1
4
  export function createNodeBashContext(options) {
5
+ const sessions = new Map();
6
+ let nextSessionId = 1;
7
+ const runCwd = (cwd) => cwd === undefined ? options.cwd : isAbsolute(cwd) ? cwd : resolve(options.cwd, cwd);
8
+ const readSession = async (sessionId, readOptions = {}) => {
9
+ const session = sessions.get(sessionId);
10
+ if (session === undefined)
11
+ return undefined;
12
+ const waitMs = Math.max(0, readOptions.waitMs ?? 0);
13
+ if (session.result === undefined && waitMs > 0 && !readOptions.signal?.aborted) {
14
+ await new Promise((resolveWait) => {
15
+ let settled = false;
16
+ let timer;
17
+ const finish = () => {
18
+ if (settled)
19
+ return;
20
+ settled = true;
21
+ if (timer !== undefined)
22
+ clearTimeout(timer);
23
+ readOptions.signal?.removeEventListener("abort", finish);
24
+ resolveWait();
25
+ };
26
+ timer = setTimeout(finish, waitMs);
27
+ readOptions.signal?.addEventListener("abort", finish, { once: true });
28
+ void session.completion.then(finish);
29
+ if (readOptions.signal?.aborted)
30
+ finish();
31
+ });
32
+ }
33
+ const processSnapshot = session.result ?? session.process.snapshot();
34
+ const stdoutDelta = processSnapshot.stdout.slice(session.stdoutOffset);
35
+ const stderrDelta = processSnapshot.stderr.slice(session.stderrOffset);
36
+ session.stdoutOffset = processSnapshot.stdout.length;
37
+ session.stderrOffset = processSnapshot.stderr.length;
38
+ return {
39
+ command: session.command,
40
+ cwd: session.cwd,
41
+ exitCode: session.result?.exitCode ?? null,
42
+ sessionId,
43
+ status: session.result === undefined
44
+ ? "running"
45
+ : session.result.killed
46
+ ? "killed"
47
+ : "completed",
48
+ stderr: processSnapshot.stderr,
49
+ stderrDelta,
50
+ stdout: processSnapshot.stdout,
51
+ stdoutDelta,
52
+ timedOut: session.timedOut,
53
+ };
54
+ };
2
55
  return {
3
56
  cwd: options.cwd,
57
+ async killSession(sessionId) {
58
+ const session = sessions.get(sessionId);
59
+ if (session === undefined)
60
+ return undefined;
61
+ await session.process.kill("SIGTERM", { forceAfterMs: 500 });
62
+ return readSession(sessionId);
63
+ },
64
+ readSession,
4
65
  async run(runOptions) {
5
- const processRunOptions = {
66
+ const cwd = runCwd(runOptions.cwd);
67
+ const command = await createSandboxedCommand({
6
68
  command: runOptions.command,
7
- cwd: runOptions.cwd ?? options.cwd,
69
+ cwd: options.cwd,
70
+ mode: options.permissions.mode,
71
+ });
72
+ const processRunOptions = {
73
+ command,
74
+ cwd,
8
75
  timeoutMs: runOptions.timeoutMs ?? 120_000,
9
76
  maxOutputBytes: runOptions.maxOutputBytes ?? 512_000,
10
77
  };
11
- if (runOptions.signal !== undefined) {
78
+ if (runOptions.signal !== undefined)
12
79
  processRunOptions.signal = runOptions.signal;
13
- }
80
+ if (runOptions.shell !== undefined)
81
+ processRunOptions.shell = runOptions.shell;
14
82
  const result = await options.processManager.run(processRunOptions);
15
83
  return {
16
84
  stdout: result.stdout,
@@ -19,5 +87,56 @@ export function createNodeBashContext(options) {
19
87
  timedOut: result.timedOut,
20
88
  };
21
89
  },
90
+ async startSession(runOptions) {
91
+ const cwd = runCwd(runOptions.cwd);
92
+ const command = await createSandboxedCommand({
93
+ command: runOptions.command,
94
+ cwd: options.cwd,
95
+ mode: options.permissions.mode,
96
+ });
97
+ const process = options.processManager.start({
98
+ cleanupProcessGroupOnExit: true,
99
+ command,
100
+ cwd,
101
+ maxOutputBytes: runOptions.maxOutputBytes ?? 512_000,
102
+ ...(runOptions.shell === undefined ? {} : { shell: runOptions.shell }),
103
+ });
104
+ const sessionId = nextSessionId;
105
+ nextSessionId += 1;
106
+ const session = {
107
+ command: runOptions.command,
108
+ completion: process.wait(),
109
+ cwd,
110
+ process,
111
+ sessionId,
112
+ stderrOffset: 0,
113
+ stdoutOffset: 0,
114
+ timedOut: false,
115
+ };
116
+ sessions.set(sessionId, session);
117
+ if (runOptions.timeoutMs !== undefined) {
118
+ session.timeout = setTimeout(() => {
119
+ session.timedOut = true;
120
+ void process.kill("SIGTERM", { forceAfterMs: 500 });
121
+ }, runOptions.timeoutMs);
122
+ session.timeout.unref();
123
+ }
124
+ void session.completion.then((result) => {
125
+ session.result = result;
126
+ if (session.timeout !== undefined)
127
+ clearTimeout(session.timeout);
128
+ });
129
+ if (sessions.size > MAX_RETAINED_SESSIONS) {
130
+ const completed = [...sessions.values()].find((candidate) => candidate.result !== undefined);
131
+ if (completed !== undefined)
132
+ sessions.delete(completed.sessionId);
133
+ }
134
+ return sessionId;
135
+ },
136
+ supportsSessionInput: true,
137
+ async writeSession(sessionId, data) {
138
+ const session = sessions.get(sessionId);
139
+ return session?.process.writeStdin(data) ?? false;
140
+ },
22
141
  };
23
142
  }
@@ -1,6 +1,8 @@
1
1
  import type { FileSystemContext } from "./FileSystemContext.js";
2
+ import type { PermissionMode } from "../../permissions/index.js";
2
3
  export interface CreateNodeFileSystemContextOptions {
3
4
  home?: string;
5
+ permissionMode?: () => PermissionMode;
4
6
  }
5
7
  export declare function createNodeFileSystemContext(cwd: string, options?: CreateNodeFileSystemContextOptions): FileSystemContext;
6
8
  //# sourceMappingURL=createNodeFileSystemContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createNodeFileSystemContext.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/createNodeFileSystemContext.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,WAAW,kCAAkC;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,2BAA2B,CACvC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,kCAAuC,GACjD,iBAAiB,CAuCnB"}
1
+ {"version":3,"file":"createNodeFileSystemContext.d.ts","sourceRoot":"","sources":["../../../sources/agent/context/createNodeFileSystemContext.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,WAAW,kCAAkC;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,cAAc,CAAC;CACzC;AAED,wBAAgB,2BAA2B,CACvC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,kCAAuC,GACjD,iBAAiB,CA+CnB"}