@truefoundry/trueforge-core 0.0.0 → 0.1.0-rc.0

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 (557) hide show
  1. package/LICENSE +21 -0
  2. package/dist/agent-session/ITurnResourceResolver.d.ts +69 -0
  3. package/dist/agent-session/ITurnResourceResolver.d.ts.map +1 -0
  4. package/dist/agent-session/ITurnResourceResolver.js +19 -0
  5. package/dist/agent-session/ITurnResourceResolver.js.map +1 -0
  6. package/dist/agent-session/ITurnResourceResolver.mjs +1 -0
  7. package/dist/agent-session/ITurnResourceResolver.mjs.map +1 -0
  8. package/dist/agent-session/SessionHandle.d.ts +81 -0
  9. package/dist/agent-session/SessionHandle.d.ts.map +1 -0
  10. package/dist/agent-session/SessionHandle.js +392 -0
  11. package/dist/agent-session/SessionHandle.js.map +1 -0
  12. package/dist/agent-session/SessionHandle.mjs +371 -0
  13. package/dist/agent-session/SessionHandle.mjs.map +1 -0
  14. package/dist/agent-session/Sessions.d.ts +25 -0
  15. package/dist/agent-session/Sessions.d.ts.map +1 -0
  16. package/dist/agent-session/Sessions.js +71 -0
  17. package/dist/agent-session/Sessions.js.map +1 -0
  18. package/dist/agent-session/Sessions.mjs +46 -0
  19. package/dist/agent-session/Sessions.mjs.map +1 -0
  20. package/dist/agent-session/TurnHandle.d.ts +88 -0
  21. package/dist/agent-session/TurnHandle.d.ts.map +1 -0
  22. package/dist/agent-session/TurnHandle.js +490 -0
  23. package/dist/agent-session/TurnHandle.js.map +1 -0
  24. package/dist/agent-session/TurnHandle.mjs +469 -0
  25. package/dist/agent-session/TurnHandle.mjs.map +1 -0
  26. package/dist/agent-session/TurnResourceResolver.d.ts +154 -0
  27. package/dist/agent-session/TurnResourceResolver.d.ts.map +1 -0
  28. package/dist/agent-session/TurnResourceResolver.js +178 -0
  29. package/dist/agent-session/TurnResourceResolver.js.map +1 -0
  30. package/dist/agent-session/TurnResourceResolver.mjs +153 -0
  31. package/dist/agent-session/TurnResourceResolver.mjs.map +1 -0
  32. package/dist/agent-session/builtinsFromSpec.d.ts +19 -0
  33. package/dist/agent-session/builtinsFromSpec.d.ts.map +1 -0
  34. package/dist/agent-session/builtinsFromSpec.js +73 -0
  35. package/dist/agent-session/builtinsFromSpec.js.map +1 -0
  36. package/dist/agent-session/builtinsFromSpec.mjs +48 -0
  37. package/dist/agent-session/builtinsFromSpec.mjs.map +1 -0
  38. package/dist/agent-session/index.d.ts +29 -0
  39. package/dist/agent-session/index.d.ts.map +1 -0
  40. package/dist/agent-session/index.js +117 -0
  41. package/dist/agent-session/index.js.map +1 -0
  42. package/dist/agent-session/index.mjs +84 -0
  43. package/dist/agent-session/index.mjs.map +1 -0
  44. package/dist/agent-session/models/SessionRecord.d.ts +34 -0
  45. package/dist/agent-session/models/SessionRecord.d.ts.map +1 -0
  46. package/dist/agent-session/models/SessionRecord.js +19 -0
  47. package/dist/agent-session/models/SessionRecord.js.map +1 -0
  48. package/dist/agent-session/models/SessionRecord.mjs +1 -0
  49. package/dist/agent-session/models/SessionRecord.mjs.map +1 -0
  50. package/dist/agent-session/models/TurnRecord.d.ts +37 -0
  51. package/dist/agent-session/models/TurnRecord.d.ts.map +1 -0
  52. package/dist/agent-session/models/TurnRecord.js +31 -0
  53. package/dist/agent-session/models/TurnRecord.js.map +1 -0
  54. package/dist/agent-session/models/TurnRecord.mjs +6 -0
  55. package/dist/agent-session/models/TurnRecord.mjs.map +1 -0
  56. package/dist/agent-session/schemas/agentSpec.d.ts +142 -0
  57. package/dist/agent-session/schemas/agentSpec.d.ts.map +1 -0
  58. package/dist/agent-session/schemas/agentSpec.js +170 -0
  59. package/dist/agent-session/schemas/agentSpec.js.map +1 -0
  60. package/dist/agent-session/schemas/agentSpec.mjs +154 -0
  61. package/dist/agent-session/schemas/agentSpec.mjs.map +1 -0
  62. package/dist/agent-session/schemas/events.d.ts +1037 -0
  63. package/dist/agent-session/schemas/events.d.ts.map +1 -0
  64. package/dist/agent-session/schemas/events.js +80 -0
  65. package/dist/agent-session/schemas/events.js.map +1 -0
  66. package/dist/agent-session/schemas/events.mjs +69 -0
  67. package/dist/agent-session/schemas/events.mjs.map +1 -0
  68. package/dist/agent-session/schemas/pagination.d.ts +9 -0
  69. package/dist/agent-session/schemas/pagination.d.ts.map +1 -0
  70. package/dist/agent-session/schemas/pagination.js +36 -0
  71. package/dist/agent-session/schemas/pagination.js.map +1 -0
  72. package/dist/agent-session/schemas/pagination.mjs +11 -0
  73. package/dist/agent-session/schemas/pagination.mjs.map +1 -0
  74. package/dist/agent-session/schemas/session.d.ts +319 -0
  75. package/dist/agent-session/schemas/session.d.ts.map +1 -0
  76. package/dist/agent-session/schemas/session.js +58 -0
  77. package/dist/agent-session/schemas/session.js.map +1 -0
  78. package/dist/agent-session/schemas/session.mjs +30 -0
  79. package/dist/agent-session/schemas/session.mjs.map +1 -0
  80. package/dist/agent-session/schemas/turn.d.ts +494 -0
  81. package/dist/agent-session/schemas/turn.d.ts.map +1 -0
  82. package/dist/agent-session/schemas/turn.js +131 -0
  83. package/dist/agent-session/schemas/turn.js.map +1 -0
  84. package/dist/agent-session/schemas/turn.mjs +102 -0
  85. package/dist/agent-session/schemas/turn.mjs.map +1 -0
  86. package/dist/agent-session/store/ISessionStore.d.ts +310 -0
  87. package/dist/agent-session/store/ISessionStore.d.ts.map +1 -0
  88. package/dist/agent-session/store/ISessionStore.js +19 -0
  89. package/dist/agent-session/store/ISessionStore.js.map +1 -0
  90. package/dist/agent-session/store/ISessionStore.mjs +1 -0
  91. package/dist/agent-session/store/ISessionStore.mjs.map +1 -0
  92. package/dist/agent-session/store/InMemorySessionStore.d.ts +55 -0
  93. package/dist/agent-session/store/InMemorySessionStore.d.ts.map +1 -0
  94. package/dist/agent-session/store/InMemorySessionStore.js +475 -0
  95. package/dist/agent-session/store/InMemorySessionStore.js.map +1 -0
  96. package/dist/agent-session/store/InMemorySessionStore.mjs +461 -0
  97. package/dist/agent-session/store/InMemorySessionStore.mjs.map +1 -0
  98. package/dist/agent-session/store/OffsetPageToken.d.ts +13 -0
  99. package/dist/agent-session/store/OffsetPageToken.d.ts.map +1 -0
  100. package/dist/agent-session/store/OffsetPageToken.js +60 -0
  101. package/dist/agent-session/store/OffsetPageToken.js.map +1 -0
  102. package/dist/agent-session/store/OffsetPageToken.mjs +32 -0
  103. package/dist/agent-session/store/OffsetPageToken.mjs.map +1 -0
  104. package/dist/agent-session/store/PageToken.d.ts +4 -0
  105. package/dist/agent-session/store/PageToken.d.ts.map +1 -0
  106. package/dist/agent-session/store/PageToken.js +45 -0
  107. package/dist/agent-session/store/PageToken.js.map +1 -0
  108. package/dist/agent-session/store/PageToken.mjs +19 -0
  109. package/dist/agent-session/store/PageToken.mjs.map +1 -0
  110. package/dist/agent-session/store/SessionEventPageToken.d.ts +14 -0
  111. package/dist/agent-session/store/SessionEventPageToken.d.ts.map +1 -0
  112. package/dist/agent-session/store/SessionEventPageToken.js +70 -0
  113. package/dist/agent-session/store/SessionEventPageToken.js.map +1 -0
  114. package/dist/agent-session/store/SessionEventPageToken.mjs +42 -0
  115. package/dist/agent-session/store/SessionEventPageToken.mjs.map +1 -0
  116. package/dist/agent-session/store/SessionListPageToken.d.ts +24 -0
  117. package/dist/agent-session/store/SessionListPageToken.d.ts.map +1 -0
  118. package/dist/agent-session/store/SessionListPageToken.js +66 -0
  119. package/dist/agent-session/store/SessionListPageToken.js.map +1 -0
  120. package/dist/agent-session/store/SessionListPageToken.mjs +38 -0
  121. package/dist/agent-session/store/SessionListPageToken.mjs.map +1 -0
  122. package/dist/agent-session/store/SessionStoreErrors.d.ts +43 -0
  123. package/dist/agent-session/store/SessionStoreErrors.d.ts.map +1 -0
  124. package/dist/agent-session/store/SessionStoreErrors.js +126 -0
  125. package/dist/agent-session/store/SessionStoreErrors.js.map +1 -0
  126. package/dist/agent-session/store/SessionStoreErrors.mjs +92 -0
  127. package/dist/agent-session/store/SessionStoreErrors.mjs.map +1 -0
  128. package/dist/agent-session/store/assertCreateTurnThreadDelta.d.ts +18 -0
  129. package/dist/agent-session/store/assertCreateTurnThreadDelta.d.ts.map +1 -0
  130. package/dist/agent-session/store/assertCreateTurnThreadDelta.js +67 -0
  131. package/dist/agent-session/store/assertCreateTurnThreadDelta.js.map +1 -0
  132. package/dist/agent-session/store/assertCreateTurnThreadDelta.mjs +42 -0
  133. package/dist/agent-session/store/assertCreateTurnThreadDelta.mjs.map +1 -0
  134. package/dist/core/InstructionBuilder.d.ts +71 -0
  135. package/dist/core/InstructionBuilder.d.ts.map +1 -0
  136. package/dist/core/InstructionBuilder.js +95 -0
  137. package/dist/core/InstructionBuilder.js.map +1 -0
  138. package/dist/core/InstructionBuilder.mjs +69 -0
  139. package/dist/core/InstructionBuilder.mjs.map +1 -0
  140. package/dist/core/capabilities/AgentCapability.d.ts +32 -0
  141. package/dist/core/capabilities/AgentCapability.d.ts.map +1 -0
  142. package/dist/core/capabilities/AgentCapability.js +19 -0
  143. package/dist/core/capabilities/AgentCapability.js.map +1 -0
  144. package/dist/core/capabilities/AgentCapability.mjs +1 -0
  145. package/dist/core/capabilities/AgentCapability.mjs.map +1 -0
  146. package/dist/core/capabilities/AgentContextProcessor.d.ts +30 -0
  147. package/dist/core/capabilities/AgentContextProcessor.d.ts.map +1 -0
  148. package/dist/core/capabilities/AgentContextProcessor.js +19 -0
  149. package/dist/core/capabilities/AgentContextProcessor.js.map +1 -0
  150. package/dist/core/capabilities/AgentContextProcessor.mjs +1 -0
  151. package/dist/core/capabilities/AgentContextProcessor.mjs.map +1 -0
  152. package/dist/core/capabilities/ToolResponseProcessor.d.ts +12 -0
  153. package/dist/core/capabilities/ToolResponseProcessor.d.ts.map +1 -0
  154. package/dist/core/capabilities/ToolResponseProcessor.js +19 -0
  155. package/dist/core/capabilities/ToolResponseProcessor.js.map +1 -0
  156. package/dist/core/capabilities/ToolResponseProcessor.mjs +1 -0
  157. package/dist/core/capabilities/ToolResponseProcessor.mjs.map +1 -0
  158. package/dist/core/capabilities/builtins/AskUserQuestion.d.ts +11 -0
  159. package/dist/core/capabilities/builtins/AskUserQuestion.d.ts.map +1 -0
  160. package/dist/core/capabilities/builtins/AskUserQuestion.js +90 -0
  161. package/dist/core/capabilities/builtins/AskUserQuestion.js.map +1 -0
  162. package/dist/core/capabilities/builtins/AskUserQuestion.mjs +64 -0
  163. package/dist/core/capabilities/builtins/AskUserQuestion.mjs.map +1 -0
  164. package/dist/core/capabilities/builtins/ContextCompaction.d.ts +23 -0
  165. package/dist/core/capabilities/builtins/ContextCompaction.d.ts.map +1 -0
  166. package/dist/core/capabilities/builtins/ContextCompaction.js +235 -0
  167. package/dist/core/capabilities/builtins/ContextCompaction.js.map +1 -0
  168. package/dist/core/capabilities/builtins/ContextCompaction.mjs +208 -0
  169. package/dist/core/capabilities/builtins/ContextCompaction.mjs.map +1 -0
  170. package/dist/core/capabilities/builtins/CurrentDateTime.d.ts +17 -0
  171. package/dist/core/capabilities/builtins/CurrentDateTime.d.ts.map +1 -0
  172. package/dist/core/capabilities/builtins/CurrentDateTime.js +75 -0
  173. package/dist/core/capabilities/builtins/CurrentDateTime.js.map +1 -0
  174. package/dist/core/capabilities/builtins/CurrentDateTime.mjs +47 -0
  175. package/dist/core/capabilities/builtins/CurrentDateTime.mjs.map +1 -0
  176. package/dist/core/capabilities/builtins/DynamicSubAgents.d.ts +39 -0
  177. package/dist/core/capabilities/builtins/DynamicSubAgents.d.ts.map +1 -0
  178. package/dist/core/capabilities/builtins/DynamicSubAgents.js +176 -0
  179. package/dist/core/capabilities/builtins/DynamicSubAgents.js.map +1 -0
  180. package/dist/core/capabilities/builtins/DynamicSubAgents.mjs +134 -0
  181. package/dist/core/capabilities/builtins/DynamicSubAgents.mjs.map +1 -0
  182. package/dist/core/capabilities/builtins/LargeToolResponse.d.ts +40 -0
  183. package/dist/core/capabilities/builtins/LargeToolResponse.d.ts.map +1 -0
  184. package/dist/core/capabilities/builtins/LargeToolResponse.js +225 -0
  185. package/dist/core/capabilities/builtins/LargeToolResponse.js.map +1 -0
  186. package/dist/core/capabilities/builtins/LargeToolResponse.mjs +186 -0
  187. package/dist/core/capabilities/builtins/LargeToolResponse.mjs.map +1 -0
  188. package/dist/core/capabilities/builtins/OpenUI.d.ts +31 -0
  189. package/dist/core/capabilities/builtins/OpenUI.d.ts.map +1 -0
  190. package/dist/core/capabilities/builtins/OpenUI.js +376 -0
  191. package/dist/core/capabilities/builtins/OpenUI.js.map +1 -0
  192. package/dist/core/capabilities/builtins/OpenUI.mjs +326 -0
  193. package/dist/core/capabilities/builtins/OpenUI.mjs.map +1 -0
  194. package/dist/core/errors.d.ts +33 -0
  195. package/dist/core/errors.d.ts.map +1 -0
  196. package/dist/core/errors.js +88 -0
  197. package/dist/core/errors.js.map +1 -0
  198. package/dist/core/errors.mjs +57 -0
  199. package/dist/core/errors.mjs.map +1 -0
  200. package/dist/core/events/PassthroughEvents.d.ts +30 -0
  201. package/dist/core/events/PassthroughEvents.d.ts.map +1 -0
  202. package/dist/core/events/PassthroughEvents.js +19 -0
  203. package/dist/core/events/PassthroughEvents.js.map +1 -0
  204. package/dist/core/events/PassthroughEvents.mjs +1 -0
  205. package/dist/core/events/PassthroughEvents.mjs.map +1 -0
  206. package/dist/core/events/schema.d.ts +1103 -0
  207. package/dist/core/events/schema.d.ts.map +1 -0
  208. package/dist/core/events/schema.js +337 -0
  209. package/dist/core/events/schema.js.map +1 -0
  210. package/dist/core/events/schema.mjs +283 -0
  211. package/dist/core/events/schema.mjs.map +1 -0
  212. package/dist/core/index.d.ts +60 -0
  213. package/dist/core/index.d.ts.map +1 -0
  214. package/dist/core/index.js +209 -0
  215. package/dist/core/index.js.map +1 -0
  216. package/dist/core/index.mjs +144 -0
  217. package/dist/core/index.mjs.map +1 -0
  218. package/dist/core/llm/ILLM.d.ts +15 -0
  219. package/dist/core/llm/ILLM.d.ts.map +1 -0
  220. package/dist/core/llm/ILLM.js +19 -0
  221. package/dist/core/llm/ILLM.js.map +1 -0
  222. package/dist/core/llm/ILLM.mjs +1 -0
  223. package/dist/core/llm/ILLM.mjs.map +1 -0
  224. package/dist/core/llm/LLMTypes.d.ts +369 -0
  225. package/dist/core/llm/LLMTypes.d.ts.map +1 -0
  226. package/dist/core/llm/LLMTypes.js +170 -0
  227. package/dist/core/llm/LLMTypes.js.map +1 -0
  228. package/dist/core/llm/LLMTypes.mjs +133 -0
  229. package/dist/core/llm/LLMTypes.mjs.map +1 -0
  230. package/dist/core/llm/VercelAILLM.d.ts +228 -0
  231. package/dist/core/llm/VercelAILLM.d.ts.map +1 -0
  232. package/dist/core/llm/VercelAILLM.js +1042 -0
  233. package/dist/core/llm/VercelAILLM.js.map +1 -0
  234. package/dist/core/llm/VercelAILLM.mjs +999 -0
  235. package/dist/core/llm/VercelAILLM.mjs.map +1 -0
  236. package/dist/core/llm/openaiSchemas.d.ts +190 -0
  237. package/dist/core/llm/openaiSchemas.d.ts.map +1 -0
  238. package/dist/core/llm/openaiSchemas.js +144 -0
  239. package/dist/core/llm/openaiSchemas.js.map +1 -0
  240. package/dist/core/llm/openaiSchemas.mjs +107 -0
  241. package/dist/core/llm/openaiSchemas.mjs.map +1 -0
  242. package/dist/core/llm/responseFormat.d.ts +25 -0
  243. package/dist/core/llm/responseFormat.d.ts.map +1 -0
  244. package/dist/core/llm/responseFormat.js +58 -0
  245. package/dist/core/llm/responseFormat.js.map +1 -0
  246. package/dist/core/llm/responseFormat.mjs +32 -0
  247. package/dist/core/llm/responseFormat.mjs.map +1 -0
  248. package/dist/core/llm/toOpenAIChatMessage.d.ts +11 -0
  249. package/dist/core/llm/toOpenAIChatMessage.d.ts.map +1 -0
  250. package/dist/core/llm/toOpenAIChatMessage.js +95 -0
  251. package/dist/core/llm/toOpenAIChatMessage.js.map +1 -0
  252. package/dist/core/llm/toOpenAIChatMessage.mjs +70 -0
  253. package/dist/core/llm/toOpenAIChatMessage.mjs.map +1 -0
  254. package/dist/core/llm/usage.d.ts +4 -0
  255. package/dist/core/llm/usage.d.ts.map +1 -0
  256. package/dist/core/llm/usage.js +52 -0
  257. package/dist/core/llm/usage.js.map +1 -0
  258. package/dist/core/llm/usage.mjs +26 -0
  259. package/dist/core/llm/usage.mjs.map +1 -0
  260. package/dist/core/mcp/ClientSideTool.d.ts +10 -0
  261. package/dist/core/mcp/ClientSideTool.d.ts.map +1 -0
  262. package/dist/core/mcp/ClientSideTool.js +56 -0
  263. package/dist/core/mcp/ClientSideTool.js.map +1 -0
  264. package/dist/core/mcp/ClientSideTool.mjs +31 -0
  265. package/dist/core/mcp/ClientSideTool.mjs.map +1 -0
  266. package/dist/core/mcp/IMCPServer.d.ts +78 -0
  267. package/dist/core/mcp/IMCPServer.d.ts.map +1 -0
  268. package/dist/core/mcp/IMCPServer.js +63 -0
  269. package/dist/core/mcp/IMCPServer.js.map +1 -0
  270. package/dist/core/mcp/IMCPServer.mjs +33 -0
  271. package/dist/core/mcp/IMCPServer.mjs.map +1 -0
  272. package/dist/core/mcp/LocalToolMCP.d.ts +39 -0
  273. package/dist/core/mcp/LocalToolMCP.d.ts.map +1 -0
  274. package/dist/core/mcp/LocalToolMCP.js +121 -0
  275. package/dist/core/mcp/LocalToolMCP.js.map +1 -0
  276. package/dist/core/mcp/LocalToolMCP.mjs +98 -0
  277. package/dist/core/mcp/LocalToolMCP.mjs.map +1 -0
  278. package/dist/core/mcp/RemoteMCP.d.ts +67 -0
  279. package/dist/core/mcp/RemoteMCP.d.ts.map +1 -0
  280. package/dist/core/mcp/RemoteMCP.js +244 -0
  281. package/dist/core/mcp/RemoteMCP.js.map +1 -0
  282. package/dist/core/mcp/RemoteMCP.mjs +222 -0
  283. package/dist/core/mcp/RemoteMCP.mjs.map +1 -0
  284. package/dist/core/mcp/ToolSelectorPolicy.d.ts +52 -0
  285. package/dist/core/mcp/ToolSelectorPolicy.d.ts.map +1 -0
  286. package/dist/core/mcp/ToolSelectorPolicy.js +108 -0
  287. package/dist/core/mcp/ToolSelectorPolicy.js.map +1 -0
  288. package/dist/core/mcp/ToolSelectorPolicy.mjs +90 -0
  289. package/dist/core/mcp/ToolSelectorPolicy.mjs.map +1 -0
  290. package/dist/core/mcp/ToolSet.d.ts +31 -0
  291. package/dist/core/mcp/ToolSet.d.ts.map +1 -0
  292. package/dist/core/mcp/ToolSet.js +119 -0
  293. package/dist/core/mcp/ToolSet.js.map +1 -0
  294. package/dist/core/mcp/ToolSet.mjs +98 -0
  295. package/dist/core/mcp/ToolSet.mjs.map +1 -0
  296. package/dist/core/mcp/convertMCPServers.d.ts +22 -0
  297. package/dist/core/mcp/convertMCPServers.d.ts.map +1 -0
  298. package/dist/core/mcp/convertMCPServers.js +89 -0
  299. package/dist/core/mcp/convertMCPServers.js.map +1 -0
  300. package/dist/core/mcp/convertMCPServers.mjs +64 -0
  301. package/dist/core/mcp/convertMCPServers.mjs.map +1 -0
  302. package/dist/core/mcp/executeToolCalls.d.ts +31 -0
  303. package/dist/core/mcp/executeToolCalls.d.ts.map +1 -0
  304. package/dist/core/mcp/executeToolCalls.js +168 -0
  305. package/dist/core/mcp/executeToolCalls.js.map +1 -0
  306. package/dist/core/mcp/executeToolCalls.mjs +149 -0
  307. package/dist/core/mcp/executeToolCalls.mjs.map +1 -0
  308. package/dist/core/mcp/pagination.d.ts +11 -0
  309. package/dist/core/mcp/pagination.d.ts.map +1 -0
  310. package/dist/core/mcp/pagination.js +49 -0
  311. package/dist/core/mcp/pagination.js.map +1 -0
  312. package/dist/core/mcp/pagination.mjs +24 -0
  313. package/dist/core/mcp/pagination.mjs.map +1 -0
  314. package/dist/core/mcp/remoteMcpClient.d.ts +36 -0
  315. package/dist/core/mcp/remoteMcpClient.d.ts.map +1 -0
  316. package/dist/core/mcp/remoteMcpClient.js +138 -0
  317. package/dist/core/mcp/remoteMcpClient.js.map +1 -0
  318. package/dist/core/mcp/remoteMcpClient.mjs +112 -0
  319. package/dist/core/mcp/remoteMcpClient.mjs.map +1 -0
  320. package/dist/core/mcp/toolNames.d.ts +6 -0
  321. package/dist/core/mcp/toolNames.d.ts.map +1 -0
  322. package/dist/core/mcp/toolNames.js +59 -0
  323. package/dist/core/mcp/toolNames.js.map +1 -0
  324. package/dist/core/mcp/toolNames.mjs +33 -0
  325. package/dist/core/mcp/toolNames.mjs.map +1 -0
  326. package/dist/core/mcp/toolSelectors.d.ts +28 -0
  327. package/dist/core/mcp/toolSelectors.d.ts.map +1 -0
  328. package/dist/core/mcp/toolSelectors.js +113 -0
  329. package/dist/core/mcp/toolSelectors.js.map +1 -0
  330. package/dist/core/mcp/toolSelectors.mjs +78 -0
  331. package/dist/core/mcp/toolSelectors.mjs.map +1 -0
  332. package/dist/core/runtime/AgentDefinition.d.ts +23 -0
  333. package/dist/core/runtime/AgentDefinition.d.ts.map +1 -0
  334. package/dist/core/runtime/AgentDefinition.js +19 -0
  335. package/dist/core/runtime/AgentDefinition.js.map +1 -0
  336. package/dist/core/runtime/AgentDefinition.mjs +1 -0
  337. package/dist/core/runtime/AgentDefinition.mjs.map +1 -0
  338. package/dist/core/runtime/AgentThread.d.ts +64 -0
  339. package/dist/core/runtime/AgentThread.d.ts.map +1 -0
  340. package/dist/core/runtime/AgentThread.js +1065 -0
  341. package/dist/core/runtime/AgentThread.js.map +1 -0
  342. package/dist/core/runtime/AgentThread.mjs +1062 -0
  343. package/dist/core/runtime/AgentThread.mjs.map +1 -0
  344. package/dist/core/runtime/AgentThread.types.d.ts +123 -0
  345. package/dist/core/runtime/AgentThread.types.d.ts.map +1 -0
  346. package/dist/core/runtime/AgentThread.types.js +46 -0
  347. package/dist/core/runtime/AgentThread.types.js.map +1 -0
  348. package/dist/core/runtime/AgentThread.types.mjs +20 -0
  349. package/dist/core/runtime/AgentThread.types.mjs.map +1 -0
  350. package/dist/core/runtime/AgentThreadOrchestrator.d.ts +35 -0
  351. package/dist/core/runtime/AgentThreadOrchestrator.d.ts.map +1 -0
  352. package/dist/core/runtime/AgentThreadOrchestrator.js +433 -0
  353. package/dist/core/runtime/AgentThreadOrchestrator.js.map +1 -0
  354. package/dist/core/runtime/AgentThreadOrchestrator.mjs +418 -0
  355. package/dist/core/runtime/AgentThreadOrchestrator.mjs.map +1 -0
  356. package/dist/core/runtime/CreateDynamicSubAgentThread.d.ts +11 -0
  357. package/dist/core/runtime/CreateDynamicSubAgentThread.d.ts.map +1 -0
  358. package/dist/core/runtime/CreateDynamicSubAgentThread.js +19 -0
  359. package/dist/core/runtime/CreateDynamicSubAgentThread.js.map +1 -0
  360. package/dist/core/runtime/CreateDynamicSubAgentThread.mjs +1 -0
  361. package/dist/core/runtime/CreateDynamicSubAgentThread.mjs.map +1 -0
  362. package/dist/core/runtime/DeferredTool.d.ts +34 -0
  363. package/dist/core/runtime/DeferredTool.d.ts.map +1 -0
  364. package/dist/core/runtime/DeferredTool.js +321 -0
  365. package/dist/core/runtime/DeferredTool.js.map +1 -0
  366. package/dist/core/runtime/DeferredTool.mjs +287 -0
  367. package/dist/core/runtime/DeferredTool.mjs.map +1 -0
  368. package/dist/core/runtime/OpenToolCallCloser.d.ts +21 -0
  369. package/dist/core/runtime/OpenToolCallCloser.d.ts.map +1 -0
  370. package/dist/core/runtime/OpenToolCallCloser.js +92 -0
  371. package/dist/core/runtime/OpenToolCallCloser.js.map +1 -0
  372. package/dist/core/runtime/OpenToolCallCloser.mjs +66 -0
  373. package/dist/core/runtime/OpenToolCallCloser.mjs.map +1 -0
  374. package/dist/core/runtime/UserInputMessage.d.ts +16 -0
  375. package/dist/core/runtime/UserInputMessage.d.ts.map +1 -0
  376. package/dist/core/runtime/UserInputMessage.js +183 -0
  377. package/dist/core/runtime/UserInputMessage.js.map +1 -0
  378. package/dist/core/runtime/UserInputMessage.mjs +157 -0
  379. package/dist/core/runtime/UserInputMessage.mjs.map +1 -0
  380. package/dist/core/runtime/contextUsage.d.ts +17 -0
  381. package/dist/core/runtime/contextUsage.d.ts.map +1 -0
  382. package/dist/core/runtime/contextUsage.js +56 -0
  383. package/dist/core/runtime/contextUsage.js.map +1 -0
  384. package/dist/core/runtime/contextUsage.mjs +28 -0
  385. package/dist/core/runtime/contextUsage.mjs.map +1 -0
  386. package/dist/core/runtime/contextUtils.d.ts +30 -0
  387. package/dist/core/runtime/contextUtils.d.ts.map +1 -0
  388. package/dist/core/runtime/contextUtils.js +198 -0
  389. package/dist/core/runtime/contextUtils.js.map +1 -0
  390. package/dist/core/runtime/contextUtils.mjs +148 -0
  391. package/dist/core/runtime/contextUtils.mjs.map +1 -0
  392. package/dist/core/runtime/metrics.d.ts +22 -0
  393. package/dist/core/runtime/metrics.d.ts.map +1 -0
  394. package/dist/core/runtime/metrics.js +89 -0
  395. package/dist/core/runtime/metrics.js.map +1 -0
  396. package/dist/core/runtime/metrics.mjs +61 -0
  397. package/dist/core/runtime/metrics.mjs.map +1 -0
  398. package/dist/core/sandbox/Sandbox.d.ts +121 -0
  399. package/dist/core/sandbox/Sandbox.d.ts.map +1 -0
  400. package/dist/core/sandbox/Sandbox.js +572 -0
  401. package/dist/core/sandbox/Sandbox.js.map +1 -0
  402. package/dist/core/sandbox/Sandbox.mjs +536 -0
  403. package/dist/core/sandbox/Sandbox.mjs.map +1 -0
  404. package/dist/core/sandbox/SandboxErrors.d.ts +30 -0
  405. package/dist/core/sandbox/SandboxErrors.d.ts.map +1 -0
  406. package/dist/core/sandbox/SandboxErrors.js +102 -0
  407. package/dist/core/sandbox/SandboxErrors.js.map +1 -0
  408. package/dist/core/sandbox/SandboxErrors.mjs +71 -0
  409. package/dist/core/sandbox/SandboxErrors.mjs.map +1 -0
  410. package/dist/core/sandbox/SandboxNatsBridge.d.ts +33 -0
  411. package/dist/core/sandbox/SandboxNatsBridge.d.ts.map +1 -0
  412. package/dist/core/sandbox/SandboxNatsBridge.js +222 -0
  413. package/dist/core/sandbox/SandboxNatsBridge.js.map +1 -0
  414. package/dist/core/sandbox/SandboxNatsBridge.mjs +201 -0
  415. package/dist/core/sandbox/SandboxNatsBridge.mjs.map +1 -0
  416. package/dist/core/sandbox/constants.d.ts +10 -0
  417. package/dist/core/sandbox/constants.d.ts.map +1 -0
  418. package/dist/core/sandbox/constants.js +37 -0
  419. package/dist/core/sandbox/constants.js.map +1 -0
  420. package/dist/core/sandbox/constants.mjs +10 -0
  421. package/dist/core/sandbox/constants.mjs.map +1 -0
  422. package/dist/core/sandbox/provider/DaytonaProvider.d.ts +80 -0
  423. package/dist/core/sandbox/provider/DaytonaProvider.d.ts.map +1 -0
  424. package/dist/core/sandbox/provider/DaytonaProvider.js +346 -0
  425. package/dist/core/sandbox/provider/DaytonaProvider.js.map +1 -0
  426. package/dist/core/sandbox/provider/DaytonaProvider.mjs +326 -0
  427. package/dist/core/sandbox/provider/DaytonaProvider.mjs.map +1 -0
  428. package/dist/core/sandbox/provider/Provider.d.ts +83 -0
  429. package/dist/core/sandbox/provider/Provider.d.ts.map +1 -0
  430. package/dist/core/sandbox/provider/Provider.js +43 -0
  431. package/dist/core/sandbox/provider/Provider.js.map +1 -0
  432. package/dist/core/sandbox/provider/Provider.mjs +17 -0
  433. package/dist/core/sandbox/provider/Provider.mjs.map +1 -0
  434. package/dist/core/sandbox/provider/TFYSandboxProvider.d.ts +41 -0
  435. package/dist/core/sandbox/provider/TFYSandboxProvider.d.ts.map +1 -0
  436. package/dist/core/sandbox/provider/TFYSandboxProvider.js +180 -0
  437. package/dist/core/sandbox/provider/TFYSandboxProvider.js.map +1 -0
  438. package/dist/core/sandbox/provider/TFYSandboxProvider.mjs +147 -0
  439. package/dist/core/sandbox/provider/TFYSandboxProvider.mjs.map +1 -0
  440. package/dist/core/sandbox/sandboxImage.d.ts +6 -0
  441. package/dist/core/sandbox/sandboxImage.d.ts.map +1 -0
  442. package/dist/core/sandbox/sandboxImage.js +31 -0
  443. package/dist/core/sandbox/sandboxImage.js.map +1 -0
  444. package/dist/core/sandbox/sandboxImage.mjs +6 -0
  445. package/dist/core/sandbox/sandboxImage.mjs.map +1 -0
  446. package/dist/core/sandbox/sandboxScripts.gen.d.ts +5 -0
  447. package/dist/core/sandbox/sandboxScripts.gen.d.ts.map +1 -0
  448. package/dist/core/sandbox/sandboxScripts.gen.js +343 -0
  449. package/dist/core/sandbox/sandboxScripts.gen.js.map +1 -0
  450. package/dist/core/sandbox/sandboxScripts.gen.mjs +318 -0
  451. package/dist/core/sandbox/sandboxScripts.gen.mjs.map +1 -0
  452. package/dist/core/sandbox/skills/ISkillMounter.d.ts +7 -0
  453. package/dist/core/sandbox/skills/ISkillMounter.d.ts.map +1 -0
  454. package/dist/core/sandbox/skills/ISkillMounter.js +19 -0
  455. package/dist/core/sandbox/skills/ISkillMounter.js.map +1 -0
  456. package/dist/core/sandbox/skills/ISkillMounter.mjs +1 -0
  457. package/dist/core/sandbox/skills/ISkillMounter.mjs.map +1 -0
  458. package/dist/core/sandbox/skills/SkillMounter.d.ts +17 -0
  459. package/dist/core/sandbox/skills/SkillMounter.d.ts.map +1 -0
  460. package/dist/core/sandbox/skills/SkillMounter.js +73 -0
  461. package/dist/core/sandbox/skills/SkillMounter.js.map +1 -0
  462. package/dist/core/sandbox/skills/SkillMounter.mjs +48 -0
  463. package/dist/core/sandbox/skills/SkillMounter.mjs.map +1 -0
  464. package/dist/core/sandbox/skills/constants.d.ts +10 -0
  465. package/dist/core/sandbox/skills/constants.d.ts.map +1 -0
  466. package/dist/core/sandbox/skills/constants.js +56 -0
  467. package/dist/core/sandbox/skills/constants.js.map +1 -0
  468. package/dist/core/sandbox/skills/constants.mjs +28 -0
  469. package/dist/core/sandbox/skills/constants.mjs.map +1 -0
  470. package/dist/core/sandbox/skills/index.d.ts +5 -0
  471. package/dist/core/sandbox/skills/index.d.ts.map +1 -0
  472. package/dist/core/sandbox/skills/index.js +40 -0
  473. package/dist/core/sandbox/skills/index.js.map +1 -0
  474. package/dist/core/sandbox/skills/index.mjs +11 -0
  475. package/dist/core/sandbox/skills/index.mjs.map +1 -0
  476. package/dist/core/tracing/AgentTracing.d.ts +38 -0
  477. package/dist/core/tracing/AgentTracing.d.ts.map +1 -0
  478. package/dist/core/tracing/AgentTracing.js +19 -0
  479. package/dist/core/tracing/AgentTracing.js.map +1 -0
  480. package/dist/core/tracing/AgentTracing.mjs +1 -0
  481. package/dist/core/tracing/AgentTracing.mjs.map +1 -0
  482. package/dist/core/tracing/NoopAgentTracing.d.ts +3 -0
  483. package/dist/core/tracing/NoopAgentTracing.d.ts.map +1 -0
  484. package/dist/core/tracing/NoopAgentTracing.js +79 -0
  485. package/dist/core/tracing/NoopAgentTracing.js.map +1 -0
  486. package/dist/core/tracing/NoopAgentTracing.mjs +54 -0
  487. package/dist/core/tracing/NoopAgentTracing.mjs.map +1 -0
  488. package/dist/core/util/abort.d.ts +2 -0
  489. package/dist/core/util/abort.d.ts.map +1 -0
  490. package/dist/core/util/abort.js +38 -0
  491. package/dist/core/util/abort.js.map +1 -0
  492. package/dist/core/util/abort.mjs +13 -0
  493. package/dist/core/util/abort.mjs.map +1 -0
  494. package/dist/core/util/errorLogFields.d.ts +6 -0
  495. package/dist/core/util/errorLogFields.d.ts.map +1 -0
  496. package/dist/core/util/errorLogFields.js +36 -0
  497. package/dist/core/util/errorLogFields.js.map +1 -0
  498. package/dist/core/util/errorLogFields.mjs +11 -0
  499. package/dist/core/util/errorLogFields.mjs.map +1 -0
  500. package/dist/core/util/promiseUtils.d.ts +7 -0
  501. package/dist/core/util/promiseUtils.d.ts.map +1 -0
  502. package/dist/core/util/promiseUtils.js +82 -0
  503. package/dist/core/util/promiseUtils.js.map +1 -0
  504. package/dist/core/util/promiseUtils.mjs +55 -0
  505. package/dist/core/util/promiseUtils.mjs.map +1 -0
  506. package/dist/index.d.ts +7 -0
  507. package/dist/index.d.ts.map +1 -0
  508. package/dist/index.js +44 -0
  509. package/dist/index.js.map +1 -0
  510. package/dist/index.mjs +8 -0
  511. package/dist/index.mjs.map +1 -0
  512. package/dist/package.json +3 -0
  513. package/dist/request-reply/client.d.ts +21 -0
  514. package/dist/request-reply/client.d.ts.map +1 -0
  515. package/dist/request-reply/client.js +92 -0
  516. package/dist/request-reply/client.js.map +1 -0
  517. package/dist/request-reply/client.mjs +67 -0
  518. package/dist/request-reply/client.mjs.map +1 -0
  519. package/dist/request-reply/errors.d.ts +23 -0
  520. package/dist/request-reply/errors.d.ts.map +1 -0
  521. package/dist/request-reply/errors.js +66 -0
  522. package/dist/request-reply/errors.js.map +1 -0
  523. package/dist/request-reply/errors.mjs +39 -0
  524. package/dist/request-reply/errors.mjs.map +1 -0
  525. package/dist/request-reply/executor.d.ts +70 -0
  526. package/dist/request-reply/executor.d.ts.map +1 -0
  527. package/dist/request-reply/executor.js +267 -0
  528. package/dist/request-reply/executor.js.map +1 -0
  529. package/dist/request-reply/executor.mjs +232 -0
  530. package/dist/request-reply/executor.mjs.map +1 -0
  531. package/dist/request-reply/index.d.ts +16 -0
  532. package/dist/request-reply/index.d.ts.map +1 -0
  533. package/dist/request-reply/index.js +47 -0
  534. package/dist/request-reply/index.js.map +1 -0
  535. package/dist/request-reply/index.mjs +16 -0
  536. package/dist/request-reply/index.mjs.map +1 -0
  537. package/dist/request-reply/router.d.ts +20 -0
  538. package/dist/request-reply/router.d.ts.map +1 -0
  539. package/dist/request-reply/router.js +55 -0
  540. package/dist/request-reply/router.js.map +1 -0
  541. package/dist/request-reply/router.mjs +30 -0
  542. package/dist/request-reply/router.mjs.map +1 -0
  543. package/dist/request-reply/types.d.ts +25 -0
  544. package/dist/request-reply/types.d.ts.map +1 -0
  545. package/dist/request-reply/types.js +54 -0
  546. package/dist/request-reply/types.js.map +1 -0
  547. package/dist/request-reply/types.mjs +28 -0
  548. package/dist/request-reply/types.mjs.map +1 -0
  549. package/dist/request-reply/utils.d.ts +9 -0
  550. package/dist/request-reply/utils.d.ts.map +1 -0
  551. package/dist/request-reply/utils.js +51 -0
  552. package/dist/request-reply/utils.js.map +1 -0
  553. package/dist/request-reply/utils.mjs +22 -0
  554. package/dist/request-reply/utils.mjs.map +1 -0
  555. package/package.json +127 -6
  556. package/README.md +0 -4
  557. package/index.js +0 -1
