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