@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,201 @@
1
+ // src/core/sandbox/SandboxNatsBridge.ts
2
+ import { wsconnect } from "@nats-io/nats-core";
3
+ import { context, defaultTextMapGetter } from "@opentelemetry/api";
4
+ import { suppressTracing, unsuppressTracing, W3CTraceContextPropagator } from "@opentelemetry/core";
5
+ import { randomUUID } from "crypto";
6
+ import { WebSocket } from "ws";
7
+ import { McpConnectionError } from "../errors.mjs";
8
+ import {
9
+ isAuthRequired,
10
+ isCallToolResponseCreateSubAgent,
11
+ isCallToolResponseResult
12
+ } from "../mcp/IMCPServer.mjs";
13
+ import { extractErrorLogFields } from "../util/errorLogFields.mjs";
14
+ import { withTimeout } from "../util/promiseUtils.mjs";
15
+ Object.assign(global, { WebSocket });
16
+ var NATS_CONNECT_TIMEOUT_MS = 1e4;
17
+ var NATS_CONNECT_RETRIES = 3;
18
+ var NATS_CONNECT_BACKOFF_MS = 250;
19
+ var NATS_DRAIN_TIMEOUT_MS = 5e3;
20
+ var SANDBOX_NATS_SUBJECT_ROOT = "sandbox.bridge";
21
+ var SANDBOX_NATS_MCP_LEAF = "mcp";
22
+ var InvalidMCPUsageError = class extends Error {
23
+ name = "InvalidMCPUsageError";
24
+ };
25
+ function isHttpClientError(error) {
26
+ if (typeof error !== "object" || error === null || !("status" in error)) {
27
+ return false;
28
+ }
29
+ const { status } = error;
30
+ return typeof status === "number" && status >= 400 && status < 500;
31
+ }
32
+ function classifyErrorSource(e) {
33
+ if (e instanceof InvalidMCPUsageError) return "agent";
34
+ if (isHttpClientError(e)) return "agent";
35
+ if (e instanceof McpConnectionError && e.statusCode >= 400 && e.statusCode < 500) return "agent";
36
+ return "gateway";
37
+ }
38
+ var _w3cExtractor = new W3CTraceContextPropagator();
39
+ function extractTraceCarrier(msg) {
40
+ const carrier = {};
41
+ const traceparent = msg.headers?.get("traceparent");
42
+ const tracestate = msg.headers?.get("tracestate");
43
+ if (traceparent) carrier["traceparent"] = traceparent;
44
+ if (tracestate) carrier["tracestate"] = tracestate;
45
+ return carrier;
46
+ }
47
+ var SandboxNatsBridge = class _SandboxNatsBridge {
48
+ subjectPrefix;
49
+ nc;
50
+ toolSets;
51
+ logger;
52
+ closed = false;
53
+ constructor(nc, toolSets, subjectPrefix, logger) {
54
+ this.nc = nc;
55
+ this.toolSets = toolSets;
56
+ this.subjectPrefix = subjectPrefix;
57
+ this.logger = logger;
58
+ }
59
+ static async connect(params) {
60
+ const subjectPrefix = `${SANDBOX_NATS_SUBJECT_ROOT}.${randomUUID()}`;
61
+ const logger = params.logger.child({ module: "SandboxNatsBridge" });
62
+ let lastErr;
63
+ for (let attempt = 1; attempt <= NATS_CONNECT_RETRIES; attempt++) {
64
+ try {
65
+ const nc = await context.with(
66
+ suppressTracing(context.active()),
67
+ () => wsconnect({ servers: [params.url], timeout: NATS_CONNECT_TIMEOUT_MS })
68
+ );
69
+ logger.info(`Connected to sandbox NATS (attempt ${String(attempt)})`, { subjectPrefix });
70
+ const bridge = new _SandboxNatsBridge(nc, params.toolSets, subjectPrefix, logger);
71
+ bridge.subscribe();
72
+ return bridge;
73
+ } catch (e) {
74
+ lastErr = e;
75
+ logger.warn(`Sandbox NATS connect attempt ${String(attempt)} failed`, extractErrorLogFields(e));
76
+ if (attempt < NATS_CONNECT_RETRIES) {
77
+ await new Promise((resolve) => setTimeout(resolve, NATS_CONNECT_BACKOFF_MS));
78
+ }
79
+ }
80
+ }
81
+ throw lastErr instanceof Error ? lastErr : new Error("Sandbox NATS connect failed");
82
+ }
83
+ async close() {
84
+ if (this.closed) return;
85
+ this.closed = true;
86
+ try {
87
+ await withTimeout(this.nc.drain(), NATS_DRAIN_TIMEOUT_MS);
88
+ } catch (e) {
89
+ this.logger.warn("Sandbox NATS drain failed/timed out; forcing close", extractErrorLogFields(e));
90
+ await this.nc.close().catch(() => {
91
+ });
92
+ }
93
+ }
94
+ async whenClosed() {
95
+ await this.nc.closed();
96
+ }
97
+ subscribe() {
98
+ this.nc.subscribe(`${this.subjectPrefix}.${SANDBOX_NATS_MCP_LEAF}`, {
99
+ callback: (err, msg) => {
100
+ this.handle(err, msg, (m) => this.route(m));
101
+ }
102
+ });
103
+ }
104
+ route(msg) {
105
+ const req = this.decode(msg);
106
+ switch (req.op) {
107
+ case "list_tools":
108
+ return this.handleListTools(req);
109
+ case "call_tool":
110
+ return this.handleCallTool(req);
111
+ default:
112
+ throw new InvalidMCPUsageError(`Unknown sandbox bridge operation`);
113
+ }
114
+ }
115
+ handle(err, msg, handler) {
116
+ if (err) {
117
+ this.logger.error("Sandbox NATS subscription error", extractErrorLogFields(err));
118
+ return;
119
+ }
120
+ if (!msg.reply) {
121
+ this.logger.warn(`Sandbox NATS request on '${msg.subject}' has no reply subject; dropping`);
122
+ return;
123
+ }
124
+ const ctx = _w3cExtractor.extract(
125
+ unsuppressTracing(context.active()),
126
+ extractTraceCarrier(msg),
127
+ defaultTextMapGetter
128
+ );
129
+ context.with(ctx, () => void this.dispatch(msg, handler));
130
+ }
131
+ async dispatch(msg, handler) {
132
+ if (this.closed) {
133
+ this.logger.warn(`Sandbox NATS bridge is closed; rejecting request on '${msg.subject}'`);
134
+ try {
135
+ msg.respond(this.encode({ ok: false, error: "Sandbox NATS bridge is closed", source: "bridge" }));
136
+ } catch (e) {
137
+ this.logger.warn(`Failed to send bridge-closed reply on '${msg.subject}'`, extractErrorLogFields(e));
138
+ }
139
+ return;
140
+ }
141
+ let reply;
142
+ try {
143
+ reply = { ok: true, result: await handler(msg) };
144
+ } catch (e) {
145
+ const source = classifyErrorSource(e);
146
+ const errorMessage = e instanceof Error ? e.message : "Unknown sandbox bridge error";
147
+ this.logger.error(
148
+ `Sandbox NATS dispatch failed on '${msg.subject}' (source=${source})`,
149
+ extractErrorLogFields(e)
150
+ );
151
+ reply = { ok: false, error: errorMessage, source };
152
+ }
153
+ try {
154
+ msg.respond(this.encode(reply));
155
+ } catch (e) {
156
+ this.logger.error("Failed to publish sandbox NATS reply", extractErrorLogFields(e));
157
+ }
158
+ }
159
+ encode(reply) {
160
+ return new TextEncoder().encode(JSON.stringify(reply));
161
+ }
162
+ decode(msg) {
163
+ return JSON.parse(new TextDecoder().decode(msg.data));
164
+ }
165
+ getToolSet(serverName) {
166
+ const server = this.toolSets.get(serverName);
167
+ if (!server) {
168
+ throw new InvalidMCPUsageError(`MCP server '${serverName}' is not available for this agent`);
169
+ }
170
+ return server;
171
+ }
172
+ async handleListTools(req) {
173
+ const { server } = req;
174
+ const mcp = this.getToolSet(server);
175
+ const response = await mcp.listTools();
176
+ if (isAuthRequired(response)) {
177
+ throw new InvalidMCPUsageError(`MCP server '${server}' requires OAuth; cannot list tools from sandbox`);
178
+ }
179
+ return response.result;
180
+ }
181
+ async handleCallTool(req) {
182
+ const { server, tool, arguments: args } = req;
183
+ const response = await this.getToolSet(server).callTool({ name: tool, arguments: args ?? {} });
184
+ if (isAuthRequired(response)) {
185
+ throw new InvalidMCPUsageError(`MCP server '${server}' requires OAuth; cannot call tool from sandbox`);
186
+ }
187
+ if (isCallToolResponseCreateSubAgent(response)) {
188
+ throw new InvalidMCPUsageError(`Tool '${server}/${tool}' creates a sub-agent and is not callable from sandbox`);
189
+ }
190
+ if (!isCallToolResponseResult(response)) {
191
+ throw new InvalidMCPUsageError(
192
+ `Tool '${server}/${tool}' requires interactive handling and is not callable from sandbox`
193
+ );
194
+ }
195
+ return response.result;
196
+ }
197
+ };
198
+ export {
199
+ SandboxNatsBridge
200
+ };
201
+ //# sourceMappingURL=SandboxNatsBridge.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/sandbox/SandboxNatsBridge.ts"],"sourcesContent":["import { wsconnect, type Msg, type NatsConnection } from '@nats-io/nats-core';\nimport { context, defaultTextMapGetter } from '@opentelemetry/api';\nimport { suppressTracing, unsuppressTracing, W3CTraceContextPropagator } from '@opentelemetry/core';\nimport { randomUUID } from 'node:crypto';\nimport type { Logger } from 'winston';\nimport { WebSocket } from 'ws';\nimport { McpConnectionError } from '../errors';\nimport {\n isAuthRequired,\n isCallToolResponseCreateSubAgent,\n isCallToolResponseResult,\n type CallToolResolvedResponse,\n type IToolSet,\n type ListToolsResolvedResponse,\n} from '../mcp/IMCPServer';\nimport { extractErrorLogFields } from '../util/errorLogFields';\nimport { withTimeout } from '../util/promiseUtils';\n\n// `wsconnect` from @nats-io/nats-core relies on a global WebSocket constructor; in Node we\n// provide it from `ws`. Same pattern as `src/services/NatsService.ts`.\nObject.assign(global, { WebSocket });\n\nconst NATS_CONNECT_TIMEOUT_MS = 10_000;\nconst NATS_CONNECT_RETRIES = 3;\nconst NATS_CONNECT_BACKOFF_MS = 250;\n// Bound on the graceful drain at teardown; on timeout we fall back to nc.close()\nconst NATS_DRAIN_TIMEOUT_MS = 5_000;\n\nconst SANDBOX_NATS_SUBJECT_ROOT = 'sandbox.bridge';\n// Single request/reply subject leaf; the operation is carried in the payload's `op` field so the\n// bridge maintains one subscription instead of one per operation.\nconst SANDBOX_NATS_MCP_LEAF = 'mcp';\n\ntype BridgeRequest =\n | { op: 'list_tools'; server: string }\n | { op: 'call_tool'; server: string; tool: string; arguments?: Record<string, unknown> };\n\n// Attributes an application-level failure so the sandbox client can tell who is at fault:\n// 'agent' (bad generated code: wrong server/tool/args or an unsupported path), 'gateway' (our\n// handler failed), or 'bridge' (a NATS bridge lifecycle condition, e.g. the bridge was closed).\n// Pure transport failures never produce an envelope, so they're inferred client-side instead.\ntype BridgeErrorSource = 'gateway' | 'agent' | 'bridge';\n\n// Envelope returned on `msg.reply`. NATS itself always succeeds; the receiver branches on `ok`.\ntype BridgeReply<T> = { ok: true; result: T } | { ok: false; error: string; source: BridgeErrorSource };\n\n// Caller-caused failure: retrying won't help, so it's attributed to the agent's code, not us.\nclass InvalidMCPUsageError extends Error {\n override readonly name = 'InvalidMCPUsageError';\n}\n\nfunction isHttpClientError(error: unknown): error is { status: number } {\n if (typeof error !== 'object' || error === null || !('status' in error)) {\n return false;\n }\n const { status } = error;\n return typeof status === 'number' && status >= 400 && status < 500;\n}\n\n// An InvalidMCPUsageError, a 4xx HTTP-style exception, or a 4xx-hinted McpConnectionError (e.g. a\n// disallowed/unknown tool surfaced by an ToolSet) is caller-caused -> 'agent'; anything else is\n// our bug -> 'gateway'.\nfunction classifyErrorSource(e: unknown): BridgeErrorSource {\n if (e instanceof InvalidMCPUsageError) return 'agent';\n if (isHttpClientError(e)) return 'agent';\n // ...remote servers with a 4xx McpConnectionError (has `statusCode`, not `status`). Same meaning.\n if (e instanceof McpConnectionError && e.statusCode >= 400 && e.statusCode < 500) return 'agent';\n return 'gateway';\n}\n\n// Direct W3C extractor, NOT the global `propagation` API. The gateway-wide propagator\n// (SelectivePropagator in src/tracing.ts) refuses to restore traceparent unless the\n// internal-secret headers are present — a deliberate guard against external requests\n// forging trace parents. The NATS bridge is intra-process trusted (sender + receiver\n// share the same Node process and span store), so we bypass that gate here and\n// always honor the trace context the sandbox echoes back.\nconst _w3cExtractor = new W3CTraceContextPropagator();\n\nfunction extractTraceCarrier(msg: Msg): Record<string, string> {\n const carrier: Record<string, string> = {};\n const traceparent = msg.headers?.get('traceparent');\n const tracestate = msg.headers?.get('tracestate');\n if (traceparent) carrier['traceparent'] = traceparent;\n if (tracestate) carrier['tracestate'] = tracestate;\n return carrier;\n}\n\n/**\n * Per-sandbox NATS subscriber. Bridges sandbox-originated MCP tool calls (sent over wss to the\n * sandbox's local nats-server) into the gateway pod's `IToolSet` registry for this agent.\n * The pod that holds the preview URL is the only NATS subscriber, which gives sandbox→gateway\n * traffic pod-affinity for free.\n */\nexport class SandboxNatsBridge {\n readonly subjectPrefix: string;\n\n private readonly nc: NatsConnection;\n private readonly toolSets: Map<string, IToolSet>;\n private readonly logger: Logger;\n private closed = false;\n\n private constructor(nc: NatsConnection, toolSets: Map<string, IToolSet>, subjectPrefix: string, logger: Logger) {\n this.nc = nc;\n this.toolSets = toolSets;\n this.subjectPrefix = subjectPrefix;\n this.logger = logger;\n }\n\n static async connect(params: {\n url: string;\n toolSets: Map<string, IToolSet>;\n logger: Logger;\n }): Promise<SandboxNatsBridge> {\n const subjectPrefix = `${SANDBOX_NATS_SUBJECT_ROOT}.${randomUUID()}`;\n const logger = params.logger.child({ module: 'SandboxNatsBridge' });\n let lastErr: unknown;\n for (let attempt = 1; attempt <= NATS_CONNECT_RETRIES; attempt++) {\n try {\n const nc = await context.with(suppressTracing(context.active()), () =>\n wsconnect({ servers: [params.url], timeout: NATS_CONNECT_TIMEOUT_MS }),\n );\n logger.info(`Connected to sandbox NATS (attempt ${String(attempt)})`, { subjectPrefix });\n const bridge = new SandboxNatsBridge(nc, params.toolSets, subjectPrefix, logger);\n bridge.subscribe();\n return bridge;\n } catch (e) {\n lastErr = e;\n logger.warn(`Sandbox NATS connect attempt ${String(attempt)} failed`, extractErrorLogFields(e));\n if (attempt < NATS_CONNECT_RETRIES) {\n await new Promise(resolve => setTimeout(resolve, NATS_CONNECT_BACKOFF_MS));\n }\n }\n }\n throw lastErr instanceof Error ? lastErr : new Error('Sandbox NATS connect failed');\n }\n\n async close(): Promise<void> {\n if (this.closed) return;\n this.closed = true;\n try {\n // drain() resolves once pending replies are flushed and the connection closes.\n await withTimeout(this.nc.drain(), NATS_DRAIN_TIMEOUT_MS);\n } catch (e) {\n // drain rejected or timed out, nc.close() terminates all pending requests and subscriptions on the connection.\n this.logger.warn('Sandbox NATS drain failed/timed out; forcing close', extractErrorLogFields(e));\n await this.nc.close().catch(() => {\n /* no-op */\n });\n }\n }\n\n async whenClosed(): Promise<void> {\n await this.nc.closed();\n }\n\n private subscribe(): void {\n this.nc.subscribe(`${this.subjectPrefix}.${SANDBOX_NATS_MCP_LEAF}`, {\n callback: (err, msg) => {\n this.handle(err, msg, m => this.route(m));\n },\n });\n }\n\n private route(msg: Msg): Promise<unknown> {\n const req = this.decode(msg);\n switch (req.op) {\n case 'list_tools':\n return this.handleListTools(req);\n case 'call_tool':\n return this.handleCallTool(req);\n default:\n throw new InvalidMCPUsageError(`Unknown sandbox bridge operation`);\n }\n }\n\n private handle(err: Error | null, msg: Msg, handler: (msg: Msg) => Promise<unknown>): void {\n if (err) {\n this.logger.error('Sandbox NATS subscription error', extractErrorLogFields(err));\n return;\n }\n if (!msg.reply) {\n this.logger.warn(`Sandbox NATS request on '${msg.subject}' has no reply subject; dropping`);\n return;\n }\n\n // Resume the originating Sandbox: exec span from the per-request traceparent header so\n // downstream MCP spans nest correctly (falls through to the current context if absent).\n // unsuppressTracing is required: connect() runs under suppressTracing (to drop the\n // WS-upgrade span) and nats-core's receive loop reuses that suppressed context, which would\n // otherwise make propagation.inject no-op and leak a stale traceparent.\n const ctx = _w3cExtractor.extract(\n unsuppressTracing(context.active()),\n extractTraceCarrier(msg),\n defaultTextMapGetter,\n );\n context.with(ctx, () => void this.dispatch(msg, handler));\n }\n\n private async dispatch(msg: Msg, handler: (msg: Msg) => Promise<unknown>): Promise<void> {\n if (this.closed) {\n this.logger.warn(`Sandbox NATS bridge is closed; rejecting request on '${msg.subject}'`);\n try {\n msg.respond(this.encode({ ok: false, error: 'Sandbox NATS bridge is closed', source: 'bridge' }));\n } catch (e) {\n this.logger.warn(`Failed to send bridge-closed reply on '${msg.subject}'`, extractErrorLogFields(e));\n }\n return;\n }\n let reply: BridgeReply<unknown>;\n try {\n reply = { ok: true, result: await handler(msg) };\n } catch (e) {\n const source = classifyErrorSource(e);\n const errorMessage = e instanceof Error ? e.message : 'Unknown sandbox bridge error';\n this.logger.error(\n `Sandbox NATS dispatch failed on '${msg.subject}' (source=${source})`,\n extractErrorLogFields(e),\n );\n reply = { ok: false, error: errorMessage, source };\n }\n try {\n msg.respond(this.encode(reply));\n } catch (e) {\n this.logger.error('Failed to publish sandbox NATS reply', extractErrorLogFields(e));\n }\n }\n\n private encode(reply: BridgeReply<unknown>): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(reply));\n }\n\n private decode(msg: Msg): BridgeRequest {\n return JSON.parse(new TextDecoder().decode(msg.data)) as BridgeRequest;\n }\n\n private getToolSet(serverName: string): IToolSet {\n const server = this.toolSets.get(serverName);\n if (!server) {\n throw new InvalidMCPUsageError(`MCP server '${serverName}' is not available for this agent`);\n }\n return server;\n }\n\n private async handleListTools(req: { server: string }): Promise<ListToolsResolvedResponse['result']> {\n const { server } = req;\n const mcp = this.getToolSet(server);\n const response = await mcp.listTools();\n if (isAuthRequired(response)) {\n throw new InvalidMCPUsageError(`MCP server '${server}' requires OAuth; cannot list tools from sandbox`);\n }\n return response.result;\n }\n\n private async handleCallTool(req: {\n server: string;\n tool: string;\n arguments?: Record<string, unknown> | undefined;\n }): Promise<CallToolResolvedResponse['result']> {\n const { server, tool, arguments: args } = req;\n const response = await this.getToolSet(server).callTool({ name: tool, arguments: args ?? {} });\n if (isAuthRequired(response)) {\n throw new InvalidMCPUsageError(`MCP server '${server}' requires OAuth; cannot call tool from sandbox`);\n }\n if (isCallToolResponseCreateSubAgent(response)) {\n throw new InvalidMCPUsageError(`Tool '${server}/${tool}' creates a sub-agent and is not callable from sandbox`);\n }\n if (!isCallToolResponseResult(response)) {\n // Approval / client-side-tool paths are intentionally out of scope currently.\n throw new InvalidMCPUsageError(\n `Tool '${server}/${tool}' requires interactive handling and is not callable from sandbox`,\n );\n }\n return response.result;\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,10 @@
1
+ /** Stable directory inside the sandbox for user file uploads (mkdir during sandbox init). */
2
+ export declare const SANDBOX_FILE_UPLOADS_DIR = "/tmp/uploads";
3
+ /** Default port of the pod-local NATS WebSocket broker used by the sandbox→gateway MCP bridge. */
4
+ export declare const DEFAULT_SANDBOX_NATS_WS_PORT = 4444;
5
+ /**
6
+ * Default lifetime of a Daytona signed preview URL for the NATS bridge.
7
+ * Matches the gateway's default AGENT_RESPONSE_MAX_EXECUTION_TIME_MS (1 hour).
8
+ */
9
+ export declare const DEFAULT_PREVIEW_URL_EXPIRY_SECONDS = 3600;
10
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/core/sandbox/constants.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AAEvD,kGAAkG;AAClG,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAEjD;;;GAGG;AACH,eAAO,MAAM,kCAAkC,OAAO,CAAC"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/core/sandbox/constants.ts
21
+ var constants_exports = {};
22
+ __export(constants_exports, {
23
+ DEFAULT_PREVIEW_URL_EXPIRY_SECONDS: () => DEFAULT_PREVIEW_URL_EXPIRY_SECONDS,
24
+ DEFAULT_SANDBOX_NATS_WS_PORT: () => DEFAULT_SANDBOX_NATS_WS_PORT,
25
+ SANDBOX_FILE_UPLOADS_DIR: () => SANDBOX_FILE_UPLOADS_DIR
26
+ });
27
+ module.exports = __toCommonJS(constants_exports);
28
+ var SANDBOX_FILE_UPLOADS_DIR = "/tmp/uploads";
29
+ var DEFAULT_SANDBOX_NATS_WS_PORT = 4444;
30
+ var DEFAULT_PREVIEW_URL_EXPIRY_SECONDS = 3600;
31
+ // Annotate the CommonJS export names for ESM import in node:
32
+ 0 && (module.exports = {
33
+ DEFAULT_PREVIEW_URL_EXPIRY_SECONDS,
34
+ DEFAULT_SANDBOX_NATS_WS_PORT,
35
+ SANDBOX_FILE_UPLOADS_DIR
36
+ });
37
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/sandbox/constants.ts"],"sourcesContent":["/** Stable directory inside the sandbox for user file uploads (mkdir during sandbox init). */\nexport const SANDBOX_FILE_UPLOADS_DIR = '/tmp/uploads';\n\n/** Default port of the pod-local NATS WebSocket broker used by the sandbox→gateway MCP bridge. */\nexport const DEFAULT_SANDBOX_NATS_WS_PORT = 4444;\n\n/**\n * Default lifetime of a Daytona signed preview URL for the NATS bridge.\n * Matches the gateway's default AGENT_RESPONSE_MAX_EXECUTION_TIME_MS (1 hour).\n */\nexport const DEFAULT_PREVIEW_URL_EXPIRY_SECONDS = 3600;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACO,IAAM,2BAA2B;AAGjC,IAAM,+BAA+B;AAMrC,IAAM,qCAAqC;","names":[]}
@@ -0,0 +1,10 @@
1
+ // src/core/sandbox/constants.ts
2
+ var SANDBOX_FILE_UPLOADS_DIR = "/tmp/uploads";
3
+ var DEFAULT_SANDBOX_NATS_WS_PORT = 4444;
4
+ var DEFAULT_PREVIEW_URL_EXPIRY_SECONDS = 3600;
5
+ export {
6
+ DEFAULT_PREVIEW_URL_EXPIRY_SECONDS,
7
+ DEFAULT_SANDBOX_NATS_WS_PORT,
8
+ SANDBOX_FILE_UPLOADS_DIR
9
+ };
10
+ //# sourceMappingURL=constants.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/sandbox/constants.ts"],"sourcesContent":["/** Stable directory inside the sandbox for user file uploads (mkdir during sandbox init). */\nexport const SANDBOX_FILE_UPLOADS_DIR = '/tmp/uploads';\n\n/** Default port of the pod-local NATS WebSocket broker used by the sandbox→gateway MCP bridge. */\nexport const DEFAULT_SANDBOX_NATS_WS_PORT = 4444;\n\n/**\n * Default lifetime of a Daytona signed preview URL for the NATS bridge.\n * Matches the gateway's default AGENT_RESPONSE_MAX_EXECUTION_TIME_MS (1 hour).\n */\nexport const DEFAULT_PREVIEW_URL_EXPIRY_SECONDS = 3600;\n"],"mappings":";AACO,IAAM,2BAA2B;AAGjC,IAAM,+BAA+B;AAMrC,IAAM,qCAAqC;","names":[]}
@@ -0,0 +1,80 @@
1
+ import { Daytona } from '@daytona/sdk';
2
+ import type { Logger } from 'winston';
3
+ import type { ExecResult, SandboxBuild, SandboxExecParams, SandboxProvider } from './Provider';
4
+ export interface DaytonaSandboxProviderOptions {
5
+ /** Caller-owned Daytona SDK client (credentials / lifetime). */
6
+ client: Daytona;
7
+ tenantName: string;
8
+ /** Release-owned sandbox image reference; built into a Daytona snapshot and cloned per sandbox. */
9
+ sandboxImage: string;
10
+ /**
11
+ * Daytona snapshot name to clone sandboxes from. When omitted it is derived from the image
12
+ * digest. Callers that create sandboxes pass the persisted build_ref so cloning targets the
13
+ * snapshot that was actually built, not a speculative name derived from the current image.
14
+ */
15
+ buildRef?: string | undefined;
16
+ timeoutMs: number;
17
+ autoStopIntervalInMinutes: number;
18
+ autoArchiveIntervalInMinutes: number;
19
+ autoDeleteIntervalInMinutes: number;
20
+ fileMaxBytesForDownload: number;
21
+ /** Defaults to the built-in sandbox NATS WebSocket port (4444). */
22
+ natsBridgePort?: number;
23
+ /** Defaults to 1 hour (same as the gateway's max agent execution time). */
24
+ previewUrlExpirySeconds?: number;
25
+ logger: Logger;
26
+ }
27
+ export declare class DaytonaSandboxProvider implements SandboxProvider {
28
+ private readonly tenantName;
29
+ /** Release-owned sandbox image reference; built into a Daytona snapshot and cloned per sandbox. */
30
+ private readonly imageUri;
31
+ /** Daytona snapshot name sandboxes are cloned from; the persisted build_ref, or derived from the image digest. */
32
+ private readonly buildRef;
33
+ private readonly timeoutMs;
34
+ private readonly autoStopIntervalInMinutes;
35
+ private readonly autoArchiveIntervalInMinutes;
36
+ private readonly autoDeleteIntervalInMinutes;
37
+ private readonly fileMaxBytesForDownload;
38
+ private readonly natsBridgePort;
39
+ private readonly previewUrlExpirySeconds;
40
+ private readonly logger;
41
+ private readonly daytona;
42
+ private static readonly cachedSandboxes;
43
+ private static readonly inFlightRecoveries;
44
+ constructor(options: DaytonaSandboxProviderOptions);
45
+ private getOrCreateSandbox;
46
+ private static recoverSandboxIfStopped;
47
+ private executeWithSandboxRecovery;
48
+ private restoreExistingSandbox;
49
+ createSandbox(): Promise<{
50
+ sandboxId: string;
51
+ }>;
52
+ /** Resolves undefined when no snapshot carries that name; auth/other failures throw. */
53
+ private getSnapshot;
54
+ /**
55
+ * Drops a build stuck in a terminal-failure state so a fresh create can reuse its
56
+ * deterministic name. A concurrent replica may have deleted it already (404) — that
57
+ * is fine and treated as success.
58
+ */
59
+ private deleteFailedBuild;
60
+ private toBuild;
61
+ buildImage(): Promise<SandboxBuild>;
62
+ getImageBuildStatus(): Promise<SandboxBuild>;
63
+ exec(params: SandboxExecParams): Promise<ExecResult>;
64
+ private getFileInfo;
65
+ downloadFile(params: {
66
+ sandboxId: string;
67
+ path: string;
68
+ }): Promise<Buffer>;
69
+ uploadFile(params: {
70
+ sandboxId: string;
71
+ remotePath: string;
72
+ content: Buffer;
73
+ }): Promise<void>;
74
+ private getPreviewUrl;
75
+ getNatsBridgeUrl(sandboxId: string): Promise<string>;
76
+ getAdditionalInstructions(): string | undefined;
77
+ getToolResultDumpDir(): string;
78
+ getGitCredentialsPath(): string;
79
+ }
80
+ //# sourceMappingURL=DaytonaProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DaytonaProvider.d.ts","sourceRoot":"","sources":["../../../../src/core/sandbox/provider/DaytonaProvider.ts"],"names":[],"mappings":"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"}