@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,3 @@
1
+ export function isGoalStatus(value) {
2
+ return value === "active" || value === "paused" || value === "blocked" || value === "complete";
3
+ }
@@ -0,0 +1,3 @@
1
+ export declare const MAX_GOAL_OBJECTIVE_CHARS = 20000;
2
+ export declare function normalizeGoalObjective(objective: string): string;
3
+ //# sourceMappingURL=normalizeGoalObjective.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizeGoalObjective.d.ts","sourceRoot":"","sources":["../../sources/goals/normalizeGoalObjective.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAWhE"}
@@ -0,0 +1,11 @@
1
+ export const MAX_GOAL_OBJECTIVE_CHARS = 20_000;
2
+ export function normalizeGoalObjective(objective) {
3
+ const normalized = objective.trim();
4
+ if (normalized.length === 0) {
5
+ throw new Error("Goal objective must not be empty.");
6
+ }
7
+ if (normalized.length > MAX_GOAL_OBJECTIVE_CHARS) {
8
+ throw new Error(`Goal objective must be ${MAX_GOAL_OBJECTIVE_CHARS.toLocaleString("en-US")} characters or fewer.`);
9
+ }
10
+ return normalized;
11
+ }
@@ -0,0 +1,12 @@
1
+ import type { McpToolLoadResult, McpToolProvider } from "./types.js";
2
+ export interface McpClientManagerOptions {
3
+ env?: NodeJS.ProcessEnv;
4
+ homeDirectory?: string;
5
+ }
6
+ export declare class McpClientManager implements McpToolProvider {
7
+ #private;
8
+ constructor(options?: McpClientManagerOptions);
9
+ load(cwd: string): Promise<McpToolLoadResult>;
10
+ close(): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=McpClientManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpClientManager.d.ts","sourceRoot":"","sources":["../../sources/mcp/McpClientManager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGR,iBAAiB,EACjB,eAAe,EAClB,MAAM,YAAY,CAAC;AAoBpB,MAAM,WAAW,uBAAuB;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,gBAAiB,YAAW,eAAe;;gBAKxC,OAAO,GAAE,uBAA4B;IAK3C,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAU7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAgH/B"}
@@ -0,0 +1,123 @@
1
+ import { connectMcpServer } from "./connectMcpServer.js";
2
+ import { createMcpTool } from "./createMcpTool.js";
3
+ import { loadMcpServerConfigs } from "./loadMcpServerConfigs.js";
4
+ export class McpClientManager {
5
+ #connectionSets = new Map();
6
+ #env;
7
+ #homeDirectory;
8
+ constructor(options = {}) {
9
+ this.#env = options.env ?? process.env;
10
+ this.#homeDirectory = options.homeDirectory;
11
+ }
12
+ async load(cwd) {
13
+ let pending = this.#connectionSets.get(cwd);
14
+ if (pending === undefined) {
15
+ pending = this.#loadConnectionSet(cwd);
16
+ this.#connectionSets.set(cwd, pending);
17
+ }
18
+ const loaded = await pending;
19
+ return { servers: loaded.servers, tools: loaded.tools };
20
+ }
21
+ async close() {
22
+ const sets = await Promise.allSettled(this.#connectionSets.values());
23
+ this.#connectionSets.clear();
24
+ await Promise.allSettled(sets.flatMap((set) => set.status === "fulfilled"
25
+ ? set.value.connections.map((connection) => connection.close())
26
+ : []));
27
+ }
28
+ async #loadConnectionSet(cwd) {
29
+ const configs = await loadMcpServerConfigs(cwd, {
30
+ env: this.#env,
31
+ ...(this.#homeDirectory !== undefined ? { homeDirectory: this.#homeDirectory } : {}),
32
+ });
33
+ const entries = Object.entries(configs).sort(([left], [right]) => left.localeCompare(right));
34
+ const disabledSummaries = entries
35
+ .filter(([, config]) => config.enabled === false)
36
+ .map(([name]) => ({ name, status: "disabled", toolCount: 0 }));
37
+ const results = await Promise.all(entries
38
+ .filter(([, config]) => config.enabled !== false)
39
+ .map(([name, config]) => this.#connectServer(name, config, cwd)));
40
+ const connections = [];
41
+ const servers = [...disabledSummaries];
42
+ const tools = [];
43
+ const toolNames = new Set();
44
+ for (const result of results) {
45
+ if ("errorMessage" in result) {
46
+ servers.push({
47
+ errorMessage: result.errorMessage,
48
+ name: result.name,
49
+ status: "failed",
50
+ toolCount: 0,
51
+ });
52
+ continue;
53
+ }
54
+ const serverTools = result.tools.map((tool) => createMcpTool({
55
+ client: result.connection.client,
56
+ serverName: result.name,
57
+ tool,
58
+ ...(result.config.toolTimeoutMs !== undefined
59
+ ? { timeoutMs: result.config.toolTimeoutMs }
60
+ : {}),
61
+ }));
62
+ const duplicate = serverTools.find((tool) => toolNames.has(tool.name));
63
+ const duplicateInsideServer = new Set(serverTools.map((tool) => tool.name)).size !== serverTools.length;
64
+ if (duplicate !== undefined || duplicateInsideServer) {
65
+ await result.connection.close().catch(() => undefined);
66
+ servers.push({
67
+ errorMessage: `MCP tool names collide after normalization for server "${result.name}".`,
68
+ name: result.name,
69
+ status: "failed",
70
+ toolCount: 0,
71
+ });
72
+ continue;
73
+ }
74
+ connections.push(result.connection);
75
+ for (const tool of serverTools) {
76
+ toolNames.add(tool.name);
77
+ tools.push(tool);
78
+ }
79
+ servers.push({
80
+ name: result.name,
81
+ status: "connected",
82
+ toolCount: serverTools.length,
83
+ });
84
+ }
85
+ servers.sort((left, right) => left.name.localeCompare(right.name));
86
+ return { connections, servers, tools };
87
+ }
88
+ async #connectServer(name, config, cwd) {
89
+ let connection;
90
+ try {
91
+ connection = await connectMcpServer(name, config, cwd, this.#env);
92
+ const tools = await listAllTools(connection.client, config.startupTimeoutMs ?? 10_000);
93
+ const enabled = config.enabledTools === undefined ? undefined : new Set(config.enabledTools);
94
+ const disabled = new Set(config.disabledTools ?? []);
95
+ return {
96
+ config,
97
+ connection,
98
+ name,
99
+ tools: tools.filter((tool) => (enabled === undefined || enabled.has(tool.name)) &&
100
+ !disabled.has(tool.name)),
101
+ };
102
+ }
103
+ catch (error) {
104
+ await connection?.close().catch(() => undefined);
105
+ return {
106
+ errorMessage: error instanceof Error ? error.message : String(error),
107
+ name,
108
+ };
109
+ }
110
+ }
111
+ }
112
+ async function listAllTools(client, timeout) {
113
+ const tools = [];
114
+ let cursor;
115
+ do {
116
+ const page = await client.listTools(cursor === undefined ? undefined : { cursor }, {
117
+ timeout,
118
+ });
119
+ tools.push(...page.tools);
120
+ cursor = page.nextCursor;
121
+ } while (cursor !== undefined);
122
+ return tools;
123
+ }
@@ -0,0 +1,8 @@
1
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
+ import type { McpServerConfig } from "./types.js";
3
+ export interface ConnectedMcpServer {
4
+ client: Client;
5
+ close(): Promise<void>;
6
+ }
7
+ export declare function connectMcpServer(name: string, config: McpServerConfig, cwd: string, env?: NodeJS.ProcessEnv): Promise<ConnectedMcpServer>;
8
+ //# sourceMappingURL=connectMcpServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectMcpServer.d.ts","sourceRoot":"","sources":["../../sources/mcp/connectMcpServer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAKnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,wBAAsB,gBAAgB,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAM,CAAC,UAAwB,GACrC,OAAO,CAAC,kBAAkB,CAAC,CAe7B"}
@@ -0,0 +1,47 @@
1
+ import { resolve } from "node:path";
2
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
3
+ import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
4
+ import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
5
+ export async function connectMcpServer(name, config, cwd, env = process.env) {
6
+ const client = new Client({ name: "rig", version: "0.0.4" });
7
+ const transport = createTransport(config, cwd, env);
8
+ try {
9
+ await client.connect(transport, { timeout: config.startupTimeoutMs ?? 10_000 });
10
+ }
11
+ catch (error) {
12
+ await transport.close().catch(() => undefined);
13
+ throw new Error(`MCP server "${name}" could not connect: ${error instanceof Error ? error.message : String(error)}`);
14
+ }
15
+ return {
16
+ client,
17
+ close: () => client.close(),
18
+ };
19
+ }
20
+ function createTransport(config, cwd, env) {
21
+ if (config.transport === "stdio") {
22
+ return new StdioClientTransport({
23
+ args: [...(config.args ?? [])],
24
+ command: config.command,
25
+ cwd: config.cwd === undefined ? cwd : resolve(cwd, config.cwd),
26
+ env: {
27
+ ...stringEnvironment(env),
28
+ ...config.env,
29
+ },
30
+ stderr: "ignore",
31
+ });
32
+ }
33
+ const headers = new Headers(config.headers);
34
+ if (config.bearerTokenEnvVar !== undefined) {
35
+ const token = env[config.bearerTokenEnvVar];
36
+ if (token === undefined || token === "") {
37
+ throw new Error(`MCP bearer token environment variable "${config.bearerTokenEnvVar}" is not set.`);
38
+ }
39
+ headers.set("Authorization", `Bearer ${token}`);
40
+ }
41
+ return new StreamableHTTPClientTransport(new URL(config.url), {
42
+ requestInit: { headers },
43
+ });
44
+ }
45
+ function stringEnvironment(env) {
46
+ return Object.fromEntries(Object.entries(env).filter((entry) => entry[1] !== undefined));
47
+ }
@@ -0,0 +1,11 @@
1
+ import type { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
+ import { type AnyDefinedTool } from "../agent/types.js";
3
+ type ListedMcpTool = Awaited<ReturnType<Client["listTools"]>>["tools"][number];
4
+ export declare function createMcpTool(options: {
5
+ client: Client;
6
+ serverName: string;
7
+ tool: ListedMcpTool;
8
+ timeoutMs?: number;
9
+ }): AnyDefinedTool;
10
+ export {};
11
+ //# sourceMappingURL=createMcpTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createMcpTool.d.ts","sourceRoot":"","sources":["../../sources/mcp/createMcpTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGxE,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIpE,KAAK,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/E,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,cAAc,CA+BjB"}
@@ -0,0 +1,43 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { defineTool } from "../agent/types.js";
3
+ import { mcpResultToContentBlocks } from "./mcpResultToContentBlocks.js";
4
+ import { normalizeMcpName } from "./normalizeMcpName.js";
5
+ export function createMcpTool(options) {
6
+ const qualifiedName = `mcp__${normalizeMcpName(options.serverName)}__${normalizeMcpName(options.tool.name)}`;
7
+ const tool = defineTool({
8
+ name: qualifiedName,
9
+ label: qualifiedName,
10
+ description: options.tool.description ?? `Use ${options.tool.name} from ${options.serverName}.`,
11
+ arguments: Type.Unsafe(options.tool.inputSchema),
12
+ returnType: Type.Unknown(),
13
+ async execute(args, _context, execution) {
14
+ const result = await options.client.callTool({
15
+ arguments: isRecord(args) ? args : {},
16
+ name: options.tool.name,
17
+ }, undefined, {
18
+ ...(execution.signal !== undefined ? { signal: execution.signal } : {}),
19
+ ...(options.timeoutMs !== undefined ? { timeout: options.timeoutMs } : {}),
20
+ });
21
+ if (result.isError === true) {
22
+ throw new Error(firstText(result) ?? "The MCP tool reported an error.");
23
+ }
24
+ return result;
25
+ },
26
+ toLLM: (result) => mcpResultToContentBlocks(result),
27
+ toUI: () => `${humanizeName(options.serverName)} · ${humanizeName(options.tool.name)}`,
28
+ locks: options.tool.annotations?.readOnlyHint === true ? [] : [`mcp:${options.serverName}`],
29
+ });
30
+ return tool;
31
+ }
32
+ function firstText(result) {
33
+ if (!isRecord(result) || !Array.isArray(result.content))
34
+ return undefined;
35
+ const text = result.content.find((content) => isRecord(content) && content.type === "text" && typeof content.text === "string");
36
+ return text?.text;
37
+ }
38
+ function humanizeName(value) {
39
+ return value.replace(/[_-]+/g, " ").replace(/\b\w/g, (character) => character.toUpperCase());
40
+ }
41
+ function isRecord(value) {
42
+ return typeof value === "object" && value !== null && !Array.isArray(value);
43
+ }
@@ -0,0 +1,5 @@
1
+ export { McpClientManager } from "./McpClientManager.js";
2
+ export { loadMcpServerConfigs } from "./loadMcpServerConfigs.js";
3
+ export { mergeMcpTools } from "./mergeMcpTools.js";
4
+ export type { McpHttpServerConfig, McpServerConfig, McpServerSummary, McpStdioServerConfig, McpToolLoadResult, McpToolProvider, } from "./types.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../sources/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EACR,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,GAClB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { McpClientManager } from "./McpClientManager.js";
2
+ export { loadMcpServerConfigs } from "./loadMcpServerConfigs.js";
3
+ export { mergeMcpTools } from "./mergeMcpTools.js";
@@ -0,0 +1,4 @@
1
+ import type { LoadConfigOptions } from "../config/types.js";
2
+ import type { McpServerConfig } from "./types.js";
3
+ export declare function loadMcpServerConfigs(cwd: string, options?: Omit<LoadConfigOptions, "cwd">): Promise<Readonly<Record<string, McpServerConfig>>>;
4
+ //# sourceMappingURL=loadMcpServerConfigs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadMcpServerConfigs.d.ts","sourceRoot":"","sources":["../../sources/mcp/loadMcpServerConfigs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,wBAAsB,oBAAoB,CACtC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAM,GAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAIpD"}
@@ -0,0 +1,122 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { loadConfig } from "../config/loadConfig.js";
4
+ export async function loadMcpServerConfigs(cwd, options = {}) {
5
+ const loaded = await loadConfig({ ...options, cwd });
6
+ const projectServers = await readProjectMcpConfig(join(cwd, ".mcp.json"));
7
+ return { ...loaded.config.mcpServers, ...projectServers };
8
+ }
9
+ async function readProjectMcpConfig(path) {
10
+ let source;
11
+ try {
12
+ source = await readFile(path, "utf8");
13
+ }
14
+ catch (error) {
15
+ if (isMissingFileError(error))
16
+ return {};
17
+ throw error;
18
+ }
19
+ let document;
20
+ try {
21
+ document = JSON.parse(source);
22
+ }
23
+ catch (error) {
24
+ throw new Error(`.mcp.json is not valid JSON: ${error instanceof Error ? error.message : String(error)}`);
25
+ }
26
+ if (!isRecord(document) || !isRecord(document.mcpServers)) {
27
+ throw new Error('.mcp.json must contain an "mcpServers" object.');
28
+ }
29
+ return Object.fromEntries(Object.entries(document.mcpServers).map(([name, value]) => [
30
+ name,
31
+ parseProjectServer(name, value),
32
+ ]));
33
+ }
34
+ function parseProjectServer(name, value) {
35
+ if (!isRecord(value)) {
36
+ throw new Error(`MCP server "${name}" must be an object.`);
37
+ }
38
+ const type = typeof value.type === "string" ? value.type : undefined;
39
+ if (type !== undefined && type !== "stdio" && type !== "http") {
40
+ throw new Error(`MCP server "${name}" uses unsupported transport "${type}". Use stdio or http.`);
41
+ }
42
+ const common = {
43
+ ...optionalBoolean(value.enabled, "enabled", name),
44
+ ...optionalStringArray(value.enabledTools, "enabledTools", name),
45
+ ...optionalStringArray(value.disabledTools, "disabledTools", name),
46
+ ...optionalPositiveNumber(value.startupTimeoutMs, "startupTimeoutMs", name),
47
+ ...optionalPositiveNumber(value.toolTimeoutMs, "toolTimeoutMs", name),
48
+ };
49
+ if (type === "stdio" || typeof value.command === "string") {
50
+ if (typeof value.command !== "string" || value.command.trim() === "") {
51
+ throw new Error(`MCP server "${name}" must provide a command.`);
52
+ }
53
+ return {
54
+ ...common,
55
+ ...optionalStringArray(value.args, "args", name),
56
+ ...optionalStringRecord(value.env, "env", name),
57
+ ...optionalString(value.cwd, "cwd", name),
58
+ command: value.command,
59
+ transport: "stdio",
60
+ };
61
+ }
62
+ if (type === "http" || typeof value.url === "string") {
63
+ if (typeof value.url !== "string" || value.url.trim() === "") {
64
+ throw new Error(`MCP server "${name}" must provide a URL.`);
65
+ }
66
+ return {
67
+ ...common,
68
+ ...optionalStringRecord(value.headers, "headers", name),
69
+ ...optionalString(value.bearerTokenEnvVar, "bearerTokenEnvVar", name),
70
+ transport: "http",
71
+ url: value.url,
72
+ };
73
+ }
74
+ throw new Error(`MCP server "${name}" must configure either command or url.`);
75
+ }
76
+ function optionalBoolean(value, key, serverName) {
77
+ if (value === undefined)
78
+ return {};
79
+ if (typeof value !== "boolean")
80
+ throw invalidField(serverName, key, "a boolean");
81
+ return { enabled: value };
82
+ }
83
+ function optionalPositiveNumber(value, key, serverName) {
84
+ if (value === undefined)
85
+ return {};
86
+ if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) {
87
+ throw invalidField(serverName, key, "a positive number");
88
+ }
89
+ return { [key]: value };
90
+ }
91
+ function optionalString(value, key, serverName) {
92
+ if (value === undefined)
93
+ return {};
94
+ if (typeof value !== "string")
95
+ throw invalidField(serverName, key, "a string");
96
+ return { [key]: value };
97
+ }
98
+ function optionalStringArray(value, key, serverName) {
99
+ if (value === undefined)
100
+ return {};
101
+ if (!Array.isArray(value) || value.some((entry) => typeof entry !== "string")) {
102
+ throw invalidField(serverName, key, "an array of strings");
103
+ }
104
+ return { [key]: value };
105
+ }
106
+ function optionalStringRecord(value, key, serverName) {
107
+ if (value === undefined)
108
+ return {};
109
+ if (!isRecord(value) || Object.values(value).some((entry) => typeof entry !== "string")) {
110
+ throw invalidField(serverName, key, "an object with string values");
111
+ }
112
+ return { [key]: value };
113
+ }
114
+ function invalidField(serverName, key, expectation) {
115
+ return new Error(`MCP server "${serverName}" field "${key}" must be ${expectation}.`);
116
+ }
117
+ function isRecord(value) {
118
+ return typeof value === "object" && value !== null && !Array.isArray(value);
119
+ }
120
+ function isMissingFileError(error) {
121
+ return isRecord(error) && error.code === "ENOENT";
122
+ }
@@ -0,0 +1,3 @@
1
+ import type { ContentBlock } from "../agent/types.js";
2
+ export declare function mcpResultToContentBlocks(result: unknown): readonly ContentBlock[];
3
+ //# sourceMappingURL=mcpResultToContentBlocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpResultToContentBlocks.d.ts","sourceRoot":"","sources":["../../sources/mcp/mcpResultToContentBlocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,YAAY,EAAE,CAUjF"}
@@ -0,0 +1,51 @@
1
+ export function mcpResultToContentBlocks(result) {
2
+ if (!isRecord(result))
3
+ return [{ type: "text", text: String(result) }];
4
+ const blocks = Array.isArray(result.content)
5
+ ? result.content.flatMap((content) => contentToBlocks(content))
6
+ : [];
7
+ if (blocks.length > 0)
8
+ return blocks;
9
+ if (result.structuredContent !== undefined) {
10
+ return [{ type: "text", text: JSON.stringify(result.structuredContent) }];
11
+ }
12
+ return [{ type: "text", text: "The MCP tool completed without returning content." }];
13
+ }
14
+ function contentToBlocks(content) {
15
+ if (!isRecord(content) || typeof content.type !== "string")
16
+ return [];
17
+ if (content.type === "text" && typeof content.text === "string") {
18
+ return [{ type: "text", text: content.text }];
19
+ }
20
+ if (content.type === "image" &&
21
+ typeof content.data === "string" &&
22
+ typeof content.mimeType === "string") {
23
+ return [{ type: "image", data: content.data, mediaType: content.mimeType }];
24
+ }
25
+ if (content.type === "resource" && isRecord(content.resource)) {
26
+ if (typeof content.resource.text === "string") {
27
+ return [{ type: "text", text: content.resource.text }];
28
+ }
29
+ return [
30
+ {
31
+ type: "text",
32
+ text: `MCP resource: ${typeof content.resource.uri === "string" ? content.resource.uri : "embedded content"}`,
33
+ },
34
+ ];
35
+ }
36
+ if (content.type === "resource_link") {
37
+ return [
38
+ {
39
+ type: "text",
40
+ text: `MCP resource: ${typeof content.uri === "string" ? content.uri : "linked content"}`,
41
+ },
42
+ ];
43
+ }
44
+ if (content.type === "audio") {
45
+ return [{ type: "text", text: "The MCP tool returned audio content." }];
46
+ }
47
+ return [];
48
+ }
49
+ function isRecord(value) {
50
+ return typeof value === "object" && value !== null && !Array.isArray(value);
51
+ }
@@ -0,0 +1,7 @@
1
+ import type { AnyDefinedTool } from "../agent/index.js";
2
+ import type { McpServerSummary, McpToolLoadResult } from "./types.js";
3
+ export declare function mergeMcpTools(existingTools: readonly AnyDefinedTool[], loaded: McpToolLoadResult): {
4
+ servers: readonly McpServerSummary[];
5
+ tools: readonly AnyDefinedTool[];
6
+ };
7
+ //# sourceMappingURL=mergeMcpTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeMcpTools.d.ts","sourceRoot":"","sources":["../../sources/mcp/mergeMcpTools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEtE,wBAAgB,aAAa,CACzB,aAAa,EAAE,SAAS,cAAc,EAAE,EACxC,MAAM,EAAE,iBAAiB,GAC1B;IAAE,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,CA6C5E"}
@@ -0,0 +1,34 @@
1
+ import { normalizeMcpName } from "./normalizeMcpName.js";
2
+ export function mergeMcpTools(existingTools, loaded) {
3
+ const existingNames = new Set(existingTools.map((tool) => tool.name));
4
+ const conflictingNames = new Set(loaded.tools.filter((tool) => existingNames.has(tool.name)).map((tool) => tool.name));
5
+ if (conflictingNames.size === 0) {
6
+ return { servers: loaded.servers, tools: [...existingTools, ...loaded.tools] };
7
+ }
8
+ const conflictingServers = new Set();
9
+ const servers = loaded.servers.map((server) => {
10
+ const prefix = `mcp__${normalizeMcpName(server.name)}__`;
11
+ const conflicts = [...conflictingNames].filter((name) => name.startsWith(prefix));
12
+ if (conflicts.length === 0)
13
+ return server;
14
+ conflictingServers.add(server.name);
15
+ return {
16
+ errorMessage: `Tool name conflict: ${conflicts.join(", ")}`,
17
+ name: server.name,
18
+ status: "failed",
19
+ toolCount: 0,
20
+ };
21
+ });
22
+ const unresolved = [...conflictingNames].filter((name) => !loaded.servers.some((server) => name.startsWith(`mcp__${normalizeMcpName(server.name)}__`)));
23
+ if (unresolved.length > 0) {
24
+ servers.push({
25
+ errorMessage: `Tool name conflict: ${unresolved.join(", ")}`,
26
+ name: "MCP tools",
27
+ status: "failed",
28
+ toolCount: 0,
29
+ });
30
+ }
31
+ const accepted = loaded.tools.filter((tool) => !existingNames.has(tool.name) &&
32
+ ![...conflictingServers].some((serverName) => tool.name.startsWith(`mcp__${normalizeMcpName(serverName)}__`)));
33
+ return { servers, tools: [...existingTools, ...accepted] };
34
+ }
@@ -0,0 +1,2 @@
1
+ export declare function normalizeMcpName(name: string): string;
2
+ //# sourceMappingURL=normalizeMcpName.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizeMcpName.d.ts","sourceRoot":"","sources":["../../sources/mcp/normalizeMcpName.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD"}
@@ -0,0 +1,3 @@
1
+ export function normalizeMcpName(name) {
2
+ return name.replace(/[^a-zA-Z0-9_-]/g, "_");
3
+ }
@@ -0,0 +1,37 @@
1
+ import type { AnyDefinedTool } from "../agent/index.js";
2
+ export interface McpServerConfigBase {
3
+ disabledTools?: readonly string[];
4
+ enabled?: boolean;
5
+ enabledTools?: readonly string[];
6
+ startupTimeoutMs?: number;
7
+ toolTimeoutMs?: number;
8
+ }
9
+ export interface McpStdioServerConfig extends McpServerConfigBase {
10
+ args?: readonly string[];
11
+ command: string;
12
+ cwd?: string;
13
+ env?: Readonly<Record<string, string>>;
14
+ transport: "stdio";
15
+ }
16
+ export interface McpHttpServerConfig extends McpServerConfigBase {
17
+ bearerTokenEnvVar?: string;
18
+ headers?: Readonly<Record<string, string>>;
19
+ transport: "http";
20
+ url: string;
21
+ }
22
+ export type McpServerConfig = McpStdioServerConfig | McpHttpServerConfig;
23
+ export interface McpServerSummary {
24
+ errorMessage?: string;
25
+ name: string;
26
+ status: "connected" | "disabled" | "failed";
27
+ toolCount: number;
28
+ }
29
+ export interface McpToolLoadResult {
30
+ servers: readonly McpServerSummary[];
31
+ tools: readonly AnyDefinedTool[];
32
+ }
33
+ export interface McpToolProvider {
34
+ close(): Promise<void>;
35
+ load(cwd: string): Promise<McpToolLoadResult>;
36
+ }
37
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../sources/mcp/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,mBAAmB;IAChC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC7D,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC,SAAS,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC5D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,mBAAmB,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACrC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACjD"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import type { PermissionMode } from "./PermissionMode.js";
2
+ export interface PermissionContext {
3
+ readonly mode: PermissionMode;
4
+ runWithMode<T>(mode: PermissionMode, action: () => Promise<T> | T): Promise<T>;
5
+ setMode(mode: PermissionMode): void;
6
+ }
7
+ //# sourceMappingURL=PermissionContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PermissionContext.d.ts","sourceRoot":"","sources":["../../sources/permissions/PermissionContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;CACvC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ export type PermissionMode = "auto" | "workspace_write" | "read_only" | "full_access";
2
+ export declare const DEFAULT_PERMISSION_MODE: PermissionMode;
3
+ //# sourceMappingURL=PermissionMode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PermissionMode.d.ts","sourceRoot":"","sources":["../../sources/permissions/PermissionMode.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,iBAAiB,GAAG,WAAW,GAAG,aAAa,CAAC;AAEtF,eAAO,MAAM,uBAAuB,EAAE,cAAkC,CAAC"}
@@ -0,0 +1 @@
1
+ export const DEFAULT_PERMISSION_MODE = "workspace_write";
@@ -0,0 +1,4 @@
1
+ import type { PermissionContext } from "./PermissionContext.js";
2
+ import type { PermissionMode } from "./PermissionMode.js";
3
+ export declare function createPermissionContext(initialMode: PermissionMode): PermissionContext;
4
+ //# sourceMappingURL=createPermissionContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createPermissionContext.d.ts","sourceRoot":"","sources":["../../sources/permissions/createPermissionContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,cAAc,GAAG,iBAAiB,CActF"}