@@ -0,0 +1,321 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/core/runtime/DeferredTool.ts
31
+ var DeferredTool_exports = {};
32
+ __export(DeferredTool_exports, {
33
+ DEFERRED_TOOLS_SERVER_ID: () => DEFERRED_TOOLS_SERVER_ID,
34
+ DeferredTool: () => DeferredTool,
35
+ GET_TOOL_INFO_NAME: () => GET_TOOL_INFO_NAME,
36
+ GET_TOOL_OUTPUT_SCHEMA_NAME: () => GET_TOOL_OUTPUT_SCHEMA_NAME,
37
+ LIST_TOOLS_NAME: () => LIST_TOOLS_NAME
38
+ });
39
+ module.exports = __toCommonJS(DeferredTool_exports);
40
+ var import_dedent = __toESM(require("dedent"), 1);
41
+ var import_zod = require("zod");
42
+ var import_InstructionBuilder = require("../InstructionBuilder.js");
43
+ var import_IMCPServer = require("../mcp/IMCPServer.js");
44
+ var import_LocalToolMCP = require("../mcp/LocalToolMCP.js");
45
+ var import_errorLogFields = require("../util/errorLogFields.js");
46
+ var DEFERRED_TOOLS_SERVER_ID = "deferred-tools";
47
+ var DEFERRED_TOOLS_INSTRUCTION = "deferred-tools-instructions";
48
+ var LIST_TOOLS_NAME = "list_tools";
49
+ var GET_TOOL_INFO_NAME = "get_tool_info";
50
+ var GET_TOOL_OUTPUT_SCHEMA_NAME = "get_tool_output_schema";
51
+ var CALL_TOOL_NAME = "call_tool";
52
+ var MAX_DESCRIPTION_LENGTH = 200;
53
+ var listToolsSchema = import_zod.z.object({
54
+ mcp_server: import_zod.z.string().describe("Name of the MCP server to list tools for.")
55
+ });
56
+ var getToolInfoSchema = import_zod.z.object({
57
+ mcp_server: import_zod.z.string().describe("Name of the MCP server."),
58
+ tool_name: import_zod.z.string().describe("Name of the tool to inspect.")
59
+ });
60
+ var getToolOutputSchemaSchema = import_zod.z.object({
61
+ mcp_server: import_zod.z.string().describe("Name of the MCP server."),
62
+ tool_name: import_zod.z.string().describe("Name of the tool to get output schema for.")
63
+ });
64
+ var callToolSchema = import_zod.z.object({
65
+ mcp_server: import_zod.z.string().describe("Name of the MCP server."),
66
+ tool_name: import_zod.z.string().describe("Name of the tool to call."),
67
+ input: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).default({}).describe("Arguments to pass to the tool.")
68
+ });
69
+ function isResolvedServerTools(result) {
70
+ return "tools" in result;
71
+ }
72
+ var DeferredTool = class extends import_LocalToolMCP.LocalToolMCP {
73
+ name = DEFERRED_TOOLS_SERVER_ID;
74
+ displayName = "DeferredTools";
75
+ description = "Deferred tool loading for user MCP servers";
76
+ serverMap;
77
+ tools;
78
+ logger;
79
+ constructor(servers, options) {
80
+ super({ tracing: options.tracing });
81
+ this.logger = options.logger.child({ module: "DeferredTool" });
82
+ this.serverMap = new Map(servers.map((s) => [s.name, s]));
83
+ this.tools = this.buildTools();
84
+ }
85
+ buildInstruction(builder) {
86
+ const servers = [...this.serverMap.values()];
87
+ const deferredServers = servers.filter((s) => !s.preload);
88
+ if (deferredServers.length === 0) return;
89
+ const deferredList = deferredServers.map((s) => s.description ? `- ${s.name}: "${s.description.slice(0, MAX_DESCRIPTION_LENGTH)}"` : `- ${s.name}`).join("\n");
90
+ builder.addSection(
91
+ DEFERRED_TOOLS_INSTRUCTION,
92
+ import_dedent.default`
93
+ The following MCP servers have deferred tool loading. Their tools are NOT pre-loaded.
94
+ ${deferredList}
95
+
96
+ The Agent MUST use ${LIST_TOOLS_NAME} and ${GET_TOOL_INFO_NAME} to discover tools before calling them.`
97
+ );
98
+ }
99
+ getTools() {
100
+ return this.tools;
101
+ }
102
+ async toolCallInfo(params, resolveUnderlyingTool) {
103
+ if (params.name !== CALL_TOOL_NAME) {
104
+ return super.toolCallInfo(params, resolveUnderlyingTool);
105
+ }
106
+ if (resolveUnderlyingTool === false) {
107
+ const base = await super.toolCallInfo(params, resolveUnderlyingTool);
108
+ return { ...base, is_deferred: true };
109
+ }
110
+ const parsed = callToolSchema.safeParse(params.arguments);
111
+ if (!parsed.success) {
112
+ this.logger.warn(`Failed to parse call_tool arguments`, {
113
+ tool: params.name,
114
+ errors: parsed.error.issues
115
+ });
116
+ return { ...await super.toolCallInfo(params), is_deferred: true };
117
+ }
118
+ const server = this.resolveServer(parsed.data.mcp_server);
119
+ if (!server) {
120
+ this.logger.warn(`Server not found for toolCallInfo`, {
121
+ mcpServer: parsed.data.mcp_server,
122
+ toolName: parsed.data.tool_name,
123
+ availableServers: [...this.serverMap.keys()]
124
+ });
125
+ return { ...await super.toolCallInfo(params), is_deferred: true };
126
+ }
127
+ const underlying = await server.toolCallInfo({
128
+ name: parsed.data.tool_name,
129
+ arguments: parsed.data.input
130
+ });
131
+ return { ...underlying, is_deferred: true };
132
+ }
133
+ resolveServer(name) {
134
+ return this.serverMap.get(name);
135
+ }
136
+ async resolveServerTools(mcpServer) {
137
+ const server = this.resolveServer(mcpServer);
138
+ if (!server) {
139
+ return (0, import_IMCPServer.toolResultResponse)({
140
+ text: JSON.stringify({ error: `MCP server '${mcpServer}' not found` }),
141
+ isError: true
142
+ });
143
+ }
144
+ const listResponse = await server.listTools();
145
+ if ((0, import_IMCPServer.isAuthRequired)(listResponse)) {
146
+ return listResponse;
147
+ }
148
+ const { result, ...metadata } = listResponse;
149
+ return { server, tools: result.tools, metadata };
150
+ }
151
+ buildTools() {
152
+ return [this.buildListTools(), this.buildGetToolInfo(), this.buildGetToolOutputSchema(), this.buildCallTool()];
153
+ }
154
+ buildListTools() {
155
+ return (0, import_LocalToolMCP.defineTool)({
156
+ name: LIST_TOOLS_NAME,
157
+ description: import_dedent.default`
158
+ List tool names available on an MCP server.
159
+ Returns tool names only — use ${GET_TOOL_INFO_NAME} to get full details before calling a tool.`,
160
+ schema: listToolsSchema,
161
+ handler: async (input) => {
162
+ try {
163
+ const resolved = await this.resolveServerTools(input.mcp_server);
164
+ if (!isResolvedServerTools(resolved)) return resolved;
165
+ const { server, tools, metadata } = resolved;
166
+ return (0, import_IMCPServer.toolResultResponse)({
167
+ text: `${server.name}:
168
+ ${tools.map((t) => t.name).join(", ")}`,
169
+ overrides: metadata
170
+ });
171
+ } catch (error) {
172
+ this.logger.error("list_tools failed", {
173
+ ...(0, import_errorLogFields.extractErrorLogFields)(error),
174
+ mcpServer: input.mcp_server
175
+ });
176
+ return (0, import_IMCPServer.toolResultResponse)({
177
+ text: JSON.stringify({ error: `Failed to list tools for '${input.mcp_server}'.` }),
178
+ isError: true
179
+ });
180
+ }
181
+ }
182
+ });
183
+ }
184
+ buildGetToolInfo() {
185
+ return (0, import_LocalToolMCP.defineTool)({
186
+ name: GET_TOOL_INFO_NAME,
187
+ description: import_dedent.default`
188
+ Get description, inputSchema and outputSchema for a specific tool on an MCP server.
189
+ If outputSchema is null, it will NOT be present in ${GET_TOOL_OUTPUT_SCHEMA_NAME} as well.
190
+ The Agent MUST call ${LIST_TOOLS_NAME} first to know which tools are available.`,
191
+ schema: getToolInfoSchema,
192
+ handler: async (input) => {
193
+ try {
194
+ const resolved = await this.resolveServerTools(input.mcp_server);
195
+ if (!isResolvedServerTools(resolved)) return resolved;
196
+ const { tools, metadata } = resolved;
197
+ const tool = tools.find((t) => t.name === input.tool_name);
198
+ if (!tool) {
199
+ return (0, import_IMCPServer.toolResultResponse)({
200
+ text: JSON.stringify({ error: `Tool '${input.tool_name}' not found on server '${input.mcp_server}'` }),
201
+ overrides: metadata,
202
+ isError: true
203
+ });
204
+ }
205
+ return (0, import_IMCPServer.toolResultResponse)({
206
+ text: JSON.stringify({
207
+ description: tool.description,
208
+ inputSchema: tool.inputSchema,
209
+ outputSchema: tool.outputSchema ?? null
210
+ }),
211
+ overrides: metadata
212
+ });
213
+ } catch (error) {
214
+ this.logger.error("get_tool_info failed", {
215
+ ...(0, import_errorLogFields.extractErrorLogFields)(error),
216
+ mcpServer: input.mcp_server,
217
+ toolName: input.tool_name
218
+ });
219
+ return (0, import_IMCPServer.toolResultResponse)({
220
+ text: JSON.stringify({
221
+ error: `Failed to get tool info: ${error instanceof Error ? error.message : "unknown"}`
222
+ }),
223
+ isError: true
224
+ });
225
+ }
226
+ }
227
+ });
228
+ }
229
+ buildGetToolOutputSchema() {
230
+ return (0, import_LocalToolMCP.defineTool)({
231
+ name: GET_TOOL_OUTPUT_SCHEMA_NAME,
232
+ description: import_dedent.default`
233
+ Get the outputSchema for a specific tool on an MCP server.
234
+ The Agent MUST not call ${GET_TOOL_OUTPUT_SCHEMA_NAME} and ${GET_TOOL_INFO_NAME} for the same tool.
235
+ The Agent MUST either call ${GET_TOOL_OUTPUT_SCHEMA_NAME} or ${GET_TOOL_INFO_NAME} before entering Code Mode.
236
+ The Agent must NOT assume the structure of a tool's response from its name or description alone.`,
237
+ schema: getToolOutputSchemaSchema,
238
+ handler: async (input) => {
239
+ try {
240
+ const resolved = await this.resolveServerTools(input.mcp_server);
241
+ if (!isResolvedServerTools(resolved)) return resolved;
242
+ const { tools, metadata } = resolved;
243
+ const tool = tools.find((t) => t.name === input.tool_name);
244
+ if (!tool) {
245
+ return (0, import_IMCPServer.toolResultResponse)({
246
+ text: JSON.stringify({ error: `Tool '${input.tool_name}' not found on server '${input.mcp_server}'` }),
247
+ overrides: metadata,
248
+ isError: true
249
+ });
250
+ }
251
+ return (0, import_IMCPServer.toolResultResponse)({
252
+ text: JSON.stringify({
253
+ outputSchema: tool.outputSchema ?? null
254
+ }),
255
+ overrides: metadata
256
+ });
257
+ } catch (error) {
258
+ this.logger.error("get_tool_output_schema failed", {
259
+ ...(0, import_errorLogFields.extractErrorLogFields)(error),
260
+ mcpServer: input.mcp_server,
261
+ toolName: input.tool_name
262
+ });
263
+ return (0, import_IMCPServer.toolResultResponse)({
264
+ text: JSON.stringify({
265
+ error: `Failed to get output schema: ${error instanceof Error ? error.message : "unknown"}`
266
+ }),
267
+ isError: true
268
+ });
269
+ }
270
+ }
271
+ });
272
+ }
273
+ buildCallTool() {
274
+ return (0, import_LocalToolMCP.defineTool)({
275
+ name: CALL_TOOL_NAME,
276
+ description: import_dedent.default`
277
+ Call a tool on an MCP server.
278
+ The Agent MUST call ${LIST_TOOLS_NAME} and ${GET_TOOL_INFO_NAME} before calling a tool.`,
279
+ schema: callToolSchema,
280
+ handler: async (input, approvalDecision) => {
281
+ const server = this.resolveServer(input.mcp_server);
282
+ if (!server) {
283
+ return (0, import_IMCPServer.toolResultResponse)({
284
+ text: JSON.stringify({ error: `MCP server '${input.mcp_server}' not found` }),
285
+ isError: true
286
+ });
287
+ }
288
+ try {
289
+ const response = await server.callTool({ name: input.tool_name, arguments: input.input }, approvalDecision);
290
+ if ((0, import_IMCPServer.isAuthRequired)(response)) {
291
+ return response;
292
+ }
293
+ if ((0, import_IMCPServer.isApprovalRequiredResponse)(response)) return response;
294
+ if (!(0, import_IMCPServer.isCallToolResponseResult)(response)) {
295
+ throw new Error("Tool call returned an unexpected sub-agent response");
296
+ }
297
+ return response;
298
+ } catch (error) {
299
+ this.logger.error("call_tool failed", {
300
+ ...(0, import_errorLogFields.extractErrorLogFields)(error),
301
+ mcpServer: input.mcp_server,
302
+ toolName: input.tool_name
303
+ });
304
+ return (0, import_IMCPServer.toolResultResponse)({
305
+ text: JSON.stringify({ error: `Tool call failed: ${error instanceof Error ? error.message : "unknown"}` }),
306
+ isError: true
307
+ });
308
+ }
309
+ }
310
+ });
311
+ }
312
+ };
313
+ // Annotate the CommonJS export names for ESM import in node:
314
+ 0 && (module.exports = {
315
+ DEFERRED_TOOLS_SERVER_ID,
316
+ DeferredTool,
317
+ GET_TOOL_INFO_NAME,
318
+ GET_TOOL_OUTPUT_SCHEMA_NAME,
319
+ LIST_TOOLS_NAME
320
+ });
321
+ //# sourceMappingURL=DeferredTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/runtime/DeferredTool.ts"],"sourcesContent":["import type { CallToolRequest } from '@modelcontextprotocol/sdk/types.js';\nimport dedent from 'dedent';\nimport type { Logger } from 'winston';\nimport { z } from 'zod';\nimport type { ApprovalDecision } from '../events/schema';\nimport { InstructionBuilder } from '../InstructionBuilder';\nimport type { InternalToolCallInfo } from '../llm/LLMTypes';\nimport {\n type AgentToolSchema,\n type CallToolResponse,\n isApprovalRequiredResponse,\n isAuthRequired,\n isCallToolResponseResult,\n type IToolSet,\n type ListToolsResolvedResponse,\n toolResultResponse,\n} from '../mcp/IMCPServer';\nimport { defineTool, LocalToolMCP, type ToolDefinition } from '../mcp/LocalToolMCP';\nimport type { AgentTracing } from '../tracing/AgentTracing';\nimport { extractErrorLogFields } from '../util/errorLogFields';\n\nexport const DEFERRED_TOOLS_SERVER_ID = 'deferred-tools';\nconst DEFERRED_TOOLS_INSTRUCTION = 'deferred-tools-instructions';\nexport const LIST_TOOLS_NAME = 'list_tools';\nexport const GET_TOOL_INFO_NAME = 'get_tool_info';\nexport const GET_TOOL_OUTPUT_SCHEMA_NAME = 'get_tool_output_schema';\nconst CALL_TOOL_NAME = 'call_tool';\nconst MAX_DESCRIPTION_LENGTH = 200;\n\nconst listToolsSchema = z.object({\n mcp_server: z.string().describe('Name of the MCP server to list tools for.'),\n});\n\nconst getToolInfoSchema = z.object({\n mcp_server: z.string().describe('Name of the MCP server.'),\n tool_name: z.string().describe('Name of the tool to inspect.'),\n});\n\nconst getToolOutputSchemaSchema = z.object({\n mcp_server: z.string().describe('Name of the MCP server.'),\n tool_name: z.string().describe('Name of the tool to get output schema for.'),\n});\n\nconst callToolSchema = z.object({\n mcp_server: z.string().describe('Name of the MCP server.'),\n tool_name: z.string().describe('Name of the tool to call.'),\n input: z.record(z.string(), z.unknown()).default({}).describe('Arguments to pass to the tool.'),\n});\n\ninterface ResolvedServerTools {\n server: IToolSet;\n tools: AgentToolSchema[];\n metadata: Omit<ListToolsResolvedResponse, 'result'>;\n}\n\nfunction isResolvedServerTools(result: CallToolResponse | ResolvedServerTools): result is ResolvedServerTools {\n return 'tools' in result;\n}\n\nexport class DeferredTool extends LocalToolMCP {\n readonly name = DEFERRED_TOOLS_SERVER_ID;\n readonly displayName = 'DeferredTools';\n override readonly description = 'Deferred tool loading for user MCP servers';\n\n private readonly serverMap: Map<string, IToolSet>;\n private readonly tools: ToolDefinition[];\n private readonly logger: Logger;\n\n constructor(\n servers: readonly IToolSet[],\n options: {\n tracing: AgentTracing;\n logger: Logger;\n },\n ) {\n super({ tracing: options.tracing });\n this.logger = options.logger.child({ module: 'DeferredTool' });\n this.serverMap = new Map(servers.map(s => [s.name, s]));\n this.tools = this.buildTools();\n }\n\n buildInstruction(builder: InstructionBuilder): void {\n const servers = [...this.serverMap.values()];\n\n // Membership follows `preload` only (origin/main). Selective `preload_tools` /\n // `hasPreloadedTools` must not hide a server from deferred discovery instructions.\n const deferredServers = servers.filter(s => !s.preload);\n\n if (deferredServers.length === 0) return;\n\n const deferredList = deferredServers\n .map(s => (s.description ? `- ${s.name}: \"${s.description.slice(0, MAX_DESCRIPTION_LENGTH)}\"` : `- ${s.name}`))\n .join('\\n');\n\n builder.addSection(\n DEFERRED_TOOLS_INSTRUCTION,\n dedent`\n The following MCP servers have deferred tool loading. Their tools are NOT pre-loaded.\n ${deferredList}\n\n The Agent MUST use ${LIST_TOOLS_NAME} and ${GET_TOOL_INFO_NAME} to discover tools before calling them.`,\n );\n }\n\n protected getTools(): ToolDefinition[] {\n return this.tools;\n }\n\n override async toolCallInfo(\n params: CallToolRequest['params'],\n resolveUnderlyingTool?: boolean,\n ): Promise<InternalToolCallInfo> {\n if (params.name !== CALL_TOOL_NAME) {\n return super.toolCallInfo(params, resolveUnderlyingTool);\n }\n if (resolveUnderlyingTool === false) {\n const base = await super.toolCallInfo(params, resolveUnderlyingTool);\n return { ...base, is_deferred: true };\n }\n const parsed = callToolSchema.safeParse(params.arguments);\n if (!parsed.success) {\n this.logger.warn(`Failed to parse call_tool arguments`, {\n tool: params.name,\n errors: parsed.error.issues,\n });\n return { ...(await super.toolCallInfo(params)), is_deferred: true };\n }\n const server = this.resolveServer(parsed.data.mcp_server);\n if (!server) {\n this.logger.warn(`Server not found for toolCallInfo`, {\n mcpServer: parsed.data.mcp_server,\n toolName: parsed.data.tool_name,\n availableServers: [...this.serverMap.keys()],\n });\n return { ...(await super.toolCallInfo(params)), is_deferred: true };\n }\n const underlying = await server.toolCallInfo({\n name: parsed.data.tool_name,\n arguments: parsed.data.input,\n });\n return { ...underlying, is_deferred: true };\n }\n\n private resolveServer(name: string): IToolSet | undefined {\n return this.serverMap.get(name);\n }\n\n private async resolveServerTools(mcpServer: string): Promise<CallToolResponse | ResolvedServerTools> {\n const server = this.resolveServer(mcpServer);\n if (!server) {\n return toolResultResponse({\n text: JSON.stringify({ error: `MCP server '${mcpServer}' not found` }),\n isError: true,\n });\n }\n\n const listResponse = await server.listTools();\n if (isAuthRequired(listResponse)) {\n return listResponse;\n }\n const { result, ...metadata } = listResponse;\n return { server, tools: result.tools, metadata };\n }\n\n private buildTools(): ToolDefinition[] {\n return [this.buildListTools(), this.buildGetToolInfo(), this.buildGetToolOutputSchema(), this.buildCallTool()];\n }\n\n private buildListTools(): ToolDefinition {\n return defineTool({\n name: LIST_TOOLS_NAME,\n description: dedent`\n List tool names available on an MCP server.\n Returns tool names only — use ${GET_TOOL_INFO_NAME} to get full details before calling a tool.`,\n schema: listToolsSchema,\n handler: async (input: { mcp_server: string }) => {\n try {\n const resolved = await this.resolveServerTools(input.mcp_server);\n if (!isResolvedServerTools(resolved)) return resolved;\n const { server, tools, metadata } = resolved;\n return toolResultResponse({\n text: `${server.name}:\\n ${tools.map(t => t.name).join(', ')}`,\n overrides: metadata,\n });\n } catch (error) {\n this.logger.error('list_tools failed', {\n ...extractErrorLogFields(error),\n mcpServer: input.mcp_server,\n });\n return toolResultResponse({\n text: JSON.stringify({ error: `Failed to list tools for '${input.mcp_server}'.` }),\n isError: true,\n });\n }\n },\n });\n }\n\n private buildGetToolInfo(): ToolDefinition {\n return defineTool({\n name: GET_TOOL_INFO_NAME,\n description: dedent`\n Get description, inputSchema and outputSchema for a specific tool on an MCP server.\n If outputSchema is null, it will NOT be present in ${GET_TOOL_OUTPUT_SCHEMA_NAME} as well.\n The Agent MUST call ${LIST_TOOLS_NAME} first to know which tools are available.`,\n schema: getToolInfoSchema,\n handler: async (input: { mcp_server: string; tool_name: string }) => {\n try {\n const resolved = await this.resolveServerTools(input.mcp_server);\n if (!isResolvedServerTools(resolved)) return resolved;\n const { tools, metadata } = resolved;\n const tool = tools.find(t => t.name === input.tool_name);\n if (!tool) {\n return toolResultResponse({\n text: JSON.stringify({ error: `Tool '${input.tool_name}' not found on server '${input.mcp_server}'` }),\n overrides: metadata,\n isError: true,\n });\n }\n\n return toolResultResponse({\n text: JSON.stringify({\n description: tool.description,\n inputSchema: tool.inputSchema,\n outputSchema: tool.outputSchema ?? null,\n }),\n overrides: metadata,\n });\n } catch (error) {\n this.logger.error('get_tool_info failed', {\n ...extractErrorLogFields(error),\n mcpServer: input.mcp_server,\n toolName: input.tool_name,\n });\n return toolResultResponse({\n text: JSON.stringify({\n error: `Failed to get tool info: ${error instanceof Error ? error.message : 'unknown'}`,\n }),\n isError: true,\n });\n }\n },\n });\n }\n\n private buildGetToolOutputSchema(): ToolDefinition {\n return defineTool({\n name: GET_TOOL_OUTPUT_SCHEMA_NAME,\n description: dedent`\n Get the outputSchema for a specific tool on an MCP server.\n The Agent MUST not call ${GET_TOOL_OUTPUT_SCHEMA_NAME} and ${GET_TOOL_INFO_NAME} for the same tool.\n The Agent MUST either call ${GET_TOOL_OUTPUT_SCHEMA_NAME} or ${GET_TOOL_INFO_NAME} before entering Code Mode.\n The Agent must NOT assume the structure of a tool's response from its name or description alone.`,\n schema: getToolOutputSchemaSchema,\n handler: async (input: { mcp_server: string; tool_name: string }) => {\n try {\n const resolved = await this.resolveServerTools(input.mcp_server);\n if (!isResolvedServerTools(resolved)) return resolved;\n const { tools, metadata } = resolved;\n const tool = tools.find(t => t.name === input.tool_name);\n if (!tool) {\n return toolResultResponse({\n text: JSON.stringify({ error: `Tool '${input.tool_name}' not found on server '${input.mcp_server}'` }),\n overrides: metadata,\n isError: true,\n });\n }\n\n return toolResultResponse({\n text: JSON.stringify({\n outputSchema: tool.outputSchema ?? null,\n }),\n overrides: metadata,\n });\n } catch (error) {\n this.logger.error('get_tool_output_schema failed', {\n ...extractErrorLogFields(error),\n mcpServer: input.mcp_server,\n toolName: input.tool_name,\n });\n return toolResultResponse({\n text: JSON.stringify({\n error: `Failed to get output schema: ${error instanceof Error ? error.message : 'unknown'}`,\n }),\n isError: true,\n });\n }\n },\n });\n }\n\n private buildCallTool(): ToolDefinition {\n return defineTool({\n name: CALL_TOOL_NAME,\n description: dedent`\n Call a tool on an MCP server.\n The Agent MUST call ${LIST_TOOLS_NAME} and ${GET_TOOL_INFO_NAME} before calling a tool.`,\n schema: callToolSchema,\n handler: async (\n input: { mcp_server: string; tool_name: string; input: Record<string, unknown> },\n approvalDecision?: ApprovalDecision,\n ) => {\n const server = this.resolveServer(input.mcp_server);\n if (!server) {\n return toolResultResponse({\n text: JSON.stringify({ error: `MCP server '${input.mcp_server}' not found` }),\n isError: true,\n });\n }\n\n try {\n const response = await server.callTool({ name: input.tool_name, arguments: input.input }, approvalDecision);\n\n if (isAuthRequired(response)) {\n return response;\n }\n\n if (isApprovalRequiredResponse(response)) return response;\n\n if (!isCallToolResponseResult(response)) {\n throw new Error('Tool call returned an unexpected sub-agent response');\n }\n\n return response;\n } catch (error) {\n this.logger.error('call_tool failed', {\n ...extractErrorLogFields(error),\n mcpServer: input.mcp_server,\n toolName: input.tool_name,\n });\n return toolResultResponse({\n text: JSON.stringify({ error: `Tool call failed: ${error instanceof Error ? error.message : 'unknown'}` }),\n isError: true,\n });\n }\n },\n });\n }\n}\n"],"mappings":"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","names":["dedent"]}
@@ -0,0 +1,287 @@
1
+ // src/core/runtime/DeferredTool.ts
2
+ import dedent from "dedent";
3
+ import { z } from "zod";
4
+ import "../InstructionBuilder.mjs";
5
+ import {
6
+ isApprovalRequiredResponse,
7
+ isAuthRequired,
8
+ isCallToolResponseResult,
9
+ toolResultResponse
10
+ } from "../mcp/IMCPServer.mjs";
11
+ import { defineTool, LocalToolMCP } from "../mcp/LocalToolMCP.mjs";
12
+ import { extractErrorLogFields } from "../util/errorLogFields.mjs";
13
+ var DEFERRED_TOOLS_SERVER_ID = "deferred-tools";
14
+ var DEFERRED_TOOLS_INSTRUCTION = "deferred-tools-instructions";
15
+ var LIST_TOOLS_NAME = "list_tools";
16
+ var GET_TOOL_INFO_NAME = "get_tool_info";
17
+ var GET_TOOL_OUTPUT_SCHEMA_NAME = "get_tool_output_schema";
18
+ var CALL_TOOL_NAME = "call_tool";
19
+ var MAX_DESCRIPTION_LENGTH = 200;
20
+ var listToolsSchema = z.object({
21
+ mcp_server: z.string().describe("Name of the MCP server to list tools for.")
22
+ });
23
+ var getToolInfoSchema = z.object({
24
+ mcp_server: z.string().describe("Name of the MCP server."),
25
+ tool_name: z.string().describe("Name of the tool to inspect.")
26
+ });
27
+ var getToolOutputSchemaSchema = z.object({
28
+ mcp_server: z.string().describe("Name of the MCP server."),
29
+ tool_name: z.string().describe("Name of the tool to get output schema for.")
30
+ });
31
+ var callToolSchema = z.object({
32
+ mcp_server: z.string().describe("Name of the MCP server."),
33
+ tool_name: z.string().describe("Name of the tool to call."),
34
+ input: z.record(z.string(), z.unknown()).default({}).describe("Arguments to pass to the tool.")
35
+ });
36
+ function isResolvedServerTools(result) {
37
+ return "tools" in result;
38
+ }
39
+ var DeferredTool = class extends LocalToolMCP {
40
+ name = DEFERRED_TOOLS_SERVER_ID;
41
+ displayName = "DeferredTools";
42
+ description = "Deferred tool loading for user MCP servers";
43
+ serverMap;
44
+ tools;
45
+ logger;
46
+ constructor(servers, options) {
47
+ super({ tracing: options.tracing });
48
+ this.logger = options.logger.child({ module: "DeferredTool" });
49
+ this.serverMap = new Map(servers.map((s) => [s.name, s]));
50
+ this.tools = this.buildTools();
51
+ }
52
+ buildInstruction(builder) {
53
+ const servers = [...this.serverMap.values()];
54
+ const deferredServers = servers.filter((s) => !s.preload);
55
+ if (deferredServers.length === 0) return;
56
+ const deferredList = deferredServers.map((s) => s.description ? `- ${s.name}: "${s.description.slice(0, MAX_DESCRIPTION_LENGTH)}"` : `- ${s.name}`).join("\n");
57
+ builder.addSection(
58
+ DEFERRED_TOOLS_INSTRUCTION,
59
+ dedent`
60
+ The following MCP servers have deferred tool loading. Their tools are NOT pre-loaded.
61
+ ${deferredList}
62
+
63
+ The Agent MUST use ${LIST_TOOLS_NAME} and ${GET_TOOL_INFO_NAME} to discover tools before calling them.`
64
+ );
65
+ }
66
+ getTools() {
67
+ return this.tools;
68
+ }
69
+ async toolCallInfo(params, resolveUnderlyingTool) {
70
+ if (params.name !== CALL_TOOL_NAME) {
71
+ return super.toolCallInfo(params, resolveUnderlyingTool);
72
+ }
73
+ if (resolveUnderlyingTool === false) {
74
+ const base = await super.toolCallInfo(params, resolveUnderlyingTool);
75
+ return { ...base, is_deferred: true };
76
+ }
77
+ const parsed = callToolSchema.safeParse(params.arguments);
78
+ if (!parsed.success) {
79
+ this.logger.warn(`Failed to parse call_tool arguments`, {
80
+ tool: params.name,
81
+ errors: parsed.error.issues
82
+ });
83
+ return { ...await super.toolCallInfo(params), is_deferred: true };
84
+ }
85
+ const server = this.resolveServer(parsed.data.mcp_server);
86
+ if (!server) {
87
+ this.logger.warn(`Server not found for toolCallInfo`, {
88
+ mcpServer: parsed.data.mcp_server,
89
+ toolName: parsed.data.tool_name,
90
+ availableServers: [...this.serverMap.keys()]
91
+ });
92
+ return { ...await super.toolCallInfo(params), is_deferred: true };
93
+ }
94
+ const underlying = await server.toolCallInfo({
95
+ name: parsed.data.tool_name,
96
+ arguments: parsed.data.input
97
+ });
98
+ return { ...underlying, is_deferred: true };
99
+ }
100
+ resolveServer(name) {
101
+ return this.serverMap.get(name);
102
+ }
103
+ async resolveServerTools(mcpServer) {
104
+ const server = this.resolveServer(mcpServer);
105
+ if (!server) {
106
+ return toolResultResponse({
107
+ text: JSON.stringify({ error: `MCP server '${mcpServer}' not found` }),
108
+ isError: true
109
+ });
110
+ }
111
+ const listResponse = await server.listTools();
112
+ if (isAuthRequired(listResponse)) {
113
+ return listResponse;
114
+ }
115
+ const { result, ...metadata } = listResponse;
116
+ return { server, tools: result.tools, metadata };
117
+ }
118
+ buildTools() {
119
+ return [this.buildListTools(), this.buildGetToolInfo(), this.buildGetToolOutputSchema(), this.buildCallTool()];
120
+ }
121
+ buildListTools() {
122
+ return defineTool({
123
+ name: LIST_TOOLS_NAME,
124
+ description: dedent`
125
+ List tool names available on an MCP server.
126
+ Returns tool names only — use ${GET_TOOL_INFO_NAME} to get full details before calling a tool.`,
127
+ schema: listToolsSchema,
128
+ handler: async (input) => {
129
+ try {
130
+ const resolved = await this.resolveServerTools(input.mcp_server);
131
+ if (!isResolvedServerTools(resolved)) return resolved;
132
+ const { server, tools, metadata } = resolved;
133
+ return toolResultResponse({
134
+ text: `${server.name}:
135
+ ${tools.map((t) => t.name).join(", ")}`,
136
+ overrides: metadata
137
+ });
138
+ } catch (error) {
139
+ this.logger.error("list_tools failed", {
140
+ ...extractErrorLogFields(error),
141
+ mcpServer: input.mcp_server
142
+ });
143
+ return toolResultResponse({
144
+ text: JSON.stringify({ error: `Failed to list tools for '${input.mcp_server}'.` }),
145
+ isError: true
146
+ });
147
+ }
148
+ }
149
+ });
150
+ }
151
+ buildGetToolInfo() {
152
+ return defineTool({
153
+ name: GET_TOOL_INFO_NAME,
154
+ description: dedent`
155
+ Get description, inputSchema and outputSchema for a specific tool on an MCP server.
156
+ If outputSchema is null, it will NOT be present in ${GET_TOOL_OUTPUT_SCHEMA_NAME} as well.
157
+ The Agent MUST call ${LIST_TOOLS_NAME} first to know which tools are available.`,
158
+ schema: getToolInfoSchema,
159
+ handler: async (input) => {
160
+ try {
161
+ const resolved = await this.resolveServerTools(input.mcp_server);
162
+ if (!isResolvedServerTools(resolved)) return resolved;
163
+ const { tools, metadata } = resolved;
164
+ const tool = tools.find((t) => t.name === input.tool_name);
165
+ if (!tool) {
166
+ return toolResultResponse({
167
+ text: JSON.stringify({ error: `Tool '${input.tool_name}' not found on server '${input.mcp_server}'` }),
168
+ overrides: metadata,
169
+ isError: true
170
+ });
171
+ }
172
+ return toolResultResponse({
173
+ text: JSON.stringify({
174
+ description: tool.description,
175
+ inputSchema: tool.inputSchema,
176
+ outputSchema: tool.outputSchema ?? null
177
+ }),
178
+ overrides: metadata
179
+ });
180
+ } catch (error) {
181
+ this.logger.error("get_tool_info failed", {
182
+ ...extractErrorLogFields(error),
183
+ mcpServer: input.mcp_server,
184
+ toolName: input.tool_name
185
+ });
186
+ return toolResultResponse({
187
+ text: JSON.stringify({
188
+ error: `Failed to get tool info: ${error instanceof Error ? error.message : "unknown"}`
189
+ }),
190
+ isError: true
191
+ });
192
+ }
193
+ }
194
+ });
195
+ }
196
+ buildGetToolOutputSchema() {
197
+ return defineTool({
198
+ name: GET_TOOL_OUTPUT_SCHEMA_NAME,
199
+ description: dedent`
200
+ Get the outputSchema for a specific tool on an MCP server.
201
+ The Agent MUST not call ${GET_TOOL_OUTPUT_SCHEMA_NAME} and ${GET_TOOL_INFO_NAME} for the same tool.
202
+ The Agent MUST either call ${GET_TOOL_OUTPUT_SCHEMA_NAME} or ${GET_TOOL_INFO_NAME} before entering Code Mode.
203
+ The Agent must NOT assume the structure of a tool's response from its name or description alone.`,
204
+ schema: getToolOutputSchemaSchema,
205
+ handler: async (input) => {
206
+ try {
207
+ const resolved = await this.resolveServerTools(input.mcp_server);
208
+ if (!isResolvedServerTools(resolved)) return resolved;
209
+ const { tools, metadata } = resolved;
210
+ const tool = tools.find((t) => t.name === input.tool_name);
211
+ if (!tool) {
212
+ return toolResultResponse({
213
+ text: JSON.stringify({ error: `Tool '${input.tool_name}' not found on server '${input.mcp_server}'` }),
214
+ overrides: metadata,
215
+ isError: true
216
+ });
217
+ }
218
+ return toolResultResponse({
219
+ text: JSON.stringify({
220
+ outputSchema: tool.outputSchema ?? null
221
+ }),
222
+ overrides: metadata
223
+ });
224
+ } catch (error) {
225
+ this.logger.error("get_tool_output_schema failed", {
226
+ ...extractErrorLogFields(error),
227
+ mcpServer: input.mcp_server,
228
+ toolName: input.tool_name
229
+ });
230
+ return toolResultResponse({
231
+ text: JSON.stringify({
232
+ error: `Failed to get output schema: ${error instanceof Error ? error.message : "unknown"}`
233
+ }),
234
+ isError: true
235
+ });
236
+ }
237
+ }
238
+ });
239
+ }
240
+ buildCallTool() {
241
+ return defineTool({
242
+ name: CALL_TOOL_NAME,
243
+ description: dedent`
244
+ Call a tool on an MCP server.
245
+ The Agent MUST call ${LIST_TOOLS_NAME} and ${GET_TOOL_INFO_NAME} before calling a tool.`,
246
+ schema: callToolSchema,
247
+ handler: async (input, approvalDecision) => {
248
+ const server = this.resolveServer(input.mcp_server);
249
+ if (!server) {
250
+ return toolResultResponse({
251
+ text: JSON.stringify({ error: `MCP server '${input.mcp_server}' not found` }),
252
+ isError: true
253
+ });
254
+ }
255
+ try {
256
+ const response = await server.callTool({ name: input.tool_name, arguments: input.input }, approvalDecision);
257
+ if (isAuthRequired(response)) {
258
+ return response;
259
+ }
260
+ if (isApprovalRequiredResponse(response)) return response;
261
+ if (!isCallToolResponseResult(response)) {
262
+ throw new Error("Tool call returned an unexpected sub-agent response");
263
+ }
264
+ return response;
265
+ } catch (error) {
266
+ this.logger.error("call_tool failed", {
267
+ ...extractErrorLogFields(error),
268
+ mcpServer: input.mcp_server,
269
+ toolName: input.tool_name
270
+ });
271
+ return toolResultResponse({
272
+ text: JSON.stringify({ error: `Tool call failed: ${error instanceof Error ? error.message : "unknown"}` }),
273
+ isError: true
274
+ });
275
+ }
276
+ }
277
+ });
278
+ }
279
+ };
280
+ export {
281
+ DEFERRED_TOOLS_SERVER_ID,
282
+ DeferredTool,
283
+ GET_TOOL_INFO_NAME,
284
+ GET_TOOL_OUTPUT_SCHEMA_NAME,
285
+ LIST_TOOLS_NAME
286
+ };
287
+ //# sourceMappingURL=DeferredTool.mjs.map