@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,7 +1,9 @@
1
1
  import type { ChangeEffortRequest, ChangeModelRequest, CreateSessionRequest, ModelCatalog, SessionSummary, SubagentSummary } from "../protocol/index.js";
2
2
  import { InMemorySession } from "./InMemorySession.js";
3
3
  import type { SessionStore } from "./SessionStore.js";
4
+ import type { McpToolProvider } from "../mcp/index.js";
4
5
  export interface InMemorySessionStoreOptions {
6
+ mcpToolProvider?: McpToolProvider;
5
7
  modelCatalog?: ModelCatalog;
6
8
  }
7
9
  export declare class InMemorySessionStore implements SessionStore {
@@ -1 +1 @@
1
- {"version":3,"file":"InMemorySessionStore.d.ts","sourceRoot":"","sources":["../../sources/server/InMemorySessionStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EAEZ,cAAc,EACd,eAAe,EAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,2BAA2B;IACxC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B;AAED,qBAAa,oBAAqB,YAAW,YAAY;;gBAMzC,OAAO,GAAE,2BAAgC;IAUrD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,eAAe,GAAG,SAAS;IAU1F,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,eAAe;IAmBtD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAInD,IAAI,CAAC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,SAAS,cAAc,EAAE;IAQjE,aAAa,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,eAAe,EAAE;IAOlE,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,eAAe,GAAG,SAAS;CAS3F"}
1
+ {"version":3,"file":"InMemorySessionStore.d.ts","sourceRoot":"","sources":["../../sources/server/InMemorySessionStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EAEZ,cAAc,EACd,eAAe,EAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,WAAW,2BAA2B;IACxC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B;AAED,qBAAa,oBAAqB,YAAW,YAAY;;gBAOzC,OAAO,GAAE,2BAAgC;IAiBrD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,eAAe,GAAG,SAAS;IAU1F,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,eAAe;IAsBtD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAInD,IAAI,CAAC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,SAAS,cAAc,EAAE;IAQjE,aAAa,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,eAAe,EAAE;IAOlE,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,eAAe,GAAG,SAAS;CAS3F"}
@@ -6,13 +6,17 @@ export class InMemorySessionStore {
6
6
  #agentManager;
7
7
  #createEventId = createEventIdFactory();
8
8
  #modelCatalog;
9
+ #mcpToolProvider;
9
10
  #sessions = new Map();
10
11
  constructor(options = {}) {
11
12
  this.#modelCatalog = options.modelCatalog ?? createModelCatalog();
13
+ this.#mcpToolProvider = options.mcpToolProvider;
12
14
  this.#agentManager = new AgentSessionManager({
13
15
  repository: {
14
16
  createSubagent: (request, metadata) => this.#createSession(request, metadata),
15
17
  get: (sessionId) => this.get(sessionId),
18
+ listByRoot: (rootSessionId) => [...this.#sessions.values()].filter((session) => session.agentMetadata().rootSessionId === rootSessionId &&
19
+ session.isSubagent()),
16
20
  },
17
21
  });
18
22
  }
@@ -32,6 +36,9 @@ export class InMemorySessionStore {
32
36
  agentManager: this.#agentManager,
33
37
  createEventId: this.#createEventId,
34
38
  modelCatalog: this.#modelCatalog,
39
+ ...(this.#mcpToolProvider !== undefined
40
+ ? { mcpToolProvider: this.#mcpToolProvider }
41
+ : {}),
35
42
  ...(metadata !== undefined ? { metadata } : {}),
36
43
  request,
37
44
  });
@@ -1,8 +1,10 @@
1
1
  import type { ChangeEffortRequest, ChangeModelRequest, CreateSessionRequest, ModelCatalog, SessionInterruption, SessionSummary, SubagentSummary } from "../protocol/index.js";
2
2
  import { InMemorySession, type InMemorySessionPersistence, type PersistedQueuedRun, type PersistedSessionMessage, type PersistedSessionState } from "./InMemorySession.js";
3
3
  import type { SessionStore } from "./SessionStore.js";
4
+ import type { McpToolProvider } from "../mcp/index.js";
4
5
  export interface PersistentSessionStoreOptions {
5
6
  databasePath: string;
7
+ mcpToolProvider?: McpToolProvider;
6
8
  modelCatalog?: ModelCatalog;
7
9
  now?: () => number;
8
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PersistentSessionStore.d.ts","sourceRoot":"","sources":["../../sources/server/PersistentSessionStore.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACR,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EAGZ,mBAAmB,EACnB,cAAc,EACd,eAAe,EAElB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACH,eAAe,EACf,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC7B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,6BAA6B;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACtB;AAED,qBAAa,sBAAuB,YAAW,YAAY,EAAE,0BAA0B;;gBAQvE,OAAO,EAAE,6BAA6B;IAwBlD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,eAAe,GAAG,SAAS;IAUxF,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,eAAe,GAAG,SAAS;IAU1F,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAItC,KAAK,IAAI,IAAI;IAIb,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,eAAe;IAuBtD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMvD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAanD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,GAAG,IAAI;IA6BjE,IAAI,CAAC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,SAAS,cAAc,EAAE;IAuDjE,aAAa,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,eAAe,EAAE;IAsClE,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAuCtE,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAuF/C,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI;CAgV3E"}
1
+ {"version":3,"file":"PersistentSessionStore.d.ts","sourceRoot":"","sources":["../../sources/server/PersistentSessionStore.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACR,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EAGZ,mBAAmB,EACnB,cAAc,EACd,eAAe,EAElB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EACH,eAAe,EACf,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC7B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,WAAW,6BAA6B;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACtB;AAED,qBAAa,sBAAuB,YAAW,YAAY,EAAE,0BAA0B;;gBASvE,OAAO,EAAE,6BAA6B;IA0BlD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,eAAe,GAAG,SAAS;IAUxF,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,eAAe,GAAG,SAAS;IAU1F,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAItC,KAAK,IAAI,IAAI;IAIb,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,eAAe;IA0BtD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMvD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAanD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,GAAG,IAAI;IAgCjE,IAAI,CAAC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,SAAS,cAAc,EAAE;IAyDjE,aAAa,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,eAAe,EAAE;IAwDlE,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAuCtE,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAyG/C,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI;CAsX3E"}
@@ -2,6 +2,7 @@ import { chmodSync, mkdirSync } from "node:fs";
2
2
  import { dirname } from "node:path";
3
3
  import { DatabaseSync } from "node:sqlite";
4
4
  import { createEventIdFactory } from "../protocol/index.js";
5
+ import { parsePermissionMode } from "../permissions/index.js";
5
6
  import { InMemorySession, } from "./InMemorySession.js";
6
7
  import { AgentSessionManager } from "./AgentSessionManager.js";
7
8
  import { createModelCatalog } from "./createModelCatalog.js";
@@ -10,10 +11,12 @@ export class PersistentSessionStore {
10
11
  #createEventId = createEventIdFactory();
11
12
  #database;
12
13
  #modelCatalog;
14
+ #mcpToolProvider;
13
15
  #now;
14
16
  #sessions = new Map();
15
17
  constructor(options) {
16
18
  this.#modelCatalog = options.modelCatalog ?? createModelCatalog();
19
+ this.#mcpToolProvider = options.mcpToolProvider;
17
20
  this.#now = options.now ?? Date.now;
18
21
  if (options.databasePath !== ":memory:") {
19
22
  mkdirSync(dirname(options.databasePath), { mode: 0o700, recursive: true });
@@ -27,6 +30,7 @@ export class PersistentSessionStore {
27
30
  repository: {
28
31
  createSubagent: (request, metadata) => this.#createSession(request, metadata),
29
32
  get: (sessionId) => this.get(sessionId),
33
+ listByRoot: (rootSessionId) => this.#listSubagentSessionsByRoot(rootSessionId),
30
34
  },
31
35
  });
32
36
  if (options.databasePath !== ":memory:") {
@@ -66,6 +70,9 @@ export class PersistentSessionStore {
66
70
  createEventId: this.#createEventId,
67
71
  emitCreatedEvent: false,
68
72
  modelCatalog: this.#modelCatalog,
73
+ ...(this.#mcpToolProvider !== undefined
74
+ ? { mcpToolProvider: this.#mcpToolProvider }
75
+ : {}),
69
76
  ...(metadata !== undefined ? { metadata } : {}),
70
77
  onAppendEvent: (event) => this.#appendEvent(event),
71
78
  persistence: this,
@@ -98,17 +105,19 @@ export class PersistentSessionStore {
98
105
  session_id,
99
106
  run_id,
100
107
  display_text,
108
+ kind,
101
109
  text,
102
110
  user_message_json,
103
111
  created_at_ms
104
112
  )
105
- VALUES (?, ?, ?, ?, ?, ?)
113
+ VALUES (?, ?, ?, ?, ?, ?, ?)
106
114
  ON CONFLICT(session_id, run_id) DO UPDATE SET
107
115
  display_text = excluded.display_text,
116
+ kind = excluded.kind,
108
117
  text = excluded.text,
109
118
  user_message_json = excluded.user_message_json
110
119
  `)
111
- .run(sessionId, run.runId, run.displayText, run.text, JSON.stringify(run.userMessage), this.#now());
120
+ .run(sessionId, run.runId, run.displayText, run.kind, run.text, JSON.stringify(run.userMessage), this.#now());
112
121
  }
113
122
  list(options = {}) {
114
123
  const rows = this.#database
@@ -118,6 +127,7 @@ export class PersistentSessionStore {
118
127
  cwd,
119
128
  provider_id,
120
129
  model_id,
130
+ permission_mode,
121
131
  effort,
122
132
  status,
123
133
  title,
@@ -147,6 +157,7 @@ export class PersistentSessionStore {
147
157
  cwd: readString(row, "cwd"),
148
158
  providerId: readString(row, "provider_id"),
149
159
  modelId: readString(row, "model_id"),
160
+ permissionMode: parsePermissionMode(readString(row, "permission_mode")),
150
161
  ...(effort !== undefined ? { effort } : {}),
151
162
  status: readString(row, "status"),
152
163
  titleStatus: readString(row, "title_status"),
@@ -171,6 +182,7 @@ export class PersistentSessionStore {
171
182
  status,
172
183
  parent_session_id,
173
184
  parent_tool_call_id,
185
+ task_name,
174
186
  depth,
175
187
  description,
176
188
  created_at_ms,
@@ -182,6 +194,7 @@ export class PersistentSessionStore {
182
194
  .all(parentSessionId)
183
195
  .map((row) => {
184
196
  const parentToolCallId = readOptionalString(row, "parent_tool_call_id");
197
+ const taskName = readOptionalString(row, "task_name");
185
198
  return {
186
199
  agentId: readString(row, "agent_id"),
187
200
  createdAt: readNumber(row, "created_at_ms"),
@@ -192,10 +205,23 @@ export class PersistentSessionStore {
192
205
  parentSessionId: readString(row, "parent_session_id"),
193
206
  ...(parentToolCallId !== undefined ? { parentToolCallId } : {}),
194
207
  status: readString(row, "status"),
208
+ ...(taskName !== undefined ? { taskName } : {}),
195
209
  updatedAt: readNumber(row, "updated_at_ms"),
196
210
  };
197
211
  });
198
212
  }
213
+ #listSubagentSessionsByRoot(rootSessionId) {
214
+ return this.#database
215
+ .prepare(`
216
+ SELECT id
217
+ FROM sessions
218
+ WHERE root_session_id = ? AND session_kind = 'subagent'
219
+ ORDER BY created_at_ms ASC
220
+ `)
221
+ .all(rootSessionId)
222
+ .map((row) => this.get(readString(row, "id")))
223
+ .filter((session) => session !== undefined);
224
+ }
199
225
  repairInterruptedSessions(reason) {
200
226
  const rows = this.#database
201
227
  .prepare(`
@@ -240,6 +266,7 @@ export class PersistentSessionStore {
240
266
  root_session_id,
241
267
  depth,
242
268
  parent_tool_call_id,
269
+ task_name,
243
270
  description,
244
271
  cwd,
245
272
  provider_id,
@@ -248,8 +275,13 @@ export class PersistentSessionStore {
248
275
  instructions,
249
276
  status,
250
277
  active_run_id,
278
+ permission_mode,
279
+ context_messages_json,
251
280
  models_json,
252
281
  tools_json,
282
+ tasks_json,
283
+ goal_json,
284
+ next_task_id,
253
285
  title,
254
286
  title_status,
255
287
  title_error,
@@ -259,7 +291,7 @@ export class PersistentSessionStore {
259
291
  created_at_ms,
260
292
  updated_at_ms
261
293
  )
262
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
294
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
263
295
  ON CONFLICT(id) DO UPDATE SET
264
296
  agent_id = excluded.agent_id,
265
297
  session_kind = excluded.session_kind,
@@ -267,6 +299,7 @@ export class PersistentSessionStore {
267
299
  root_session_id = excluded.root_session_id,
268
300
  depth = excluded.depth,
269
301
  parent_tool_call_id = excluded.parent_tool_call_id,
302
+ task_name = excluded.task_name,
270
303
  description = excluded.description,
271
304
  cwd = excluded.cwd,
272
305
  provider_id = excluded.provider_id,
@@ -275,8 +308,13 @@ export class PersistentSessionStore {
275
308
  instructions = excluded.instructions,
276
309
  status = excluded.status,
277
310
  active_run_id = excluded.active_run_id,
311
+ permission_mode = excluded.permission_mode,
312
+ context_messages_json = excluded.context_messages_json,
278
313
  models_json = excluded.models_json,
279
314
  tools_json = excluded.tools_json,
315
+ tasks_json = excluded.tasks_json,
316
+ goal_json = excluded.goal_json,
317
+ next_task_id = excluded.next_task_id,
280
318
  title = excluded.title,
281
319
  title_status = excluded.title_status,
282
320
  title_error = excluded.title_error,
@@ -285,7 +323,7 @@ export class PersistentSessionStore {
285
323
  last_message_at_ms = excluded.last_message_at_ms,
286
324
  updated_at_ms = excluded.updated_at_ms
287
325
  `)
288
- .run(state.id, state.agentId, state.agent.type, state.agent.parentSessionId ?? null, state.agent.rootSessionId, state.agent.depth, state.agent.parentToolCallId ?? null, state.agent.description ?? null, state.cwd, state.providerId, state.modelId, state.effort ?? null, state.instructions ?? null, state.status, state.activeRunId ?? null, JSON.stringify(state.models), JSON.stringify(state.tools), state.title ?? null, state.titleStatus, state.titleError ?? null, state.interruption === undefined ? 0 : 1, state.interruption === undefined ? null : JSON.stringify(state.interruption), state.lastMessageAt ?? null, this.#now(), this.#now());
326
+ .run(state.id, state.agentId, state.agent.type, state.agent.parentSessionId ?? null, state.agent.rootSessionId, state.agent.depth, state.agent.parentToolCallId ?? null, state.agent.taskName ?? null, state.agent.description ?? null, state.cwd, state.providerId, state.modelId, state.effort ?? null, state.instructions ?? null, state.status, state.activeRunId ?? null, state.permissionMode, state.contextMessages === undefined ? null : JSON.stringify(state.contextMessages), JSON.stringify(state.models), JSON.stringify(state.tools), JSON.stringify(state.tasks), state.goal === undefined ? null : JSON.stringify(state.goal), state.nextTaskId, state.title ?? null, state.titleStatus, state.titleError ?? null, state.interruption === undefined ? 0 : 1, state.interruption === undefined ? null : JSON.stringify(state.interruption), state.lastMessageAt ?? null, this.#now(), this.#now());
289
327
  }
290
328
  upsertMessage(sessionId, message) {
291
329
  this.#database
@@ -349,6 +387,7 @@ export class PersistentSessionStore {
349
387
  root_session_id TEXT,
350
388
  depth INTEGER NOT NULL DEFAULT 0,
351
389
  parent_tool_call_id TEXT,
390
+ task_name TEXT,
352
391
  description TEXT,
353
392
  cwd TEXT NOT NULL,
354
393
  provider_id TEXT NOT NULL,
@@ -358,8 +397,13 @@ export class PersistentSessionStore {
358
397
  status TEXT NOT NULL,
359
398
  active_run_id TEXT,
360
399
  last_event_id TEXT,
400
+ permission_mode TEXT NOT NULL DEFAULT 'workspace_write',
401
+ context_messages_json TEXT,
361
402
  models_json TEXT NOT NULL,
362
403
  tools_json TEXT NOT NULL,
404
+ tasks_json TEXT NOT NULL DEFAULT '[]',
405
+ goal_json TEXT,
406
+ next_task_id INTEGER NOT NULL DEFAULT 1,
363
407
  title TEXT,
364
408
  title_status TEXT NOT NULL DEFAULT 'idle',
365
409
  title_error TEXT,
@@ -401,6 +445,7 @@ export class PersistentSessionStore {
401
445
  session_id TEXT NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
402
446
  run_id TEXT NOT NULL,
403
447
  display_text TEXT NOT NULL,
448
+ kind TEXT NOT NULL DEFAULT 'user',
404
449
  text TEXT NOT NULL,
405
450
  user_message_json TEXT NOT NULL,
406
451
  created_at_ms INTEGER NOT NULL,
@@ -416,7 +461,14 @@ export class PersistentSessionStore {
416
461
  this.#ensureSessionColumn("root_session_id", "TEXT");
417
462
  this.#ensureSessionColumn("depth", "INTEGER NOT NULL DEFAULT 0");
418
463
  this.#ensureSessionColumn("parent_tool_call_id", "TEXT");
464
+ this.#ensureSessionColumn("task_name", "TEXT");
419
465
  this.#ensureSessionColumn("description", "TEXT");
466
+ this.#ensureSessionColumn("context_messages_json", "TEXT");
467
+ this.#ensureSessionColumn("permission_mode", "TEXT NOT NULL DEFAULT 'workspace_write'");
468
+ this.#ensureSessionColumn("tasks_json", "TEXT NOT NULL DEFAULT '[]'");
469
+ this.#ensureSessionColumn("goal_json", "TEXT");
470
+ this.#ensureSessionColumn("next_task_id", "INTEGER NOT NULL DEFAULT 1");
471
+ this.#ensureQueuedRunColumn("kind", "TEXT NOT NULL DEFAULT 'user'");
420
472
  this.#database.exec(`
421
473
  CREATE INDEX IF NOT EXISTS sessions_parent_created
422
474
  ON sessions(parent_session_id, created_at_ms)
@@ -464,7 +516,7 @@ export class PersistentSessionStore {
464
516
  #loadQueuedRuns(sessionId) {
465
517
  return this.#database
466
518
  .prepare(`
467
- SELECT run_id, display_text, text, user_message_json
519
+ SELECT run_id, display_text, kind, text, user_message_json
468
520
  FROM queued_runs
469
521
  WHERE session_id = ?
470
522
  ORDER BY created_at_ms ASC
@@ -472,6 +524,7 @@ export class PersistentSessionStore {
472
524
  .all(sessionId)
473
525
  .map((row) => ({
474
526
  displayText: readString(row, "display_text"),
527
+ kind: readString(row, "kind"),
475
528
  runId: readString(row, "run_id"),
476
529
  text: readString(row, "text"),
477
530
  userMessage: JSON.parse(readString(row, "user_message_json")),
@@ -496,9 +549,13 @@ export class PersistentSessionStore {
496
549
  const title = readOptionalString(row, "title");
497
550
  const titleError = readOptionalString(row, "title_error");
498
551
  const activeRunId = readOptionalString(row, "active_run_id");
552
+ const contextMessagesJson = readOptionalString(row, "context_messages_json");
553
+ const permissionMode = parsePermissionMode(readString(row, "permission_mode"));
499
554
  const parentSessionId = readOptionalString(row, "parent_session_id");
500
555
  const parentToolCallId = readOptionalString(row, "parent_tool_call_id");
556
+ const taskName = readOptionalString(row, "task_name");
501
557
  const description = readOptionalString(row, "description");
558
+ const goalJson = readOptionalString(row, "goal_json");
502
559
  const id = readString(row, "id");
503
560
  const agent = {
504
561
  depth: readNumber(row, "depth"),
@@ -507,14 +564,19 @@ export class PersistentSessionStore {
507
564
  ...(description !== undefined ? { description } : {}),
508
565
  ...(parentSessionId !== undefined ? { parentSessionId } : {}),
509
566
  ...(parentToolCallId !== undefined ? { parentToolCallId } : {}),
567
+ ...(taskName !== undefined ? { taskName } : {}),
510
568
  };
511
569
  const restore = {
512
570
  agent,
513
571
  agentId: readString(row, "agent_id"),
514
572
  cwd: readString(row, "cwd"),
573
+ ...(contextMessagesJson !== undefined
574
+ ? { contextMessages: JSON.parse(contextMessagesJson) }
575
+ : {}),
515
576
  ...(effort !== undefined ? { effort } : {}),
516
577
  id,
517
578
  ...(instructions !== undefined ? { instructions } : {}),
579
+ ...(goalJson !== undefined ? { goal: JSON.parse(goalJson) } : {}),
518
580
  ...(interruptionJson !== undefined
519
581
  ? { interruption: JSON.parse(interruptionJson) }
520
582
  : {}),
@@ -523,8 +585,11 @@ export class PersistentSessionStore {
523
585
  modelId,
524
586
  models: JSON.parse(readString(row, "models_json")),
525
587
  providerId: readString(row, "provider_id"),
588
+ permissionMode,
526
589
  queuedRuns: this.#loadQueuedRuns(sessionId),
527
590
  status: readString(row, "status"),
591
+ tasks: JSON.parse(readString(row, "tasks_json")),
592
+ nextTaskId: readNumber(row, "next_task_id"),
528
593
  ...(title !== undefined ? { title } : {}),
529
594
  ...(titleError !== undefined ? { titleError } : {}),
530
595
  titleStatus: readString(row, "title_status"),
@@ -545,6 +610,9 @@ export class PersistentSessionStore {
545
610
  createEventId: this.#createEventId,
546
611
  events: this.#loadEvents(sessionId),
547
612
  modelCatalog: this.#modelCatalog,
613
+ ...(this.#mcpToolProvider !== undefined
614
+ ? { mcpToolProvider: this.#mcpToolProvider }
615
+ : {}),
548
616
  onAppendEvent: (event) => this.#appendEvent(event),
549
617
  persistence: this,
550
618
  request,
@@ -582,6 +650,13 @@ export class PersistentSessionStore {
582
650
  }
583
651
  this.#database.exec(`ALTER TABLE sessions ADD COLUMN ${name} ${definition}`);
584
652
  }
653
+ #ensureQueuedRunColumn(name, definition) {
654
+ const columns = this.#database.prepare("PRAGMA table_info(queued_runs)").all();
655
+ if (columns.some((column) => readString(column, "name") === name)) {
656
+ return;
657
+ }
658
+ this.#database.exec(`ALTER TABLE queued_runs ADD COLUMN ${name} ${definition}`);
659
+ }
585
660
  }
586
661
  function readNumber(row, key) {
587
662
  const value = row[key];
@@ -0,0 +1,2 @@
1
+ export declare function createGoalTitle(objective: string): string;
2
+ //# sourceMappingURL=createGoalTitle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createGoalTitle.d.ts","sourceRoot":"","sources":["../../sources/server/createGoalTitle.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGzD"}
@@ -0,0 +1,4 @@
1
+ export function createGoalTitle(objective) {
2
+ const singleLine = objective.replace(/\s+/gu, " ").trim();
3
+ return singleLine.length <= 80 ? singleLine : `${singleLine.slice(0, 79).trimEnd()}…`;
4
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"createProtocolHttpServer.d.ts","sourceRoot":"","sources":["../../sources/server/createProtocolHttpServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,MAAM,EAAuB,MAAM,WAAW,CAAC;AAGjG,OAAO,KAAK,EAUR,YAAY,EAMf,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAqB,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAE3F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,yBAAyB;IACtC,cAAc,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACvC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;IAC9C,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,GAAG,MAAM,CA2BnF"}
1
+ {"version":3,"file":"createProtocolHttpServer.d.ts","sourceRoot":"","sources":["../../sources/server/createProtocolHttpServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,MAAM,EAAuB,MAAM,WAAW,CAAC;AAGjG,OAAO,KAAK,EAeR,YAAY,EAQf,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAqB,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAE3F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,MAAM,WAAW,yBAAyB;IACtC,cAAc,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACvC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;IAC9C,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,GAAG,MAAM,CA2BnF"}
@@ -3,6 +3,8 @@ import { timingSafeEqual } from "node:crypto";
3
3
  import { InMemorySessionStore } from "./InMemorySessionStore.js";
4
4
  import { createModelCatalog } from "./createModelCatalog.js";
5
5
  import { FileSearchService } from "./FileSearchService.js";
6
+ import { isPermissionMode } from "../permissions/index.js";
7
+ import { isGoalStatus } from "../goals/index.js";
6
8
  export function createProtocolHttpServer(options) {
7
9
  const modelCatalog = options.modelCatalog ?? createModelCatalog();
8
10
  const store = options.store ??
@@ -51,6 +53,12 @@ async function handleRequest(request, response, store, initialization, fileSearc
51
53
  }
52
54
  if (request.method === "POST" && route.name === "sessions") {
53
55
  const body = await readJson(request);
56
+ if (body.permissionMode !== undefined && !isPermissionMode(body.permissionMode)) {
57
+ sendJson(response, 400, {
58
+ error: "Permission mode must be Auto, Workspace write, Read only, or Full access.",
59
+ });
60
+ return;
61
+ }
54
62
  const session = store.create(body);
55
63
  sendJson(response, 201, { session: session.snapshot() });
56
64
  return;
@@ -99,6 +107,18 @@ async function handleRequest(request, response, store, initialization, fileSearc
99
107
  sendJson(response, 202, session.submit(body));
100
108
  return;
101
109
  }
110
+ if (request.method === "POST" && route.name === "steer") {
111
+ const body = await readJson(request);
112
+ try {
113
+ sendJson(response, 202, session.steer(body));
114
+ }
115
+ catch (error) {
116
+ sendJson(response, 409, {
117
+ error: error instanceof Error ? error.message : "The active run cannot be steered.",
118
+ });
119
+ }
120
+ return;
121
+ }
102
122
  if (request.method === "POST" && route.name === "abort") {
103
123
  sendJson(response, 200, session.abort());
104
124
  return;
@@ -107,6 +127,14 @@ async function handleRequest(request, response, store, initialization, fileSearc
107
127
  sendJson(response, 200, { session: session.reset() });
108
128
  return;
109
129
  }
130
+ if (request.method === "POST" && route.name === "compact") {
131
+ const result = await session.compact();
132
+ sendJson(response, 200, {
133
+ result,
134
+ session: session.snapshot(),
135
+ });
136
+ return;
137
+ }
110
138
  if (request.method === "PATCH" && route.name === "effort") {
111
139
  const body = await readJson(request);
112
140
  sendJson(response, 200, { session: session.changeEffort(body) });
@@ -117,6 +145,77 @@ async function handleRequest(request, response, store, initialization, fileSearc
117
145
  sendJson(response, 200, { session: session.changeModel(body) });
118
146
  return;
119
147
  }
148
+ if (request.method === "PATCH" && route.name === "permissions") {
149
+ const body = await readJson(request);
150
+ if (!isPermissionMode(body.permissionMode)) {
151
+ sendJson(response, 400, {
152
+ error: "Permission mode must be Auto, Workspace write, Read only, or Full access.",
153
+ });
154
+ return;
155
+ }
156
+ sendJson(response, 200, { session: session.changePermissionMode(body) });
157
+ return;
158
+ }
159
+ if (request.method === "POST" && route.name === "goal") {
160
+ const body = await readJson(request);
161
+ if (typeof body.objective !== "string") {
162
+ sendJson(response, 400, { error: "Goal objective must be text." });
163
+ return;
164
+ }
165
+ try {
166
+ session.setGoal(body);
167
+ sendJson(response, 200, { session: session.snapshot() });
168
+ }
169
+ catch (error) {
170
+ sendJson(response, 409, {
171
+ error: error instanceof Error ? error.message : "The goal could not be started.",
172
+ });
173
+ }
174
+ return;
175
+ }
176
+ if (request.method === "PATCH" && route.name === "goal") {
177
+ const body = await readJson(request);
178
+ if (!isGoalStatus(body.status)) {
179
+ sendJson(response, 400, {
180
+ error: "Goal status must be Active, Paused, Blocked, or Complete.",
181
+ });
182
+ return;
183
+ }
184
+ try {
185
+ session.changeGoalStatus(body);
186
+ sendJson(response, 200, { session: session.snapshot() });
187
+ }
188
+ catch (error) {
189
+ sendJson(response, 409, {
190
+ error: error instanceof Error ? error.message : "The goal could not be updated.",
191
+ });
192
+ }
193
+ return;
194
+ }
195
+ if (request.method === "DELETE" && route.name === "goal") {
196
+ session.clearGoal();
197
+ sendJson(response, 200, { session: session.snapshot() });
198
+ return;
199
+ }
200
+ if (request.method === "POST" && route.name === "user-input") {
201
+ const body = await readJson(request);
202
+ try {
203
+ const snapshot = session.answerUserInput(route.requestId, body);
204
+ if (snapshot === undefined) {
205
+ sendJson(response, 409, {
206
+ error: "This question is no longer waiting for an answer.",
207
+ });
208
+ return;
209
+ }
210
+ sendJson(response, 200, { session: snapshot });
211
+ }
212
+ catch (error) {
213
+ sendJson(response, 400, {
214
+ error: error instanceof Error ? error.message : "The answer is invalid.",
215
+ });
216
+ }
217
+ return;
218
+ }
120
219
  if (request.method === "GET" && route.name === "events") {
121
220
  const events = session.events.since(url.searchParams.get("after") ?? undefined);
122
221
  if (events === undefined) {
@@ -218,31 +317,49 @@ function matchRoute(pathname) {
218
317
  const sessionId = decodeURIComponent(parts[1]);
219
318
  if (parts.length === 2)
220
319
  return { name: "session", sessionId };
320
+ if (parts.length === 4 && parts[2] === "user-input" && parts[3] !== undefined) {
321
+ return {
322
+ name: "user-input",
323
+ requestId: decodeURIComponent(parts[3]),
324
+ sessionId,
325
+ };
326
+ }
221
327
  if (parts.length !== 3)
222
328
  return undefined;
223
329
  if (parts[2] === "abort")
224
330
  return { name: "abort", sessionId };
331
+ if (parts[2] === "compact")
332
+ return { name: "compact", sessionId };
225
333
  if (parts[2] === "effort")
226
334
  return { name: "effort", sessionId };
227
335
  if (parts[2] === "events")
228
336
  return { name: "events", sessionId };
229
337
  if (parts[2] === "files")
230
338
  return { name: "files", sessionId };
339
+ if (parts[2] === "goal")
340
+ return { name: "goal", sessionId };
231
341
  if (parts[2] === "messages")
232
342
  return { name: "messages", sessionId };
233
343
  if (parts[2] === "model")
234
344
  return { name: "model", sessionId };
345
+ if (parts[2] === "permissions")
346
+ return { name: "permissions", sessionId };
235
347
  if (parts[2] === "reset")
236
348
  return { name: "reset", sessionId };
237
349
  if (parts[2] === "stream")
238
350
  return { name: "stream", sessionId };
351
+ if (parts[2] === "steer")
352
+ return { name: "steer", sessionId };
239
353
  if (parts[2] === "subagents")
240
354
  return { name: "subagents", sessionId };
241
355
  return undefined;
242
356
  }
243
357
  function isSessionMutation(routeName, method) {
244
- return ((method === "POST" && ["abort", "messages", "reset"].includes(routeName)) ||
245
- (method === "PATCH" && ["effort", "model"].includes(routeName)));
358
+ return ((method === "POST" &&
359
+ ["abort", "compact", "messages", "reset", "steer"].includes(routeName)) ||
360
+ (["DELETE", "PATCH", "POST"].includes(method ?? "") && routeName === "goal") ||
361
+ (method === "POST" && routeName === "user-input") ||
362
+ (method === "PATCH" && ["effort", "model", "permissions"].includes(routeName)));
246
363
  }
247
364
  async function readJson(request) {
248
365
  const chunks = [];
@@ -1 +1 @@
1
- {"version":3,"file":"runLocalProtocolServer.d.ts","sourceRoot":"","sources":["../../sources/server/runLocalProtocolServer.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,6BAA6B;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,sBAAsB,CACxC,OAAO,GAAE,6BAAkC,GAC5C,OAAO,CAAC,IAAI,CAAC,CA+Df"}
1
+ {"version":3,"file":"runLocalProtocolServer.d.ts","sourceRoot":"","sources":["../../sources/server/runLocalProtocolServer.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,6BAA6B;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,sBAAsB,CACxC,OAAO,GAAE,6BAAkC,GAC5C,OAAO,CAAC,IAAI,CAAC,CA8Ef"}
@@ -6,6 +6,7 @@ import { prepareLocalServerDirectory } from "./prepareLocalServerDirectory.js";
6
6
  import { PersistentSessionStore } from "./PersistentSessionStore.js";
7
7
  import { readLocalServerToken } from "./readLocalServerToken.js";
8
8
  import { removeStaleSocket } from "./removeStaleSocket.js";
9
+ import { McpClientManager } from "../mcp/index.js";
9
10
  export async function runLocalProtocolServer(options = {}) {
10
11
  const paths = getLocalServerPaths();
11
12
  const socketPath = options.socketPath ?? paths.socketPath;
@@ -14,7 +15,12 @@ export async function runLocalProtocolServer(options = {}) {
14
15
  const token = await readLocalServerToken(tokenPath);
15
16
  await removeStaleSocket(socketPath);
16
17
  const modelCatalog = createModelCatalog({ cwd: process.cwd() });
17
- const store = new PersistentSessionStore({ databasePath: paths.databasePath, modelCatalog });
18
+ const mcpToolProvider = new McpClientManager();
19
+ const store = new PersistentSessionStore({
20
+ databasePath: paths.databasePath,
21
+ mcpToolProvider,
22
+ modelCatalog,
23
+ });
18
24
  let stopServer;
19
25
  const server = createProtocolHttpServer({
20
26
  modelCatalog,
@@ -67,7 +73,17 @@ export async function runLocalProtocolServer(options = {}) {
67
73
  }
68
74
  finally {
69
75
  stopServer = undefined;
70
- store.close();
76
+ try {
77
+ await mcpToolProvider.close();
78
+ }
79
+ catch (error) {
80
+ console.error(error instanceof Error
81
+ ? `Failed to close MCP connections: ${error.message}`
82
+ : `Failed to close MCP connections: ${String(error)}`);
83
+ }
84
+ finally {
85
+ store.close();
86
+ }
71
87
  }
72
88
  }
73
89
  async function writeRegistry(path, payload) {
@@ -0,0 +1,2 @@
1
+ export type { CreateTaskRequest, SessionTask, TaskStatus, UpdateTaskRequest, UpdateTaskResult, } from "./types.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../sources/tasks/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACR,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,gBAAgB,GACnB,MAAM,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ export {};