@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,461 @@
1
+ // src/agent-session/store/InMemorySessionStore.ts
2
+ import { getEmptyCurrentContextUsage } from "../../core/runtime/contextUsage.mjs";
3
+ import { CancellationReason } from "../schemas/turn.mjs";
4
+ import { assertCreateTurnThreadDelta } from "./assertCreateTurnThreadDelta.mjs";
5
+ import { decodeOffsetPageToken, encodeOffsetPageToken } from "./OffsetPageToken.mjs";
6
+ import {
7
+ decodeSessionEventPageToken,
8
+ paginateSessionEventRows
9
+ } from "./SessionEventPageToken.mjs";
10
+ import { decodeSessionListPageToken, paginateSessionListRows } from "./SessionListPageToken.mjs";
11
+ import {
12
+ PreviousTurnRunningError,
13
+ SessionAlreadyExistsError,
14
+ SessionNotFoundError,
15
+ SessionStoreInvariantError,
16
+ TurnAlreadyExistsError,
17
+ TurnNotFoundError,
18
+ TurnNotRunningError
19
+ } from "./SessionStoreErrors.mjs";
20
+ function deepCopy(value) {
21
+ return structuredClone(value);
22
+ }
23
+ function sessionKey(sessionId) {
24
+ return sessionId;
25
+ }
26
+ function turnKey({ session_id, turn_id }) {
27
+ return `${session_id}:${turn_id}`;
28
+ }
29
+ function compareSessionId(a, b) {
30
+ if (a < b) return -1;
31
+ if (a > b) return 1;
32
+ return 0;
33
+ }
34
+ function newThreadSnapshot(thread) {
35
+ return {
36
+ thread_id: thread.thread_id,
37
+ parent: thread.parent ?? null,
38
+ agent_info: thread.agent_info ?? null,
39
+ capability_state: null,
40
+ context: [],
41
+ current_context_usage: getEmptyCurrentContextUsage(),
42
+ completion: null
43
+ };
44
+ }
45
+ function applyContextAppends(threads, appends) {
46
+ for (const append of appends) {
47
+ const thread = threads[append.thread_id];
48
+ if (!thread) {
49
+ throw new SessionStoreInvariantError(`new_context_appends references unknown thread ${append.thread_id}`);
50
+ }
51
+ thread.context.push(...deepCopy(append.context));
52
+ if (append.current_context_usage !== null) {
53
+ thread.current_context_usage = deepCopy(append.current_context_usage);
54
+ }
55
+ }
56
+ }
57
+ function buildSnapshotFromDelta(input) {
58
+ const threads = input.previousSnapshot ? deepCopy(input.previousSnapshot.threads) : {};
59
+ assertCreateTurnThreadDelta({
60
+ previousThreadIds: new Set(Object.keys(threads)),
61
+ new_threads: input.new_threads,
62
+ new_context_appends: input.new_context_appends,
63
+ capability_states: input.capability_states
64
+ });
65
+ for (const nt of input.new_threads) {
66
+ threads[nt.thread_id] = newThreadSnapshot(nt);
67
+ }
68
+ applyContextAppends(threads, input.new_context_appends);
69
+ for (const capability of input.capability_states) {
70
+ const thread = threads[capability.thread_id];
71
+ if (thread === void 0) {
72
+ throw new SessionStoreInvariantError(`capability_states references unknown thread ${capability.thread_id}`);
73
+ }
74
+ thread.capability_state = deepCopy(capability.capability_state);
75
+ }
76
+ return {
77
+ threads,
78
+ mcp_servers: input.previousSnapshot ? deepCopy(input.previousSnapshot.mcp_servers) : null,
79
+ sandbox_info: input.previousSnapshot ? deepCopy(input.previousSnapshot.sandbox_info) : null
80
+ };
81
+ }
82
+ function paginate(items, limit, pageToken) {
83
+ const offset = decodeOffsetPageToken(pageToken);
84
+ const slice = items.slice(offset, offset + limit);
85
+ return {
86
+ data: slice,
87
+ pagination: {
88
+ limit,
89
+ ...offset + limit < items.length ? { next_page_token: encodeOffsetPageToken(offset + limit) } : {},
90
+ ...offset > 0 ? { previous_page_token: encodeOffsetPageToken(Math.max(0, offset - limit)) } : {}
91
+ }
92
+ };
93
+ }
94
+ var InMemorySessionStore = class {
95
+ sessions = /* @__PURE__ */ new Map();
96
+ turns = /* @__PURE__ */ new Map();
97
+ events = /* @__PURE__ */ new Map();
98
+ async createSession(input) {
99
+ const key = sessionKey(input.session_id);
100
+ if (this.sessions.has(key)) {
101
+ throw new SessionAlreadyExistsError(input.session_id);
102
+ }
103
+ const now = /* @__PURE__ */ new Date();
104
+ const record = {
105
+ tenant_id: input.tenant_id,
106
+ session_id: input.session_id,
107
+ created_by: input.created_by,
108
+ agent: deepCopy(input.agent),
109
+ title: null,
110
+ last_turn_id: null,
111
+ created_at: now,
112
+ updated_at: now,
113
+ last_activity_timestamp_ms: Date.now(),
114
+ custom: input.custom !== null ? deepCopy(input.custom) : null
115
+ };
116
+ this.sessions.set(key, { record, turnIds: [] });
117
+ return;
118
+ }
119
+ async deleteSession(input) {
120
+ const sKey = sessionKey(input.session_id);
121
+ const stored = this.sessions.get(sKey);
122
+ if (stored?.record.tenant_id !== input.tenant_id) {
123
+ return;
124
+ }
125
+ for (const turnId of stored.turnIds) {
126
+ const tKey = turnKey({ session_id: input.session_id, turn_id: turnId });
127
+ this.turns.delete(tKey);
128
+ this.events.delete(tKey);
129
+ }
130
+ this.sessions.delete(sKey);
131
+ }
132
+ async getSession(input) {
133
+ const stored = this.sessions.get(sessionKey(input.session_id));
134
+ return stored?.record.tenant_id === input.tenant_id ? deepCopy(stored.record) : void 0;
135
+ }
136
+ async updateSession(input) {
137
+ const key = sessionKey(input.session_id);
138
+ const stored = this.sessions.get(key);
139
+ if (stored?.record.tenant_id !== input.tenant_id) {
140
+ throw new SessionNotFoundError(input.session_id);
141
+ }
142
+ if (input.agent !== void 0) {
143
+ if (stored.record.agent.type === "reference") {
144
+ throw new SessionStoreInvariantError(`Session ${input.session_id} is named; agent cannot be updated`);
145
+ }
146
+ stored.record.agent = deepCopy(input.agent);
147
+ }
148
+ if (input.title !== void 0) {
149
+ stored.record.title = input.title;
150
+ }
151
+ const now = Date.now();
152
+ stored.record.updated_at = new Date(now);
153
+ stored.record.last_activity_timestamp_ms = now;
154
+ return;
155
+ }
156
+ async listSessions(input) {
157
+ const records = [];
158
+ for (const stored of this.sessions.values()) {
159
+ if (stored.record.tenant_id !== input.tenant_id) continue;
160
+ if (input.agent_id !== void 0 && (stored.record.agent.type !== "reference" || stored.record.agent.id !== input.agent_id)) {
161
+ continue;
162
+ }
163
+ if (input.created_by !== void 0 && stored.record.created_by !== input.created_by) {
164
+ continue;
165
+ }
166
+ const createdAt = stored.record.created_at.getTime();
167
+ if (input.start_timestamp !== void 0 && createdAt < input.start_timestamp.getTime()) continue;
168
+ if (input.end_timestamp !== void 0 && createdAt > input.end_timestamp.getTime()) continue;
169
+ records.push(stored.record);
170
+ }
171
+ records.sort((a, b) => {
172
+ const aTime = a.updated_at.getTime();
173
+ const bTime = b.updated_at.getTime();
174
+ if (aTime !== bTime) {
175
+ return input.order === "asc" ? aTime - bTime : bTime - aTime;
176
+ }
177
+ return input.order === "asc" ? compareSessionId(a.session_id, b.session_id) : compareSessionId(b.session_id, a.session_id);
178
+ });
179
+ let filtered = records;
180
+ const cursor = decodeSessionListPageToken(input.page_token);
181
+ if (cursor) {
182
+ const cursorTime = new Date(cursor.updated_at).getTime();
183
+ filtered = records.filter((record) => {
184
+ const t = record.updated_at.getTime();
185
+ const idCmp = compareSessionId(record.session_id, cursor.session_id);
186
+ if (input.order === "asc") {
187
+ return t > cursorTime || t === cursorTime && idCmp > 0;
188
+ }
189
+ return t < cursorTime || t === cursorTime && idCmp < 0;
190
+ });
191
+ }
192
+ const page = paginateSessionListRows(filtered, input.limit, (row) => row.updated_at.toISOString());
193
+ return { data: deepCopy(page.data), pagination: page.pagination };
194
+ }
195
+ async createTurn(input) {
196
+ const sKey = sessionKey(input.turn.session_id);
197
+ const stored = this.sessions.get(sKey);
198
+ if (!stored) {
199
+ throw new SessionNotFoundError(input.turn.session_id);
200
+ }
201
+ const previousTurnId = input.turn.previous_turn_id;
202
+ let previousSnapshot;
203
+ if (previousTurnId !== null) {
204
+ const prevKey = turnKey({ session_id: input.turn.session_id, turn_id: previousTurnId });
205
+ const prev = this.turns.get(prevKey);
206
+ if (prev !== void 0) {
207
+ if (prev.state.status === "running") {
208
+ throw new PreviousTurnRunningError(previousTurnId);
209
+ }
210
+ previousSnapshot = prev.snapshot;
211
+ }
212
+ }
213
+ const tKey = turnKey(input.turn);
214
+ if (this.turns.has(tKey)) {
215
+ throw new TurnAlreadyExistsError(input.turn.turn_id);
216
+ }
217
+ const snapshot = buildSnapshotFromDelta({
218
+ previousSnapshot,
219
+ new_threads: input.new_threads,
220
+ new_context_appends: input.new_context_appends,
221
+ capability_states: input.capability_states
222
+ });
223
+ const turnRecord = {
224
+ ...deepCopy(input.turn),
225
+ snapshot
226
+ };
227
+ this.turns.set(tKey, turnRecord);
228
+ this.events.set(tKey, []);
229
+ stored.turnIds.push(input.turn.turn_id);
230
+ stored.record.last_turn_id = input.turn.turn_id;
231
+ stored.record.last_activity_timestamp_ms = Date.now();
232
+ stored.record.updated_at = /* @__PURE__ */ new Date();
233
+ if (input.update_session_title_if_not_exist !== null && stored.record.title === null) {
234
+ stored.record.title = input.update_session_title_if_not_exist;
235
+ }
236
+ }
237
+ async freezeAndGetTurn(input) {
238
+ const tKey = turnKey(input);
239
+ const turn = this.requireTurn(input.session_id, input.turn_id);
240
+ if (turn.state.status === "running") {
241
+ const cancelledState = {
242
+ status: "cancelled",
243
+ reason: CancellationReason.CancelledForNextTurn,
244
+ completed_at: (/* @__PURE__ */ new Date()).toISOString()
245
+ };
246
+ turn.state = cancelledState;
247
+ turn.updated_at = /* @__PURE__ */ new Date();
248
+ const list = this.events.get(tKey);
249
+ if (list) {
250
+ list.push(deepCopy(input.turn_done_event));
251
+ }
252
+ }
253
+ return deepCopy(turn);
254
+ }
255
+ async getTurn(input) {
256
+ const turn = this.turns.get(turnKey(input));
257
+ return turn ? deepCopy(turn) : void 0;
258
+ }
259
+ async listTurns(input) {
260
+ const stored = this.sessions.get(sessionKey(input.session_id));
261
+ if (!stored) {
262
+ throw new SessionNotFoundError(input.session_id);
263
+ }
264
+ const records = stored.turnIds.map((id) => {
265
+ const turn = this.turns.get(turnKey({ session_id: input.session_id, turn_id: id }));
266
+ if (!turn) {
267
+ throw new TurnNotFoundError(id);
268
+ }
269
+ const { snapshot, ...row } = deepCopy(turn);
270
+ void snapshot;
271
+ return row;
272
+ });
273
+ return paginate(records, input.limit, input.page_token);
274
+ }
275
+ async updateTurnState(input) {
276
+ const tKey = turnKey(input);
277
+ const turn = this.requireTurn(input.session_id, input.turn_id);
278
+ if (turn.state.status !== "running") {
279
+ throw new TurnNotRunningError(input.turn_id, turn.state);
280
+ }
281
+ turn.state = deepCopy(input.state);
282
+ turn.updated_at = /* @__PURE__ */ new Date();
283
+ const list = this.events.get(tKey);
284
+ if (list) {
285
+ list.push(deepCopy(input.turn_done_event));
286
+ }
287
+ }
288
+ async appendToEvents(input) {
289
+ this.requireRunningTurn(input.session_id, input.turn_id);
290
+ const tKey = turnKey(input);
291
+ const list = this.events.get(tKey);
292
+ if (!list) {
293
+ throw new TurnNotFoundError(input.turn_id);
294
+ }
295
+ list.push(...deepCopy(input.events));
296
+ return;
297
+ }
298
+ requireTurn(sessionId, turnId) {
299
+ const turn = this.turns.get(turnKey({ session_id: sessionId, turn_id: turnId }));
300
+ if (!turn) {
301
+ throw new TurnNotFoundError(turnId);
302
+ }
303
+ return turn;
304
+ }
305
+ requireRunningTurn(sessionId, turnId) {
306
+ const turn = this.requireTurn(sessionId, turnId);
307
+ if (turn.state.status !== "running") {
308
+ throw new TurnNotRunningError(turnId, turn.state);
309
+ }
310
+ return turn;
311
+ }
312
+ async addThreads(input) {
313
+ const turn = this.requireRunningTurn(input.session_id, input.turn_id);
314
+ for (const thread of input.threads) {
315
+ turn.snapshot.threads[thread.thread_id] = deepCopy(thread);
316
+ }
317
+ turn.updated_at = /* @__PURE__ */ new Date();
318
+ return;
319
+ }
320
+ async removeThreads(input) {
321
+ if (input.thread_ids.length === 0) {
322
+ return;
323
+ }
324
+ const turn = this.requireRunningTurn(input.session_id, input.turn_id);
325
+ for (const id of input.thread_ids) {
326
+ Reflect.deleteProperty(turn.snapshot.threads, id);
327
+ }
328
+ turn.updated_at = /* @__PURE__ */ new Date();
329
+ return;
330
+ }
331
+ async appendToThreadContext(input) {
332
+ const turn = this.requireRunningTurn(input.session_id, input.turn_id);
333
+ const thread = turn.snapshot.threads[input.thread_id];
334
+ if (!thread) {
335
+ throw new SessionStoreInvariantError(`Thread not found: ${input.thread_id}`);
336
+ }
337
+ thread.context.push(...deepCopy(input.context));
338
+ if (input.current_context_usage !== null) {
339
+ thread.current_context_usage = deepCopy(input.current_context_usage);
340
+ }
341
+ if (input.completion !== null) {
342
+ thread.completion = deepCopy(input.completion);
343
+ }
344
+ turn.updated_at = /* @__PURE__ */ new Date();
345
+ return;
346
+ }
347
+ async overwriteThreadContext(input) {
348
+ const turn = this.requireRunningTurn(input.session_id, input.turn_id);
349
+ const threadId = input.event.thread_id;
350
+ const thread = turn.snapshot.threads[threadId];
351
+ if (!thread) {
352
+ throw new SessionStoreInvariantError(`Thread not found: ${threadId}`);
353
+ }
354
+ thread.context = deepCopy(input.event.context);
355
+ thread.current_context_usage = deepCopy(input.event.current_context_usage);
356
+ turn.updated_at = /* @__PURE__ */ new Date();
357
+ return;
358
+ }
359
+ async patchMCPServers(input) {
360
+ const turn = this.requireRunningTurn(input.session_id, input.turn_id);
361
+ turn.snapshot.mcp_servers ??= {};
362
+ for (const server of input.mcp_servers) {
363
+ turn.snapshot.mcp_servers[server.id] = deepCopy(server);
364
+ }
365
+ turn.updated_at = /* @__PURE__ */ new Date();
366
+ return;
367
+ }
368
+ async patchSandboxInfo(input) {
369
+ const turn = this.requireRunningTurn(input.session_id, input.turn_id);
370
+ turn.snapshot.sandbox_info = deepCopy(input.sandbox_info);
371
+ turn.updated_at = /* @__PURE__ */ new Date();
372
+ return;
373
+ }
374
+ async patchThreadCapabilityState(input) {
375
+ const turn = this.requireRunningTurn(input.session_id, input.turn_id);
376
+ const thread = turn.snapshot.threads[input.thread_id];
377
+ if (!thread) {
378
+ throw new SessionStoreInvariantError(`Thread not found: ${input.thread_id}`);
379
+ }
380
+ thread.capability_state ??= {};
381
+ if (input.state === null) {
382
+ Reflect.deleteProperty(thread.capability_state, input.key);
383
+ if (Object.keys(thread.capability_state).length === 0) {
384
+ thread.capability_state = null;
385
+ }
386
+ } else {
387
+ thread.capability_state[input.key] = deepCopy(input.state);
388
+ }
389
+ turn.updated_at = /* @__PURE__ */ new Date();
390
+ return;
391
+ }
392
+ async listTurnEvents(input) {
393
+ this.requireTurn(input.session_id, input.turn_id);
394
+ const list = this.events.get(turnKey(input));
395
+ if (!list) {
396
+ throw new TurnNotFoundError(input.turn_id);
397
+ }
398
+ const ordered = [...list].sort(
399
+ (a, b) => input.order === "desc" ? b.id.localeCompare(a.id) : a.id.localeCompare(b.id)
400
+ );
401
+ const page = paginate(ordered, input.limit, input.page_token);
402
+ return { data: deepCopy(page.data), pagination: page.pagination };
403
+ }
404
+ async listSessionEvents(input) {
405
+ const stored = this.sessions.get(sessionKey(input.session_id));
406
+ if (!stored) {
407
+ throw new SessionNotFoundError(input.session_id);
408
+ }
409
+ const decodedCursor = input.page_token === void 0 ? void 0 : decodeSessionEventPageToken(input.page_token);
410
+ const lastTurnId = decodedCursor?.last_turn_id ?? input.last_turn_id ?? stored.record.last_turn_id;
411
+ if (lastTurnId === null) {
412
+ return { data: [], pagination: { limit: input.limit } };
413
+ }
414
+ const cursor = {
415
+ last_turn_id: lastTurnId,
416
+ offset: decodedCursor?.offset ?? 0
417
+ };
418
+ const anchor = this.turns.get(turnKey({ session_id: input.session_id, turn_id: cursor.last_turn_id }));
419
+ if (!anchor) {
420
+ throw new TurnNotFoundError(cursor.last_turn_id);
421
+ }
422
+ const turnIds = this.resolveAncestorChain(input.session_id, anchor);
423
+ const flattened = [];
424
+ for (const turnId of [...turnIds].reverse()) {
425
+ const evts = this.events.get(turnKey({ session_id: input.session_id, turn_id: turnId })) ?? [];
426
+ for (const event of [...evts].sort((a, b) => b.id.localeCompare(a.id))) {
427
+ flattened.push({ turn_id: turnId, event });
428
+ }
429
+ }
430
+ const page = paginateSessionEventRows(
431
+ flattened.slice(cursor.offset, cursor.offset + input.limit + 1),
432
+ input.limit,
433
+ cursor
434
+ );
435
+ return { data: deepCopy(page.data), pagination: page.pagination };
436
+ }
437
+ /**
438
+ * Full chain (oldest first, anchor last). `ancestor_ids` may be only the
439
+ * previous N ancestors, so spill through the oldest ancestor's own window
440
+ * until a root or gap. A missing turn or repeated id ends the walk.
441
+ */
442
+ resolveAncestorChain(sessionId, anchor) {
443
+ const chain = [...anchor.ancestor_ids, anchor.turn_id];
444
+ const seen = new Set(chain);
445
+ let oldestId = chain[0];
446
+ while (oldestId && oldestId !== anchor.turn_id) {
447
+ const oldest = this.turns.get(turnKey({ session_id: sessionId, turn_id: oldestId }));
448
+ if (!oldest) break;
449
+ const older = oldest.ancestor_ids.filter((id) => !seen.has(id));
450
+ if (older.length === 0) break;
451
+ chain.unshift(...older);
452
+ for (const id of older) seen.add(id);
453
+ oldestId = older[0];
454
+ }
455
+ return chain;
456
+ }
457
+ };
458
+ export {
459
+ InMemorySessionStore
460
+ };
461
+ //# sourceMappingURL=InMemorySessionStore.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/agent-session/store/InMemorySessionStore.ts"],"sourcesContent":["import type { AgentThreadSnapshot } from '../../core/runtime/AgentThread.types';\nimport { getEmptyCurrentContextUsage } from '../../core/runtime/contextUsage';\nimport type { SessionRecord } from '../models/SessionRecord';\nimport type { TurnRecord, TurnSnapshot } from '../models/TurnRecord';\nimport type { PersistedTurnEvent, SessionEventItem } from '../schemas/events';\nimport type { TokenPagination } from '../schemas/pagination';\nimport { CancellationReason, type TerminalTurnState } from '../schemas/turn';\nimport { assertCreateTurnThreadDelta } from './assertCreateTurnThreadDelta';\nimport type {\n AddThreadsInput,\n AppendToEventsInput,\n AppendToThreadContextInput,\n CreateSessionInput,\n CreateTurnInput,\n DeleteSessionInput,\n FreezeAndGetTurnInput,\n GetSessionInput,\n GetTurnInput,\n ISessionStore,\n ListSessionEventsInput,\n ListSessionsInput,\n ListTurnEventsInput,\n ListTurnsInput,\n NewThreadInit,\n OverwriteThreadContextInput,\n PatchMCPServersInput,\n PatchSandboxInfoInput,\n PatchThreadCapabilityStateInput,\n RemoveThreadsInput,\n TurnContextAppend,\n TurnRecordWithoutSnapshot,\n UpdateSessionInput,\n UpdateTurnStateInput,\n} from './ISessionStore';\nimport { decodeOffsetPageToken, encodeOffsetPageToken } from './OffsetPageToken';\nimport {\n decodeSessionEventPageToken,\n paginateSessionEventRows,\n type SessionEventPageCursor,\n} from './SessionEventPageToken';\nimport { decodeSessionListPageToken, paginateSessionListRows } from './SessionListPageToken';\nimport {\n PreviousTurnRunningError,\n SessionAlreadyExistsError,\n SessionNotFoundError,\n SessionStoreInvariantError,\n TurnAlreadyExistsError,\n TurnNotFoundError,\n TurnNotRunningError,\n} from './SessionStoreErrors';\n\n/* eslint-disable @typescript-eslint/require-await -- in-memory store is synchronous; methods stay async so thrown SessionStore*Error reject as Promises for ISessionStore callers */\n\ntype StoredEvent = PersistedTurnEvent;\n\ninterface StoredSession<TSessionCustom extends object> {\n record: SessionRecord<TSessionCustom>;\n turnIds: string[];\n}\n\nfunction deepCopy<T>(value: T): T {\n return structuredClone(value);\n}\n\nfunction sessionKey(sessionId: string): string {\n return sessionId;\n}\n\nfunction turnKey({ session_id, turn_id }: { session_id: string; turn_id: string }): string {\n return `${session_id}:${turn_id}`;\n}\n\n/** Lexicographic session_id order — shared by listSessions sort and keyset filter. */\nfunction compareSessionId(a: string, b: string): number {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n}\n\nfunction newThreadSnapshot(thread: NewThreadInit): AgentThreadSnapshot {\n return {\n thread_id: thread.thread_id,\n parent: thread.parent ?? null,\n agent_info: thread.agent_info ?? null,\n capability_state: null,\n context: [],\n current_context_usage: getEmptyCurrentContextUsage(),\n completion: null,\n };\n}\n\nfunction applyContextAppends(threads: Record<string, AgentThreadSnapshot>, appends: TurnContextAppend[]): void {\n for (const append of appends) {\n const thread = threads[append.thread_id];\n if (!thread) {\n throw new SessionStoreInvariantError(`new_context_appends references unknown thread ${append.thread_id}`);\n }\n thread.context.push(...deepCopy(append.context));\n if (append.current_context_usage !== null) {\n thread.current_context_usage = deepCopy(append.current_context_usage);\n }\n }\n}\n\nfunction buildSnapshotFromDelta(input: {\n previousSnapshot: TurnSnapshot | undefined;\n new_threads: NewThreadInit[];\n new_context_appends: TurnContextAppend[];\n capability_states: CreateTurnInput['capability_states'];\n}): TurnSnapshot {\n const threads: Record<string, AgentThreadSnapshot> = input.previousSnapshot\n ? deepCopy(input.previousSnapshot.threads)\n : {};\n\n assertCreateTurnThreadDelta({\n previousThreadIds: new Set(Object.keys(threads)),\n new_threads: input.new_threads,\n new_context_appends: input.new_context_appends,\n capability_states: input.capability_states,\n });\n\n for (const nt of input.new_threads) {\n threads[nt.thread_id] = newThreadSnapshot(nt);\n }\n\n applyContextAppends(threads, input.new_context_appends);\n for (const capability of input.capability_states) {\n const thread = threads[capability.thread_id];\n if (thread === undefined) {\n throw new SessionStoreInvariantError(`capability_states references unknown thread ${capability.thread_id}`);\n }\n thread.capability_state = deepCopy(capability.capability_state);\n }\n\n return {\n threads,\n mcp_servers: input.previousSnapshot ? deepCopy(input.previousSnapshot.mcp_servers) : null,\n sandbox_info: input.previousSnapshot ? deepCopy(input.previousSnapshot.sandbox_info) : null,\n };\n}\n\nfunction paginate<T>(items: T[], limit: number, pageToken?: string): { data: T[]; pagination: TokenPagination } {\n const offset = decodeOffsetPageToken(pageToken);\n const slice = items.slice(offset, offset + limit);\n return {\n data: slice,\n pagination: {\n limit,\n ...(offset + limit < items.length ? { next_page_token: encodeOffsetPageToken(offset + limit) } : {}),\n ...(offset > 0 ? { previous_page_token: encodeOffsetPageToken(Math.max(0, offset - limit)) } : {}),\n },\n };\n}\n\n/**\n * Reference ISessionStore implementation. Proves the contract without SSE/subscription\n * hooks. Deep-copies on read/write boundaries so callers cannot mutate stored state.\n */\nexport class InMemorySessionStore<\n TSessionCustom extends object = Record<string, never>,\n TTurnCustom extends object = Record<string, never>,\n> implements ISessionStore<TSessionCustom, TTurnCustom> {\n private readonly sessions = new Map<string, StoredSession<TSessionCustom>>();\n private readonly turns = new Map<string, TurnRecord<TTurnCustom>>();\n private readonly events = new Map<string, StoredEvent[]>();\n\n async createSession(input: CreateSessionInput<TSessionCustom>): Promise<void> {\n const key = sessionKey(input.session_id);\n if (this.sessions.has(key)) {\n throw new SessionAlreadyExistsError(input.session_id);\n }\n const now = new Date();\n const record: SessionRecord<TSessionCustom> = {\n tenant_id: input.tenant_id,\n session_id: input.session_id,\n created_by: input.created_by,\n agent: deepCopy(input.agent),\n title: null,\n last_turn_id: null,\n created_at: now,\n updated_at: now,\n last_activity_timestamp_ms: Date.now(),\n custom: input.custom !== null ? deepCopy(input.custom) : null,\n };\n this.sessions.set(key, { record, turnIds: [] });\n return;\n }\n\n async deleteSession(input: DeleteSessionInput): Promise<void> {\n const sKey = sessionKey(input.session_id);\n const stored = this.sessions.get(sKey);\n if (stored?.record.tenant_id !== input.tenant_id) {\n return;\n }\n for (const turnId of stored.turnIds) {\n const tKey = turnKey({ session_id: input.session_id, turn_id: turnId });\n this.turns.delete(tKey);\n this.events.delete(tKey);\n }\n this.sessions.delete(sKey);\n }\n\n async getSession(input: GetSessionInput): Promise<SessionRecord<TSessionCustom> | undefined> {\n const stored = this.sessions.get(sessionKey(input.session_id));\n return stored?.record.tenant_id === input.tenant_id ? deepCopy(stored.record) : undefined;\n }\n\n async updateSession(input: UpdateSessionInput<TSessionCustom>): Promise<void> {\n const key = sessionKey(input.session_id);\n const stored = this.sessions.get(key);\n if (stored?.record.tenant_id !== input.tenant_id) {\n throw new SessionNotFoundError(input.session_id);\n }\n if (input.agent !== undefined) {\n if (stored.record.agent.type === 'reference') {\n throw new SessionStoreInvariantError(`Session ${input.session_id} is named; agent cannot be updated`);\n }\n stored.record.agent = deepCopy(input.agent);\n }\n if (input.title !== undefined) {\n stored.record.title = input.title;\n }\n const now = Date.now();\n stored.record.updated_at = new Date(now);\n stored.record.last_activity_timestamp_ms = now;\n return;\n }\n\n async listSessions(\n input: ListSessionsInput,\n ): Promise<{ data: SessionRecord<TSessionCustom>[]; pagination: TokenPagination }> {\n const records: SessionRecord<TSessionCustom>[] = [];\n for (const stored of this.sessions.values()) {\n if (stored.record.tenant_id !== input.tenant_id) continue;\n if (\n input.agent_id !== undefined &&\n (stored.record.agent.type !== 'reference' || stored.record.agent.id !== input.agent_id)\n ) {\n continue;\n }\n if (input.created_by !== undefined && stored.record.created_by !== input.created_by) {\n continue;\n }\n const createdAt = stored.record.created_at.getTime();\n if (input.start_timestamp !== undefined && createdAt < input.start_timestamp.getTime()) continue;\n if (input.end_timestamp !== undefined && createdAt > input.end_timestamp.getTime()) continue;\n records.push(stored.record);\n }\n records.sort((a, b) => {\n const aTime = a.updated_at.getTime();\n const bTime = b.updated_at.getTime();\n if (aTime !== bTime) {\n return input.order === 'asc' ? aTime - bTime : bTime - aTime;\n }\n // Same lexicographic order as the keyset predicate below (and Postgres/SQLite).\n return input.order === 'asc'\n ? compareSessionId(a.session_id, b.session_id)\n : compareSessionId(b.session_id, a.session_id);\n });\n\n let filtered = records;\n const cursor = decodeSessionListPageToken(input.page_token);\n if (cursor) {\n const cursorTime = new Date(cursor.updated_at).getTime();\n filtered = records.filter(record => {\n const t = record.updated_at.getTime();\n const idCmp = compareSessionId(record.session_id, cursor.session_id);\n if (input.order === 'asc') {\n return t > cursorTime || (t === cursorTime && idCmp > 0);\n }\n return t < cursorTime || (t === cursorTime && idCmp < 0);\n });\n }\n\n const page = paginateSessionListRows(filtered, input.limit, row => row.updated_at.toISOString());\n return { data: deepCopy(page.data), pagination: page.pagination };\n }\n\n async createTurn(input: CreateTurnInput<TTurnCustom>): Promise<void> {\n // Atomicity is free here: this body is fully synchronous, so Node's\n // run-to-completion guarantees it. Real backends must still use their own\n // locking/transactions to satisfy the ISessionStore createTurn contract.\n const sKey = sessionKey(input.turn.session_id);\n const stored = this.sessions.get(sKey);\n if (!stored) {\n throw new SessionNotFoundError(input.turn.session_id);\n }\n\n const previousTurnId = input.turn.previous_turn_id;\n let previousSnapshot: TurnSnapshot | undefined;\n if (previousTurnId !== null) {\n const prevKey = turnKey({ session_id: input.turn.session_id, turn_id: previousTurnId });\n const prev = this.turns.get(prevKey);\n // Unknown previous_turn_id is allowed (relaxed): treat as no inheritance.\n // A still-running previous must be frozen first.\n if (prev !== undefined) {\n if (prev.state.status === 'running') {\n throw new PreviousTurnRunningError(previousTurnId);\n }\n previousSnapshot = prev.snapshot;\n }\n }\n\n const tKey = turnKey(input.turn);\n if (this.turns.has(tKey)) {\n throw new TurnAlreadyExistsError(input.turn.turn_id);\n }\n\n const snapshot = buildSnapshotFromDelta({\n previousSnapshot,\n new_threads: input.new_threads,\n new_context_appends: input.new_context_appends,\n capability_states: input.capability_states,\n });\n\n const turnRecord: TurnRecord<TTurnCustom> = {\n ...deepCopy(input.turn),\n snapshot,\n };\n\n this.turns.set(tKey, turnRecord);\n this.events.set(tKey, []);\n stored.turnIds.push(input.turn.turn_id);\n stored.record.last_turn_id = input.turn.turn_id;\n stored.record.last_activity_timestamp_ms = Date.now();\n stored.record.updated_at = new Date();\n if (input.update_session_title_if_not_exist !== null && stored.record.title === null) {\n stored.record.title = input.update_session_title_if_not_exist;\n }\n }\n\n async freezeAndGetTurn(input: FreezeAndGetTurnInput): Promise<TurnRecord<TTurnCustom>> {\n const tKey = turnKey(input);\n const turn = this.requireTurn(input.session_id, input.turn_id);\n\n if (turn.state.status === 'running') {\n const cancelledState: TerminalTurnState = {\n status: 'cancelled',\n reason: CancellationReason.CancelledForNextTurn,\n completed_at: new Date().toISOString(),\n };\n turn.state = cancelledState;\n turn.updated_at = new Date();\n const list = this.events.get(tKey);\n if (list) {\n list.push(deepCopy(input.turn_done_event));\n }\n }\n\n return deepCopy(turn);\n }\n\n async getTurn(input: GetTurnInput): Promise<TurnRecord<TTurnCustom> | undefined> {\n const turn = this.turns.get(turnKey(input));\n return turn ? deepCopy(turn) : undefined;\n }\n\n async listTurns(\n input: ListTurnsInput,\n ): Promise<{ data: TurnRecordWithoutSnapshot<TTurnCustom>[]; pagination: TokenPagination }> {\n const stored = this.sessions.get(sessionKey(input.session_id));\n if (!stored) {\n throw new SessionNotFoundError(input.session_id);\n }\n const records = stored.turnIds.map(id => {\n const turn = this.turns.get(turnKey({ session_id: input.session_id, turn_id: id }));\n if (!turn) {\n throw new TurnNotFoundError(id);\n }\n const { snapshot, ...row } = deepCopy(turn);\n void snapshot;\n return row;\n });\n return paginate(records, input.limit, input.page_token);\n }\n\n async updateTurnState(input: UpdateTurnStateInput): Promise<void> {\n // Same as createTurn: synchronous body ⇒ atomic under run-to-completion.\n const tKey = turnKey(input);\n const turn = this.requireTurn(input.session_id, input.turn_id);\n if (turn.state.status !== 'running') {\n throw new TurnNotRunningError(input.turn_id, turn.state);\n }\n turn.state = deepCopy(input.state);\n turn.updated_at = new Date();\n const list = this.events.get(tKey);\n if (list) {\n list.push(deepCopy(input.turn_done_event));\n }\n }\n\n async appendToEvents(input: AppendToEventsInput): Promise<void> {\n this.requireRunningTurn(input.session_id, input.turn_id);\n const tKey = turnKey(input);\n const list = this.events.get(tKey);\n if (!list) {\n throw new TurnNotFoundError(input.turn_id);\n }\n list.push(...deepCopy(input.events));\n return;\n }\n\n private requireTurn(sessionId: string, turnId: string): TurnRecord<TTurnCustom> {\n const turn = this.turns.get(turnKey({ session_id: sessionId, turn_id: turnId }));\n if (!turn) {\n throw new TurnNotFoundError(turnId);\n }\n return turn;\n }\n\n private requireRunningTurn(sessionId: string, turnId: string): TurnRecord<TTurnCustom> {\n const turn = this.requireTurn(sessionId, turnId);\n if (turn.state.status !== 'running') {\n throw new TurnNotRunningError(turnId, turn.state);\n }\n return turn;\n }\n\n async addThreads(input: AddThreadsInput): Promise<void> {\n const turn = this.requireRunningTurn(input.session_id, input.turn_id);\n for (const thread of input.threads) {\n turn.snapshot.threads[thread.thread_id] = deepCopy(thread);\n }\n turn.updated_at = new Date();\n return;\n }\n\n async removeThreads(input: RemoveThreadsInput): Promise<void> {\n if (input.thread_ids.length === 0) {\n return;\n }\n const turn = this.requireRunningTurn(input.session_id, input.turn_id);\n for (const id of input.thread_ids) {\n Reflect.deleteProperty(turn.snapshot.threads, id);\n }\n turn.updated_at = new Date();\n return;\n }\n\n async appendToThreadContext(input: AppendToThreadContextInput): Promise<void> {\n const turn = this.requireRunningTurn(input.session_id, input.turn_id);\n const thread = turn.snapshot.threads[input.thread_id];\n if (!thread) {\n throw new SessionStoreInvariantError(`Thread not found: ${input.thread_id}`);\n }\n thread.context.push(...deepCopy(input.context));\n if (input.current_context_usage !== null) {\n thread.current_context_usage = deepCopy(input.current_context_usage);\n }\n if (input.completion !== null) {\n thread.completion = deepCopy(input.completion);\n }\n turn.updated_at = new Date();\n return;\n }\n\n async overwriteThreadContext(input: OverwriteThreadContextInput): Promise<void> {\n const turn = this.requireRunningTurn(input.session_id, input.turn_id);\n const threadId = input.event.thread_id;\n const thread = turn.snapshot.threads[threadId];\n if (!thread) {\n throw new SessionStoreInvariantError(`Thread not found: ${threadId}`);\n }\n thread.context = deepCopy(input.event.context);\n thread.current_context_usage = deepCopy(input.event.current_context_usage);\n turn.updated_at = new Date();\n return;\n }\n\n async patchMCPServers(input: PatchMCPServersInput): Promise<void> {\n const turn = this.requireRunningTurn(input.session_id, input.turn_id);\n turn.snapshot.mcp_servers ??= {};\n for (const server of input.mcp_servers) {\n turn.snapshot.mcp_servers[server.id] = deepCopy(server);\n }\n turn.updated_at = new Date();\n return;\n }\n\n async patchSandboxInfo(input: PatchSandboxInfoInput): Promise<void> {\n const turn = this.requireRunningTurn(input.session_id, input.turn_id);\n turn.snapshot.sandbox_info = deepCopy(input.sandbox_info);\n turn.updated_at = new Date();\n return;\n }\n\n async patchThreadCapabilityState(input: PatchThreadCapabilityStateInput): Promise<void> {\n const turn = this.requireRunningTurn(input.session_id, input.turn_id);\n const thread = turn.snapshot.threads[input.thread_id];\n if (!thread) {\n throw new SessionStoreInvariantError(`Thread not found: ${input.thread_id}`);\n }\n thread.capability_state ??= {};\n if (input.state === null) {\n Reflect.deleteProperty(thread.capability_state, input.key);\n if (Object.keys(thread.capability_state).length === 0) {\n thread.capability_state = null;\n }\n } else {\n thread.capability_state[input.key] = deepCopy(input.state);\n }\n turn.updated_at = new Date();\n return;\n }\n\n async listTurnEvents(input: ListTurnEventsInput): Promise<{\n data: PersistedTurnEvent[];\n pagination: TokenPagination;\n }> {\n this.requireTurn(input.session_id, input.turn_id);\n const list = this.events.get(turnKey(input));\n if (!list) {\n throw new TurnNotFoundError(input.turn_id);\n }\n const ordered = [...list].sort((a, b) =>\n input.order === 'desc' ? b.id.localeCompare(a.id) : a.id.localeCompare(b.id),\n );\n const page = paginate(ordered, input.limit, input.page_token);\n return { data: deepCopy(page.data), pagination: page.pagination };\n }\n\n async listSessionEvents(input: ListSessionEventsInput): Promise<{\n data: SessionEventItem[];\n pagination: TokenPagination;\n }> {\n const stored = this.sessions.get(sessionKey(input.session_id));\n if (!stored) {\n throw new SessionNotFoundError(input.session_id);\n }\n\n const decodedCursor = input.page_token === undefined ? undefined : decodeSessionEventPageToken(input.page_token);\n const lastTurnId = decodedCursor?.last_turn_id ?? input.last_turn_id ?? stored.record.last_turn_id;\n if (lastTurnId === null) {\n return { data: [], pagination: { limit: input.limit } };\n }\n const cursor: SessionEventPageCursor = {\n last_turn_id: lastTurnId,\n offset: decodedCursor?.offset ?? 0,\n };\n\n const anchor = this.turns.get(turnKey({ session_id: input.session_id, turn_id: cursor.last_turn_id }));\n if (!anchor) {\n throw new TurnNotFoundError(cursor.last_turn_id);\n }\n const turnIds = this.resolveAncestorChain(input.session_id, anchor);\n const flattened: SessionEventItem[] = [];\n for (const turnId of [...turnIds].reverse()) {\n const evts = this.events.get(turnKey({ session_id: input.session_id, turn_id: turnId })) ?? [];\n for (const event of [...evts].sort((a, b) => b.id.localeCompare(a.id))) {\n flattened.push({ turn_id: turnId, event });\n }\n }\n const page = paginateSessionEventRows(\n flattened.slice(cursor.offset, cursor.offset + input.limit + 1),\n input.limit,\n cursor,\n );\n return { data: deepCopy(page.data), pagination: page.pagination };\n }\n\n /**\n * Full chain (oldest first, anchor last). `ancestor_ids` may be only the\n * previous N ancestors, so spill through the oldest ancestor's own window\n * until a root or gap. A missing turn or repeated id ends the walk.\n */\n private resolveAncestorChain(sessionId: string, anchor: TurnRecord<TTurnCustom>): string[] {\n const chain = [...anchor.ancestor_ids, anchor.turn_id];\n const seen = new Set(chain);\n let oldestId = chain[0];\n while (oldestId && oldestId !== anchor.turn_id) {\n const oldest = this.turns.get(turnKey({ session_id: sessionId, turn_id: oldestId }));\n if (!oldest) break;\n const older = oldest.ancestor_ids.filter(id => !seen.has(id));\n if (older.length === 0) break;\n chain.unshift(...older);\n for (const id of older) seen.add(id);\n oldestId = older[0];\n }\n return chain;\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,13 @@
1
+ import { z } from 'zod';
2
+ import type { TokenPagination } from '../schemas/pagination';
3
+ export declare const OffsetPageCursorSchema: z.ZodObject<{
4
+ offset: z.ZodNumber;
5
+ }, z.core.$strict>;
6
+ export type OffsetPageCursor = z.infer<typeof OffsetPageCursorSchema>;
7
+ export declare function encodeOffsetPageToken(offset: number): string;
8
+ export declare function decodeOffsetPageToken(token: string | undefined): number;
9
+ export declare function paginateOffsetRows<T>(rows: T[], limit: number, offset: number): {
10
+ data: T[];
11
+ pagination: TokenPagination;
12
+ };
13
+ //# sourceMappingURL=OffsetPageToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OffsetPageToken.d.ts","sourceRoot":"","sources":["../../../src/agent-session/store/OffsetPageToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,eAAO,MAAM,sBAAsB;;kBAIxB,CAAC;AAEZ,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGvE;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,IAAI,EAAE,CAAC,EAAE,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb;IAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAAC,UAAU,EAAE,eAAe,CAAA;CAAE,CAW5C"}
@@ -0,0 +1,60 @@
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/agent-session/store/OffsetPageToken.ts
21
+ var OffsetPageToken_exports = {};
22
+ __export(OffsetPageToken_exports, {
23
+ OffsetPageCursorSchema: () => OffsetPageCursorSchema,
24
+ decodeOffsetPageToken: () => decodeOffsetPageToken,
25
+ encodeOffsetPageToken: () => encodeOffsetPageToken,
26
+ paginateOffsetRows: () => paginateOffsetRows
27
+ });
28
+ module.exports = __toCommonJS(OffsetPageToken_exports);
29
+ var import_zod = require("zod");
30
+ var import_PageToken = require("./PageToken.js");
31
+ var OffsetPageCursorSchema = import_zod.z.object({
32
+ offset: import_zod.z.number().int().nonnegative()
33
+ }).strict();
34
+ function encodeOffsetPageToken(offset) {
35
+ return (0, import_PageToken.encodePageToken)(OffsetPageCursorSchema, { offset });
36
+ }
37
+ function decodeOffsetPageToken(token) {
38
+ if (token === void 0 || token === "") return 0;
39
+ return (0, import_PageToken.decodePageToken)(OffsetPageCursorSchema, token).offset;
40
+ }
41
+ function paginateOffsetRows(rows, limit, offset) {
42
+ const hasMore = rows.length > limit;
43
+ const data = hasMore ? rows.slice(0, limit) : rows;
44
+ return {
45
+ data,
46
+ pagination: {
47
+ limit,
48
+ ...hasMore ? { next_page_token: encodeOffsetPageToken(offset + limit) } : {},
49
+ ...offset > 0 ? { previous_page_token: encodeOffsetPageToken(Math.max(0, offset - limit)) } : {}
50
+ }
51
+ };
52
+ }
53
+ // Annotate the CommonJS export names for ESM import in node:
54
+ 0 && (module.exports = {
55
+ OffsetPageCursorSchema,
56
+ decodeOffsetPageToken,
57
+ encodeOffsetPageToken,
58
+ paginateOffsetRows
59
+ });
60
+ //# sourceMappingURL=OffsetPageToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/agent-session/store/OffsetPageToken.ts"],"sourcesContent":["import { z } from 'zod';\nimport type { TokenPagination } from '../schemas/pagination';\nimport { decodePageToken, encodePageToken } from './PageToken';\n\nexport const OffsetPageCursorSchema = z\n .object({\n offset: z.number().int().nonnegative(),\n })\n .strict();\n\nexport type OffsetPageCursor = z.infer<typeof OffsetPageCursorSchema>;\n\nexport function encodeOffsetPageToken(offset: number): string {\n return encodePageToken(OffsetPageCursorSchema, { offset });\n}\n\nexport function decodeOffsetPageToken(token: string | undefined): number {\n if (token === undefined || token === '') return 0;\n return decodePageToken(OffsetPageCursorSchema, token).offset;\n}\n\nexport function paginateOffsetRows<T>(\n rows: T[],\n limit: number,\n offset: number,\n): { data: T[]; pagination: TokenPagination } {\n const hasMore = rows.length > limit;\n const data = hasMore ? rows.slice(0, limit) : rows;\n return {\n data,\n pagination: {\n limit,\n ...(hasMore ? { next_page_token: encodeOffsetPageToken(offset + limit) } : {}),\n ...(offset > 0 ? { previous_page_token: encodeOffsetPageToken(Math.max(0, offset - limit)) } : {}),\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAkB;AAElB,uBAAiD;AAE1C,IAAM,yBAAyB,aACnC,OAAO;AAAA,EACN,QAAQ,aAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AACvC,CAAC,EACA,OAAO;AAIH,SAAS,sBAAsB,QAAwB;AAC5D,aAAO,kCAAgB,wBAAwB,EAAE,OAAO,CAAC;AAC3D;AAEO,SAAS,sBAAsB,OAAmC;AACvE,MAAI,UAAU,UAAa,UAAU,GAAI,QAAO;AAChD,aAAO,kCAAgB,wBAAwB,KAAK,EAAE;AACxD;AAEO,SAAS,mBACd,MACA,OACA,QAC4C;AAC5C,QAAM,UAAU,KAAK,SAAS;AAC9B,QAAM,OAAO,UAAU,KAAK,MAAM,GAAG,KAAK,IAAI;AAC9C,SAAO;AAAA,IACL;AAAA,IACA,YAAY;AAAA,MACV;AAAA,MACA,GAAI,UAAU,EAAE,iBAAiB,sBAAsB,SAAS,KAAK,EAAE,IAAI,CAAC;AAAA,MAC5E,GAAI,SAAS,IAAI,EAAE,qBAAqB,sBAAsB,KAAK,IAAI,GAAG,SAAS,KAAK,CAAC,EAAE,IAAI,CAAC;AAAA,IAClG;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,32 @@
1
+ // src/agent-session/store/OffsetPageToken.ts
2
+ import { z } from "zod";
3
+ import { decodePageToken, encodePageToken } from "./PageToken.mjs";
4
+ var OffsetPageCursorSchema = z.object({
5
+ offset: z.number().int().nonnegative()
6
+ }).strict();
7
+ function encodeOffsetPageToken(offset) {
8
+ return encodePageToken(OffsetPageCursorSchema, { offset });
9
+ }
10
+ function decodeOffsetPageToken(token) {
11
+ if (token === void 0 || token === "") return 0;
12
+ return decodePageToken(OffsetPageCursorSchema, token).offset;
13
+ }
14
+ function paginateOffsetRows(rows, limit, offset) {
15
+ const hasMore = rows.length > limit;
16
+ const data = hasMore ? rows.slice(0, limit) : rows;
17
+ return {
18
+ data,
19
+ pagination: {
20
+ limit,
21
+ ...hasMore ? { next_page_token: encodeOffsetPageToken(offset + limit) } : {},
22
+ ...offset > 0 ? { previous_page_token: encodeOffsetPageToken(Math.max(0, offset - limit)) } : {}
23
+ }
24
+ };
25
+ }
26
+ export {
27
+ OffsetPageCursorSchema,
28
+ decodeOffsetPageToken,
29
+ encodeOffsetPageToken,
30
+ paginateOffsetRows
31
+ };
32
+ //# sourceMappingURL=OffsetPageToken.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/agent-session/store/OffsetPageToken.ts"],"sourcesContent":["import { z } from 'zod';\nimport type { TokenPagination } from '../schemas/pagination';\nimport { decodePageToken, encodePageToken } from './PageToken';\n\nexport const OffsetPageCursorSchema = z\n .object({\n offset: z.number().int().nonnegative(),\n })\n .strict();\n\nexport type OffsetPageCursor = z.infer<typeof OffsetPageCursorSchema>;\n\nexport function encodeOffsetPageToken(offset: number): string {\n return encodePageToken(OffsetPageCursorSchema, { offset });\n}\n\nexport function decodeOffsetPageToken(token: string | undefined): number {\n if (token === undefined || token === '') return 0;\n return decodePageToken(OffsetPageCursorSchema, token).offset;\n}\n\nexport function paginateOffsetRows<T>(\n rows: T[],\n limit: number,\n offset: number,\n): { data: T[]; pagination: TokenPagination } {\n const hasMore = rows.length > limit;\n const data = hasMore ? rows.slice(0, limit) : rows;\n return {\n data,\n pagination: {\n limit,\n ...(hasMore ? { next_page_token: encodeOffsetPageToken(offset + limit) } : {}),\n ...(offset > 0 ? { previous_page_token: encodeOffsetPageToken(Math.max(0, offset - limit)) } : {}),\n },\n };\n}\n"],"mappings":";AAAA,SAAS,SAAS;AAElB,SAAS,iBAAiB,uBAAuB;AAE1C,IAAM,yBAAyB,EACnC,OAAO;AAAA,EACN,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AACvC,CAAC,EACA,OAAO;AAIH,SAAS,sBAAsB,QAAwB;AAC5D,SAAO,gBAAgB,wBAAwB,EAAE,OAAO,CAAC;AAC3D;AAEO,SAAS,sBAAsB,OAAmC;AACvE,MAAI,UAAU,UAAa,UAAU,GAAI,QAAO;AAChD,SAAO,gBAAgB,wBAAwB,KAAK,EAAE;AACxD;AAEO,SAAS,mBACd,MACA,OACA,QAC4C;AAC5C,QAAM,UAAU,KAAK,SAAS;AAC9B,QAAM,OAAO,UAAU,KAAK,MAAM,GAAG,KAAK,IAAI;AAC9C,SAAO;AAAA,IACL;AAAA,IACA,YAAY;AAAA,MACV;AAAA,MACA,GAAI,UAAU,EAAE,iBAAiB,sBAAsB,SAAS,KAAK,EAAE,IAAI,CAAC;AAAA,MAC5E,GAAI,SAAS,IAAI,EAAE,qBAAqB,sBAAsB,KAAK,IAAI,GAAG,SAAS,KAAK,CAAC,EAAE,IAAI,CAAC;AAAA,IAClG;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,4 @@
1
+ import type { z } from 'zod';
2
+ export declare function encodePageToken<Output>(schema: z.ZodType<Output>, value: Output): string;
3
+ export declare function decodePageToken<Output>(schema: z.ZodType<Output>, token: string): Output;
4
+ //# sourceMappingURL=PageToken.d.ts.map