@truefoundry/trueforge-core 0.0.0 → 0.1.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 (575) 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 +66 -0
  213. package/dist/core/index.d.ts.map +1 -0
  214. package/dist/core/index.js +234 -0
  215. package/dist/core/index.js.map +1 -0
  216. package/dist/core/index.mjs +166 -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 +229 -0
  231. package/dist/core/llm/VercelAILLM.d.ts.map +1 -0
  232. package/dist/core/llm/VercelAILLM.js +1037 -0
  233. package/dist/core/llm/VercelAILLM.js.map +1 -0
  234. package/dist/core/llm/VercelAILLM.mjs +993 -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 +1067 -0
  341. package/dist/core/runtime/AgentThread.js.map +1 -0
  342. package/dist/core/runtime/AgentThread.mjs +1064 -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 +119 -0
  399. package/dist/core/sandbox/Sandbox.d.ts.map +1 -0
  400. package/dist/core/sandbox/Sandbox.js +556 -0
  401. package/dist/core/sandbox/Sandbox.js.map +1 -0
  402. package/dist/core/sandbox/Sandbox.mjs +520 -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/codeMode/CodeModeDispatcher.d.ts +29 -0
  411. package/dist/core/sandbox/codeMode/CodeModeDispatcher.d.ts.map +1 -0
  412. package/dist/core/sandbox/codeMode/CodeModeDispatcher.js +128 -0
  413. package/dist/core/sandbox/codeMode/CodeModeDispatcher.js.map +1 -0
  414. package/dist/core/sandbox/codeMode/CodeModeDispatcher.mjs +107 -0
  415. package/dist/core/sandbox/codeMode/CodeModeDispatcher.mjs.map +1 -0
  416. package/dist/core/sandbox/codeMode/CodeModeTransport.d.ts +21 -0
  417. package/dist/core/sandbox/codeMode/CodeModeTransport.d.ts.map +1 -0
  418. package/dist/core/sandbox/codeMode/CodeModeTransport.js +19 -0
  419. package/dist/core/sandbox/codeMode/CodeModeTransport.js.map +1 -0
  420. package/dist/core/sandbox/codeMode/CodeModeTransport.mjs +1 -0
  421. package/dist/core/sandbox/codeMode/CodeModeTransport.mjs.map +1 -0
  422. package/dist/core/sandbox/codeMode/nats/CodeModeNatsTransport.d.ts +34 -0
  423. package/dist/core/sandbox/codeMode/nats/CodeModeNatsTransport.d.ts.map +1 -0
  424. package/dist/core/sandbox/codeMode/nats/CodeModeNatsTransport.js +187 -0
  425. package/dist/core/sandbox/codeMode/nats/CodeModeNatsTransport.js.map +1 -0
  426. package/dist/core/sandbox/codeMode/nats/CodeModeNatsTransport.mjs +162 -0
  427. package/dist/core/sandbox/codeMode/nats/CodeModeNatsTransport.mjs.map +1 -0
  428. package/dist/core/sandbox/codeMode/types.d.ts +34 -0
  429. package/dist/core/sandbox/codeMode/types.d.ts.map +1 -0
  430. package/dist/core/sandbox/codeMode/types.js +59 -0
  431. package/dist/core/sandbox/codeMode/types.js.map +1 -0
  432. package/dist/core/sandbox/codeMode/types.mjs +32 -0
  433. package/dist/core/sandbox/codeMode/types.mjs.map +1 -0
  434. package/dist/core/sandbox/constants.d.ts +10 -0
  435. package/dist/core/sandbox/constants.d.ts.map +1 -0
  436. package/dist/core/sandbox/constants.js +37 -0
  437. package/dist/core/sandbox/constants.js.map +1 -0
  438. package/dist/core/sandbox/constants.mjs +10 -0
  439. package/dist/core/sandbox/constants.mjs.map +1 -0
  440. package/dist/core/sandbox/provider/DaytonaProvider.d.ts +81 -0
  441. package/dist/core/sandbox/provider/DaytonaProvider.d.ts.map +1 -0
  442. package/dist/core/sandbox/provider/DaytonaProvider.js +353 -0
  443. package/dist/core/sandbox/provider/DaytonaProvider.js.map +1 -0
  444. package/dist/core/sandbox/provider/DaytonaProvider.mjs +333 -0
  445. package/dist/core/sandbox/provider/DaytonaProvider.mjs.map +1 -0
  446. package/dist/core/sandbox/provider/Provider.d.ts +84 -0
  447. package/dist/core/sandbox/provider/Provider.d.ts.map +1 -0
  448. package/dist/core/sandbox/provider/Provider.js +43 -0
  449. package/dist/core/sandbox/provider/Provider.js.map +1 -0
  450. package/dist/core/sandbox/provider/Provider.mjs +17 -0
  451. package/dist/core/sandbox/provider/Provider.mjs.map +1 -0
  452. package/dist/core/sandbox/provider/TFYSandboxProvider.d.ts +42 -0
  453. package/dist/core/sandbox/provider/TFYSandboxProvider.d.ts.map +1 -0
  454. package/dist/core/sandbox/provider/TFYSandboxProvider.js +186 -0
  455. package/dist/core/sandbox/provider/TFYSandboxProvider.js.map +1 -0
  456. package/dist/core/sandbox/provider/TFYSandboxProvider.mjs +153 -0
  457. package/dist/core/sandbox/provider/TFYSandboxProvider.mjs.map +1 -0
  458. package/dist/core/sandbox/sandboxImage.d.ts +6 -0
  459. package/dist/core/sandbox/sandboxImage.d.ts.map +1 -0
  460. package/dist/core/sandbox/sandboxImage.js +31 -0
  461. package/dist/core/sandbox/sandboxImage.js.map +1 -0
  462. package/dist/core/sandbox/sandboxImage.mjs +6 -0
  463. package/dist/core/sandbox/sandboxImage.mjs.map +1 -0
  464. package/dist/core/sandbox/sandboxScripts.gen.d.ts +5 -0
  465. package/dist/core/sandbox/sandboxScripts.gen.d.ts.map +1 -0
  466. package/dist/core/sandbox/sandboxScripts.gen.js +343 -0
  467. package/dist/core/sandbox/sandboxScripts.gen.js.map +1 -0
  468. package/dist/core/sandbox/sandboxScripts.gen.mjs +318 -0
  469. package/dist/core/sandbox/sandboxScripts.gen.mjs.map +1 -0
  470. package/dist/core/sandbox/skills/ISkillMounter.d.ts +7 -0
  471. package/dist/core/sandbox/skills/ISkillMounter.d.ts.map +1 -0
  472. package/dist/core/sandbox/skills/ISkillMounter.js +19 -0
  473. package/dist/core/sandbox/skills/ISkillMounter.js.map +1 -0
  474. package/dist/core/sandbox/skills/ISkillMounter.mjs +1 -0
  475. package/dist/core/sandbox/skills/ISkillMounter.mjs.map +1 -0
  476. package/dist/core/sandbox/skills/SkillMounter.d.ts +17 -0
  477. package/dist/core/sandbox/skills/SkillMounter.d.ts.map +1 -0
  478. package/dist/core/sandbox/skills/SkillMounter.js +73 -0
  479. package/dist/core/sandbox/skills/SkillMounter.js.map +1 -0
  480. package/dist/core/sandbox/skills/SkillMounter.mjs +48 -0
  481. package/dist/core/sandbox/skills/SkillMounter.mjs.map +1 -0
  482. package/dist/core/sandbox/skills/constants.d.ts +10 -0
  483. package/dist/core/sandbox/skills/constants.d.ts.map +1 -0
  484. package/dist/core/sandbox/skills/constants.js +56 -0
  485. package/dist/core/sandbox/skills/constants.js.map +1 -0
  486. package/dist/core/sandbox/skills/constants.mjs +28 -0
  487. package/dist/core/sandbox/skills/constants.mjs.map +1 -0
  488. package/dist/core/sandbox/skills/index.d.ts +5 -0
  489. package/dist/core/sandbox/skills/index.d.ts.map +1 -0
  490. package/dist/core/sandbox/skills/index.js +40 -0
  491. package/dist/core/sandbox/skills/index.js.map +1 -0
  492. package/dist/core/sandbox/skills/index.mjs +11 -0
  493. package/dist/core/sandbox/skills/index.mjs.map +1 -0
  494. package/dist/core/tracing/AgentTracing.d.ts +38 -0
  495. package/dist/core/tracing/AgentTracing.d.ts.map +1 -0
  496. package/dist/core/tracing/AgentTracing.js +19 -0
  497. package/dist/core/tracing/AgentTracing.js.map +1 -0
  498. package/dist/core/tracing/AgentTracing.mjs +1 -0
  499. package/dist/core/tracing/AgentTracing.mjs.map +1 -0
  500. package/dist/core/tracing/NoopAgentTracing.d.ts +3 -0
  501. package/dist/core/tracing/NoopAgentTracing.d.ts.map +1 -0
  502. package/dist/core/tracing/NoopAgentTracing.js +79 -0
  503. package/dist/core/tracing/NoopAgentTracing.js.map +1 -0
  504. package/dist/core/tracing/NoopAgentTracing.mjs +54 -0
  505. package/dist/core/tracing/NoopAgentTracing.mjs.map +1 -0
  506. package/dist/core/util/abort.d.ts +2 -0
  507. package/dist/core/util/abort.d.ts.map +1 -0
  508. package/dist/core/util/abort.js +38 -0
  509. package/dist/core/util/abort.js.map +1 -0
  510. package/dist/core/util/abort.mjs +13 -0
  511. package/dist/core/util/abort.mjs.map +1 -0
  512. package/dist/core/util/errorLogFields.d.ts +11 -0
  513. package/dist/core/util/errorLogFields.d.ts.map +1 -0
  514. package/dist/core/util/errorLogFields.js +72 -0
  515. package/dist/core/util/errorLogFields.js.map +1 -0
  516. package/dist/core/util/errorLogFields.mjs +46 -0
  517. package/dist/core/util/errorLogFields.mjs.map +1 -0
  518. package/dist/core/util/promiseUtils.d.ts +7 -0
  519. package/dist/core/util/promiseUtils.d.ts.map +1 -0
  520. package/dist/core/util/promiseUtils.js +82 -0
  521. package/dist/core/util/promiseUtils.js.map +1 -0
  522. package/dist/core/util/promiseUtils.mjs +55 -0
  523. package/dist/core/util/promiseUtils.mjs.map +1 -0
  524. package/dist/index.d.ts +7 -0
  525. package/dist/index.d.ts.map +1 -0
  526. package/dist/index.js +44 -0
  527. package/dist/index.js.map +1 -0
  528. package/dist/index.mjs +8 -0
  529. package/dist/index.mjs.map +1 -0
  530. package/dist/package.json +3 -0
  531. package/dist/request-reply/client.d.ts +21 -0
  532. package/dist/request-reply/client.d.ts.map +1 -0
  533. package/dist/request-reply/client.js +92 -0
  534. package/dist/request-reply/client.js.map +1 -0
  535. package/dist/request-reply/client.mjs +67 -0
  536. package/dist/request-reply/client.mjs.map +1 -0
  537. package/dist/request-reply/errors.d.ts +23 -0
  538. package/dist/request-reply/errors.d.ts.map +1 -0
  539. package/dist/request-reply/errors.js +66 -0
  540. package/dist/request-reply/errors.js.map +1 -0
  541. package/dist/request-reply/errors.mjs +39 -0
  542. package/dist/request-reply/errors.mjs.map +1 -0
  543. package/dist/request-reply/executor.d.ts +70 -0
  544. package/dist/request-reply/executor.d.ts.map +1 -0
  545. package/dist/request-reply/executor.js +267 -0
  546. package/dist/request-reply/executor.js.map +1 -0
  547. package/dist/request-reply/executor.mjs +232 -0
  548. package/dist/request-reply/executor.mjs.map +1 -0
  549. package/dist/request-reply/index.d.ts +16 -0
  550. package/dist/request-reply/index.d.ts.map +1 -0
  551. package/dist/request-reply/index.js +47 -0
  552. package/dist/request-reply/index.js.map +1 -0
  553. package/dist/request-reply/index.mjs +16 -0
  554. package/dist/request-reply/index.mjs.map +1 -0
  555. package/dist/request-reply/router.d.ts +20 -0
  556. package/dist/request-reply/router.d.ts.map +1 -0
  557. package/dist/request-reply/router.js +55 -0
  558. package/dist/request-reply/router.js.map +1 -0
  559. package/dist/request-reply/router.mjs +30 -0
  560. package/dist/request-reply/router.mjs.map +1 -0
  561. package/dist/request-reply/types.d.ts +25 -0
  562. package/dist/request-reply/types.d.ts.map +1 -0
  563. package/dist/request-reply/types.js +54 -0
  564. package/dist/request-reply/types.js.map +1 -0
  565. package/dist/request-reply/types.mjs +28 -0
  566. package/dist/request-reply/types.mjs.map +1 -0
  567. package/dist/request-reply/utils.d.ts +9 -0
  568. package/dist/request-reply/utils.d.ts.map +1 -0
  569. package/dist/request-reply/utils.js +51 -0
  570. package/dist/request-reply/utils.js.map +1 -0
  571. package/dist/request-reply/utils.mjs +22 -0
  572. package/dist/request-reply/utils.mjs.map +1 -0
  573. package/package.json +127 -6
  574. package/README.md +0 -4
  575. package/index.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/request-reply/executor.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { RedisClientType } from 'redis';\nimport type { Logger } from 'winston';\nimport z from 'zod';\nimport { extractErrorLogFields } from '../core/util/errorLogFields';\nimport { ReplyError } from './errors';\nimport type { JSONReply, RequestHandler } from './types';\nimport { publishedRequestSchema } from './types';\nimport { heartbeatKey, requestChannel } from './utils';\n\nexport interface RunExecutorOptions {\n /** How often to refresh the heartbeat key (ms). */\n heartbeatIntervalMs: number;\n /** TTL for the reply value so abandoned keys are reclaimed (ms). */\n replyTtlMs: number;\n}\n\nconst DEFAULT_HEARTBEAT_INTERVAL_MS = 5_000;\nconst DEFAULT_REPLY_TTL_MS = 120_000;\n\nfunction resolveRunExecutorOptions(options: Partial<RunExecutorOptions> | undefined): RunExecutorOptions {\n return {\n heartbeatIntervalMs: options?.heartbeatIntervalMs ?? DEFAULT_HEARTBEAT_INTERVAL_MS,\n replyTtlMs: options?.replyTtlMs ?? DEFAULT_REPLY_TTL_MS,\n };\n}\n\n/** Observability hook for subscriber errors, failed SUBSCRIBEs, and malformed messages. */\nexport type RequestReplyErrorHandler = (err: Error, context: { executorId: string; channel: string }) => void;\n\n/**\n * Serving side of the request-reply transport: parses and validates each\n * published message, dispatches it to the request handler, writes the\n * JSONReply to the request's reply key, and refreshes the heartbeat key while\n * subscribed.\n *\n * Connection lifecycle stays with the caller: both clients are supplied\n * connected and are never closed here. `subscriberClient` is the connection to\n * SUBSCRIBE on — a `duplicate()` for standalone Redis, or the shared client\n * for Sentinel — and must have a reconnect strategy so a failed connect\n * self-heals (the executor re-subscribes on every `ready`).\n */\nexport class RequestReplyExecutor {\n readonly executorId: string;\n /** `rr:req:<executorId>` — the channel this executor subscribes to. */\n readonly channel: string;\n private readonly redis: RedisClientType;\n private readonly subscriberClient: RedisClientType;\n private readonly logger: Logger;\n private readonly heartbeatIntervalMs: number;\n private readonly heartbeatTtlMs: number;\n private readonly replyTtlMs: number;\n private readonly heartbeatKey: string;\n private readonly requestHandler: RequestHandler;\n private readonly onError: RequestReplyErrorHandler | undefined;\n /** Stable reference so node-redis dedupes the listener across re-subscribes. */\n private readonly subscribeListener = (message: string): void => {\n this.onMessage(message);\n };\n\n private closed = false;\n private initialized = false;\n private runningRequests = new Map<string, Promise<void>>();\n private heartbeatTimer: ReturnType<typeof setInterval> | null = null;\n\n constructor({\n executorId,\n redis,\n subscriberClient,\n requestHandler,\n onError,\n logger,\n options,\n }: {\n executorId: string;\n /** Connected command client, used only for SET (reply + heartbeat). Caller owns its lifecycle. */\n redis: RedisClientType;\n /** Connected client to SUBSCRIBE on (duplicate or Sentinel). Caller owns its lifecycle. */\n subscriberClient: RedisClientType;\n requestHandler: RequestHandler;\n onError?: RequestReplyErrorHandler | undefined;\n logger: Logger;\n options?: Partial<RunExecutorOptions> | undefined;\n }) {\n const { heartbeatIntervalMs, replyTtlMs } = resolveRunExecutorOptions(options);\n this.executorId = executorId;\n this.redis = redis;\n this.subscriberClient = subscriberClient;\n this.logger = logger;\n this.replyTtlMs = replyTtlMs;\n this.requestHandler = requestHandler;\n this.onError = onError;\n this.channel = requestChannel(executorId);\n this.heartbeatKey = heartbeatKey(executorId);\n this.heartbeatIntervalMs = heartbeatIntervalMs;\n this.heartbeatTtlMs = Math.ceil(this.heartbeatIntervalMs * 1.5);\n }\n\n async init(): Promise<void> {\n if (this.closed || this.initialized) {\n return;\n }\n this.initialized = true;\n\n this.subscriberClient.on('error', (err: Error) => {\n this.logger.error('[RequestReplyExecutor] Subscriber error', {\n executorId: this.executorId,\n ...extractErrorLogFields(err),\n });\n this.onError?.(err, { executorId: this.executorId, channel: this.channel });\n this.stopHeartbeat();\n });\n this.subscriberClient.on('end', () => {\n this.logger.warn('[RequestReplyExecutor] Subscriber connection ended', { executorId: this.executorId });\n this.stopHeartbeat();\n });\n // ready fires on the first connect and every reconnect; re-subscribing is\n // safe because node-redis dedupes the stable listener.\n this.subscriberClient.on('ready', () => {\n void this.setupSubscriber();\n });\n\n // On stable connections we won't get another ready event — if the caller\n // already connected the client, subscribe now.\n if (this.subscriberClient.isReady) {\n await this.setupSubscriber();\n }\n }\n\n private async setupSubscriber(): Promise<void> {\n if (this.closed) {\n return;\n }\n try {\n await this.subscriberClient.subscribe(this.channel, this.subscribeListener);\n this.logger.info('[RequestReplyExecutor] Subscribed to request channel', { executorId: this.executorId });\n this.stopHeartbeat();\n this.startHeartbeat();\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err), { cause: err });\n this.logger.error('[RequestReplyExecutor] Error subscribing to request channel', {\n executorId: this.executorId,\n ...extractErrorLogFields(error),\n });\n this.onError?.(error, { executorId: this.executorId, channel: this.channel });\n this.stopHeartbeat();\n }\n }\n\n private async beat(): Promise<void> {\n this.logger.debug('[RequestReplyExecutor] Beating heartbeat', { executorId: this.executorId });\n try {\n await this.redis.set(this.heartbeatKey, '1', { PX: this.heartbeatTtlMs });\n } catch (err) {\n this.logger.error('[RequestReplyExecutor] Heartbeat error', {\n executorId: this.executorId,\n ...extractErrorLogFields(err),\n });\n }\n }\n\n /** Heartbeat only while subscribed. Idempotent (restarts the timer). */\n private startHeartbeat(): void {\n if (this.closed) {\n return;\n }\n this.logger.info('[RequestReplyExecutor] Starting heartbeat', { executorId: this.executorId });\n this.stopHeartbeat();\n void this.beat();\n this.heartbeatTimer = setInterval(() => {\n void this.beat();\n }, this.heartbeatIntervalMs);\n }\n\n /** A stopped heartbeat makes callers fail fast with NoResponderError. */\n private stopHeartbeat(): void {\n if (this.heartbeatTimer) {\n this.logger.info('[RequestReplyExecutor] Stopping heartbeat', { executorId: this.executorId });\n clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = null;\n }\n }\n\n private async processRequestFromMessage(message: string): Promise<void> {\n let raw: unknown;\n try {\n raw = JSON.parse(message);\n } catch (err) {\n // Drop the request, this should never happen\n this.logger.warn('[RequestReplyExecutor] Request message is not valid JSON', { executorId: this.executorId });\n this.onError?.(\n new Error(`Request message is not valid JSON for executorId: ${this.executorId}`, {\n cause: err,\n }),\n {\n executorId: this.executorId,\n channel: this.channel,\n },\n );\n return;\n }\n\n const parsedRequest = publishedRequestSchema.safeParse(raw);\n if (!parsedRequest.success) {\n // Drop the request, this should never happen\n const zodError = z.treeifyError(parsedRequest.error);\n this.logger.warn('[RequestReplyExecutor] Invalid request message shape', {\n executorId: this.executorId,\n zod: zodError,\n });\n this.onError?.(\n new Error(\n `Invalid request message shape for executorId: ${this.executorId}, error: ${JSON.stringify(zodError)}`,\n { cause: parsedRequest.error },\n ),\n { executorId: this.executorId, channel: this.channel },\n );\n return;\n }\n\n const { replyKey, path, body, headers } = parsedRequest.data;\n let replyPayload: JSONReply;\n try {\n replyPayload = await this.requestHandler(path, { body, headers });\n } catch (err) {\n // ReplyError lets handlers choose the reply status; any other throw is an unexpected 500.\n if (err instanceof ReplyError) {\n replyPayload = { status: err.status, headers: {}, body: { message: err.message } };\n } else {\n const message = err instanceof Error ? err.message : String(err);\n replyPayload = { status: 500, headers: {}, body: { message } };\n }\n }\n\n try {\n await this.redis.set(replyKey, JSON.stringify(replyPayload), { PX: this.replyTtlMs });\n } catch (err) {\n this.logger.error('[RequestReplyExecutor] Request processing failed', {\n executorId: this.executorId,\n replyKey,\n ...extractErrorLogFields(err),\n });\n }\n }\n\n /** One raw pub/sub payload. Never throws. */\n private onMessage(message: string): void {\n this.logger.debug('[RequestReplyExecutor] Received message', { executorId: this.executorId, message });\n if (!message) {\n return;\n }\n if (this.closed) {\n this.logger.warn('[RequestReplyExecutor] Received message after executor is closed', {\n executorId: this.executorId,\n message,\n });\n return;\n }\n const pid = randomUUID();\n const requestPromise = this.processRequestFromMessage(message).finally(() => {\n this.runningRequests.delete(pid);\n });\n this.runningRequests.set(pid, requestPromise);\n }\n\n // This function should never throw!\n // Stops intake: unsubscribe from the channel and stop the heartbeat. Never\n // closes the clients — the caller owns their lifecycle.\n async close(): Promise<void> {\n if (this.closed) {\n return;\n }\n this.logger.info('[RequestReplyExecutor] Closing', { executorId: this.executorId });\n this.closed = true;\n try {\n await this.subscriberClient.unsubscribe(this.channel);\n } catch {\n // ignore: connection may already be closed\n }\n this.stopHeartbeat();\n }\n\n // This function should never throw!\n // This is called during graceful shutdown\n async drain(): Promise<void> {\n await this.close();\n await Promise.allSettled(Array.from(this.runningRequests.values()));\n }\n}\n"],"mappings":"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","names":["message"]}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Redis request-reply transport for executor peering: route a command to the
3
+ * replica addressed by a plain `executorId`. Hosts own the Redis connection
4
+ * (inject the node-redis client) and their own id grammar — how an executor
5
+ * id is embedded in / parsed out of resource ids never enters this module.
6
+ */
7
+ export { redisRequest } from './client';
8
+ export type { SendRequestOptions } from './client';
9
+ export { NoResponderError, ReplyError, RequestTimeoutError } from './errors';
10
+ export { RequestReplyExecutor } from './executor';
11
+ export type { RequestReplyErrorHandler, RunExecutorOptions } from './executor';
12
+ export { RequestReplyRouter } from './router';
13
+ export type { RouteHandler } from './router';
14
+ export { jsonReplySchema } from './types';
15
+ export type { JSONReply, JSONValue, RequestEnvelope, RequestHandler } from './types';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/request-reply/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,YAAY,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,47 @@
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/request-reply/index.ts
21
+ var request_reply_exports = {};
22
+ __export(request_reply_exports, {
23
+ NoResponderError: () => import_errors.NoResponderError,
24
+ ReplyError: () => import_errors.ReplyError,
25
+ RequestReplyExecutor: () => import_executor.RequestReplyExecutor,
26
+ RequestReplyRouter: () => import_router.RequestReplyRouter,
27
+ RequestTimeoutError: () => import_errors.RequestTimeoutError,
28
+ jsonReplySchema: () => import_types.jsonReplySchema,
29
+ redisRequest: () => import_client.redisRequest
30
+ });
31
+ module.exports = __toCommonJS(request_reply_exports);
32
+ var import_client = require("./client.js");
33
+ var import_errors = require("./errors.js");
34
+ var import_executor = require("./executor.js");
35
+ var import_router = require("./router.js");
36
+ var import_types = require("./types.js");
37
+ // Annotate the CommonJS export names for ESM import in node:
38
+ 0 && (module.exports = {
39
+ NoResponderError,
40
+ ReplyError,
41
+ RequestReplyExecutor,
42
+ RequestReplyRouter,
43
+ RequestTimeoutError,
44
+ jsonReplySchema,
45
+ redisRequest
46
+ });
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/request-reply/index.ts"],"sourcesContent":["/**\n * Redis request-reply transport for executor peering: route a command to the\n * replica addressed by a plain `executorId`. Hosts own the Redis connection\n * (inject the node-redis client) and their own id grammar — how an executor\n * id is embedded in / parsed out of resource ids never enters this module.\n */\n\nexport { redisRequest } from './client';\nexport type { SendRequestOptions } from './client';\nexport { NoResponderError, ReplyError, RequestTimeoutError } from './errors';\nexport { RequestReplyExecutor } from './executor';\nexport type { RequestReplyErrorHandler, RunExecutorOptions } from './executor';\nexport { RequestReplyRouter } from './router';\nexport type { RouteHandler } from './router';\nexport { jsonReplySchema } from './types';\nexport type { JSONReply, JSONValue, RequestEnvelope, RequestHandler } from './types';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,oBAA6B;AAE7B,oBAAkE;AAClE,sBAAqC;AAErC,oBAAmC;AAEnC,mBAAgC;","names":[]}
@@ -0,0 +1,16 @@
1
+ // src/request-reply/index.ts
2
+ import { redisRequest } from "./client.mjs";
3
+ import { NoResponderError, ReplyError, RequestTimeoutError } from "./errors.mjs";
4
+ import { RequestReplyExecutor } from "./executor.mjs";
5
+ import { RequestReplyRouter } from "./router.mjs";
6
+ import { jsonReplySchema } from "./types.mjs";
7
+ export {
8
+ NoResponderError,
9
+ ReplyError,
10
+ RequestReplyExecutor,
11
+ RequestReplyRouter,
12
+ RequestTimeoutError,
13
+ jsonReplySchema,
14
+ redisRequest
15
+ };
16
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/request-reply/index.ts"],"sourcesContent":["/**\n * Redis request-reply transport for executor peering: route a command to the\n * replica addressed by a plain `executorId`. Hosts own the Redis connection\n * (inject the node-redis client) and their own id grammar — how an executor\n * id is embedded in / parsed out of resource ids never enters this module.\n */\n\nexport { redisRequest } from './client';\nexport type { SendRequestOptions } from './client';\nexport { NoResponderError, ReplyError, RequestTimeoutError } from './errors';\nexport { RequestReplyExecutor } from './executor';\nexport type { RequestReplyErrorHandler, RunExecutorOptions } from './executor';\nexport { RequestReplyRouter } from './router';\nexport type { RouteHandler } from './router';\nexport { jsonReplySchema } from './types';\nexport type { JSONReply, JSONValue, RequestEnvelope, RequestHandler } from './types';\n"],"mappings":";AAOA,SAAS,oBAAoB;AAE7B,SAAS,kBAAkB,YAAY,2BAA2B;AAClE,SAAS,4BAA4B;AAErC,SAAS,0BAA0B;AAEnC,SAAS,uBAAuB;","names":[]}
@@ -0,0 +1,20 @@
1
+ import type { JSONReply, RequestEnvelope, RequestHandler } from './types';
2
+ /**
3
+ * Handlers receive the wire body as unvalidated JSON and must validate it
4
+ * themselves (the payload crosses process boundaries).
5
+ */
6
+ export type RouteHandler = (request: RequestEnvelope) => Promise<JSONReply>;
7
+ /**
8
+ * In-process dispatch table keyed by logical path (e.g. `sessions/cancel`).
9
+ * The host creates one at boot and passes `createRequestHandler()` to the
10
+ * executor.
11
+ */
12
+ export declare class RequestReplyRouter {
13
+ private readonly routes;
14
+ /** Throws if the path is already registered. */
15
+ registerRoute(path: string, fn: RouteHandler): void;
16
+ dispatchRoute(path: string, request: RequestEnvelope): Promise<JSONReply>;
17
+ /** Returns the `requestHandler` callback the executor consumes. */
18
+ createRequestHandler(): RequestHandler;
19
+ }
20
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/request-reply/router.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE1E;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAE5E;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAE1D,gDAAgD;IAChD,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,GAAG,IAAI,CAQlD;IAEK,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC,CAO9E;IAED,mEAAmE;IACnE,oBAAoB,IAAI,cAAc,CAErC;CACF"}
@@ -0,0 +1,55 @@
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/request-reply/router.ts
21
+ var router_exports = {};
22
+ __export(router_exports, {
23
+ RequestReplyRouter: () => RequestReplyRouter
24
+ });
25
+ module.exports = __toCommonJS(router_exports);
26
+ var import_errors = require("./errors.js");
27
+ var RequestReplyRouter = class {
28
+ routes = /* @__PURE__ */ new Map();
29
+ /** Throws if the path is already registered. */
30
+ registerRoute(path, fn) {
31
+ const alreadyAddedFn = this.routes.get(path);
32
+ if (alreadyAddedFn) {
33
+ throw new Error(
34
+ `[RequestReplyRouter] Route ${path} already registered for function ${alreadyAddedFn.name || "anonymous"}`
35
+ );
36
+ }
37
+ this.routes.set(path, fn);
38
+ }
39
+ async dispatchRoute(path, request) {
40
+ const fn = this.routes.get(path);
41
+ if (!fn) {
42
+ throw new import_errors.ReplyError(500, `Route ${path} not found for executor proxying`);
43
+ }
44
+ return fn(request);
45
+ }
46
+ /** Returns the `requestHandler` callback the executor consumes. */
47
+ createRequestHandler() {
48
+ return (path, request) => this.dispatchRoute(path, request);
49
+ }
50
+ };
51
+ // Annotate the CommonJS export names for ESM import in node:
52
+ 0 && (module.exports = {
53
+ RequestReplyRouter
54
+ });
55
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/request-reply/router.ts"],"sourcesContent":["import { ReplyError } from './errors';\nimport type { JSONReply, RequestEnvelope, RequestHandler } from './types';\n\n/**\n * Handlers receive the wire body as unvalidated JSON and must validate it\n * themselves (the payload crosses process boundaries).\n */\nexport type RouteHandler = (request: RequestEnvelope) => Promise<JSONReply>;\n\n/**\n * In-process dispatch table keyed by logical path (e.g. `sessions/cancel`).\n * The host creates one at boot and passes `createRequestHandler()` to the\n * executor.\n */\nexport class RequestReplyRouter {\n private readonly routes = new Map<string, RouteHandler>();\n\n /** Throws if the path is already registered. */\n registerRoute(path: string, fn: RouteHandler): void {\n const alreadyAddedFn = this.routes.get(path);\n if (alreadyAddedFn) {\n throw new Error(\n `[RequestReplyRouter] Route ${path} already registered for function ${alreadyAddedFn.name || 'anonymous'}`,\n );\n }\n this.routes.set(path, fn);\n }\n\n async dispatchRoute(path: string, request: RequestEnvelope): Promise<JSONReply> {\n const fn = this.routes.get(path);\n if (!fn) {\n // ReplyError carries an explicit status onto the wire (see executor error mapping).\n throw new ReplyError(500, `Route ${path} not found for executor proxying`);\n }\n return fn(request);\n }\n\n /** Returns the `requestHandler` callback the executor consumes. */\n createRequestHandler(): RequestHandler {\n return (path, request) => this.dispatchRoute(path, request);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA2B;AAcpB,IAAM,qBAAN,MAAyB;AAAA,EACb,SAAS,oBAAI,IAA0B;AAAA;AAAA,EAGxD,cAAc,MAAc,IAAwB;AAClD,UAAM,iBAAiB,KAAK,OAAO,IAAI,IAAI;AAC3C,QAAI,gBAAgB;AAClB,YAAM,IAAI;AAAA,QACR,8BAA8B,IAAI,oCAAoC,eAAe,QAAQ,WAAW;AAAA,MAC1G;AAAA,IACF;AACA,SAAK,OAAO,IAAI,MAAM,EAAE;AAAA,EAC1B;AAAA,EAEA,MAAM,cAAc,MAAc,SAA8C;AAC9E,UAAM,KAAK,KAAK,OAAO,IAAI,IAAI;AAC/B,QAAI,CAAC,IAAI;AAEP,YAAM,IAAI,yBAAW,KAAK,SAAS,IAAI,kCAAkC;AAAA,IAC3E;AACA,WAAO,GAAG,OAAO;AAAA,EACnB;AAAA;AAAA,EAGA,uBAAuC;AACrC,WAAO,CAAC,MAAM,YAAY,KAAK,cAAc,MAAM,OAAO;AAAA,EAC5D;AACF;","names":[]}
@@ -0,0 +1,30 @@
1
+ // src/request-reply/router.ts
2
+ import { ReplyError } from "./errors.mjs";
3
+ var RequestReplyRouter = class {
4
+ routes = /* @__PURE__ */ new Map();
5
+ /** Throws if the path is already registered. */
6
+ registerRoute(path, fn) {
7
+ const alreadyAddedFn = this.routes.get(path);
8
+ if (alreadyAddedFn) {
9
+ throw new Error(
10
+ `[RequestReplyRouter] Route ${path} already registered for function ${alreadyAddedFn.name || "anonymous"}`
11
+ );
12
+ }
13
+ this.routes.set(path, fn);
14
+ }
15
+ async dispatchRoute(path, request) {
16
+ const fn = this.routes.get(path);
17
+ if (!fn) {
18
+ throw new ReplyError(500, `Route ${path} not found for executor proxying`);
19
+ }
20
+ return fn(request);
21
+ }
22
+ /** Returns the `requestHandler` callback the executor consumes. */
23
+ createRequestHandler() {
24
+ return (path, request) => this.dispatchRoute(path, request);
25
+ }
26
+ };
27
+ export {
28
+ RequestReplyRouter
29
+ };
30
+ //# sourceMappingURL=router.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/request-reply/router.ts"],"sourcesContent":["import { ReplyError } from './errors';\nimport type { JSONReply, RequestEnvelope, RequestHandler } from './types';\n\n/**\n * Handlers receive the wire body as unvalidated JSON and must validate it\n * themselves (the payload crosses process boundaries).\n */\nexport type RouteHandler = (request: RequestEnvelope) => Promise<JSONReply>;\n\n/**\n * In-process dispatch table keyed by logical path (e.g. `sessions/cancel`).\n * The host creates one at boot and passes `createRequestHandler()` to the\n * executor.\n */\nexport class RequestReplyRouter {\n private readonly routes = new Map<string, RouteHandler>();\n\n /** Throws if the path is already registered. */\n registerRoute(path: string, fn: RouteHandler): void {\n const alreadyAddedFn = this.routes.get(path);\n if (alreadyAddedFn) {\n throw new Error(\n `[RequestReplyRouter] Route ${path} already registered for function ${alreadyAddedFn.name || 'anonymous'}`,\n );\n }\n this.routes.set(path, fn);\n }\n\n async dispatchRoute(path: string, request: RequestEnvelope): Promise<JSONReply> {\n const fn = this.routes.get(path);\n if (!fn) {\n // ReplyError carries an explicit status onto the wire (see executor error mapping).\n throw new ReplyError(500, `Route ${path} not found for executor proxying`);\n }\n return fn(request);\n }\n\n /** Returns the `requestHandler` callback the executor consumes. */\n createRequestHandler(): RequestHandler {\n return (path, request) => this.dispatchRoute(path, request);\n }\n}\n"],"mappings":";AAAA,SAAS,kBAAkB;AAcpB,IAAM,qBAAN,MAAyB;AAAA,EACb,SAAS,oBAAI,IAA0B;AAAA;AAAA,EAGxD,cAAc,MAAc,IAAwB;AAClD,UAAM,iBAAiB,KAAK,OAAO,IAAI,IAAI;AAC3C,QAAI,gBAAgB;AAClB,YAAM,IAAI;AAAA,QACR,8BAA8B,IAAI,oCAAoC,eAAe,QAAQ,WAAW;AAAA,MAC1G;AAAA,IACF;AACA,SAAK,OAAO,IAAI,MAAM,EAAE;AAAA,EAC1B;AAAA,EAEA,MAAM,cAAc,MAAc,SAA8C;AAC9E,UAAM,KAAK,KAAK,OAAO,IAAI,IAAI;AAC/B,QAAI,CAAC,IAAI;AAEP,YAAM,IAAI,WAAW,KAAK,SAAS,IAAI,kCAAkC;AAAA,IAC3E;AACA,WAAO,GAAG,OAAO;AAAA,EACnB;AAAA;AAAA,EAGA,uBAAuC;AACrC,WAAO,CAAC,MAAM,YAAY,KAAK,cAAc,MAAM,OAAO;AAAA,EAC5D;AACF;","names":[]}
@@ -0,0 +1,25 @@
1
+ import { z } from 'zod';
2
+ export type JSONValue = string | number | boolean | null | JSONValue[] | {
3
+ [key: string]: JSONValue;
4
+ };
5
+ /** Request payload as seen by the caller of redisRequest and by route handlers. */
6
+ export interface RequestEnvelope<T extends JSONValue = JSONValue> {
7
+ body: T;
8
+ headers?: Record<string, string> | undefined;
9
+ }
10
+ /** Body of a PUBLISH on the executor request channel (JSON string). */
11
+ export declare const publishedRequestSchema: z.ZodObject<{
12
+ replyKey: z.ZodString;
13
+ path: z.ZodString;
14
+ body: z.ZodType<JSONValue, unknown, z.core.$ZodTypeInternals<JSONValue, unknown>>;
15
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
16
+ }, z.core.$strip>;
17
+ export type PublishedRequest = z.infer<typeof publishedRequestSchema>;
18
+ export declare const jsonReplySchema: z.ZodObject<{
19
+ status: z.ZodNumber;
20
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
21
+ body: z.ZodType<JSONValue, unknown, z.core.$ZodTypeInternals<JSONValue, unknown>>;
22
+ }, z.core.$strip>;
23
+ export type JSONReply = z.infer<typeof jsonReplySchema>;
24
+ export type RequestHandler<T extends JSONValue = JSONValue> = (path: string, request: RequestEnvelope<T>) => Promise<JSONReply>;
25
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/request-reply/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAetG,mFAAmF;AACnF,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC9D,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAC9C;AAED,uEAAuE;AACvE,eAAO,MAAM,sBAAsB;;;;;iBAKjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,eAAe;;;;iBAI1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,CAC5D,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,KACxB,OAAO,CAAC,SAAS,CAAC,CAAC"}
@@ -0,0 +1,54 @@
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/request-reply/types.ts
21
+ var types_exports = {};
22
+ __export(types_exports, {
23
+ jsonReplySchema: () => jsonReplySchema,
24
+ publishedRequestSchema: () => publishedRequestSchema
25
+ });
26
+ module.exports = __toCommonJS(types_exports);
27
+ var import_zod = require("zod");
28
+ var jsonSchema = import_zod.z.lazy(() => {
29
+ return import_zod.z.union([
30
+ import_zod.z.string(),
31
+ import_zod.z.number(),
32
+ import_zod.z.boolean(),
33
+ import_zod.z.null(),
34
+ import_zod.z.array(jsonSchema),
35
+ import_zod.z.record(import_zod.z.string(), jsonSchema)
36
+ ]);
37
+ });
38
+ var publishedRequestSchema = import_zod.z.object({
39
+ replyKey: import_zod.z.string(),
40
+ path: import_zod.z.string(),
41
+ body: jsonSchema,
42
+ headers: import_zod.z.record(import_zod.z.string(), import_zod.z.string()).optional()
43
+ });
44
+ var jsonReplySchema = import_zod.z.object({
45
+ status: import_zod.z.number().int().min(200).max(599),
46
+ headers: import_zod.z.record(import_zod.z.string(), import_zod.z.string()).optional(),
47
+ body: jsonSchema
48
+ });
49
+ // Annotate the CommonJS export names for ESM import in node:
50
+ 0 && (module.exports = {
51
+ jsonReplySchema,
52
+ publishedRequestSchema
53
+ });
54
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/request-reply/types.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport type JSONValue = string | number | boolean | null | JSONValue[] | { [key: string]: JSONValue };\n\n// Recursive schema (https://zod.dev/api?id=json); z.lazy needs the explicit\n// annotation, so JSONValue cannot be derived with z.infer.\nconst jsonSchema: z.ZodType<JSONValue> = z.lazy(() => {\n return z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(jsonSchema),\n z.record(z.string(), jsonSchema),\n ]);\n});\n\n/** Request payload as seen by the caller of redisRequest and by route handlers. */\nexport interface RequestEnvelope<T extends JSONValue = JSONValue> {\n body: T;\n headers?: Record<string, string> | undefined;\n}\n\n/** Body of a PUBLISH on the executor request channel (JSON string). */\nexport const publishedRequestSchema = z.object({\n replyKey: z.string(),\n path: z.string(),\n body: jsonSchema,\n headers: z.record(z.string(), z.string()).optional(),\n});\nexport type PublishedRequest = z.infer<typeof publishedRequestSchema>;\n\nexport const jsonReplySchema = z.object({\n status: z.number().int().min(200).max(599),\n headers: z.record(z.string(), z.string()).optional(),\n body: jsonSchema,\n});\nexport type JSONReply = z.infer<typeof jsonReplySchema>;\n\nexport type RequestHandler<T extends JSONValue = JSONValue> = (\n path: string,\n request: RequestEnvelope<T>,\n) => Promise<JSONReply>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAkB;AAMlB,IAAM,aAAmC,aAAE,KAAK,MAAM;AACpD,SAAO,aAAE,MAAM;AAAA,IACb,aAAE,OAAO;AAAA,IACT,aAAE,OAAO;AAAA,IACT,aAAE,QAAQ;AAAA,IACV,aAAE,KAAK;AAAA,IACP,aAAE,MAAM,UAAU;AAAA,IAClB,aAAE,OAAO,aAAE,OAAO,GAAG,UAAU;AAAA,EACjC,CAAC;AACH,CAAC;AASM,IAAM,yBAAyB,aAAE,OAAO;AAAA,EAC7C,UAAU,aAAE,OAAO;AAAA,EACnB,MAAM,aAAE,OAAO;AAAA,EACf,MAAM;AAAA,EACN,SAAS,aAAE,OAAO,aAAE,OAAO,GAAG,aAAE,OAAO,CAAC,EAAE,SAAS;AACrD,CAAC;AAGM,IAAM,kBAAkB,aAAE,OAAO;AAAA,EACtC,QAAQ,aAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG;AAAA,EACzC,SAAS,aAAE,OAAO,aAAE,OAAO,GAAG,aAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACnD,MAAM;AACR,CAAC;","names":[]}
@@ -0,0 +1,28 @@
1
+ // src/request-reply/types.ts
2
+ import { z } from "zod";
3
+ var jsonSchema = z.lazy(() => {
4
+ return z.union([
5
+ z.string(),
6
+ z.number(),
7
+ z.boolean(),
8
+ z.null(),
9
+ z.array(jsonSchema),
10
+ z.record(z.string(), jsonSchema)
11
+ ]);
12
+ });
13
+ var publishedRequestSchema = z.object({
14
+ replyKey: z.string(),
15
+ path: z.string(),
16
+ body: jsonSchema,
17
+ headers: z.record(z.string(), z.string()).optional()
18
+ });
19
+ var jsonReplySchema = z.object({
20
+ status: z.number().int().min(200).max(599),
21
+ headers: z.record(z.string(), z.string()).optional(),
22
+ body: jsonSchema
23
+ });
24
+ export {
25
+ jsonReplySchema,
26
+ publishedRequestSchema
27
+ };
28
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/request-reply/types.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport type JSONValue = string | number | boolean | null | JSONValue[] | { [key: string]: JSONValue };\n\n// Recursive schema (https://zod.dev/api?id=json); z.lazy needs the explicit\n// annotation, so JSONValue cannot be derived with z.infer.\nconst jsonSchema: z.ZodType<JSONValue> = z.lazy(() => {\n return z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(jsonSchema),\n z.record(z.string(), jsonSchema),\n ]);\n});\n\n/** Request payload as seen by the caller of redisRequest and by route handlers. */\nexport interface RequestEnvelope<T extends JSONValue = JSONValue> {\n body: T;\n headers?: Record<string, string> | undefined;\n}\n\n/** Body of a PUBLISH on the executor request channel (JSON string). */\nexport const publishedRequestSchema = z.object({\n replyKey: z.string(),\n path: z.string(),\n body: jsonSchema,\n headers: z.record(z.string(), z.string()).optional(),\n});\nexport type PublishedRequest = z.infer<typeof publishedRequestSchema>;\n\nexport const jsonReplySchema = z.object({\n status: z.number().int().min(200).max(599),\n headers: z.record(z.string(), z.string()).optional(),\n body: jsonSchema,\n});\nexport type JSONReply = z.infer<typeof jsonReplySchema>;\n\nexport type RequestHandler<T extends JSONValue = JSONValue> = (\n path: string,\n request: RequestEnvelope<T>,\n) => Promise<JSONReply>;\n"],"mappings":";AAAA,SAAS,SAAS;AAMlB,IAAM,aAAmC,EAAE,KAAK,MAAM;AACpD,SAAO,EAAE,MAAM;AAAA,IACb,EAAE,OAAO;AAAA,IACT,EAAE,OAAO;AAAA,IACT,EAAE,QAAQ;AAAA,IACV,EAAE,KAAK;AAAA,IACP,EAAE,MAAM,UAAU;AAAA,IAClB,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU;AAAA,EACjC,CAAC;AACH,CAAC;AASM,IAAM,yBAAyB,EAAE,OAAO;AAAA,EAC7C,UAAU,EAAE,OAAO;AAAA,EACnB,MAAM,EAAE,OAAO;AAAA,EACf,MAAM;AAAA,EACN,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS;AACrD,CAAC;AAGM,IAAM,kBAAkB,EAAE,OAAO;AAAA,EACtC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG;AAAA,EACzC,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACnD,MAAM;AACR,CAAC;","names":[]}
@@ -0,0 +1,9 @@
1
+ export declare function sleep(ms: number): Promise<void>;
2
+ export declare const KEY_PREFIX = "rr";
3
+ /** Liveness key an executor refreshes; callers check it before publishing. */
4
+ export declare function heartbeatKey(executorId: string): string;
5
+ /** Pub/sub channel: executors subscribe; callers publish the JSON request (see publishedRequestSchema). */
6
+ export declare function requestChannel(executorId: string): string;
7
+ /** Per-request key the executor SETs the JSONReply to; the caller polls it with GETDEL. */
8
+ export declare function replyKey(requestId: string): string;
9
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/request-reply/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED,eAAO,MAAM,UAAU,OAAO,CAAC;AAE/B,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,2GAA2G;AAC3G,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,2FAA2F;AAC3F,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAElD"}
@@ -0,0 +1,51 @@
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/request-reply/utils.ts
21
+ var utils_exports = {};
22
+ __export(utils_exports, {
23
+ KEY_PREFIX: () => KEY_PREFIX,
24
+ heartbeatKey: () => heartbeatKey,
25
+ replyKey: () => replyKey,
26
+ requestChannel: () => requestChannel,
27
+ sleep: () => sleep
28
+ });
29
+ module.exports = __toCommonJS(utils_exports);
30
+ function sleep(ms) {
31
+ return new Promise((resolve) => setTimeout(resolve, ms));
32
+ }
33
+ var KEY_PREFIX = "rr";
34
+ function heartbeatKey(executorId) {
35
+ return `${KEY_PREFIX}:hb:${executorId}`;
36
+ }
37
+ function requestChannel(executorId) {
38
+ return `${KEY_PREFIX}:req:${executorId}`;
39
+ }
40
+ function replyKey(requestId) {
41
+ return `${KEY_PREFIX}:reply:${requestId}`;
42
+ }
43
+ // Annotate the CommonJS export names for ESM import in node:
44
+ 0 && (module.exports = {
45
+ KEY_PREFIX,
46
+ heartbeatKey,
47
+ replyKey,
48
+ requestChannel,
49
+ sleep
50
+ });
51
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/request-reply/utils.ts"],"sourcesContent":["export function sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nexport const KEY_PREFIX = 'rr';\n\n/** Liveness key an executor refreshes; callers check it before publishing. */\nexport function heartbeatKey(executorId: string): string {\n return `${KEY_PREFIX}:hb:${executorId}`;\n}\n\n/** Pub/sub channel: executors subscribe; callers publish the JSON request (see publishedRequestSchema). */\nexport function requestChannel(executorId: string): string {\n return `${KEY_PREFIX}:req:${executorId}`;\n}\n\n/** Per-request key the executor SETs the JSONReply to; the caller polls it with GETDEL. */\nexport function replyKey(requestId: string): string {\n return `${KEY_PREFIX}:reply:${requestId}`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,SAAS,MAAM,IAA2B;AAC/C,SAAO,IAAI,QAAQ,aAAW,WAAW,SAAS,EAAE,CAAC;AACvD;AAEO,IAAM,aAAa;AAGnB,SAAS,aAAa,YAA4B;AACvD,SAAO,GAAG,UAAU,OAAO,UAAU;AACvC;AAGO,SAAS,eAAe,YAA4B;AACzD,SAAO,GAAG,UAAU,QAAQ,UAAU;AACxC;AAGO,SAAS,SAAS,WAA2B;AAClD,SAAO,GAAG,UAAU,UAAU,SAAS;AACzC;","names":[]}
@@ -0,0 +1,22 @@
1
+ // src/request-reply/utils.ts
2
+ function sleep(ms) {
3
+ return new Promise((resolve) => setTimeout(resolve, ms));
4
+ }
5
+ var KEY_PREFIX = "rr";
6
+ function heartbeatKey(executorId) {
7
+ return `${KEY_PREFIX}:hb:${executorId}`;
8
+ }
9
+ function requestChannel(executorId) {
10
+ return `${KEY_PREFIX}:req:${executorId}`;
11
+ }
12
+ function replyKey(requestId) {
13
+ return `${KEY_PREFIX}:reply:${requestId}`;
14
+ }
15
+ export {
16
+ KEY_PREFIX,
17
+ heartbeatKey,
18
+ replyKey,
19
+ requestChannel,
20
+ sleep
21
+ };
22
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/request-reply/utils.ts"],"sourcesContent":["export function sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nexport const KEY_PREFIX = 'rr';\n\n/** Liveness key an executor refreshes; callers check it before publishing. */\nexport function heartbeatKey(executorId: string): string {\n return `${KEY_PREFIX}:hb:${executorId}`;\n}\n\n/** Pub/sub channel: executors subscribe; callers publish the JSON request (see publishedRequestSchema). */\nexport function requestChannel(executorId: string): string {\n return `${KEY_PREFIX}:req:${executorId}`;\n}\n\n/** Per-request key the executor SETs the JSONReply to; the caller polls it with GETDEL. */\nexport function replyKey(requestId: string): string {\n return `${KEY_PREFIX}:reply:${requestId}`;\n}\n"],"mappings":";AAAO,SAAS,MAAM,IAA2B;AAC/C,SAAO,IAAI,QAAQ,aAAW,WAAW,SAAS,EAAE,CAAC;AACvD;AAEO,IAAM,aAAa;AAGnB,SAAS,aAAa,YAA4B;AACvD,SAAO,GAAG,UAAU,OAAO,UAAU;AACvC;AAGO,SAAS,eAAe,YAA4B;AACzD,SAAO,GAAG,UAAU,QAAQ,UAAU;AACxC;AAGO,SAAS,SAAS,WAA2B;AAClD,SAAO,GAAG,UAAU,UAAU,SAAS;AACzC;","names":[]}
package/package.json CHANGED
@@ -1,14 +1,135 @@
1
1
  {
2
2
  "name": "@truefoundry/trueforge-core",
3
- "version": "0.0.0",
4
- "description": "Placeholder so trusted publishing can be configured. Do not use.",
3
+ "version": "0.1.0",
4
+ "description": "TrueForge core library",
5
+ "author": "TrueFoundry",
5
6
  "license": "MIT",
6
- "author": "TrueForge",
7
7
  "repository": {
8
8
  "type": "git",
9
- "url": "git+https://github.com/truefoundry/trueforge.git"
9
+ "url": "git+https://github.com/truefoundry/trueforge.git",
10
+ "directory": "packages/harness"
11
+ },
12
+ "homepage": "https://github.com/truefoundry/trueforge/tree/main/packages/harness#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/truefoundry/trueforge/issues"
10
15
  },
11
16
  "publishConfig": {
12
- "access": "public"
17
+ "access": "public",
18
+ "provenance": false
19
+ },
20
+ "private": false,
21
+ "type": "module",
22
+ "main": "./dist/index.js",
23
+ "module": "./dist/index.mjs",
24
+ "types": "./dist/index.d.ts",
25
+ "exports": {
26
+ ".": {
27
+ "trueforge-dev": {
28
+ "types": "./src/index.ts",
29
+ "default": "./src/index.ts"
30
+ },
31
+ "types": "./dist/index.d.ts",
32
+ "require": "./dist/index.js",
33
+ "default": "./dist/index.mjs"
34
+ },
35
+ "./core": {
36
+ "trueforge-dev": {
37
+ "types": "./src/core/index.ts",
38
+ "default": "./src/core/index.ts"
39
+ },
40
+ "types": "./dist/core/index.d.ts",
41
+ "require": "./dist/core/index.js",
42
+ "default": "./dist/core/index.mjs"
43
+ },
44
+ "./agent-session": {
45
+ "trueforge-dev": {
46
+ "types": "./src/agent-session/index.ts",
47
+ "default": "./src/agent-session/index.ts"
48
+ },
49
+ "types": "./dist/agent-session/index.d.ts",
50
+ "require": "./dist/agent-session/index.js",
51
+ "default": "./dist/agent-session/index.mjs"
52
+ },
53
+ "./request-reply": {
54
+ "trueforge-dev": {
55
+ "types": "./src/request-reply/index.ts",
56
+ "default": "./src/request-reply/index.ts"
57
+ },
58
+ "types": "./dist/request-reply/index.d.ts",
59
+ "require": "./dist/request-reply/index.js",
60
+ "default": "./dist/request-reply/index.mjs"
61
+ },
62
+ "./*.mjs": {
63
+ "types": "./dist/*.d.ts",
64
+ "default": "./dist/*.mjs"
65
+ },
66
+ "./*.js": {
67
+ "types": "./dist/*.d.ts",
68
+ "default": "./dist/*.js"
69
+ },
70
+ "./*": {
71
+ "trueforge-dev": {
72
+ "types": "./src/*.ts",
73
+ "default": "./src/*.ts"
74
+ },
75
+ "types": "./dist/*.d.ts",
76
+ "require": "./dist/*.js",
77
+ "default": "./dist/*.mjs"
78
+ },
79
+ "./package.json": "./package.json"
80
+ },
81
+ "files": [
82
+ "dist"
83
+ ],
84
+ "dependencies": {
85
+ "@ai-sdk/alibaba": "^2.0.24",
86
+ "@ai-sdk/anthropic": "^4.0.25",
87
+ "@ai-sdk/google": "^4.0.29",
88
+ "@ai-sdk/moonshotai": "^3.0.25",
89
+ "@ai-sdk/openai": "^4.0.25",
90
+ "@ai-sdk/openai-compatible": "^3.0.18",
91
+ "@ai-sdk/provider": "^4.0.4",
92
+ "@ai-sdk/provider-utils": "^5.0.16",
93
+ "@daytona/sdk": "^0.204.1",
94
+ "@hono/zod-openapi": "^1.5.1",
95
+ "@modelcontextprotocol/sdk": "^1.29.0",
96
+ "@nats-io/nats-core": "3.0.2",
97
+ "@opentelemetry/api": "^1.9.0",
98
+ "@opentelemetry/core": "^2.9.0",
99
+ "ai": "^7.0.44",
100
+ "dedent": "^1.7.2",
101
+ "openai": "^7.2.0",
102
+ "ulid": "^3.0.2",
103
+ "winston": "^3.13.0",
104
+ "ws": "^8.21.0",
105
+ "zod": "^4.4.3"
106
+ },
107
+ "peerDependencies": {
108
+ "redis": "^5.10.0"
109
+ },
110
+ "devDependencies": {
111
+ "@swc/core": "^1.11.0",
112
+ "@swc/jest": "^0.2.37",
113
+ "@types/jest": "^29.5.14",
114
+ "@types/node": "^24.12.0",
115
+ "@types/ws": "^8.5.10",
116
+ "esbuild-plugin-file-path-extensions": "^2.1.4",
117
+ "jest": "^29.7.0",
118
+ "redis": "^5.10.0",
119
+ "tsup": "^8.5.0",
120
+ "typescript": "^7.0.2"
121
+ },
122
+ "scripts": {
123
+ "build:gen": "node scripts/generate-sandbox-scripts.mjs",
124
+ "build:gen:watch": "node --watch-path=src/core/sandbox/scripts scripts/generate-sandbox-scripts.mjs",
125
+ "build": "pnpm run build:gen && tsc --noEmit && pnpm run build:js && pnpm run build:dts && pnpm run build:pkg && pnpm run build:check",
126
+ "dev": "pnpm run build:gen:watch",
127
+ "build:js": "tsup",
128
+ "build:dts": "tsc -p tsconfig.build.json --emitDeclarationOnly",
129
+ "build:pkg": "node scripts/write-dist-package-json.mjs",
130
+ "build:check": "node scripts/check-dist.mjs",
131
+ "typecheck": "pnpm run build:gen && tsc --noEmit",
132
+ "test": "pnpm run build:gen && jest --config jest.config.cjs",
133
+ "pack:dry": "pnpm pack --dry-run"
13
134
  }
14
- }
135
+ }
package/README.md DELETED
@@ -1,4 +0,0 @@
1
- # `@truefoundry/trueforge-core`
2
-
3
- Placeholder `0.0.0` so npm trusted publishing can be attached to this package.
4
- Not a functional release. Install a later version.