@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
@@ -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"}
@@ -0,0 +1,16 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ export function createPermissionContext(initialMode) {
3
+ const overrides = new AsyncLocalStorage();
4
+ let configuredMode = initialMode;
5
+ return {
6
+ get mode() {
7
+ return overrides.getStore() ?? configuredMode;
8
+ },
9
+ runWithMode(mode, action) {
10
+ return Promise.resolve(overrides.run(mode, action));
11
+ },
12
+ setMode(mode) {
13
+ configuredMode = mode;
14
+ },
15
+ };
16
+ }
@@ -0,0 +1,13 @@
1
+ export { createPermissionContext } from "./createPermissionContext.js";
2
+ export { isPermissionMode } from "./isPermissionMode.js";
3
+ export { parsePermissionMode } from "./parsePermissionMode.js";
4
+ export { requestAutoPermissionApproval } from "./requestAutoPermissionApproval.js";
5
+ export { reviewAutoPermission } from "./reviewAutoPermission.js";
6
+ export { shouldElevateToolInAutoMode } from "./shouldElevateToolInAutoMode.js";
7
+ export { shouldReviewToolInAutoMode } from "./shouldReviewToolInAutoMode.js";
8
+ export { summarizePermissionAction } from "./summarizePermissionAction.js";
9
+ export { DEFAULT_PERMISSION_MODE } from "./PermissionMode.js";
10
+ export type { PermissionContext } from "./PermissionContext.js";
11
+ export type { PermissionMode } from "./PermissionMode.js";
12
+ export type { AutoPermissionReview } from "./parseAutoPermissionReview.js";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../sources/permissions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { createPermissionContext } from "./createPermissionContext.js";
2
+ export { isPermissionMode } from "./isPermissionMode.js";
3
+ export { parsePermissionMode } from "./parsePermissionMode.js";
4
+ export { requestAutoPermissionApproval } from "./requestAutoPermissionApproval.js";
5
+ export { reviewAutoPermission } from "./reviewAutoPermission.js";
6
+ export { shouldElevateToolInAutoMode } from "./shouldElevateToolInAutoMode.js";
7
+ export { shouldReviewToolInAutoMode } from "./shouldReviewToolInAutoMode.js";
8
+ export { summarizePermissionAction } from "./summarizePermissionAction.js";
9
+ export { DEFAULT_PERMISSION_MODE } from "./PermissionMode.js";