@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,1065 @@
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/runtime/AgentThread.ts
21
+ var AgentThread_exports = {};
22
+ __export(AgentThread_exports, {
23
+ AgentThread: () => AgentThread
24
+ });
25
+ module.exports = __toCommonJS(AgentThread_exports);
26
+ var import_DynamicSubAgents = require("../capabilities/builtins/DynamicSubAgents.js");
27
+ var import_errors = require("../errors.js");
28
+ var import_schema = require("../events/schema.js");
29
+ var import_InstructionBuilder = require("../InstructionBuilder.js");
30
+ var import_LLMTypes = require("../llm/LLMTypes.js");
31
+ var import_responseFormat = require("../llm/responseFormat.js");
32
+ var import_toOpenAIChatMessage = require("../llm/toOpenAIChatMessage.js");
33
+ var import_usage = require("../llm/usage.js");
34
+ var import_convertMCPServers = require("../mcp/convertMCPServers.js");
35
+ var import_executeToolCalls = require("../mcp/executeToolCalls.js");
36
+ var import_AgentThread = require("./AgentThread.types.js");
37
+ var import_contextUsage = require("./contextUsage.js");
38
+ var import_contextUtils = require("./contextUtils.js");
39
+ var import_DeferredTool = require("./DeferredTool.js");
40
+ var import_metrics = require("./metrics.js");
41
+ var import_OpenToolCallCloser = require("./OpenToolCallCloser.js");
42
+ var import_UserInputMessage = require("./UserInputMessage.js");
43
+ var DEFAULT_ITERATION_LIMIT = 25;
44
+ var VALID_TRANSITIONS = {
45
+ "llm-call-required": ["tool-response-required", "user-input-required"],
46
+ "tool-response-required": ["llm-call-required"],
47
+ // user-input-required transitions to:
48
+ // tool-response-required — after approval decisions are appended (approval flow)
49
+ // llm-call-required — after client-side tool responses resolve tool calls directly
50
+ "user-input-required": ["tool-response-required", "llm-call-required"]
51
+ };
52
+ function assertValidTransition(from, to) {
53
+ if (!VALID_TRANSITIONS[from].includes(to)) {
54
+ throw new Error(`Invalid state transition: ${from} \u2192 ${to}`);
55
+ }
56
+ }
57
+ function deriveAgentThreadState(context) {
58
+ const openToolCallIds = getOpenToolCallIds(context);
59
+ if (openToolCallIds.size === 0) return "llm-call-required";
60
+ const assistant = lastAssistantInContext(context);
61
+ const decisions = (0, import_contextUtils.scanApprovalDecisions)(context);
62
+ const hasPendingApproval = assistant?.tool_calls?.some(
63
+ (tc) => openToolCallIds.has(tc.id) && tc.tool_info.is_approval_required === true && !decisions.has(tc.id)
64
+ );
65
+ const hasPendingClientSideTool = assistant?.tool_calls?.some(
66
+ (tc) => openToolCallIds.has(tc.id) && tc.tool_info.is_client_side === true
67
+ );
68
+ return hasPendingApproval || hasPendingClientSideTool ? "user-input-required" : "tool-response-required";
69
+ }
70
+ function hasToolCalls(message) {
71
+ return Boolean(message.tool_calls && message.tool_calls.length > 0);
72
+ }
73
+ function getOpenToolCallIds(context) {
74
+ const resolvedToolCallIds = /* @__PURE__ */ new Set();
75
+ const openToolCallIds = /* @__PURE__ */ new Set();
76
+ for (let i = context.length - 1; i >= 0; i--) {
77
+ const msg = context[i];
78
+ if (msg === void 0) continue;
79
+ if (!(0, import_contextUtils.isLLMContextMessage)(msg)) continue;
80
+ if (msg.role === "tool") {
81
+ resolvedToolCallIds.add(msg.tool_call_id);
82
+ continue;
83
+ }
84
+ if (msg.role === "assistant") {
85
+ for (const tc of msg.tool_calls ?? []) openToolCallIds.add(tc.id);
86
+ for (const id of resolvedToolCallIds) openToolCallIds.delete(id);
87
+ break;
88
+ }
89
+ }
90
+ return openToolCallIds;
91
+ }
92
+ function lastAssistantInContext(context) {
93
+ return context.findLast(
94
+ (msg) => (0, import_contextUtils.isLLMContextMessage)(msg) && msg.role === "assistant"
95
+ );
96
+ }
97
+ function getUnclosableOpenToolCallIds(context, openToolCallIds) {
98
+ const blockingOpenToolCallIds = new Set(openToolCallIds);
99
+ for (const id of (0, import_OpenToolCallCloser.getClosableOpenToolCallIds)(context)) {
100
+ blockingOpenToolCallIds.delete(id);
101
+ }
102
+ return blockingOpenToolCallIds;
103
+ }
104
+ function buildMCPInitializeEvent(initInfo, threadId) {
105
+ return {
106
+ type: import_schema.EventType.MCP_INITIALIZE,
107
+ id: (0, import_schema.newEventId)(),
108
+ created_at: (/* @__PURE__ */ new Date()).toISOString(),
109
+ thread_id: threadId,
110
+ mcp_servers: initInfo
111
+ };
112
+ }
113
+ function buildMCPAuthRequiredEvent(authRequirementInfo, threadId) {
114
+ return {
115
+ type: import_AgentThread.InternalEventType.MCP_AUTH_REQUIRED,
116
+ id: (0, import_schema.newEventId)(),
117
+ created_at: (/* @__PURE__ */ new Date()).toISOString(),
118
+ mcp_servers: authRequirementInfo.flatMap((or) => or.servers.map((s) => ({ ...s, thread_ids: [threadId] }))),
119
+ // threadId identifies which thread triggered auth for each server so AgentThreadOrchestrator can merge
120
+ // auth events across parallel sub-agents by server.
121
+ thread_id: null
122
+ };
123
+ }
124
+ function buildSandboxCreatedEvent(info) {
125
+ return {
126
+ type: import_schema.EventType.SANDBOX_CREATED,
127
+ id: (0, import_schema.newEventId)(),
128
+ created_at: (/* @__PURE__ */ new Date()).toISOString(),
129
+ ...info,
130
+ thread_id: null
131
+ };
132
+ }
133
+ function buildModelMessageEvent({
134
+ assistantMessage,
135
+ threadId,
136
+ finishReason,
137
+ usage,
138
+ id
139
+ }) {
140
+ const { role, tool_calls, thinking_blocks, source, ...rest } = assistantMessage;
141
+ void role;
142
+ void thinking_blocks;
143
+ void source;
144
+ const event = {
145
+ ...rest,
146
+ tool_calls: tool_calls?.map(import_contextUtils.toEnrichedToolCall),
147
+ type: import_schema.EventType.MODEL_MESSAGE,
148
+ id,
149
+ created_at: (/* @__PURE__ */ new Date()).toISOString(),
150
+ thread_id: threadId,
151
+ finish_reason: finishReason,
152
+ ...usage && { usage }
153
+ };
154
+ return event;
155
+ }
156
+ function validateUserMessage(message, blockingOpenToolCallIds, index) {
157
+ if ((0, import_UserInputMessage.isEmptyMessageContent)(message.content)) {
158
+ throw new import_errors.InvalidAgentSendInputError(`messages[${String(index)}] user message has empty content`);
159
+ }
160
+ if (blockingOpenToolCallIds.size > 0) {
161
+ throw new import_errors.InvalidAgentSendInputError("user message cannot be sent while approvals or questions are pending");
162
+ }
163
+ }
164
+ function validateToolMessage(message, openToolCallIds, index) {
165
+ if (!openToolCallIds.has(message.tool_call_id)) {
166
+ throw new import_errors.InvalidAgentSendInputError(
167
+ `messages[${String(index)}] no open tool call for tool_call_id '${message.tool_call_id}'`
168
+ );
169
+ }
170
+ }
171
+ function validateApprovalMessage(message, pendingApprovalIds, index) {
172
+ if (!pendingApprovalIds.has(message.tool_call_id)) {
173
+ throw new import_errors.InvalidAgentSendInputError(
174
+ `messages[${String(index)}] no pending approval for tool_call_id '${message.tool_call_id}'`
175
+ );
176
+ }
177
+ }
178
+ function getPendingApprovalToolCalls(context) {
179
+ const openToolCallIds = getOpenToolCallIds(context);
180
+ const decisions = (0, import_contextUtils.scanApprovalDecisions)(context);
181
+ const assistant = lastAssistantInContext(context);
182
+ return (assistant?.tool_calls ?? []).filter(
183
+ (tc) => openToolCallIds.has(tc.id) && tc.tool_info.is_approval_required === true && !decisions.has(tc.id)
184
+ );
185
+ }
186
+ function getPendingClientSideToolCalls(context) {
187
+ const openToolCallIds = getOpenToolCallIds(context);
188
+ const assistant = lastAssistantInContext(context);
189
+ return (assistant?.tool_calls ?? []).filter((tc) => openToolCallIds.has(tc.id) && tc.tool_info.is_client_side === true);
190
+ }
191
+ function validateInputMessageTypesGivenContext(context, messages) {
192
+ const openToolCallIds = getOpenToolCallIds(context);
193
+ const blockingOpenToolCallIds = getUnclosableOpenToolCallIds(context, openToolCallIds);
194
+ const pendingApprovalIds = new Set(getPendingApprovalToolCalls(context).map((tc) => tc.id));
195
+ const pendingClientSideIds = new Set(getPendingClientSideToolCalls(context).map((tc) => tc.id));
196
+ for (let i = 0; i < messages.length; i++) {
197
+ const m = messages[i];
198
+ if (m === void 0) continue;
199
+ if ((0, import_contextUtils.isApprovalDecisionMessage)(m)) {
200
+ validateApprovalMessage(m, pendingApprovalIds, i);
201
+ pendingApprovalIds.delete(m.tool_call_id);
202
+ } else if ((0, import_contextUtils.isInputUserMessage)(m)) {
203
+ validateUserMessage(m, blockingOpenToolCallIds, i);
204
+ } else if ((0, import_contextUtils.isClientSideToolResponseMessage)(m) || (0, import_contextUtils.isLLMToolMessage)(m)) {
205
+ validateToolMessage(m, openToolCallIds, i);
206
+ openToolCallIds.delete(m.tool_call_id);
207
+ blockingOpenToolCallIds.delete(m.tool_call_id);
208
+ pendingClientSideIds.delete(m.tool_call_id);
209
+ } else {
210
+ const _exhaustive = m;
211
+ throw new import_errors.InvalidAgentSendInputError(
212
+ `messages[${String(i)}] has unsupported type: ${JSON.stringify(_exhaustive)}`
213
+ );
214
+ }
215
+ }
216
+ if (pendingApprovalIds.size > 0 || pendingClientSideIds.size > 0) {
217
+ const missing = [...pendingApprovalIds, ...pendingClientSideIds];
218
+ throw new import_errors.InvalidAgentSendInputError(
219
+ `Send batch must resolve all pending tool calls awaiting user input. Missing: ${missing.join(", ")}`
220
+ );
221
+ }
222
+ }
223
+ async function buildModelMessageDeltaEvent({
224
+ chunk,
225
+ threadId,
226
+ toolMapping,
227
+ usage,
228
+ id,
229
+ logger
230
+ }) {
231
+ const choice = chunk.choices[0];
232
+ const delta = choice?.delta;
233
+ const finishReason = choice?.finish_reason;
234
+ if (!delta || Object.keys(delta).length === 0 && !finishReason && !usage) {
235
+ return;
236
+ }
237
+ if (!delta.tool_calls?.length && !delta.content && !delta.reasoning_content && !finishReason && !usage) {
238
+ return;
239
+ }
240
+ const toolCalls = delta.tool_calls ?? [];
241
+ for (const toolCall of toolCalls) {
242
+ if (toolCall.function?.name) {
243
+ const toolInfo = toolMapping.get(toolCall.function.name);
244
+ if (!toolInfo) {
245
+ logger.warn(`LLM called unknown tool: Tool ${toolCall.function.name} not found in tool mapping.`);
246
+ toolCall.tool_info = (0, import_contextUtils.toToolCallInfo)((0, import_contextUtils.makeUnknownToolInfo)(toolCall.function.name));
247
+ continue;
248
+ }
249
+ toolCall.tool_info = (0, import_contextUtils.toToolCallInfo)(
250
+ await toolInfo.toolSet.toolCallInfo(
251
+ { name: toolInfo.originalToolName },
252
+ false
253
+ /* resolveUnderlyingTool */
254
+ )
255
+ );
256
+ }
257
+ }
258
+ const { role, function_call, thinking_blocks, ...deltaWithoutRole } = delta;
259
+ void role;
260
+ void function_call;
261
+ void thinking_blocks;
262
+ return {
263
+ ...deltaWithoutRole,
264
+ type: import_schema.EventType.MODEL_MESSAGE_DELTA,
265
+ id,
266
+ thread_id: threadId,
267
+ ...finishReason && { finish_reason: finishReason },
268
+ ...usage && { usage }
269
+ };
270
+ }
271
+ async function buildContextAssistantMessage(assistantMessage, toolMapping) {
272
+ if (!assistantMessage.tool_calls?.length) {
273
+ const { tool_calls, ...rest } = assistantMessage;
274
+ void tool_calls;
275
+ return rest;
276
+ }
277
+ const enrichedToolCalls = [];
278
+ for (const toolCall of assistantMessage.tool_calls) {
279
+ const toolInfo = toolMapping.get(toolCall.function.name);
280
+ if (!toolInfo) {
281
+ enrichedToolCalls.push({ ...toolCall, tool_info: (0, import_contextUtils.makeUnknownToolInfo)(toolCall.function.name) });
282
+ continue;
283
+ }
284
+ const tool_info = await toolInfo.toolSet.toolCallInfo(
285
+ {
286
+ name: toolInfo.originalToolName,
287
+ arguments: tryParseToolArgs(toolCall.function.arguments)
288
+ },
289
+ // During context persistence, we have the complete message and hence the tool arguments are available.
290
+ // Hence, we resolve the underlying tool to get the tool information.
291
+ true
292
+ );
293
+ enrichedToolCalls.push({ ...toolCall, tool_info });
294
+ }
295
+ return { ...assistantMessage, tool_calls: enrichedToolCalls };
296
+ }
297
+ function isJsonObject(value) {
298
+ return typeof value === "object" && value !== null && !Array.isArray(value);
299
+ }
300
+ function tryParseToolArgs(args) {
301
+ if (!args) return {};
302
+ try {
303
+ const parsed = JSON.parse(args);
304
+ return isJsonObject(parsed) ? parsed : {};
305
+ } catch {
306
+ return {};
307
+ }
308
+ }
309
+ var AgentThread = class {
310
+ threadId;
311
+ parent;
312
+ definition;
313
+ title;
314
+ agentInfo;
315
+ context;
316
+ currentContextUsage;
317
+ preSendContextProcessors;
318
+ preLLMContextProcessors;
319
+ preEphemeralLLMContextProcessors;
320
+ postToolCallContextProcessor;
321
+ instruction;
322
+ toolResponseProcessors;
323
+ instructionBuilders;
324
+ systemToolSets;
325
+ deferredTool;
326
+ convertedTools;
327
+ pendingSandboxCreatedEvents = [];
328
+ sandbox;
329
+ tracing;
330
+ logger;
331
+ metrics = (0, import_metrics.createEmptyAgentThreadMetrics)();
332
+ tfyManagedServerNames = /* @__PURE__ */ new Set();
333
+ contextBusy = false;
334
+ preSendRanThisTurn = false;
335
+ currentState = null;
336
+ preComputedCompletion;
337
+ /** Mirrored capability KV — source for toSnapshot().capability_state. */
338
+ capabilityState = {};
339
+ capabilityStateKeys;
340
+ constructor(input) {
341
+ this.tracing = input.tracing;
342
+ this.logger = input.logger.child({ module: "AgentThread" });
343
+ this.threadId = input.threadId;
344
+ this.definition = input.definition;
345
+ this.context = input.context ? [...input.context] : [];
346
+ this.title = input.title;
347
+ this.parent = input.parent;
348
+ this.currentContextUsage = input.currentContextUsage ?? (0, import_contextUsage.getEmptyCurrentContextUsage)();
349
+ this.agentInfo = input.agentInfo;
350
+ this.preComputedCompletion = input.preComputedCompletion;
351
+ this.sandbox = input.sandbox;
352
+ const capabilities = input.capabilities ?? [];
353
+ this.systemToolSets = capabilities.flatMap((c) => c.systemToolSets ?? []);
354
+ this.preLLMContextProcessors = capabilities.flatMap((c) => c.preLLMProcessors ?? []);
355
+ this.preEphemeralLLMContextProcessors = capabilities.flatMap((c) => c.preLLMEphemeralProcessors ?? []);
356
+ this.postToolCallContextProcessor = capabilities.flatMap((c) => c.postToolCallProcessors ?? []);
357
+ this.toolResponseProcessors = capabilities.flatMap((c) => c.toolResponseProcessors ?? []);
358
+ this.instructionBuilders = capabilities.flatMap((c) => c.instructionBuilders ?? []);
359
+ const capabilityPreSend = capabilities.flatMap((c) => c.preSendProcessors ?? []);
360
+ this.preSendContextProcessors = [new import_OpenToolCallCloser.OpenToolCallCloser(), ...capabilityPreSend];
361
+ assertUniqueStateKeys(capabilities);
362
+ const claimed = claimCapabilityState(capabilities, input.capabilityState, this.logger);
363
+ this.capabilityState = claimed;
364
+ this.capabilityStateKeys = new Set(
365
+ capabilities.map((c) => c.state?.key).filter((k) => typeof k === "string")
366
+ );
367
+ for (const capability of capabilities) {
368
+ if (!capability.state) continue;
369
+ const value = claimed[capability.state.key];
370
+ if (value !== void 0) {
371
+ capability.state.load(value);
372
+ }
373
+ }
374
+ if (this.definition.toolSets?.length) {
375
+ this.deferredTool = new import_DeferredTool.DeferredTool(this.definition.toolSets, {
376
+ tracing: this.tracing,
377
+ logger: input.logger
378
+ });
379
+ }
380
+ if (this.sandbox) {
381
+ this.sandbox.configureCodeMode(this.definition.toolSets ?? []);
382
+ }
383
+ this.instruction = this.buildInstruction(this.definition.instruction);
384
+ }
385
+ buildInstruction(userInstruction) {
386
+ const identity = this.parent ? import_DynamicSubAgents.SUB_AGENT_IDENTITY : import_InstructionBuilder.ROOT_AGENT_IDENTITY;
387
+ const builder = import_InstructionBuilder.InstructionBuilder.createSystemPrompt(identity);
388
+ const capabilities = builder.beginSection("agent-capabilities");
389
+ capabilities.addSection("internal-messages", import_contextUtils.INTERNAL_SYSTEM_PROMPT);
390
+ if (this.sandbox) {
391
+ this.sandbox.buildInstruction(capabilities);
392
+ }
393
+ if (this.deferredTool) {
394
+ this.deferredTool.buildInstruction(capabilities);
395
+ }
396
+ for (const build of this.instructionBuilders) {
397
+ build(capabilities);
398
+ }
399
+ if (!this.parent && userInstruction?.trim()) {
400
+ builder.addSection("user-instructions", userInstruction.trim(), true);
401
+ }
402
+ return builder.build();
403
+ }
404
+ async *send(messages) {
405
+ if (messages.length === 0 && !this.isAwaitingUserInput()) {
406
+ return;
407
+ }
408
+ this.throwIfContextBusy();
409
+ this.contextBusy = true;
410
+ try {
411
+ for await (const event of this.executeContextProcessors("preSend")) {
412
+ yield event;
413
+ }
414
+ this.preSendRanThisTurn = true;
415
+ validateInputMessageTypesGivenContext(this.context, messages);
416
+ const approvals = [];
417
+ const clientSideToolResponses = [];
418
+ const contextMessages = [];
419
+ for (const m of messages) {
420
+ if ((0, import_contextUtils.isApprovalDecisionMessage)(m)) {
421
+ approvals.push(m);
422
+ } else if ((0, import_contextUtils.isClientSideToolResponseMessage)(m)) {
423
+ clientSideToolResponses.push(m);
424
+ } else if ((0, import_contextUtils.isInputUserMessage)(m)) {
425
+ const result = await (0, import_UserInputMessage.processAgentUserInput)(m, this.sandbox);
426
+ contextMessages.push(result.message);
427
+ if (result.sandboxCreated) {
428
+ this.pendingSandboxCreatedEvents.push(buildSandboxCreatedEvent(result.sandboxCreated));
429
+ }
430
+ } else if ((0, import_contextUtils.isLLMToolMessage)(m)) {
431
+ contextMessages.push(m);
432
+ } else {
433
+ const _exhaustive = m;
434
+ throw new import_errors.InvalidAgentSendInputError(`Unsupported send input: ${JSON.stringify(_exhaustive)}`);
435
+ }
436
+ }
437
+ if (approvals.length > 0 || clientSideToolResponses.length > 0) {
438
+ const approvalContext = approvals.map((a) => ({
439
+ type: import_schema.EventType.USER_TOOL_APPROVAL,
440
+ tool_call_id: a.tool_call_id,
441
+ approval: a.approval
442
+ }));
443
+ const toolResponseContext = clientSideToolResponses.map((m) => ({
444
+ role: "tool",
445
+ tool_call_id: m.tool_call_id,
446
+ content: m.content
447
+ }));
448
+ yield* this.appendToContext({
449
+ context: [...approvalContext, ...toolResponseContext],
450
+ output: [],
451
+ currentContextUsage: void 0,
452
+ usage: void 0
453
+ });
454
+ }
455
+ if (contextMessages.length > 0) {
456
+ yield* this.appendToContext({
457
+ context: contextMessages,
458
+ output: [],
459
+ currentContextUsage: void 0,
460
+ usage: void 0
461
+ });
462
+ }
463
+ } finally {
464
+ this.contextBusy = false;
465
+ }
466
+ }
467
+ throwIfContextBusy() {
468
+ if (this.contextBusy) {
469
+ throw new Error(`context is busy for thread ${this.threadId}`);
470
+ }
471
+ }
472
+ deriveState() {
473
+ const next = deriveAgentThreadState(this.context);
474
+ if (this.currentState) {
475
+ assertValidTransition(this.currentState, next);
476
+ }
477
+ this.currentState = next;
478
+ return next;
479
+ }
480
+ *appendToContext(opts) {
481
+ const { context, output, currentContextUsage, usage, completion } = opts;
482
+ const newCurrentContextUsage = currentContextUsage ?? (0, import_contextUsage.mergeCurrentContextUsage)(this.currentContextUsage, (0, import_contextUtils.estimateTokensForContextMessages)(context));
483
+ const event = {
484
+ type: import_AgentThread.InternalEventType.AGENT_CONTEXT_APPEND,
485
+ thread_id: this.threadId,
486
+ context,
487
+ output,
488
+ current_context_usage: newCurrentContextUsage,
489
+ ...completion && { completion }
490
+ };
491
+ if (usage) {
492
+ (0, import_metrics.updateMetricsFromUsage)(this.metrics, usage);
493
+ }
494
+ yield event;
495
+ this.context = this.context.concat(context);
496
+ this.currentContextUsage = newCurrentContextUsage;
497
+ }
498
+ *overwriteContext(payload) {
499
+ const event = {
500
+ thread_id: this.threadId,
501
+ ...payload
502
+ };
503
+ (0, import_metrics.updateMetricsFromUsage)(this.metrics, payload.usage);
504
+ yield event;
505
+ this.context = payload.context;
506
+ this.currentContextUsage = payload.current_context_usage;
507
+ this.metrics.total_summarizations++;
508
+ }
509
+ generateErrorEvent(message, output) {
510
+ return {
511
+ type: import_AgentThread.InternalEventType.AGENT_DONE,
512
+ status: "error",
513
+ thread_id: this.threadId,
514
+ title: this.title,
515
+ error: message,
516
+ parent: this.parent,
517
+ send_to_parent: this.parent ? {
518
+ role: "tool",
519
+ content: message,
520
+ tool_call_id: this.parent.tool_call_id
521
+ } : void 0,
522
+ ...output && { output }
523
+ };
524
+ }
525
+ hasOpenToolCallId(toolCallId) {
526
+ return getOpenToolCallIds(this.context).has(toolCallId);
527
+ }
528
+ // True when this thread is paused waiting on the user to resolve a pending tool
529
+ // approval or a client-side tool response.
530
+ isAwaitingUserInput() {
531
+ return getPendingApprovalToolCalls(this.context).length > 0 || getPendingClientSideToolCalls(this.context).length > 0;
532
+ }
533
+ // Pure validation of an input batch against this thread's current context; throws
534
+ // on an invalid/incomplete batch without mutating the context.
535
+ validateSendInput(messages) {
536
+ validateInputMessageTypesGivenContext(this.context, messages);
537
+ }
538
+ toSnapshot() {
539
+ const capability_state = Object.keys(this.capabilityState).length > 0 ? { ...this.capabilityState } : null;
540
+ return {
541
+ thread_id: this.threadId,
542
+ context: this.context,
543
+ current_context_usage: this.currentContextUsage,
544
+ parent: this.parent ?? null,
545
+ agent_info: this.agentInfo ?? null,
546
+ completion: this.preComputedCompletion ?? null,
547
+ capability_state
548
+ };
549
+ }
550
+ getAgentThreadMetrics() {
551
+ return { ...this.metrics };
552
+ }
553
+ transformToLLMRequest(tools) {
554
+ let messages = [];
555
+ if (this.instruction) {
556
+ messages.push({
557
+ role: "system",
558
+ content: this.instruction
559
+ });
560
+ }
561
+ if (this.definition.messages) {
562
+ for (const msg of this.definition.messages) {
563
+ if ((0, import_contextUtils.isLLMContextMessage)(msg)) {
564
+ messages.push((0, import_toOpenAIChatMessage.toOpenAIChatMessage)(msg));
565
+ }
566
+ }
567
+ }
568
+ const contextMessages = this.context.filter(import_contextUtils.isLLMContextMessage).map((msg) => (0, import_toOpenAIChatMessage.toOpenAIChatMessage)(msg));
569
+ messages.push(...contextMessages);
570
+ for (const processor of this.preEphemeralLLMContextProcessors) {
571
+ messages = processor.processPreLLMEphemeral(messages) ?? messages;
572
+ }
573
+ const requestBody = {
574
+ messages,
575
+ stream: true,
576
+ ...this.definition.responseFormat !== void 0 ? { response_format: (0, import_responseFormat.toOpenAIResponseFormat)(this.definition.responseFormat) } : {}
577
+ };
578
+ if (this.definition.modelParams) {
579
+ Object.assign(requestBody, this.definition.modelParams);
580
+ }
581
+ if (tools.length > 0) {
582
+ requestBody.tools = tools;
583
+ }
584
+ return requestBody;
585
+ }
586
+ computeAssistantMessageUsage(params) {
587
+ const { requestBody, usage, toolMapping } = params;
588
+ const trimmedInstruction = this.definition.instruction?.trim() ?? "";
589
+ const instructionsEstimate = this.parent ? 0 : Math.round((0, import_usage.estimateTokensForString)(trimmedInstruction));
590
+ const skillsEstimate = this.sandbox?.estimateSkillsTokens() ?? 0;
591
+ let tfyManagedToolTokens = 0;
592
+ let userToolTokens = 0;
593
+ if (requestBody.tools) {
594
+ for (const tool of requestBody.tools) {
595
+ const toolTokens = Math.round((0, import_usage.estimateTokensForString)(JSON.stringify(tool)));
596
+ const info = "function" in tool ? toolMapping.get(tool.function.name) : void 0;
597
+ if (info && this.tfyManagedServerNames.has(info.toolSet.name)) {
598
+ tfyManagedToolTokens += toolTokens;
599
+ } else {
600
+ userToolTokens += toolTokens;
601
+ }
602
+ }
603
+ }
604
+ const totalInstructionTokens = Math.round((0, import_usage.estimateTokensForString)(this.instruction ?? ""));
605
+ const harnessInstructionTokens = Math.max(0, totalInstructionTokens - instructionsEstimate - skillsEstimate);
606
+ const harnessEstimate = harnessInstructionTokens + tfyManagedToolTokens;
607
+ const estimatedComponentsTotal = harnessEstimate + skillsEstimate + instructionsEstimate + userToolTokens;
608
+ const messagesEstimate = Math.max(0, usage.input_tokens - estimatedComponentsTotal);
609
+ return {
610
+ input_tokens: usage.input_tokens,
611
+ output_tokens: usage.output_tokens,
612
+ cache_read_tokens: usage.cache_read_tokens,
613
+ cache_write_tokens: usage.cache_write_tokens,
614
+ input_tokens_breakdown: {
615
+ harness: harnessEstimate,
616
+ skills: skillsEstimate,
617
+ instructions: instructionsEstimate,
618
+ tool_definitions: userToolTokens,
619
+ messages: messagesEstimate
620
+ }
621
+ };
622
+ }
623
+ async *executeContextProcessors(hook) {
624
+ let processors;
625
+ switch (hook) {
626
+ case "preSend":
627
+ processors = this.preSendContextProcessors.map((p) => p.processPreSend.bind(p));
628
+ break;
629
+ case "preLLM":
630
+ processors = this.preLLMContextProcessors.map((p) => p.processPreLLM.bind(p));
631
+ break;
632
+ case "postToolCall":
633
+ processors = this.postToolCallContextProcessor.map((p) => p.processPostToolCall.bind(p));
634
+ break;
635
+ default:
636
+ throw new Error(`Unknown hook: ${String(hook)}`);
637
+ }
638
+ const execution = {
639
+ threadId: this.threadId,
640
+ sandbox: this.sandbox,
641
+ currentContextUsage: this.currentContextUsage,
642
+ context: this.context
643
+ };
644
+ for (const processor of processors) {
645
+ for await (const response of processor(execution)) {
646
+ switch (response.type) {
647
+ case import_AgentThread.InternalEventType.AGENT_CONTEXT_APPEND:
648
+ yield* this.appendToContext({
649
+ context: response.context,
650
+ output: response.output,
651
+ currentContextUsage: response.current_context_usage ?? this.currentContextUsage,
652
+ usage: void 0
653
+ });
654
+ break;
655
+ case import_schema.EventType.AGENT_CONTEXT_OVERWRITE:
656
+ yield* this.overwriteContext(response);
657
+ break;
658
+ case import_AgentThread.InternalEventType.PASSTHROUGH:
659
+ yield response;
660
+ break;
661
+ case import_AgentThread.InternalEventType.CAPABILITY_STATE:
662
+ if (!this.capabilityStateKeys.has(response.key)) {
663
+ throw new import_errors.AgentHarnessError(
664
+ "capability_state_error",
665
+ `CAPABILITY_STATE key '${response.key}' is not declared by any capability on thread '${this.threadId}'`
666
+ );
667
+ }
668
+ yield {
669
+ type: import_AgentThread.InternalEventType.CAPABILITY_STATE,
670
+ thread_id: this.threadId,
671
+ key: response.key,
672
+ state: response.state
673
+ };
674
+ this.capabilityState[response.key] = response.state;
675
+ break;
676
+ default: {
677
+ const _exhaustive = response;
678
+ return _exhaustive;
679
+ }
680
+ }
681
+ }
682
+ }
683
+ }
684
+ async init() {
685
+ if (this.convertedTools) {
686
+ return { initializationInfo: [], authRequirementInfo: [] };
687
+ }
688
+ return this.initTools();
689
+ }
690
+ async initTools() {
691
+ const tfyManagedServers = [...this.systemToolSets];
692
+ if (this.sandbox) {
693
+ tfyManagedServers.push(this.sandbox);
694
+ }
695
+ if (this.deferredTool) {
696
+ tfyManagedServers.push(this.deferredTool);
697
+ }
698
+ const userServers = [...this.definition.toolSets ?? []];
699
+ const { convertedTools, initializationInfo, authRequirementInfo } = await (0, import_convertMCPServers.convertMCPServersToTools)({
700
+ tfyManagedServers,
701
+ userServers
702
+ });
703
+ this.convertedTools = convertedTools;
704
+ this.tfyManagedServerNames = new Set(tfyManagedServers.map((s) => s.name));
705
+ return { initializationInfo, authRequirementInfo };
706
+ }
707
+ getConvertedTools() {
708
+ if (!this.convertedTools) {
709
+ throw new Error("unreachable");
710
+ }
711
+ return this.convertedTools;
712
+ }
713
+ async *stepLLMCall(tools, toolMapping, signal) {
714
+ const modelMessageEventId = (0, import_schema.newEventId)();
715
+ if (signal?.aborted) {
716
+ return { outcome: "exit", modelMessageEventId };
717
+ }
718
+ for await (const event of this.executeContextProcessors("preLLM")) {
719
+ yield event;
720
+ }
721
+ const requestBody = this.transformToLLMRequest(tools);
722
+ const llmStream = this.definition.modelClient.create(requestBody);
723
+ yield {
724
+ type: import_schema.EventType.MODEL_MESSAGE,
725
+ thread_id: this.threadId,
726
+ created_at: (/* @__PURE__ */ new Date()).toISOString(),
727
+ id: modelMessageEventId
728
+ };
729
+ let firstDeltaTimestamped = false;
730
+ let result = await llmStream.next();
731
+ let modelMessageUsage = void 0;
732
+ while (!result.done) {
733
+ const chunk = result.value;
734
+ if (chunk.usage) {
735
+ modelMessageUsage = this.computeAssistantMessageUsage({
736
+ requestBody,
737
+ usage: chunk.usage,
738
+ toolMapping
739
+ });
740
+ }
741
+ const event = await buildModelMessageDeltaEvent({
742
+ chunk,
743
+ threadId: this.threadId,
744
+ toolMapping,
745
+ usage: modelMessageUsage,
746
+ id: modelMessageEventId,
747
+ logger: this.logger
748
+ });
749
+ if (event) {
750
+ if (!firstDeltaTimestamped) {
751
+ firstDeltaTimestamped = true;
752
+ yield { ...event, created_at: (/* @__PURE__ */ new Date()).toISOString() };
753
+ } else {
754
+ yield event;
755
+ }
756
+ }
757
+ result = await llmStream.next();
758
+ }
759
+ if (signal?.aborted) {
760
+ return { outcome: "exit", modelMessageEventId };
761
+ }
762
+ modelMessageUsage ??= this.computeAssistantMessageUsage({
763
+ requestBody,
764
+ usage: result.value.usage,
765
+ toolMapping
766
+ });
767
+ const assistantMessage = await buildContextAssistantMessage(
768
+ result.value.output,
769
+ toolMapping
770
+ );
771
+ const finishReason = result.value.finish_reason;
772
+ const agentAssistantMessage = buildModelMessageEvent({
773
+ assistantMessage,
774
+ threadId: this.threadId,
775
+ finishReason,
776
+ usage: modelMessageUsage,
777
+ id: modelMessageEventId
778
+ });
779
+ let completion;
780
+ if (this.parent) {
781
+ if (finishReason === "length") {
782
+ const errorMessage = (0, import_contextUtils.assistantMessageContentToStringForSubAgent)(
783
+ assistantMessage.content,
784
+ "max_tokens breached"
785
+ );
786
+ completion = {
787
+ type: "error",
788
+ output: agentAssistantMessage,
789
+ error_message: errorMessage,
790
+ send_to_parent: { role: "tool", tool_call_id: this.parent.tool_call_id, content: errorMessage }
791
+ };
792
+ } else if (!hasToolCalls(assistantMessage)) {
793
+ const content = (0, import_contextUtils.assistantMessageContentToStringForSubAgent)(assistantMessage.content);
794
+ completion = {
795
+ type: "done",
796
+ output: agentAssistantMessage,
797
+ send_to_parent: { role: "tool", tool_call_id: this.parent.tool_call_id, content }
798
+ };
799
+ }
800
+ }
801
+ yield* this.appendToContext({
802
+ context: [assistantMessage],
803
+ output: [agentAssistantMessage],
804
+ currentContextUsage: (0, import_contextUsage.currentContextUsageFromCompletion)(result.value.usage),
805
+ usage: result.value.usage,
806
+ completion
807
+ });
808
+ if (finishReason === "length") {
809
+ const errorContent = completion?.error_message ?? "max_tokens breached";
810
+ yield this.generateErrorEvent(errorContent, agentAssistantMessage);
811
+ return { outcome: "exit", modelMessageEventId };
812
+ }
813
+ if (!hasToolCalls(assistantMessage)) {
814
+ yield {
815
+ type: import_AgentThread.InternalEventType.AGENT_DONE,
816
+ status: "done",
817
+ thread_id: this.threadId,
818
+ title: this.title,
819
+ output: agentAssistantMessage,
820
+ parent: this.parent,
821
+ send_to_parent: completion?.send_to_parent
822
+ };
823
+ return { outcome: "exit", modelMessageEventId };
824
+ }
825
+ return { outcome: "continue", modelMessageEventId };
826
+ }
827
+ async *stepToolResponse(toolMapping) {
828
+ const assistantMessage = lastAssistantInContext(this.context);
829
+ if (!assistantMessage) {
830
+ throw new Error("unreachable");
831
+ }
832
+ const openIds = getOpenToolCallIds(this.context);
833
+ const openCalls = assistantMessage.tool_calls?.filter((tc) => openIds.has(tc.id)) ?? [];
834
+ const decisions = (0, import_contextUtils.scanApprovalDecisions)(this.context);
835
+ const assistantForExecution = {
836
+ ...assistantMessage,
837
+ tool_calls: openCalls
838
+ };
839
+ const {
840
+ toolCallResults,
841
+ initializationInfo,
842
+ createThreadEvents,
843
+ sandboxCreated,
844
+ authRequirementInfo,
845
+ approvalRequiredToolCalls,
846
+ clientSideToolCalls,
847
+ events: passthroughEvents
848
+ } = await (0, import_executeToolCalls.executeToolCalls)({
849
+ assistantMessage: assistantForExecution,
850
+ toolMapping,
851
+ threadId: this.threadId,
852
+ approvalDecisions: decisions
853
+ });
854
+ void clientSideToolCalls;
855
+ if (approvalRequiredToolCalls.length > 0) {
856
+ throw new Error("Unreachable");
857
+ }
858
+ this.metrics.total_tool_calls += toolCallResults.length;
859
+ this.metrics.total_sub_agents += createThreadEvents.length;
860
+ if (initializationInfo.length > 0) {
861
+ yield buildMCPInitializeEvent(initializationInfo, this.threadId);
862
+ }
863
+ if (sandboxCreated) {
864
+ yield buildSandboxCreatedEvent(sandboxCreated);
865
+ }
866
+ for (const event of passthroughEvents) {
867
+ yield { type: import_AgentThread.InternalEventType.PASSTHROUGH, event };
868
+ }
869
+ const toolIdsBeforeProcessing = toolCallResults.map((t) => t.message.tool_call_id);
870
+ const toolResponseExecution = {
871
+ threadId: this.threadId,
872
+ sandbox: this.sandbox,
873
+ currentContextUsage: this.currentContextUsage,
874
+ context: this.context
875
+ };
876
+ for (const processor of this.toolResponseProcessors) {
877
+ const processorResult = await processor.process(toolCallResults, toolResponseExecution);
878
+ if (processorResult.sandboxCreated) {
879
+ yield buildSandboxCreatedEvent(processorResult.sandboxCreated);
880
+ }
881
+ for (const event of processorResult.events ?? []) {
882
+ yield { type: import_AgentThread.InternalEventType.PASSTHROUGH, event };
883
+ }
884
+ }
885
+ if (toolIdsBeforeProcessing.length !== toolCallResults.length) {
886
+ throw Error("Some tool call processor has removed tool call.");
887
+ }
888
+ const toolIdsAfterProcessing = new Set(toolCallResults.map((t) => t.message.tool_call_id));
889
+ if (!toolIdsBeforeProcessing.every((id) => toolIdsAfterProcessing.has(id))) {
890
+ throw Error("Tool call IDs do not match after processing.");
891
+ }
892
+ const agentToolMessages = toolCallResults.map((t) => {
893
+ const { role, ...toolMessage } = t.message;
894
+ void role;
895
+ return {
896
+ ...toolMessage,
897
+ type: import_schema.EventType.TOOL_RESPONSE,
898
+ id: (0, import_schema.newEventId)(),
899
+ created_at: t.completedAt,
900
+ thread_id: this.threadId
901
+ };
902
+ });
903
+ for (const msg of agentToolMessages) {
904
+ yield msg;
905
+ }
906
+ yield* this.appendToContext({
907
+ context: toolCallResults.map((t) => t.message),
908
+ output: [],
909
+ currentContextUsage: void 0,
910
+ usage: void 0
911
+ });
912
+ if (authRequirementInfo.length > 0) {
913
+ yield buildMCPAuthRequiredEvent(authRequirementInfo, this.threadId);
914
+ return "exit";
915
+ }
916
+ for await (const event of this.executeContextProcessors("postToolCall")) {
917
+ yield event;
918
+ }
919
+ for (const event of createThreadEvents) {
920
+ yield event;
921
+ }
922
+ if (createThreadEvents.length > 0) {
923
+ return "exit";
924
+ }
925
+ return "continue";
926
+ }
927
+ *stepUserInputRequired(modelMessageEventId) {
928
+ const pendingClientSideToolCalls = getPendingClientSideToolCalls(this.context);
929
+ if (pendingClientSideToolCalls.length > 0) {
930
+ const responseRequiredEvent = {
931
+ type: import_schema.EventType.TOOL_RESPONSE_REQUIRED,
932
+ id: (0, import_schema.newEventId)(),
933
+ created_at: (/* @__PURE__ */ new Date()).toISOString(),
934
+ thread_id: this.threadId,
935
+ tool_calls: pendingClientSideToolCalls.map((tc) => ({ id: tc.id, source_event_id: modelMessageEventId }))
936
+ };
937
+ yield responseRequiredEvent;
938
+ }
939
+ const pendingApprovalToolCalls = getPendingApprovalToolCalls(this.context);
940
+ if (pendingApprovalToolCalls.length > 0) {
941
+ const event = {
942
+ type: import_schema.EventType.TOOL_APPROVAL_REQUIRED,
943
+ id: (0, import_schema.newEventId)(),
944
+ created_at: (/* @__PURE__ */ new Date()).toISOString(),
945
+ thread_id: this.threadId,
946
+ tool_calls: pendingApprovalToolCalls.map(({ id }) => ({ id, source_event_id: modelMessageEventId }))
947
+ };
948
+ yield event;
949
+ }
950
+ return "exit";
951
+ }
952
+ buildReplayEvent(c) {
953
+ const base = {
954
+ type: import_AgentThread.InternalEventType.AGENT_DONE,
955
+ thread_id: this.threadId,
956
+ title: this.title,
957
+ parent: this.parent,
958
+ send_to_parent: c.send_to_parent
959
+ };
960
+ return c.type === "done" ? { ...base, status: "done", output: c.output } : { ...base, status: "error", error: c.error_message ?? "Sub-agent errored", output: c.output };
961
+ }
962
+ async *execute(options) {
963
+ const signal = options?.signal;
964
+ this.throwIfContextBusy();
965
+ this.contextBusy = true;
966
+ this.currentState = null;
967
+ try {
968
+ if (this.preComputedCompletion) {
969
+ yield this.buildReplayEvent(this.preComputedCompletion);
970
+ return;
971
+ }
972
+ if (!this.preSendRanThisTurn) {
973
+ for await (const event of this.executeContextProcessors("preSend")) {
974
+ yield event;
975
+ }
976
+ }
977
+ this.preSendRanThisTurn = false;
978
+ const { initializationInfo, authRequirementInfo } = await this.tracing.withInitSpan(() => this.init());
979
+ if (initializationInfo.length > 0) {
980
+ yield buildMCPInitializeEvent(initializationInfo, this.threadId);
981
+ }
982
+ if (authRequirementInfo.length > 0) {
983
+ yield buildMCPAuthRequiredEvent(authRequirementInfo, this.threadId);
984
+ return;
985
+ }
986
+ const { tools, toolMapping } = this.getConvertedTools();
987
+ const iterationLimit = this.definition.iterationLimit ?? DEFAULT_ITERATION_LIMIT;
988
+ let currentModelMessageEventId = "";
989
+ for (; ; ) {
990
+ for (; ; ) {
991
+ const sandboxCreatedEvent = this.pendingSandboxCreatedEvents.shift();
992
+ if (sandboxCreatedEvent === void 0) break;
993
+ yield sandboxCreatedEvent;
994
+ }
995
+ const state = this.deriveState();
996
+ let outcome;
997
+ switch (state) {
998
+ case "llm-call-required": {
999
+ if (signal?.aborted) return;
1000
+ if (this.metrics.iterations >= iterationLimit) {
1001
+ yield this.generateErrorEvent(
1002
+ `You have reached iteration limit of ${String(iterationLimit)}, please request again`
1003
+ );
1004
+ return;
1005
+ }
1006
+ this.metrics.iterations++;
1007
+ const llmResult = yield* this.stepLLMCall(tools, toolMapping, signal);
1008
+ outcome = llmResult.outcome;
1009
+ currentModelMessageEventId = llmResult.modelMessageEventId;
1010
+ break;
1011
+ }
1012
+ case "tool-response-required": {
1013
+ if (signal?.aborted) return;
1014
+ outcome = yield* this.stepToolResponse(toolMapping);
1015
+ break;
1016
+ }
1017
+ case "user-input-required": {
1018
+ outcome = yield* this.stepUserInputRequired(currentModelMessageEventId);
1019
+ break;
1020
+ }
1021
+ default: {
1022
+ throw new Error("unreachable");
1023
+ }
1024
+ }
1025
+ if (outcome === "exit") return;
1026
+ }
1027
+ } catch (error) {
1028
+ yield this.generateErrorEvent(error instanceof Error ? error.message : "Unknown error occurred");
1029
+ } finally {
1030
+ this.contextBusy = false;
1031
+ }
1032
+ }
1033
+ };
1034
+ function assertUniqueStateKeys(capabilities) {
1035
+ const seen = /* @__PURE__ */ new Set();
1036
+ for (const capability of capabilities) {
1037
+ const key = capability.state?.key;
1038
+ if (!key) continue;
1039
+ if (seen.has(key)) {
1040
+ throw new import_errors.AgentHarnessError(
1041
+ "capability_state_error",
1042
+ `Duplicate capability state key '${key}' \u2014 each key may be claimed by at most one capability`
1043
+ );
1044
+ }
1045
+ seen.add(key);
1046
+ }
1047
+ }
1048
+ function claimCapabilityState(capabilities, input, logger) {
1049
+ if (!input) return {};
1050
+ const claimedKeys = new Set(capabilities.map((c) => c.state?.key).filter((k) => typeof k === "string"));
1051
+ const claimed = {};
1052
+ for (const [key, value] of Object.entries(input)) {
1053
+ if (!claimedKeys.has(key)) {
1054
+ logger.warn(`Dropping unclaimed capability_state key '${key}' \u2014 no capability declares it`);
1055
+ continue;
1056
+ }
1057
+ claimed[key] = value;
1058
+ }
1059
+ return claimed;
1060
+ }
1061
+ // Annotate the CommonJS export names for ESM import in node:
1062
+ 0 && (module.exports = {
1063
+ AgentThread
1064
+ });
1065
+ //# sourceMappingURL=AgentThread.js.map