@undefineds.co/xpod 0.3.58 → 0.3.61

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 (776) hide show
  1. package/README.md +3 -0
  2. package/config/cli.json +88 -0
  3. package/config/cloud.json +32 -1
  4. package/config/components-ignore.json +3 -0
  5. package/config/extensions.local.initializer.json +44 -0
  6. package/config/resolver.json +86 -0
  7. package/config/xpod.base.json +4 -0
  8. package/dist/agents/AgentExecutorFactory.d.ts +3 -3
  9. package/dist/agents/AgentExecutorFactory.js +28 -15
  10. package/dist/agents/AgentExecutorFactory.js.map +1 -1
  11. package/dist/agents/BaseAgentExecutor.d.ts +2 -1
  12. package/dist/agents/BaseAgentExecutor.js +1 -0
  13. package/dist/agents/BaseAgentExecutor.js.map +1 -1
  14. package/dist/agents/ClaudeExecutor.d.ts +3 -1
  15. package/dist/agents/ClaudeExecutor.js +18 -12
  16. package/dist/agents/ClaudeExecutor.js.map +1 -1
  17. package/dist/agents/config/resolve.js +0 -21
  18. package/dist/agents/config/resolve.js.map +1 -1
  19. package/dist/agents/config/types.d.ts +2 -7
  20. package/dist/agents/config/types.js +2 -1
  21. package/dist/agents/config/types.js.map +1 -1
  22. package/dist/agents/types.d.ts +18 -0
  23. package/dist/agents/types.js.map +1 -1
  24. package/dist/ai/schema/types.d.ts +2 -1
  25. package/dist/ai/schema/types.js +1 -0
  26. package/dist/ai/schema/types.js.map +1 -1
  27. package/dist/ai/service/CredentialReader.d.ts +3 -1
  28. package/dist/ai/service/CredentialReader.js.map +1 -1
  29. package/dist/ai/service/CredentialReaderImpl.d.ts +3 -1
  30. package/dist/ai/service/CredentialReaderImpl.js +24 -2
  31. package/dist/ai/service/CredentialReaderImpl.js.map +1 -1
  32. package/dist/ai/service/EmbeddingServiceImpl.js +13 -2
  33. package/dist/ai/service/EmbeddingServiceImpl.js.map +1 -1
  34. package/dist/ai/service/ProviderRegistry.d.ts +4 -0
  35. package/dist/ai/service/ProviderRegistry.js.map +1 -1
  36. package/dist/ai/service/ProviderRegistry.jsonld +4 -0
  37. package/dist/ai/service/ProviderRegistryImpl.d.ts +4 -1
  38. package/dist/ai/service/ProviderRegistryImpl.js +26 -4
  39. package/dist/ai/service/ProviderRegistryImpl.js.map +1 -1
  40. package/dist/ai/service/ProviderRegistryImpl.jsonld +12 -0
  41. package/dist/ai/service/defaultEmbeddingProfile.d.ts +5 -0
  42. package/dist/ai/service/defaultEmbeddingProfile.js +31 -0
  43. package/dist/ai/service/defaultEmbeddingProfile.js.map +1 -0
  44. package/dist/ai/service/index.d.ts +1 -0
  45. package/dist/ai/service/index.js +1 -0
  46. package/dist/ai/service/index.js.map +1 -1
  47. package/dist/ai/service/types.d.ts +1 -0
  48. package/dist/ai/service/types.js.map +1 -1
  49. package/dist/api/ApiServer.js +17 -2
  50. package/dist/api/ApiServer.js.map +1 -1
  51. package/dist/api/ai-gateway/AiGatewayService.d.ts +106 -0
  52. package/dist/api/ai-gateway/AiGatewayService.js +527 -0
  53. package/dist/api/ai-gateway/AiGatewayService.js.map +1 -0
  54. package/dist/api/ai-gateway/auth/AiConnectionInvocationKeyIssuer.d.ts +38 -0
  55. package/dist/api/ai-gateway/auth/AiConnectionInvocationKeyIssuer.js +128 -0
  56. package/dist/api/ai-gateway/auth/AiConnectionInvocationKeyIssuer.js.map +1 -0
  57. package/dist/api/ai-gateway/auth/ClientCredentialsInternalPodAccessTokenProvider.d.ts +25 -0
  58. package/dist/api/ai-gateway/auth/ClientCredentialsInternalPodAccessTokenProvider.js +91 -0
  59. package/dist/api/ai-gateway/auth/ClientCredentialsInternalPodAccessTokenProvider.js.map +1 -0
  60. package/dist/api/ai-gateway/auth/GatewayApiKey.d.ts +28 -0
  61. package/dist/api/ai-gateway/auth/GatewayApiKey.js +162 -0
  62. package/dist/api/ai-gateway/auth/GatewayApiKey.js.map +1 -0
  63. package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.d.ts +56 -0
  64. package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.js +143 -0
  65. package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.js.map +1 -0
  66. package/dist/api/ai-gateway/auth/GatewayKeyLocatorCodec.d.ts +26 -0
  67. package/dist/api/ai-gateway/auth/GatewayKeyLocatorCodec.js +97 -0
  68. package/dist/api/ai-gateway/auth/GatewayKeyLocatorCodec.js.map +1 -0
  69. package/dist/api/ai-gateway/auth/GatewayPrincipal.d.ts +20 -0
  70. package/dist/api/ai-gateway/auth/GatewayPrincipal.js +37 -0
  71. package/dist/api/ai-gateway/auth/GatewayPrincipal.js.map +1 -0
  72. package/dist/api/ai-gateway/auth/InvocationTokenCodec.d.ts +41 -0
  73. package/dist/api/ai-gateway/auth/InvocationTokenCodec.js +221 -0
  74. package/dist/api/ai-gateway/auth/InvocationTokenCodec.js.map +1 -0
  75. package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.d.ts +54 -0
  76. package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.js +152 -0
  77. package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.js.map +1 -0
  78. package/dist/api/ai-gateway/connect/index.d.ts +367 -0
  79. package/dist/api/ai-gateway/connect/index.js +1061 -0
  80. package/dist/api/ai-gateway/connect/index.js.map +1 -0
  81. package/dist/api/ai-gateway/credentials/CloudKmsWrapper.d.ts +40 -0
  82. package/dist/api/ai-gateway/credentials/CloudKmsWrapper.js +59 -0
  83. package/dist/api/ai-gateway/credentials/CloudKmsWrapper.js.map +1 -0
  84. package/dist/api/ai-gateway/credentials/CredentialVault.d.ts +14 -0
  85. package/dist/api/ai-gateway/credentials/CredentialVault.js +11 -0
  86. package/dist/api/ai-gateway/credentials/CredentialVault.js.map +1 -0
  87. package/dist/api/ai-gateway/credentials/KeyWrapper.d.ts +27 -0
  88. package/dist/api/ai-gateway/credentials/KeyWrapper.js +3 -0
  89. package/dist/api/ai-gateway/credentials/KeyWrapper.js.map +1 -0
  90. package/dist/api/ai-gateway/credentials/LocalKeychainWrapper.d.ts +27 -0
  91. package/dist/api/ai-gateway/credentials/LocalKeychainWrapper.js +145 -0
  92. package/dist/api/ai-gateway/credentials/LocalKeychainWrapper.js.map +1 -0
  93. package/dist/api/ai-gateway/credentials/SecretCellCredentialVault.d.ts +13 -0
  94. package/dist/api/ai-gateway/credentials/SecretCellCredentialVault.js +133 -0
  95. package/dist/api/ai-gateway/credentials/SecretCellCredentialVault.js.map +1 -0
  96. package/dist/api/ai-gateway/credentials/SecretCellKeyWrapper.d.ts +23 -0
  97. package/dist/api/ai-gateway/credentials/SecretCellKeyWrapper.js +62 -0
  98. package/dist/api/ai-gateway/credentials/SecretCellKeyWrapper.js.map +1 -0
  99. package/dist/api/ai-gateway/credentials/WebCryptoCredentialVault.d.ts +23 -0
  100. package/dist/api/ai-gateway/credentials/WebCryptoCredentialVault.js +173 -0
  101. package/dist/api/ai-gateway/credentials/WebCryptoCredentialVault.js.map +1 -0
  102. package/dist/api/ai-gateway/errors.d.ts +21 -0
  103. package/dist/api/ai-gateway/errors.js +50 -0
  104. package/dist/api/ai-gateway/errors.js.map +1 -0
  105. package/dist/api/ai-gateway/protocol/ChatCompletionsFrontend.d.ts +6 -0
  106. package/dist/api/ai-gateway/protocol/ChatCompletionsFrontend.js +111 -0
  107. package/dist/api/ai-gateway/protocol/ChatCompletionsFrontend.js.map +1 -0
  108. package/dist/api/ai-gateway/protocol/MessagesFrontend.d.ts +6 -0
  109. package/dist/api/ai-gateway/protocol/MessagesFrontend.js +99 -0
  110. package/dist/api/ai-gateway/protocol/MessagesFrontend.js.map +1 -0
  111. package/dist/api/ai-gateway/protocol/ResponsesFrontend.d.ts +6 -0
  112. package/dist/api/ai-gateway/protocol/ResponsesFrontend.js +232 -0
  113. package/dist/api/ai-gateway/protocol/ResponsesFrontend.js.map +1 -0
  114. package/dist/api/ai-gateway/protocol/index.d.ts +3 -0
  115. package/dist/api/ai-gateway/protocol/index.js +10 -0
  116. package/dist/api/ai-gateway/protocol/index.js.map +1 -0
  117. package/dist/api/ai-gateway/providers/AnthropicRuntimeAdapter.d.ts +7 -0
  118. package/dist/api/ai-gateway/providers/AnthropicRuntimeAdapter.js +37 -0
  119. package/dist/api/ai-gateway/providers/AnthropicRuntimeAdapter.js.map +1 -0
  120. package/dist/api/ai-gateway/providers/BailianRuntimeAdapter.d.ts +9 -0
  121. package/dist/api/ai-gateway/providers/BailianRuntimeAdapter.js +127 -0
  122. package/dist/api/ai-gateway/providers/BailianRuntimeAdapter.js.map +1 -0
  123. package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.d.ts +8 -0
  124. package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.js +47 -0
  125. package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.js.map +1 -0
  126. package/dist/api/ai-gateway/providers/KimiRuntimeAdapter.d.ts +8 -0
  127. package/dist/api/ai-gateway/providers/KimiRuntimeAdapter.js +57 -0
  128. package/dist/api/ai-gateway/providers/KimiRuntimeAdapter.js.map +1 -0
  129. package/dist/api/ai-gateway/providers/OpenAiCompatibleRuntimeAdapter.d.ts +1 -0
  130. package/dist/api/ai-gateway/providers/OpenAiCompatibleRuntimeAdapter.js +6 -0
  131. package/dist/api/ai-gateway/providers/OpenAiCompatibleRuntimeAdapter.js.map +1 -0
  132. package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.d.ts +13 -0
  133. package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.js +34 -0
  134. package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.js.map +1 -0
  135. package/dist/api/ai-gateway/providers/ProviderRegistry.d.ts +68 -0
  136. package/dist/api/ai-gateway/providers/ProviderRegistry.js +288 -0
  137. package/dist/api/ai-gateway/providers/ProviderRegistry.js.map +1 -0
  138. package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.d.ts +88 -0
  139. package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.js +645 -0
  140. package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.js.map +1 -0
  141. package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.d.ts +13 -0
  142. package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.js +48 -0
  143. package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.js.map +1 -0
  144. package/dist/api/ai-gateway/providers/index.d.ts +9 -0
  145. package/dist/api/ai-gateway/providers/index.js +26 -0
  146. package/dist/api/ai-gateway/providers/index.js.map +1 -0
  147. package/dist/api/ai-gateway/quota/AnthropicQuotaAdapter.d.ts +5 -0
  148. package/dist/api/ai-gateway/quota/AnthropicQuotaAdapter.js +21 -0
  149. package/dist/api/ai-gateway/quota/AnthropicQuotaAdapter.js.map +1 -0
  150. package/dist/api/ai-gateway/quota/BailianQuotaAdapter.d.ts +5 -0
  151. package/dist/api/ai-gateway/quota/BailianQuotaAdapter.js +21 -0
  152. package/dist/api/ai-gateway/quota/BailianQuotaAdapter.js.map +1 -0
  153. package/dist/api/ai-gateway/quota/DeepSeekQuotaAdapter.d.ts +10 -0
  154. package/dist/api/ai-gateway/quota/DeepSeekQuotaAdapter.js +83 -0
  155. package/dist/api/ai-gateway/quota/DeepSeekQuotaAdapter.js.map +1 -0
  156. package/dist/api/ai-gateway/quota/KimiQuotaAdapter.d.ts +10 -0
  157. package/dist/api/ai-gateway/quota/KimiQuotaAdapter.js +70 -0
  158. package/dist/api/ai-gateway/quota/KimiQuotaAdapter.js.map +1 -0
  159. package/dist/api/ai-gateway/quota/OpenAiQuotaAdapter.d.ts +5 -0
  160. package/dist/api/ai-gateway/quota/OpenAiQuotaAdapter.js +21 -0
  161. package/dist/api/ai-gateway/quota/OpenAiQuotaAdapter.js.map +1 -0
  162. package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.d.ts +214 -0
  163. package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.js +511 -0
  164. package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.js.map +1 -0
  165. package/dist/api/ai-gateway/quota/index.d.ts +6 -0
  166. package/dist/api/ai-gateway/quota/index.js +23 -0
  167. package/dist/api/ai-gateway/quota/index.js.map +1 -0
  168. package/dist/api/ai-gateway/routing/InMemorySessionAffinityStore.d.ts +26 -0
  169. package/dist/api/ai-gateway/routing/InMemorySessionAffinityStore.js +67 -0
  170. package/dist/api/ai-gateway/routing/InMemorySessionAffinityStore.js.map +1 -0
  171. package/dist/api/ai-gateway/routing/ModelRouter.d.ts +84 -0
  172. package/dist/api/ai-gateway/routing/ModelRouter.js +274 -0
  173. package/dist/api/ai-gateway/routing/ModelRouter.js.map +1 -0
  174. package/dist/api/ai-gateway/routing/RedisSessionAffinityStore.d.ts +39 -0
  175. package/dist/api/ai-gateway/routing/RedisSessionAffinityStore.js +122 -0
  176. package/dist/api/ai-gateway/routing/RedisSessionAffinityStore.js.map +1 -0
  177. package/dist/api/ai-gateway/routing/SessionAffinityStore.d.ts +49 -0
  178. package/dist/api/ai-gateway/routing/SessionAffinityStore.js +66 -0
  179. package/dist/api/ai-gateway/routing/SessionAffinityStore.js.map +1 -0
  180. package/dist/api/ai-gateway/service-access/AiConnectionServiceAccess.d.ts +25 -0
  181. package/dist/api/ai-gateway/service-access/AiConnectionServiceAccess.js +50 -0
  182. package/dist/api/ai-gateway/service-access/AiConnectionServiceAccess.js.map +1 -0
  183. package/dist/api/ai-gateway/types.d.ts +112 -0
  184. package/dist/api/ai-gateway/types.js +305 -0
  185. package/dist/api/ai-gateway/types.js.map +1 -0
  186. package/dist/api/auth/AuthContext.d.ts +18 -3
  187. package/dist/api/auth/AuthContext.js +13 -2
  188. package/dist/api/auth/AuthContext.js.map +1 -1
  189. package/dist/api/auth/Authenticator.d.ts +3 -0
  190. package/dist/api/auth/Authenticator.js.map +1 -1
  191. package/dist/api/auth/ClientCredentialsAuthenticator.d.ts +2 -6
  192. package/dist/api/auth/ClientCredentialsAuthenticator.js +12 -30
  193. package/dist/api/auth/ClientCredentialsAuthenticator.js.map +1 -1
  194. package/dist/api/auth/SolidTokenAuthenticator.d.ts +2 -0
  195. package/dist/api/auth/SolidTokenAuthenticator.js +88 -2
  196. package/dist/api/auth/SolidTokenAuthenticator.js.map +1 -1
  197. package/dist/api/auth/TokenIdentity.d.ts +6 -0
  198. package/dist/api/auth/TokenIdentity.js +31 -0
  199. package/dist/api/auth/TokenIdentity.js.map +1 -0
  200. package/dist/api/chatkit/ai-provider.d.ts +9 -23
  201. package/dist/api/chatkit/ai-provider.js +30 -153
  202. package/dist/api/chatkit/ai-provider.js.map +1 -1
  203. package/dist/api/chatkit/default-agent.d.ts +24 -15
  204. package/dist/api/chatkit/default-agent.js +24 -83
  205. package/dist/api/chatkit/default-agent.js.map +1 -1
  206. package/dist/api/chatkit/index.d.ts +2 -1
  207. package/dist/api/chatkit/index.js +3 -1
  208. package/dist/api/chatkit/index.js.map +1 -1
  209. package/dist/api/chatkit/pod-store.d.ts +13 -1
  210. package/dist/api/chatkit/pod-store.js +127 -7
  211. package/dist/api/chatkit/pod-store.js.map +1 -1
  212. package/dist/api/chatkit/runtime/AcpAgentRuntime.d.ts +0 -1
  213. package/dist/api/chatkit/runtime/AcpAgentRuntime.js +14 -51
  214. package/dist/api/chatkit/runtime/AcpAgentRuntime.js.map +1 -1
  215. package/dist/api/chatkit/runtime/AcpRunner.js +2 -1
  216. package/dist/api/chatkit/runtime/AcpRunner.js.map +1 -1
  217. package/dist/api/chatkit/runtime/CodexRuntimeProjector.d.ts +15 -1
  218. package/dist/api/chatkit/runtime/CodexRuntimeProjector.js +52 -34
  219. package/dist/api/chatkit/runtime/CodexRuntimeProjector.js.map +1 -1
  220. package/dist/api/chatkit/service.d.ts +8 -1
  221. package/dist/api/chatkit/service.js +46 -5
  222. package/dist/api/chatkit/service.js.map +1 -1
  223. package/dist/api/chatkit/store.d.ts +23 -1
  224. package/dist/api/chatkit/store.js +56 -0
  225. package/dist/api/chatkit/store.js.map +1 -1
  226. package/dist/api/chatkit/types.d.ts +1 -0
  227. package/dist/api/chatkit/types.js.map +1 -1
  228. package/dist/api/container/common.js +286 -13
  229. package/dist/api/container/common.js.map +1 -1
  230. package/dist/api/container/index.js +126 -6
  231. package/dist/api/container/index.js.map +1 -1
  232. package/dist/api/container/local.js +50 -6
  233. package/dist/api/container/local.js.map +1 -1
  234. package/dist/api/container/rdf.d.ts +15 -0
  235. package/dist/api/container/rdf.js +90 -0
  236. package/dist/api/container/rdf.js.map +1 -0
  237. package/dist/api/container/routes.js +151 -11
  238. package/dist/api/container/routes.js.map +1 -1
  239. package/dist/api/container/types.d.ts +96 -0
  240. package/dist/api/container/types.js.map +1 -1
  241. package/dist/api/handlers/AdminHandler.d.ts +25 -2
  242. package/dist/api/handlers/AdminHandler.js +60 -10
  243. package/dist/api/handlers/AdminHandler.js.map +1 -1
  244. package/dist/api/handlers/AiClientConfigurationHandler.d.ts +7 -0
  245. package/dist/api/handlers/AiClientConfigurationHandler.js +202 -0
  246. package/dist/api/handlers/AiClientConfigurationHandler.js.map +1 -0
  247. package/dist/api/handlers/AiGatewayHandler.d.ts +23 -0
  248. package/dist/api/handlers/AiGatewayHandler.js +231 -0
  249. package/dist/api/handlers/AiGatewayHandler.js.map +1 -0
  250. package/dist/api/handlers/AiGatewayManagementHandler.d.ts +24 -0
  251. package/dist/api/handlers/AiGatewayManagementHandler.js +503 -0
  252. package/dist/api/handlers/AiGatewayManagementHandler.js.map +1 -0
  253. package/dist/api/handlers/ChatHandler.d.ts +11 -12
  254. package/dist/api/handlers/ChatHandler.js +12 -219
  255. package/dist/api/handlers/ChatHandler.js.map +1 -1
  256. package/dist/api/handlers/DashboardHandler.js +22 -116
  257. package/dist/api/handlers/DashboardHandler.js.map +1 -1
  258. package/dist/api/handlers/NetworkSettingsHandler.d.ts +97 -0
  259. package/dist/api/handlers/NetworkSettingsHandler.js +511 -0
  260. package/dist/api/handlers/NetworkSettingsHandler.js.map +1 -0
  261. package/dist/api/handlers/PodSettingsHandler.d.ts +79 -0
  262. package/dist/api/handlers/PodSettingsHandler.js +162 -0
  263. package/dist/api/handlers/PodSettingsHandler.js.map +1 -0
  264. package/dist/api/handlers/ProvisionHandler.d.ts +3 -1
  265. package/dist/api/handlers/ProvisionHandler.js +22 -87
  266. package/dist/api/handlers/ProvisionHandler.js.map +1 -1
  267. package/dist/api/handlers/RdfStatsHandler.d.ts +6 -0
  268. package/dist/api/handlers/RdfStatsHandler.js +85 -0
  269. package/dist/api/handlers/RdfStatsHandler.js.map +1 -0
  270. package/dist/api/handlers/SettingsHandler.d.ts +5 -0
  271. package/dist/api/handlers/SettingsHandler.js +13 -0
  272. package/dist/api/handlers/SettingsHandler.js.map +1 -0
  273. package/dist/api/handlers/StaticSpaHandler.d.ts +8 -0
  274. package/dist/api/handlers/StaticSpaHandler.js +102 -0
  275. package/dist/api/handlers/StaticSpaHandler.js.map +1 -0
  276. package/dist/api/handlers/index.d.ts +1 -0
  277. package/dist/api/handlers/index.js +1 -0
  278. package/dist/api/handlers/index.js.map +1 -1
  279. package/dist/api/http/readBoundedJsonBody.d.ts +14 -0
  280. package/dist/api/http/readBoundedJsonBody.js +58 -0
  281. package/dist/api/http/readBoundedJsonBody.js.map +1 -0
  282. package/dist/api/middleware/AuthMiddleware.d.ts +1 -0
  283. package/dist/api/middleware/AuthMiddleware.js +33 -4
  284. package/dist/api/middleware/AuthMiddleware.js.map +1 -1
  285. package/dist/api/runs/AgentRuntimeTypes.d.ts +18 -3
  286. package/dist/api/runs/AgentRuntimeTypes.js +61 -0
  287. package/dist/api/runs/AgentRuntimeTypes.js.map +1 -1
  288. package/dist/api/runs/InngestRunExecutionBackend.d.ts +28 -3
  289. package/dist/api/runs/InngestRunExecutionBackend.js +26 -3
  290. package/dist/api/runs/InngestRunExecutionBackend.js.map +1 -1
  291. package/dist/api/runs/ManagedRunWorker.d.ts +4 -1
  292. package/dist/api/runs/ManagedRunWorker.js +39 -8
  293. package/dist/api/runs/ManagedRunWorker.js.map +1 -1
  294. package/dist/api/runs/PiAgentRuntimeDriver.d.ts +5 -1
  295. package/dist/api/runs/PiAgentRuntimeDriver.js +94 -57
  296. package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -1
  297. package/dist/api/runs/RdfRunContextRetriever.d.ts +46 -0
  298. package/dist/api/runs/RdfRunContextRetriever.js +277 -0
  299. package/dist/api/runs/RdfRunContextRetriever.js.map +1 -0
  300. package/dist/api/runs/RunExecutionBackend.d.ts +38 -0
  301. package/dist/api/runs/RunExecutionBackend.js.map +1 -1
  302. package/dist/api/runs/RunStateCenter.d.ts +18 -3
  303. package/dist/api/runs/RunStateCenter.js +85 -24
  304. package/dist/api/runs/RunStateCenter.js.map +1 -1
  305. package/dist/api/runtime.js +163 -3
  306. package/dist/api/runtime.js.map +1 -1
  307. package/dist/api/service/AiClientConfigurationService.d.ts +97 -0
  308. package/dist/api/service/AiClientConfigurationService.js +379 -0
  309. package/dist/api/service/AiClientConfigurationService.js.map +1 -0
  310. package/dist/api/service/RdfBenchmarkReportCatalog.d.ts +86 -0
  311. package/dist/api/service/RdfBenchmarkReportCatalog.js +349 -0
  312. package/dist/api/service/RdfBenchmarkReportCatalog.js.map +1 -0
  313. package/dist/api/service/RdfBenchmarkReportGate.d.ts +78 -0
  314. package/dist/api/service/RdfBenchmarkReportGate.js +197 -0
  315. package/dist/api/service/RdfBenchmarkReportGate.js.map +1 -0
  316. package/dist/api/service/RdfSearchIndexingService.d.ts +113 -0
  317. package/dist/api/service/RdfSearchIndexingService.js +272 -0
  318. package/dist/api/service/RdfSearchIndexingService.js.map +1 -0
  319. package/dist/api/service/RdfSearchIndexingSolidFsSyncer.d.ts +27 -0
  320. package/dist/api/service/RdfSearchIndexingSolidFsSyncer.js +90 -0
  321. package/dist/api/service/RdfSearchIndexingSolidFsSyncer.js.map +1 -0
  322. package/dist/api/service/RdfStorageStatsService.d.ts +31 -0
  323. package/dist/api/service/RdfStorageStatsService.js +97 -0
  324. package/dist/api/service/RdfStorageStatsService.js.map +1 -0
  325. package/dist/api/service/VectorStoreService.d.ts +2 -0
  326. package/dist/api/service/VectorStoreService.js +70 -2
  327. package/dist/api/service/VectorStoreService.js.map +1 -1
  328. package/dist/api/service/VercelChatService.d.ts +27 -38
  329. package/dist/api/service/VercelChatService.js +153 -505
  330. package/dist/api/service/VercelChatService.js.map +1 -1
  331. package/dist/api/service/provider-http-transport.d.ts +21 -0
  332. package/dist/api/service/provider-http-transport.js +108 -2
  333. package/dist/api/service/provider-http-transport.js.map +1 -1
  334. package/dist/api/service/provider-registry.d.ts +5 -7
  335. package/dist/api/service/provider-registry.js +81 -64
  336. package/dist/api/service/provider-registry.js.map +1 -1
  337. package/dist/api/tasks/InngestTaskScheduler.d.ts +44 -4
  338. package/dist/api/tasks/TaskMaterializer.d.ts +10 -1
  339. package/dist/api/tasks/TaskMaterializer.js +39 -4
  340. package/dist/api/tasks/TaskMaterializer.js.map +1 -1
  341. package/dist/api/tasks/TaskService.d.ts +5 -1
  342. package/dist/api/tasks/TaskService.js +3 -0
  343. package/dist/api/tasks/TaskService.js.map +1 -1
  344. package/dist/cli/commands/rdf.d.ts +9 -0
  345. package/dist/cli/commands/rdf.js +66 -1
  346. package/dist/cli/commands/rdf.js.map +1 -1
  347. package/dist/cli/commands/start.js +3 -0
  348. package/dist/cli/commands/start.js.map +1 -1
  349. package/dist/cli/lib/solid-auth.d.ts +3 -3
  350. package/dist/cli/lib/solid-auth.js +4 -4
  351. package/dist/cli/lib/solid-auth.js.map +1 -1
  352. package/dist/components/components.jsonld +16 -0
  353. package/dist/components/context.jsonld +815 -28
  354. package/dist/document/Chunker.jsonld +110 -0
  355. package/dist/document/{DocumentParser.d.ts → DocumentReader.d.ts} +23 -11
  356. package/dist/document/{DocumentParser.js → DocumentReader.js} +2 -2
  357. package/dist/document/DocumentReader.js.map +1 -0
  358. package/dist/document/DocumentReader.jsonld +82 -0
  359. package/dist/document/HeadingChunker.jsonld +41 -0
  360. package/dist/document/{JinaDocumentParser.d.ts → JinaReader.d.ts} +7 -7
  361. package/dist/document/{JinaDocumentParser.js → JinaReader.js} +12 -12
  362. package/dist/document/JinaReader.js.map +1 -0
  363. package/dist/document/JinaReader.jsonld +133 -0
  364. package/dist/document/L0SourceSummary.d.ts +103 -0
  365. package/dist/document/L0SourceSummary.js +157 -0
  366. package/dist/document/L0SourceSummary.js.map +1 -0
  367. package/dist/document/L0SourceSummary.jsonld +326 -0
  368. package/dist/document/PaddleOcrReader.d.ts +40 -0
  369. package/dist/document/PaddleOcrReader.js +53 -0
  370. package/dist/document/PaddleOcrReader.js.map +1 -0
  371. package/dist/document/PaddleOcrReader.jsonld +234 -0
  372. package/dist/document/ReaderAiConfig.d.ts +50 -0
  373. package/dist/document/ReaderAiConfig.js +109 -0
  374. package/dist/document/ReaderAiConfig.js.map +1 -0
  375. package/dist/document/ReaderAiConfig.jsonld +185 -0
  376. package/dist/document/ReaderPolicy.d.ts +89 -0
  377. package/dist/document/ReaderPolicy.js +158 -0
  378. package/dist/document/ReaderPolicy.js.map +1 -0
  379. package/dist/document/ReaderPolicy.jsonld +218 -0
  380. package/dist/document/index.d.ts +6 -2
  381. package/dist/document/index.js +6 -2
  382. package/dist/document/index.js.map +1 -1
  383. package/dist/edge/DdnsManager.d.ts +1 -1
  384. package/dist/edge/DdnsManager.js.map +1 -1
  385. package/dist/edge/EdgeNodeAgent.d.ts +4 -0
  386. package/dist/edge/EdgeNodeAgent.js +6 -0
  387. package/dist/edge/EdgeNodeAgent.js.map +1 -1
  388. package/dist/edge/EdgeNodeAgent.jsonld +8 -0
  389. package/dist/edge/EdgeNodeAgentInitializer.d.ts +16 -0
  390. package/dist/edge/EdgeNodeAgentInitializer.js +51 -0
  391. package/dist/edge/EdgeNodeAgentInitializer.js.map +1 -1
  392. package/dist/edge/EdgeNodeAgentInitializer.jsonld +250 -0
  393. package/dist/edge/EdgeNodeCertificateCapabilityBridge.d.ts +34 -0
  394. package/dist/edge/EdgeNodeCertificateCapabilityBridge.js +111 -0
  395. package/dist/edge/EdgeNodeCertificateCapabilityBridge.js.map +1 -0
  396. package/dist/edge/acme/AcmeCertificateManager.d.ts +14 -1
  397. package/dist/edge/acme/AcmeCertificateManager.js +67 -7
  398. package/dist/edge/acme/AcmeCertificateManager.js.map +1 -1
  399. package/dist/edge/acme/AcmeCertificateManager.jsonld +22 -2
  400. package/dist/edge/acme/ClusterCertificateManager.d.ts +12 -0
  401. package/dist/edge/acme/ClusterCertificateManager.js +38 -0
  402. package/dist/edge/acme/ClusterCertificateManager.js.map +1 -1
  403. package/dist/extensions/ExtensionRuntime.d.ts +17 -0
  404. package/dist/extensions/ExtensionRuntime.js +171 -0
  405. package/dist/extensions/ExtensionRuntime.js.map +1 -0
  406. package/dist/extensions/PodCredentialResolver.d.ts +23 -0
  407. package/dist/extensions/PodCredentialResolver.js +139 -0
  408. package/dist/extensions/PodCredentialResolver.js.map +1 -0
  409. package/dist/extensions/index.d.ts +3 -0
  410. package/dist/extensions/index.js +20 -0
  411. package/dist/extensions/index.js.map +1 -0
  412. package/dist/extensions/types.d.ts +73 -0
  413. package/dist/extensions/types.js +3 -0
  414. package/dist/extensions/types.js.map +1 -0
  415. package/dist/http/SubgraphSparqlHttpHandler.d.ts +20 -1
  416. package/dist/http/SubgraphSparqlHttpHandler.js +324 -43
  417. package/dist/http/SubgraphSparqlHttpHandler.js.map +1 -1
  418. package/dist/http/SubgraphSparqlHttpHandler.jsonld +87 -0
  419. package/dist/identity/drizzle/EdgeNodeRepository.js +3 -2
  420. package/dist/identity/drizzle/EdgeNodeRepository.js.map +1 -1
  421. package/dist/identity/drizzle/schema.pg.js +1 -1
  422. package/dist/identity/drizzle/schema.pg.js.map +1 -1
  423. package/dist/identity/drizzle/schema.sqlite.js +1 -1
  424. package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
  425. package/dist/identity/oidc/ScopedPickWebIdHandler.js +5 -5
  426. package/dist/identity/oidc/ScopedPickWebIdHandler.js.map +1 -1
  427. package/dist/index.d.ts +12 -2
  428. package/dist/index.js +13 -1
  429. package/dist/index.js.map +1 -1
  430. package/dist/main.js +3 -0
  431. package/dist/main.js.map +1 -1
  432. package/dist/provision/LocalProvisionState.d.ts +28 -0
  433. package/dist/provision/LocalProvisionState.js +124 -0
  434. package/dist/provision/LocalProvisionState.js.map +1 -0
  435. package/dist/provision/ProvisionCodeCodec.d.ts +7 -3
  436. package/dist/provision/ProvisionCodeCodec.js +10 -3
  437. package/dist/provision/ProvisionCodeCodec.js.map +1 -1
  438. package/dist/provision/ProvisionPodCreator.d.ts +15 -1
  439. package/dist/provision/ProvisionPodCreator.js +68 -1
  440. package/dist/provision/ProvisionPodCreator.js.map +1 -1
  441. package/dist/provision/ProvisionPodCreator.jsonld +31 -0
  442. package/dist/provision/ServiceAccessTokenCodec.d.ts +45 -0
  443. package/dist/provision/ServiceAccessTokenCodec.js +86 -0
  444. package/dist/provision/ServiceAccessTokenCodec.js.map +1 -0
  445. package/dist/runtime/GatewayAdminProxyAuth.d.ts +29 -0
  446. package/dist/runtime/GatewayAdminProxyAuth.js +108 -0
  447. package/dist/runtime/GatewayAdminProxyAuth.js.map +1 -0
  448. package/dist/runtime/Proxy.d.ts +10 -0
  449. package/dist/runtime/Proxy.js +64 -6
  450. package/dist/runtime/Proxy.js.map +1 -1
  451. package/dist/runtime/XpodRuntime.js +1 -0
  452. package/dist/runtime/XpodRuntime.js.map +1 -1
  453. package/dist/runtime/bootstrap.d.ts +1 -0
  454. package/dist/runtime/bootstrap.js +29 -0
  455. package/dist/runtime/bootstrap.js.map +1 -1
  456. package/dist/runtime/css-process.d.ts +1 -0
  457. package/dist/runtime/css-process.js +1 -0
  458. package/dist/runtime/css-process.js.map +1 -1
  459. package/dist/runtime/index.d.ts +1 -0
  460. package/dist/runtime/index.js +3 -1
  461. package/dist/runtime/index.js.map +1 -1
  462. package/dist/runtime/lifecycle.d.ts +3 -1
  463. package/dist/runtime/lifecycle.js +3 -1
  464. package/dist/runtime/lifecycle.js.map +1 -1
  465. package/dist/runtime/runner/node/NodeGatewayRuntimeRunner.js +2 -0
  466. package/dist/runtime/runner/node/NodeGatewayRuntimeRunner.js.map +1 -1
  467. package/dist/runtime/runner/types.d.ts +3 -0
  468. package/dist/runtime/runner/types.js.map +1 -1
  469. package/dist/runtime/runtime-types.d.ts +2 -0
  470. package/dist/runtime/runtime-types.js.map +1 -1
  471. package/dist/runtime/safe-env.d.ts +15 -0
  472. package/dist/runtime/safe-env.js +109 -0
  473. package/dist/runtime/safe-env.js.map +1 -0
  474. package/dist/security/index.d.ts +1 -0
  475. package/dist/security/index.js +18 -0
  476. package/dist/security/index.js.map +1 -0
  477. package/dist/security/secret-cell/DeploymentRootKeyProvider.d.ts +17 -0
  478. package/dist/security/secret-cell/DeploymentRootKeyProvider.js +61 -0
  479. package/dist/security/secret-cell/DeploymentRootKeyProvider.js.map +1 -0
  480. package/dist/security/secret-cell/DeploymentRootKeyProvider.jsonld +124 -0
  481. package/dist/security/secret-cell/SecretCellVault.d.ts +55 -0
  482. package/dist/security/secret-cell/SecretCellVault.js +242 -0
  483. package/dist/security/secret-cell/SecretCellVault.js.map +1 -0
  484. package/dist/security/secret-cell/SecretCellVault.jsonld +207 -0
  485. package/dist/security/secret-cell/index.d.ts +2 -0
  486. package/dist/security/secret-cell/index.js +11 -0
  487. package/dist/security/secret-cell/index.js.map +1 -0
  488. package/dist/solidfs/CompositeSolidFsSyncer.d.ts +18 -0
  489. package/dist/solidfs/CompositeSolidFsSyncer.js +32 -0
  490. package/dist/solidfs/CompositeSolidFsSyncer.js.map +1 -0
  491. package/dist/solidfs/LocalSolidFS.js +25 -1
  492. package/dist/solidfs/LocalSolidFS.js.map +1 -1
  493. package/dist/solidfs/RdfIndexSolidFsSyncer.d.ts +41 -2
  494. package/dist/solidfs/RdfIndexSolidFsSyncer.js +331 -21
  495. package/dist/solidfs/RdfIndexSolidFsSyncer.js.map +1 -1
  496. package/dist/solidfs/SolidFsMetaNotes.d.ts +25 -0
  497. package/dist/solidfs/SolidFsMetaNotes.js +103 -0
  498. package/dist/solidfs/SolidFsMetaNotes.js.map +1 -0
  499. package/dist/solidfs/SolidFsSyncJournal.d.ts +2 -2
  500. package/dist/solidfs/SolidFsSyncJournal.js +9 -4
  501. package/dist/solidfs/SolidFsSyncJournal.js.map +1 -1
  502. package/dist/solidfs/SolidFsSyncJournal.jsonld +119 -0
  503. package/dist/solidfs/WorkspacePrompt.d.ts +13 -0
  504. package/dist/solidfs/WorkspacePrompt.js +42 -0
  505. package/dist/solidfs/WorkspacePrompt.js.map +1 -0
  506. package/dist/solidfs/index.d.ts +3 -0
  507. package/dist/solidfs/index.js +3 -0
  508. package/dist/solidfs/index.js.map +1 -1
  509. package/dist/solidfs/types.d.ts +12 -2
  510. package/dist/solidfs/types.js.map +1 -1
  511. package/dist/storage/accessors/MixDataAccessor.d.ts +36 -4
  512. package/dist/storage/accessors/MixDataAccessor.js +222 -23
  513. package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
  514. package/dist/storage/accessors/MixDataAccessor.jsonld +89 -0
  515. package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +6 -1
  516. package/dist/storage/accessors/SolidRdfDataAccessor.js +35 -0
  517. package/dist/storage/accessors/SolidRdfDataAccessor.js.map +1 -1
  518. package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +20 -0
  519. package/dist/storage/database/PostgresPoolManager.d.ts +1 -0
  520. package/dist/storage/database/PostgresPoolManager.js +2 -2
  521. package/dist/storage/database/PostgresPoolManager.js.map +1 -1
  522. package/dist/storage/locking/UrlAwareRedisLocker.d.ts +2 -0
  523. package/dist/storage/locking/UrlAwareRedisLocker.js +65 -0
  524. package/dist/storage/locking/UrlAwareRedisLocker.js.map +1 -1
  525. package/dist/storage/locking/UrlAwareRedisLocker.jsonld +19 -0
  526. package/dist/storage/rdf/PostgresRdfEngine.d.ts +286 -9
  527. package/dist/storage/rdf/PostgresRdfEngine.js +10773 -2084
  528. package/dist/storage/rdf/PostgresRdfEngine.js.map +1 -1
  529. package/dist/storage/rdf/PostgresRdfEngine.jsonld +1693 -89
  530. package/dist/storage/rdf/PostgresRdfSqlExecutor.d.ts +24 -0
  531. package/dist/storage/rdf/PostgresRdfSqlExecutor.js +131 -0
  532. package/dist/storage/rdf/PostgresRdfSqlExecutor.js.map +1 -0
  533. package/dist/storage/rdf/PostgresRdfTextIndex.d.ts +54 -0
  534. package/dist/storage/rdf/PostgresRdfTextIndex.js +1255 -0
  535. package/dist/storage/rdf/PostgresRdfTextIndex.js.map +1 -0
  536. package/dist/storage/rdf/PostgresRdfTextIndex.jsonld +487 -0
  537. package/dist/storage/rdf/PostgresRdfVectorIndex.d.ts +46 -0
  538. package/dist/storage/rdf/PostgresRdfVectorIndex.js +1165 -0
  539. package/dist/storage/rdf/PostgresRdfVectorIndex.js.map +1 -0
  540. package/dist/storage/rdf/PostgresRdfVectorIndex.jsonld +423 -0
  541. package/dist/storage/rdf/Rdf3xIndex.d.ts +14 -1
  542. package/dist/storage/rdf/Rdf3xIndex.js +286 -2
  543. package/dist/storage/rdf/Rdf3xIndex.js.map +1 -1
  544. package/dist/storage/rdf/Rdf3xIndex.jsonld +36 -0
  545. package/dist/storage/rdf/Rdf3xSchema.d.ts +5 -1
  546. package/dist/storage/rdf/Rdf3xSchema.js +17 -3
  547. package/dist/storage/rdf/Rdf3xSchema.js.map +1 -1
  548. package/dist/storage/rdf/RdfAccessScope.d.ts +22 -0
  549. package/dist/storage/rdf/RdfAccessScope.js +345 -0
  550. package/dist/storage/rdf/RdfAccessScope.js.map +1 -0
  551. package/dist/storage/rdf/RdfAccessScope.jsonld +45 -0
  552. package/dist/storage/rdf/RdfFusionRankPlan.d.ts +2 -0
  553. package/dist/storage/rdf/RdfFusionRankPlan.js +186 -0
  554. package/dist/storage/rdf/RdfFusionRankPlan.js.map +1 -0
  555. package/dist/storage/rdf/RdfJoinShape.d.ts +8 -0
  556. package/dist/storage/rdf/RdfJoinShape.js +31 -0
  557. package/dist/storage/rdf/RdfJoinShape.js.map +1 -0
  558. package/dist/storage/rdf/RdfQuadIndex.d.ts +5 -2
  559. package/dist/storage/rdf/RdfQuadIndex.js +94 -6
  560. package/dist/storage/rdf/RdfQuadIndex.js.map +1 -1
  561. package/dist/storage/rdf/RdfQuadIndex.jsonld +12 -0
  562. package/dist/storage/rdf/RdfQueryExecutor.d.ts +3 -4
  563. package/dist/storage/rdf/RdfQueryExecutor.js +235 -8
  564. package/dist/storage/rdf/RdfQueryExecutor.js.map +1 -1
  565. package/dist/storage/rdf/RdfSearchSourceFilter.d.ts +10 -0
  566. package/dist/storage/rdf/RdfSearchSourceFilter.js +83 -0
  567. package/dist/storage/rdf/RdfSearchSourceFilter.js.map +1 -0
  568. package/dist/storage/rdf/RdfSparqlAdapter.d.ts +27 -1
  569. package/dist/storage/rdf/RdfSparqlAdapter.js +265 -3
  570. package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -1
  571. package/dist/storage/rdf/RdfSparqlAdapter.jsonld +8 -0
  572. package/dist/storage/rdf/RdfTermDictionary.d.ts +7 -1
  573. package/dist/storage/rdf/RdfTermDictionary.js +139 -0
  574. package/dist/storage/rdf/RdfTermDictionary.js.map +1 -1
  575. package/dist/storage/rdf/RdfTermDictionary.jsonld +4 -0
  576. package/dist/storage/rdf/RdfTextIndex.d.ts +45 -2
  577. package/dist/storage/rdf/RdfTextIndex.js +810 -114
  578. package/dist/storage/rdf/RdfTextIndex.js.map +1 -1
  579. package/dist/storage/rdf/RdfTextIndex.jsonld +193 -0
  580. package/dist/storage/rdf/RdfTextProjection.d.ts +10 -0
  581. package/dist/storage/rdf/RdfTextProjection.js +258 -0
  582. package/dist/storage/rdf/RdfTextProjection.js.map +1 -0
  583. package/dist/storage/rdf/RdfVectorIndex.d.ts +30 -2
  584. package/dist/storage/rdf/RdfVectorIndex.js +461 -38
  585. package/dist/storage/rdf/RdfVectorIndex.js.map +1 -1
  586. package/dist/storage/rdf/RdfVectorIndex.jsonld +163 -0
  587. package/dist/storage/rdf/SolidRdfEngine.d.ts +12 -9
  588. package/dist/storage/rdf/SolidRdfEngine.js +48 -22
  589. package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
  590. package/dist/storage/rdf/SolidRdfEngine.jsonld +33 -43
  591. package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +19 -8
  592. package/dist/storage/rdf/SolidRdfSparqlEngine.js +674 -44
  593. package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
  594. package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +51 -0
  595. package/dist/storage/rdf/index.d.ts +9 -5
  596. package/dist/storage/rdf/index.js +42 -1
  597. package/dist/storage/rdf/index.js.map +1 -1
  598. package/dist/storage/rdf/models-benchmark.d.ts +264 -2
  599. package/dist/storage/rdf/models-benchmark.js +4207 -155
  600. package/dist/storage/rdf/models-benchmark.js.map +1 -1
  601. package/dist/storage/rdf/types.d.ts +833 -4
  602. package/dist/storage/rdf/types.js.map +1 -1
  603. package/dist/storage/rdf/types.jsonld +348 -0
  604. package/dist/storage/sparql/CompatibilitySparqlEngine.d.ts +14 -13
  605. package/dist/storage/sparql/CompatibilitySparqlEngine.js +24 -24
  606. package/dist/storage/sparql/CompatibilitySparqlEngine.js.map +1 -1
  607. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.d.ts +14 -13
  608. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js +30 -18
  609. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js.map +1 -1
  610. package/dist/storage/sparql/SubgraphQueryEngine.d.ts +21 -12
  611. package/dist/storage/sparql/SubgraphQueryEngine.js +12 -12
  612. package/dist/storage/sparql/SubgraphQueryEngine.js.map +1 -1
  613. package/dist/terminal/sandbox/MacOSSandbox.js +2 -1
  614. package/dist/terminal/sandbox/MacOSSandbox.js.map +1 -1
  615. package/dist/terminal/sandbox/index.js +2 -1
  616. package/dist/terminal/sandbox/index.js.map +1 -1
  617. package/dist/test-utils/no-auth-xpod.js +3 -0
  618. package/dist/test-utils/no-auth-xpod.js.map +1 -1
  619. package/dist/tunnel/LocalTunnelProvider.d.ts +3 -0
  620. package/dist/tunnel/LocalTunnelProvider.js +17 -1
  621. package/dist/tunnel/LocalTunnelProvider.js.map +1 -1
  622. package/dist/tunnel/LocalTunnelProvider.jsonld +23 -0
  623. package/dist/tunnel/SakuraFrpTunnelProvider.d.ts +3 -0
  624. package/dist/tunnel/SakuraFrpTunnelProvider.js +18 -2
  625. package/dist/tunnel/SakuraFrpTunnelProvider.js.map +1 -1
  626. package/dist/tunnel/TunnelProfiles.d.ts +22 -0
  627. package/dist/tunnel/TunnelProfiles.js +208 -0
  628. package/dist/tunnel/TunnelProfiles.js.map +1 -0
  629. package/dist/tunnel/index.d.ts +2 -0
  630. package/dist/tunnel/index.js +4 -1
  631. package/dist/tunnel/index.js.map +1 -1
  632. package/dist/util/identifiers/ClusterIdentifierStrategy.d.ts +3 -0
  633. package/dist/util/identifiers/ClusterIdentifierStrategy.js +18 -2
  634. package/dist/util/identifiers/ClusterIdentifierStrategy.js.map +1 -1
  635. package/dist/util/identifiers/ClusterIdentifierStrategy.jsonld +5 -1
  636. package/node_modules/@undefineds.co/ai-connection/dist/AiClientConfigurationSection.d.ts +55 -0
  637. package/node_modules/@undefineds.co/ai-connection/dist/AiClientConfigurationSection.js +167 -0
  638. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionHeader.d.ts +3 -0
  639. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionHeader.js +8 -0
  640. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionList.d.ts +4 -0
  641. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionList.js +36 -0
  642. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMain.d.ts +4 -0
  643. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMain.js +37 -0
  644. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMainHeader.d.ts +3 -0
  645. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMainHeader.js +7 -0
  646. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionPanel.d.ts +14 -0
  647. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionPanel.js +333 -0
  648. package/node_modules/@undefineds.co/ai-connection/dist/AiProviderCard.d.ts +22 -0
  649. package/node_modules/@undefineds.co/ai-connection/dist/AiProviderCard.js +43 -0
  650. package/node_modules/@undefineds.co/ai-connection/dist/AiQuotaCard.d.ts +8 -0
  651. package/node_modules/@undefineds.co/ai-connection/dist/AiQuotaCard.js +6 -0
  652. package/node_modules/@undefineds.co/ai-connection/dist/ai-connection-client.d.ts +120 -0
  653. package/node_modules/@undefineds.co/ai-connection/dist/ai-connection-client.js +414 -0
  654. package/node_modules/@undefineds.co/ai-connection/dist/client-config/base-adapter.d.ts +32 -0
  655. package/node_modules/@undefineds.co/ai-connection/dist/client-config/base-adapter.js +212 -0
  656. package/node_modules/@undefineds.co/ai-connection/dist/client-config/codex.d.ts +14 -0
  657. package/node_modules/@undefineds.co/ai-connection/dist/client-config/codex.js +90 -0
  658. package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.cjs +668 -0
  659. package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.d.ts +6 -0
  660. package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.js +6 -0
  661. package/node_modules/@undefineds.co/ai-connection/dist/client-config/json-env-adapter.d.ts +21 -0
  662. package/node_modules/@undefineds.co/ai-connection/dist/client-config/json-env-adapter.js +82 -0
  663. package/node_modules/@undefineds.co/ai-connection/dist/client-config/pi.d.ts +13 -0
  664. package/node_modules/@undefineds.co/ai-connection/dist/client-config/pi.js +83 -0
  665. package/node_modules/@undefineds.co/ai-connection/dist/client-config/transaction.d.ts +17 -0
  666. package/node_modules/@undefineds.co/ai-connection/dist/client-config/transaction.js +153 -0
  667. package/node_modules/@undefineds.co/ai-connection/dist/client-config/types.d.ts +40 -0
  668. package/node_modules/@undefineds.co/ai-connection/dist/client-config/types.js +1 -0
  669. package/node_modules/@undefineds.co/ai-connection/dist/controller.d.ts +42 -0
  670. package/node_modules/@undefineds.co/ai-connection/dist/controller.js +289 -0
  671. package/node_modules/@undefineds.co/ai-connection/dist/index.d.ts +16 -0
  672. package/node_modules/@undefineds.co/ai-connection/dist/index.js +41 -0
  673. package/node_modules/@undefineds.co/ai-connection/dist/manifest.d.ts +1 -0
  674. package/node_modules/@undefineds.co/ai-connection/dist/manifest.js +18 -0
  675. package/node_modules/@undefineds.co/ai-connection/dist/service-access.d.ts +3 -0
  676. package/node_modules/@undefineds.co/ai-connection/dist/service-access.js +133 -0
  677. package/node_modules/@undefineds.co/ai-connection/package.json +50 -0
  678. package/node_modules/@undefineds.co/extension-sdk/README.md +299 -0
  679. package/node_modules/@undefineds.co/extension-sdk/dist/index.d.ts +5 -0
  680. package/node_modules/@undefineds.co/extension-sdk/dist/index.js +5 -0
  681. package/node_modules/@undefineds.co/extension-sdk/dist/layout.d.ts +16 -0
  682. package/node_modules/@undefineds.co/extension-sdk/dist/layout.js +36 -0
  683. package/node_modules/@undefineds.co/extension-sdk/dist/manifest.d.ts +27 -0
  684. package/node_modules/@undefineds.co/extension-sdk/dist/manifest.js +79 -0
  685. package/node_modules/@undefineds.co/extension-sdk/dist/react/app-layout.d.ts +7 -0
  686. package/node_modules/@undefineds.co/extension-sdk/dist/react/app-layout.js +8 -0
  687. package/node_modules/@undefineds.co/extension-sdk/dist/react/auth-boundary.d.ts +27 -0
  688. package/node_modules/@undefineds.co/extension-sdk/dist/react/auth-boundary.js +49 -0
  689. package/node_modules/@undefineds.co/extension-sdk/dist/react/layout-context.d.ts +11 -0
  690. package/node_modules/@undefineds.co/extension-sdk/dist/react/layout-context.js +9 -0
  691. package/node_modules/@undefineds.co/extension-sdk/dist/react/workspace-layout.d.ts +38 -0
  692. package/node_modules/@undefineds.co/extension-sdk/dist/react/workspace-layout.js +132 -0
  693. package/node_modules/@undefineds.co/extension-sdk/dist/react.d.ts +12 -0
  694. package/node_modules/@undefineds.co/extension-sdk/dist/react.js +19 -0
  695. package/node_modules/@undefineds.co/extension-sdk/dist/testing.d.ts +7 -0
  696. package/node_modules/@undefineds.co/extension-sdk/dist/testing.js +27 -0
  697. package/node_modules/@undefineds.co/extension-sdk/dist/web.d.ts +225 -0
  698. package/node_modules/@undefineds.co/extension-sdk/dist/web.js +142 -0
  699. package/node_modules/@undefineds.co/extension-sdk/package.json +49 -0
  700. package/node_modules/@undefineds.co/shared-ui/dist/badge.d.ts +8 -0
  701. package/node_modules/@undefineds.co/shared-ui/dist/badge.js +17 -0
  702. package/node_modules/@undefineds.co/shared-ui/dist/button.d.ts +10 -0
  703. package/node_modules/@undefineds.co/shared-ui/dist/button.js +30 -0
  704. package/node_modules/@undefineds.co/shared-ui/dist/card.d.ts +7 -0
  705. package/node_modules/@undefineds.co/shared-ui/dist/card.js +15 -0
  706. package/node_modules/@undefineds.co/shared-ui/dist/index.d.ts +6 -0
  707. package/node_modules/@undefineds.co/shared-ui/dist/index.js +6 -0
  708. package/node_modules/@undefineds.co/shared-ui/dist/input.d.ts +4 -0
  709. package/node_modules/@undefineds.co/shared-ui/dist/input.js +5 -0
  710. package/node_modules/@undefineds.co/shared-ui/dist/theme.css +121 -0
  711. package/node_modules/@undefineds.co/shared-ui/dist/utils.d.ts +2 -0
  712. package/node_modules/@undefineds.co/shared-ui/dist/utils.js +5 -0
  713. package/node_modules/@undefineds.co/shared-ui/dist/workspace.d.ts +23 -0
  714. package/node_modules/@undefineds.co/shared-ui/dist/workspace.js +38 -0
  715. package/node_modules/@undefineds.co/shared-ui/package.json +39 -0
  716. package/node_modules/@undefineds.co/solid-sdk/dist/index.d.ts +3 -0
  717. package/node_modules/@undefineds.co/solid-sdk/dist/index.js +3 -0
  718. package/node_modules/@undefineds.co/solid-sdk/dist/pod-runtime.d.ts +45 -0
  719. package/node_modules/@undefineds.co/solid-sdk/dist/pod-runtime.js +147 -0
  720. package/node_modules/@undefineds.co/solid-sdk/dist/react.d.ts +15 -0
  721. package/node_modules/@undefineds.co/solid-sdk/dist/react.js +15 -0
  722. package/node_modules/@undefineds.co/solid-sdk/dist/session.d.ts +42 -0
  723. package/node_modules/@undefineds.co/solid-sdk/dist/session.js +127 -0
  724. package/node_modules/@undefineds.co/solid-sdk/package.json +45 -0
  725. package/package.json +32 -12
  726. package/static/app/assets/index-BoYHJ6si.js +230 -0
  727. package/static/app/assets/inrupt-smoke.js +2 -2
  728. package/static/app/assets/main.css +1 -1
  729. package/static/app/assets/main.js +9 -9
  730. package/static/dashboard/assets/NetworkPage-Brt79fuQ.js +2 -0
  731. package/static/dashboard/assets/PaneListHeader-57nvMwH6.js +1 -0
  732. package/static/dashboard/assets/PodPage-CM6do1vB.js +2 -0
  733. package/static/dashboard/assets/ServicesPage-BUNxGJRz.js +1 -0
  734. package/static/dashboard/assets/card-B9Zjf_2p.js +1 -0
  735. package/static/dashboard/assets/dashboard-8C6o666W.js +305 -0
  736. package/static/dashboard/assets/dashboard-CSdewNeA.css +1 -0
  737. package/static/dashboard/assets/database-DPh9wDY9.js +1 -0
  738. package/static/dashboard/assets/external-link-VbMQvVMz.js +1 -0
  739. package/static/dashboard/assets/index-RfiFckzb.js +51 -0
  740. package/static/dashboard/assets/refresh-cw-BxVxNxNr.js +1 -0
  741. package/static/dashboard/assets/services-status-context-DKmJ7ISr.js +1 -0
  742. package/static/dashboard/dashboard.html +2 -2
  743. package/static/settings/assets/ModelsPage-D_IH7AH3.js +1 -0
  744. package/static/settings/assets/PaneListHeader-Bgaze006.js +1 -0
  745. package/static/settings/assets/PodPage-Cy1VNObw.js +2 -0
  746. package/static/settings/assets/ServicesPage-BsFaxVWC.js +1 -0
  747. package/static/settings/assets/SettingsPage-UafNWE_p.js +48 -0
  748. package/static/settings/assets/card-B_bXSIn-.js +1 -0
  749. package/static/settings/assets/services-status-context-DiX-AbrP.js +1 -0
  750. package/static/settings/assets/settings-B30oMfZq.js +305 -0
  751. package/static/settings/assets/settings-CSdewNeA.css +1 -0
  752. package/static/settings/assets/workspace-layout-Dv1Yn9Ci.js +1 -0
  753. package/static/settings/auth.html +21 -0
  754. package/static/settings/reachability.html +221 -0
  755. package/static/settings/reachability.svg +7 -0
  756. package/static/settings/reachability.webmanifest +18 -0
  757. package/static/settings/settings.html +13 -0
  758. package/static/settings/signal-pod.html +293 -0
  759. package/static/settings/vite.svg +1 -0
  760. package/dist/api/service/ai-gateway-transport.d.ts +0 -25
  761. package/dist/api/service/ai-gateway-transport.js +0 -136
  762. package/dist/api/service/ai-gateway-transport.js.map +0 -1
  763. package/dist/api/service/chat-protocol-adapters.d.ts +0 -5
  764. package/dist/api/service/chat-protocol-adapters.js +0 -146
  765. package/dist/api/service/chat-protocol-adapters.js.map +0 -1
  766. package/dist/api/service/chat-routing.d.ts +0 -8
  767. package/dist/api/service/chat-routing.js +0 -16
  768. package/dist/api/service/chat-routing.js.map +0 -1
  769. package/dist/api/service/platform-ai-config.d.ts +0 -10
  770. package/dist/api/service/platform-ai-config.js +0 -76
  771. package/dist/api/service/platform-ai-config.js.map +0 -1
  772. package/dist/document/DocumentParser.js.map +0 -1
  773. package/dist/document/JinaDocumentParser.js.map +0 -1
  774. package/static/app/assets/index-C1yksyT4.js +0 -171
  775. package/static/dashboard/assets/dashboard-BssaVKTn.css +0 -1
  776. package/static/dashboard/assets/dashboard-Ckuadl3C.js +0 -54
@@ -5,7 +5,8 @@
5
5
  * Based on https://github.com/openai/chatkit-python/blob/main/chatkit/server.py
6
6
  */
7
7
  import type { ChatKitStore, StoreContext } from './store';
8
- import type { RunExecutionBackend } from '../runs/RunExecutionBackend';
8
+ import type { RunContextRetriever, RunExecutionBackend } from '../runs/RunExecutionBackend';
9
+ import type { AiConnectionInvocationKeyIssuer } from '../ai-gateway/auth/AiConnectionInvocationKeyIssuer';
9
10
  /**
10
11
  * AI Provider interface for direct text generation in tests/dev harnesses.
11
12
  *
@@ -41,6 +42,9 @@ export interface ChatKitServiceOptions<TContext = StoreContext> {
41
42
  enableAgentRuntime?: boolean;
42
43
  allowDirectAiFallback?: boolean;
43
44
  runExecutionBackend?: RunExecutionBackend;
45
+ contextRetriever?: RunContextRetriever<TContext>;
46
+ aiConnectionInvocationKeyIssuer?: Pick<AiConnectionInvocationKeyIssuer, 'issue'>;
47
+ requireAiConnectionInvocationKeyIssuer?: boolean;
44
48
  }
45
49
  /**
46
50
  * Streaming result wrapper
@@ -67,6 +71,8 @@ export declare class ChatKitService<TContext = StoreContext> {
67
71
  private readonly systemPrompt;
68
72
  private readonly allowDirectAiFallback;
69
73
  private readonly runStateCenter;
74
+ private readonly aiConnectionInvocationKeyIssuer?;
75
+ private readonly requireAiConnectionInvocationKeyIssuer;
70
76
  constructor(options: ChatKitServiceOptions<TContext>);
71
77
  /**
72
78
  * Process a ChatKit request
@@ -141,6 +147,7 @@ export declare class ChatKitService<TContext = StoreContext> {
141
147
  * This is the main response generation logic
142
148
  */
143
149
  private respond;
150
+ private withInvocationAiConnection;
144
151
  /**
145
152
  * Build conversation history from thread items
146
153
  */
@@ -22,10 +22,13 @@ class ChatKitService {
22
22
  this.aiProvider = options.aiProvider;
23
23
  this.systemPrompt = options.systemPrompt ?? 'You are a helpful assistant.';
24
24
  this.allowDirectAiFallback = options.allowDirectAiFallback ?? false;
25
+ this.aiConnectionInvocationKeyIssuer = options.aiConnectionInvocationKeyIssuer;
26
+ this.requireAiConnectionInvocationKeyIssuer = options.requireAiConnectionInvocationKeyIssuer ?? false;
25
27
  this.runStateCenter = new RunStateCenter_1.RunStateCenter({
26
28
  store: this.store,
27
29
  enableAgentRuntime: options.enableAgentRuntime ?? true,
28
30
  executionBackend: options.runExecutionBackend,
31
+ contextRetriever: options.contextRetriever,
29
32
  });
30
33
  }
31
34
  /**
@@ -194,13 +197,32 @@ class ChatKitService {
194
197
  */
195
198
  async *handleThreadsAddClientToolOutput(params, context) {
196
199
  const threadRef = this.threadRefFromParams(params);
197
- for await (const event of this.runStateCenter.completeClientToolOutput({
200
+ const prepared = await this.runStateCenter.prepareClientToolOutput({
198
201
  threadRef,
199
202
  itemId: params.item_id,
200
203
  output: params.output,
201
204
  context,
202
- })) {
203
- yield this.projectRunStateEvent(event);
205
+ });
206
+ if (!prepared) {
207
+ yield this.projectRunStateEvent({
208
+ type: 'error',
209
+ code: 'client_tool_output_conflict',
210
+ message: 'Client tool output was already claimed or completed',
211
+ });
212
+ return;
213
+ }
214
+ let completed = false;
215
+ try {
216
+ const executionContext = await this.withInvocationAiConnection(context);
217
+ for await (const event of this.runStateCenter.completePreparedClientToolOutput(prepared, executionContext)) {
218
+ yield this.projectRunStateEvent(event);
219
+ }
220
+ completed = true;
221
+ }
222
+ finally {
223
+ if (!completed) {
224
+ await this.runStateCenter.releaseClientToolOutput(prepared, context);
225
+ }
204
226
  }
205
227
  }
206
228
  /**
@@ -317,13 +339,19 @@ class ChatKitService {
317
339
  * This is the main response generation logic
318
340
  */
319
341
  async *respond(thread, userMessage, context, inferenceOptions, threadRef = this.threadRefFromThread(thread)) {
320
- const runtimeConfig = this.runStateCenter.getAgentRuntimeConfig(thread, context)
342
+ const configuredRuntime = this.runStateCenter.getAgentRuntimeConfig(thread, context)
321
343
  ?? this.runStateCenter.getDefaultAgentRuntimeConfig(context);
344
+ const executionContext = configuredRuntime
345
+ ? await this.withInvocationAiConnection(context)
346
+ : context;
347
+ const runtimeConfig = configuredRuntime
348
+ ? (this.runStateCenter.getAgentRuntimeConfig(thread, executionContext) ?? configuredRuntime)
349
+ : null;
322
350
  if (runtimeConfig) {
323
351
  for await (const event of this.runStateCenter.startAgentRun({
324
352
  thread,
325
353
  userMessage,
326
- context,
354
+ context: executionContext,
327
355
  runtimeConfig,
328
356
  })) {
329
357
  yield this.projectRunStateEvent(event);
@@ -425,6 +453,19 @@ class ChatKitService {
425
453
  }
426
454
  }
427
455
  }
456
+ async withInvocationAiConnection(context) {
457
+ if (!this.aiConnectionInvocationKeyIssuer) {
458
+ if (this.requireAiConnectionInvocationKeyIssuer) {
459
+ throw new Error('AI Connection invocation key issuer is required');
460
+ }
461
+ return context;
462
+ }
463
+ const aiConnection = await this.aiConnectionInvocationKeyIssuer.issue(context);
464
+ return {
465
+ ...context,
466
+ aiConnection,
467
+ };
468
+ }
428
469
  /**
429
470
  * Build conversation history from thread items
430
471
  */
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/api/chatkit/service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ChatKit Service\n * \n * Core service for handling ChatKit protocol requests.\n * Based on https://github.com/openai/chatkit-python/blob/main/chatkit/server.py\n */\n\nimport { getLoggerFor } from 'global-logger-factory';\nimport type { ChatKitStore, StoreContext } from './store';\nimport type {\n ChatKitReq,\n StreamingReq,\n NonStreamingReq,\n ThreadCreateParams,\n ThreadAddUserMessageParams,\n ThreadAddClientToolOutputParams,\n ThreadRetryAfterItemParams,\n ThreadCustomActionParams,\n ThreadGetByIdParams,\n ItemsListParams,\n ItemFeedbackParams,\n ThreadUpdateParams,\n ThreadDeleteParams,\n ThreadMetadata,\n ThreadRef,\n ThreadItem,\n UserMessageItem,\n AssistantMessageItem,\n ThreadStreamEvent,\n ThreadCreatedEvent,\n ThreadItemAddedEvent,\n ThreadItemDoneEvent,\n ThreadItemUpdatedEvent,\n Page,\n Thread,\n UserMessageContent,\n} from './types';\nimport {\n getThreadParent,\n getThreadIdFromRef,\n isStreamingReq,\n generateId,\n nowTimestamp,\n toThreadRef,\n extractUserMessageText,\n} from './types';\nimport { RunStateCenter, type RunStateEvent } from '../runs/RunStateCenter';\nimport type { RunExecutionBackend } from '../runs/RunExecutionBackend';\nimport { isWorkspaceRef } from '../workspace/types';\nimport type { WorkspaceRef } from '../workspace/types';\nimport {\n normalizeReconcilerOwner,\n reconcilerCoordinationMetadata,\n withReconcilerCoordinationMetadata,\n} from '../reconciler';\n\n/**\n * AI Provider interface for direct text generation in tests/dev harnesses.\n *\n * Product Chat requests go through RunStateCenter / Agent Runtime. This\n * provider is not a deployment compatibility path.\n */\nexport interface AiProvider {\n /**\n * Stream a response for the given messages\n * Returns an async iterator of text chunks\n */\n streamResponse(\n messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }>,\n options?: {\n model?: string;\n temperature?: number;\n maxTokens?: number;\n context?: unknown; // Allow passing context for auth\n },\n ): AsyncIterable<string>;\n}\n\n/**\n * ChatKit Service Options\n */\nexport interface ChatKitServiceOptions<TContext = StoreContext> {\n store: ChatKitStore<TContext>;\n aiProvider?: AiProvider;\n systemPrompt?: string;\n /**\n * Enable xpod Agent Runtime invocation (local-only feature).\n * When enabled, thread.metadata.runtime controls the runner/worktree.\n */\n enableAgentRuntime?: boolean;\n allowDirectAiFallback?: boolean;\n runExecutionBackend?: RunExecutionBackend;\n}\n\n/**\n * Streaming result wrapper\n */\nexport interface StreamingResult {\n type: 'streaming';\n stream(): AsyncIterable<Uint8Array>;\n}\n\n/**\n * Non-streaming result wrapper\n */\nexport interface NonStreamingResult {\n type: 'non_streaming';\n json: string;\n}\n\nexport type ChatKitResult = StreamingResult | NonStreamingResult;\n\n/**\n * ChatKit Service\n */\nexport class ChatKitService<TContext = StoreContext> {\n private readonly logger = getLoggerFor(this);\n private readonly store: ChatKitStore<TContext>;\n private readonly aiProvider?: AiProvider;\n private readonly systemPrompt: string;\n private readonly allowDirectAiFallback: boolean;\n private readonly runStateCenter: RunStateCenter<TContext>;\n\n public constructor(options: ChatKitServiceOptions<TContext>) {\n this.store = options.store;\n this.aiProvider = options.aiProvider;\n this.systemPrompt = options.systemPrompt ?? 'You are a helpful assistant.';\n this.allowDirectAiFallback = options.allowDirectAiFallback ?? false;\n this.runStateCenter = new RunStateCenter({\n store: this.store,\n enableAgentRuntime: options.enableAgentRuntime ?? true,\n executionBackend: options.runExecutionBackend,\n });\n }\n\n /**\n * Process a ChatKit request\n */\n public async process(requestBody: string | Buffer, context: TContext): Promise<ChatKitResult> {\n const requestStr = typeof requestBody === 'string' ? requestBody : requestBody.toString('utf-8');\n \n let request: ChatKitReq;\n try {\n request = JSON.parse(requestStr) as ChatKitReq;\n } catch (e) {\n throw new Error('Invalid JSON request body');\n }\n\n this.logger.debug(`Processing ChatKit request: ${request.type}`);\n\n if (isStreamingReq(request)) {\n return {\n type: 'streaming',\n stream: () => this.processStreamingAsBytes(request, context),\n };\n } else {\n const result = await this.processNonStreaming(request, context);\n return {\n type: 'non_streaming',\n json: JSON.stringify(result),\n };\n }\n }\n\n /**\n * Convert streaming events to SSE bytes\n */\n private async *processStreamingAsBytes(request: StreamingReq, context: TContext): AsyncIterable<Uint8Array> {\n const encoder = new TextEncoder();\n try {\n for await (const event of this.processStreaming(request, context)) {\n this.logger.info(`ChatKit streaming event (${request.type}): ${event.type}`);\n const data = JSON.stringify(event);\n yield encoder.encode(`data: ${data}\\n\\n`);\n }\n } catch (error: any) {\n this.logger.error(`ChatKit streaming request failed (${request.type}): ${error?.stack || error}`);\n const errorEvent: ThreadStreamEvent = {\n type: 'error',\n error: {\n code: 'internal_error',\n message: error.message || 'An error occurred',\n },\n };\n yield encoder.encode(`data: ${JSON.stringify(errorEvent)}\\n\\n`);\n }\n }\n\n /**\n * Process streaming requests\n */\n private async *processStreaming(request: StreamingReq, context: TContext): AsyncIterable<ThreadStreamEvent> {\n switch (request.type) {\n case 'threads.create':\n yield* this.handleThreadsCreate(request.params, context, request.metadata);\n break;\n case 'threads.add_user_message':\n yield* this.handleThreadsAddUserMessage(request.params, context);\n break;\n case 'threads.add_client_tool_output':\n yield* this.handleThreadsAddClientToolOutput(request.params, context);\n break;\n case 'threads.retry_after_item':\n yield* this.handleThreadsRetryAfterItem(request.params, context);\n break;\n case 'threads.custom_action':\n yield* this.handleThreadsCustomAction(request.params, context);\n break;\n }\n }\n\n /**\n * Process non-streaming requests\n */\n private async processNonStreaming(request: NonStreamingReq, context: TContext): Promise<unknown> {\n switch (request.type) {\n case 'threads.get_by_id':\n return this.handleThreadsGetById(request.params, context);\n case 'threads.list':\n return this.handleThreadsList(request.params, context);\n case 'items.list':\n return this.handleItemsList(request.params, context);\n case 'items.feedback':\n return this.handleItemsFeedback(request.params, context);\n case 'attachments.create':\n return this.handleAttachmentsCreate(request.params, context);\n case 'attachments.delete':\n return this.handleAttachmentsDelete(request.params, context);\n case 'threads.update':\n return this.handleThreadsUpdate(request.params, context);\n case 'threads.delete':\n return this.handleThreadsDelete(request.params, context);\n }\n }\n\n // =========================================================================\n // Streaming Request Handlers\n // =========================================================================\n\n /**\n * Handle threads.create - Create a new thread and optionally respond to initial message\n */\n private async *handleThreadsCreate(\n params: ThreadCreateParams,\n context: TContext,\n metadata?: Record<string, unknown>,\n ): AsyncIterable<ThreadStreamEvent> {\n // Create new thread\n const threadId = this.store.generateThreadId(context);\n const now = nowTimestamp();\n const normalizedMetadata = this.normalizeThreadMetadata(metadata);\n const coordination = reconcilerCoordinationMetadata(\n normalizeReconcilerOwner(normalizedMetadata?.reconcilerOwner, 'client'),\n );\n \n const thread: ThreadMetadata = {\n id: threadId,\n parent: getThreadParent({ id: threadId })?.parent,\n status: { type: 'active' },\n workspace: this.resolveThreadWorkspace(params.workspace),\n ...coordination,\n created_at: now,\n updated_at: now,\n metadata: withReconcilerCoordinationMetadata(normalizedMetadata, coordination.reconcilerOwner),\n };\n\n await this.store.saveThread(thread, context);\n\n // Emit thread created event\n yield {\n type: 'thread.created',\n thread,\n } as ThreadCreatedEvent;\n\n // If input provided, add user message and respond\n if (params.input) {\n const threadRef = this.threadRefFromThread(thread);\n const userMessage = await this.createUserMessage(threadRef, params.input.content, context, thread);\n await this.store.addThreadItem(threadRef, userMessage, context);\n\n yield {\n type: 'thread.item.added',\n item: userMessage,\n } as ThreadItemAddedEvent;\n\n yield {\n type: 'thread.item.done',\n item: userMessage,\n } as ThreadItemDoneEvent;\n\n // Generate response (AI provider or Agent Runtime)\n yield* this.respond(thread, userMessage, context, params.input.inference_options);\n }\n }\n\n /**\n * Handle threads.add_user_message - Add a user message and respond\n */\n private async *handleThreadsAddUserMessage(\n params: ThreadAddUserMessageParams,\n context: TContext,\n ): AsyncIterable<ThreadStreamEvent> {\n const threadRef = this.threadRefFromParams(params);\n const thread = await this.store.loadThread(threadRef, context);\n\n // Create and save user message\n const userMessage = await this.createUserMessage(threadRef, params.input.content, context);\n await this.store.addThreadItem(threadRef, userMessage, context);\n\n yield {\n type: 'thread.item.added',\n item: userMessage,\n } as ThreadItemAddedEvent;\n\n yield {\n type: 'thread.item.done',\n item: userMessage,\n } as ThreadItemDoneEvent;\n\n // Generate response (AI provider or Agent Runtime)\n yield* this.respond(thread, userMessage, context, params.input.inference_options, threadRef);\n }\n\n /**\n * Handle threads.add_client_tool_output - Handle tool output (not fully implemented)\n */\n private async *handleThreadsAddClientToolOutput(\n params: ThreadAddClientToolOutputParams,\n context: TContext,\n ): AsyncIterable<ThreadStreamEvent> {\n const threadRef = this.threadRefFromParams(params);\n for await (\n const event of this.runStateCenter.completeClientToolOutput({\n threadRef,\n itemId: params.item_id,\n output: params.output,\n context,\n })\n ) {\n yield this.projectRunStateEvent(event);\n }\n }\n\n /**\n * Handle threads.retry_after_item - Retry generation after a specific item\n */\n private async *handleThreadsRetryAfterItem(\n params: ThreadRetryAfterItemParams,\n context: TContext,\n ): AsyncIterable<ThreadStreamEvent> {\n const threadRef = this.threadRefFromParams(params);\n const thread = await this.store.loadThread(threadRef, context);\n \n // Load all items and find the last user message before the retry point\n const items = await this.store.loadThreadItems(threadRef, undefined, 1000, 'asc', context);\n \n let lastUserMessage: UserMessageItem | undefined;\n for (const item of items.data) {\n if (item.id === params.item_id) {\n break;\n }\n if (item.type === 'user_message') {\n lastUserMessage = item;\n }\n }\n\n if (lastUserMessage) {\n yield* this.respond(thread, lastUserMessage, context, undefined, threadRef);\n }\n }\n\n /**\n * Handle threads.custom_action - Handle custom widget actions (not fully implemented)\n */\n private async *handleThreadsCustomAction(\n params: ThreadCustomActionParams,\n context: TContext,\n ): AsyncIterable<ThreadStreamEvent> {\n this.logger.info(`Custom action: ${params.action} on item ${params.item_id}`);\n // Custom actions can be implemented based on specific needs\n }\n\n // =========================================================================\n // Non-Streaming Request Handlers\n // =========================================================================\n\n /**\n * Handle threads.get_by_id\n */\n private async handleThreadsGetById(\n params: ThreadGetByIdParams,\n context: TContext,\n ): Promise<Thread> {\n const threadRef = this.threadRefFromParams(params);\n const thread = await this.store.loadThread(threadRef, context);\n const items = await this.store.loadThreadItems(threadRef, undefined, 50, 'asc', context);\n \n return {\n ...thread,\n items,\n };\n }\n\n /**\n * Handle threads.list\n */\n private async handleThreadsList(\n params: { limit?: number; order?: string; after?: string } | undefined,\n context: TContext,\n ): Promise<Page<ThreadMetadata>> {\n return this.store.loadThreads(\n params?.limit ?? 20,\n params?.after,\n params?.order ?? 'desc',\n context,\n );\n }\n\n /**\n * Handle items.list\n */\n private async handleItemsList(\n params: ItemsListParams,\n context: TContext,\n ): Promise<Page<ThreadItem>> {\n return this.store.loadThreadItems(\n this.threadRefFromParams(params),\n params.after,\n params.limit ?? 50,\n params.order ?? 'asc',\n context,\n );\n }\n\n /**\n * Handle items.feedback (acknowledge only for now)\n */\n private async handleItemsFeedback(\n params: ItemFeedbackParams,\n context: TContext,\n ): Promise<{ success: boolean }> {\n this.logger.info(`Feedback received: ${params.feedback} for items ${params.item_ids.join(', ')}`);\n // Store feedback in metadata or separate table if needed\n return { success: true };\n }\n\n /**\n * Handle attachments.create\n */\n private async handleAttachmentsCreate(\n params: { name: string; size: number; mime_type: string },\n context: TContext,\n ): Promise<{ attachment_id: string; upload_url?: string }> {\n const attachmentId = generateId('attach');\n // For now, return a placeholder - actual upload handling would need S3/MinIO integration\n return {\n attachment_id: attachmentId,\n // upload_url would be provided for actual file upload\n };\n }\n\n /**\n * Handle attachments.delete\n */\n private async handleAttachmentsDelete(\n params: { attachment_id: string },\n context: TContext,\n ): Promise<{ success: boolean }> {\n if (this.store.deleteAttachment) {\n await this.store.deleteAttachment(params.attachment_id, context);\n }\n return { success: true };\n }\n\n /**\n * Handle threads.update\n */\n private async handleThreadsUpdate(\n params: ThreadUpdateParams,\n context: TContext,\n ): Promise<ThreadMetadata> {\n const threadRef = this.threadRefFromParams(params);\n const thread = await this.store.loadThread(threadRef, context);\n \n if (params.title !== undefined) {\n thread.title = params.title;\n }\n if (params.workspace !== undefined) {\n thread.workspace = params.workspace || undefined;\n }\n thread.updated_at = nowTimestamp();\n\n await this.store.saveThread(thread, context);\n return thread;\n }\n\n /**\n * Handle threads.delete\n */\n private async handleThreadsDelete(\n params: ThreadDeleteParams,\n context: TContext,\n ): Promise<{ success: boolean }> {\n await this.store.deleteThread(this.threadRefFromParams(params), context);\n return { success: true };\n }\n\n // =========================================================================\n // Core Response Generation\n // =========================================================================\n\n /**\n * Generate AI response for a user message\n * This is the main response generation logic\n */\n private async *respond(\n thread: ThreadMetadata,\n userMessage: UserMessageItem,\n context: TContext,\n inferenceOptions?: any,\n threadRef: ThreadRef = this.threadRefFromThread(thread),\n ): AsyncIterable<ThreadStreamEvent> {\n const runtimeConfig = this.runStateCenter.getAgentRuntimeConfig(thread, context)\n ?? this.runStateCenter.getDefaultAgentRuntimeConfig(context);\n if (runtimeConfig) {\n for await (\n const event of this.runStateCenter.startAgentRun({\n thread,\n userMessage,\n context,\n runtimeConfig,\n })\n ) {\n yield this.projectRunStateEvent(event);\n }\n return;\n }\n\n if (!this.allowDirectAiFallback || !this.aiProvider) {\n yield {\n type: 'error',\n error: {\n code: 'runtime_required',\n message: 'Chat requires Agent Runtime; direct AI fallback is disabled',\n },\n };\n return;\n }\n\n // Build conversation history\n const messages = await this.buildConversationHistory(threadRef, context);\n \n // Create assistant message item\n const assistantItemId = this.store.generateItemId('assistant_message', thread, context);\n const assistantItem: AssistantMessageItem = {\n id: assistantItemId,\n thread_id: thread.id,\n type: 'assistant_message',\n content: [{ type: 'output_text', text: '' }],\n status: 'in_progress',\n created_at: nowTimestamp(),\n };\n\n await this.store.addThreadItem(threadRef, assistantItem, context);\n\n // Emit item added event\n yield {\n type: 'thread.item.added',\n item: assistantItem,\n } as ThreadItemAddedEvent;\n\n // Stream AI response\n let fullText = '';\n let partIndex = 0;\n\n try {\n for await (const chunk of this.aiProvider.streamResponse(messages, {\n model: inferenceOptions?.model,\n temperature: inferenceOptions?.temperature,\n maxTokens: inferenceOptions?.max_tokens,\n context, // Pass context for auth\n })) {\n fullText += chunk;\n\n // Emit text delta update\n yield {\n type: 'thread.item.updated',\n item_id: assistantItemId,\n update: {\n type: 'assistant_message.content_part.text_delta',\n part_index: partIndex,\n delta: chunk,\n },\n } as ThreadItemUpdatedEvent;\n }\n\n // Update item with full content\n assistantItem.content = [{ type: 'output_text', text: fullText }];\n assistantItem.status = 'completed';\n await this.store.saveItem(threadRef, assistantItem, context);\n\n // Emit item done event\n yield {\n type: 'thread.item.done',\n item: assistantItem,\n } as ThreadItemDoneEvent;\n } catch (error: any) {\n this.logger.error(`AI response generation failed: ${error}`);\n\n assistantItem.content = [{ type: 'output_text', text: 'Sorry, an error occurred while generating the response.' }];\n assistantItem.status = 'incomplete';\n await this.store.saveItem(threadRef, assistantItem, context);\n\n yield {\n type: 'thread.item.done',\n item: assistantItem,\n } as ThreadItemDoneEvent;\n\n yield {\n type: 'error',\n error: {\n code: 'generation_error',\n message: error.message || 'Failed to generate response',\n },\n };\n }\n\n // Auto-generate title if this is the first exchange (outside try/catch to not affect message saving)\n if (!thread.title) {\n try {\n const title = this.generateThreadTitle(userMessage, fullText);\n thread.title = title;\n thread.updated_at = nowTimestamp();\n await this.store.saveThread(thread, context);\n\n yield {\n type: 'thread.updated',\n thread,\n };\n } catch (titleError: any) {\n this.logger.warn(`Failed to auto-generate thread title: ${titleError.message}`);\n // Don't throw - title generation failure shouldn't affect the response\n }\n }\n }\n\n /**\n * Build conversation history from thread items\n */\n private async buildConversationHistory(\n thread: ThreadRef,\n context: TContext,\n ): Promise<Array<{ role: 'system' | 'user' | 'assistant'; content: string }>> {\n const messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }> = [];\n\n // Add system prompt\n messages.push({ role: 'system', content: this.systemPrompt });\n\n // Load thread items\n const items = await this.store.loadThreadItems(thread, undefined, 100, 'asc', context);\n\n for (const item of items.data) {\n if (item.type === 'user_message') {\n const text = extractUserMessageText(item.content);\n if (text) {\n messages.push({ role: 'user', content: text });\n }\n } else if (item.type === 'assistant_message') {\n const text = item.content\n .filter((c) => c.type === 'output_text')\n .map((c) => c.text)\n .join('\\n');\n if (text) {\n messages.push({ role: 'assistant', content: text });\n }\n }\n }\n\n return messages;\n }\n\n /**\n * Create a user message item\n */\n private async createUserMessage(\n threadRef: ThreadRef,\n content: UserMessageContent[],\n context: TContext,\n thread?: ThreadMetadata,\n ): Promise<UserMessageItem> {\n // Use provided thread or load it\n const threadMeta = thread || await this.store.loadThread(threadRef, context);\n const threadId = getThreadIdFromRef(threadRef);\n const itemId = this.store.generateItemId('user_message', threadMeta, context);\n\n return {\n id: itemId,\n thread_id: threadId,\n type: 'user_message',\n content,\n created_at: nowTimestamp(),\n };\n }\n\n /**\n * Generate a title for the thread based on the first exchange\n */\n private generateThreadTitle(userMessage: UserMessageItem, assistantResponse: string): string {\n const userText = extractUserMessageText(userMessage.content);\n // Use the first 50 chars of user message as title\n let title = userText.slice(0, 50);\n if (userText.length > 50) {\n title += '...';\n }\n return title || 'New Chat';\n }\n\n private projectRunStateEvent(event: RunStateEvent): ThreadStreamEvent {\n switch (event.type) {\n case 'item_added':\n return { type: 'thread.item.added', item: event.item } as ThreadItemAddedEvent;\n case 'item_updated':\n return {\n type: 'thread.item.updated',\n item_id: event.itemId,\n update: {\n type: 'assistant_message.content_part.text_delta',\n part_index: 0,\n delta: event.delta,\n },\n } as ThreadItemUpdatedEvent;\n case 'item_done':\n return { type: 'thread.item.done', item: event.item } as ThreadItemDoneEvent;\n case 'client_effect':\n return { type: 'client_effect', effect: event.effect };\n case 'error':\n return {\n type: 'error',\n error: {\n code: event.code,\n message: event.message,\n },\n };\n }\n }\n\n private normalizeThreadMetadata(\n metadata: Record<string, unknown> | undefined,\n ): Record<string, unknown> | undefined {\n const normalized = { ...(metadata ?? {}) };\n delete normalized.chat_id;\n delete normalized.surface_id;\n delete normalized.commandKind;\n delete normalized.conversationKind;\n const reconcilerOwner = normalizeReconcilerOwner(normalized.reconcilerOwner, 'client');\n return withReconcilerCoordinationMetadata(\n Object.keys(normalized).length > 0 ? normalized : undefined,\n reconcilerOwner,\n );\n }\n\n private resolveThreadWorkspace(workspace: WorkspaceRef | undefined): WorkspaceRef | undefined {\n return isWorkspaceRef(workspace) ? workspace : undefined;\n }\n\n private threadRefFromParams(params: { thread_id: string }): ThreadRef {\n return toThreadRef(params);\n }\n\n private threadRefFromThread(thread: ThreadMetadata): ThreadRef {\n return {\n thread_id: thread.id,\n };\n }\n}\n"]}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/api/chatkit/service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ChatKit Service\n * \n * Core service for handling ChatKit protocol requests.\n * Based on https://github.com/openai/chatkit-python/blob/main/chatkit/server.py\n */\n\nimport { getLoggerFor } from 'global-logger-factory';\nimport type { ChatKitStore, StoreContext } from './store';\nimport type {\n ChatKitReq,\n StreamingReq,\n NonStreamingReq,\n ThreadCreateParams,\n ThreadAddUserMessageParams,\n ThreadAddClientToolOutputParams,\n ThreadRetryAfterItemParams,\n ThreadCustomActionParams,\n ThreadGetByIdParams,\n ItemsListParams,\n ItemFeedbackParams,\n ThreadUpdateParams,\n ThreadDeleteParams,\n ThreadMetadata,\n ThreadRef,\n ThreadItem,\n UserMessageItem,\n AssistantMessageItem,\n ThreadStreamEvent,\n ThreadCreatedEvent,\n ThreadItemAddedEvent,\n ThreadItemDoneEvent,\n ThreadItemUpdatedEvent,\n Page,\n Thread,\n UserMessageContent,\n} from './types';\nimport {\n getThreadParent,\n getThreadIdFromRef,\n isStreamingReq,\n generateId,\n nowTimestamp,\n toThreadRef,\n extractUserMessageText,\n} from './types';\nimport { RunStateCenter, type RunStateEvent } from '../runs/RunStateCenter';\nimport type { RunContextRetriever, RunExecutionBackend } from '../runs/RunExecutionBackend';\nimport { isWorkspaceRef } from '../workspace/types';\nimport type { WorkspaceRef } from '../workspace/types';\nimport {\n normalizeReconcilerOwner,\n reconcilerCoordinationMetadata,\n withReconcilerCoordinationMetadata,\n} from '../reconciler';\nimport type { AiConnectionInvocationKeyIssuer } from '../ai-gateway/auth/AiConnectionInvocationKeyIssuer';\n\n/**\n * AI Provider interface for direct text generation in tests/dev harnesses.\n *\n * Product Chat requests go through RunStateCenter / Agent Runtime. This\n * provider is not a deployment compatibility path.\n */\nexport interface AiProvider {\n /**\n * Stream a response for the given messages\n * Returns an async iterator of text chunks\n */\n streamResponse(\n messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }>,\n options?: {\n model?: string;\n temperature?: number;\n maxTokens?: number;\n context?: unknown; // Allow passing context for auth\n },\n ): AsyncIterable<string>;\n}\n\n/**\n * ChatKit Service Options\n */\nexport interface ChatKitServiceOptions<TContext = StoreContext> {\n store: ChatKitStore<TContext>;\n aiProvider?: AiProvider;\n systemPrompt?: string;\n /**\n * Enable xpod Agent Runtime invocation (local-only feature).\n * When enabled, thread.metadata.runtime controls the runner/worktree.\n */\n enableAgentRuntime?: boolean;\n allowDirectAiFallback?: boolean;\n runExecutionBackend?: RunExecutionBackend;\n contextRetriever?: RunContextRetriever<TContext>;\n aiConnectionInvocationKeyIssuer?: Pick<AiConnectionInvocationKeyIssuer, 'issue'>;\n requireAiConnectionInvocationKeyIssuer?: boolean;\n}\n\n/**\n * Streaming result wrapper\n */\nexport interface StreamingResult {\n type: 'streaming';\n stream(): AsyncIterable<Uint8Array>;\n}\n\n/**\n * Non-streaming result wrapper\n */\nexport interface NonStreamingResult {\n type: 'non_streaming';\n json: string;\n}\n\nexport type ChatKitResult = StreamingResult | NonStreamingResult;\n\n/**\n * ChatKit Service\n */\nexport class ChatKitService<TContext = StoreContext> {\n private readonly logger = getLoggerFor(this);\n private readonly store: ChatKitStore<TContext>;\n private readonly aiProvider?: AiProvider;\n private readonly systemPrompt: string;\n private readonly allowDirectAiFallback: boolean;\n private readonly runStateCenter: RunStateCenter<TContext>;\n private readonly aiConnectionInvocationKeyIssuer?: Pick<AiConnectionInvocationKeyIssuer, 'issue'>;\n private readonly requireAiConnectionInvocationKeyIssuer: boolean;\n\n public constructor(options: ChatKitServiceOptions<TContext>) {\n this.store = options.store;\n this.aiProvider = options.aiProvider;\n this.systemPrompt = options.systemPrompt ?? 'You are a helpful assistant.';\n this.allowDirectAiFallback = options.allowDirectAiFallback ?? false;\n this.aiConnectionInvocationKeyIssuer = options.aiConnectionInvocationKeyIssuer;\n this.requireAiConnectionInvocationKeyIssuer = options.requireAiConnectionInvocationKeyIssuer ?? false;\n this.runStateCenter = new RunStateCenter({\n store: this.store,\n enableAgentRuntime: options.enableAgentRuntime ?? true,\n executionBackend: options.runExecutionBackend,\n contextRetriever: options.contextRetriever,\n });\n }\n\n /**\n * Process a ChatKit request\n */\n public async process(requestBody: string | Buffer, context: TContext): Promise<ChatKitResult> {\n const requestStr = typeof requestBody === 'string' ? requestBody : requestBody.toString('utf-8');\n \n let request: ChatKitReq;\n try {\n request = JSON.parse(requestStr) as ChatKitReq;\n } catch (e) {\n throw new Error('Invalid JSON request body');\n }\n\n this.logger.debug(`Processing ChatKit request: ${request.type}`);\n\n if (isStreamingReq(request)) {\n return {\n type: 'streaming',\n stream: () => this.processStreamingAsBytes(request, context),\n };\n } else {\n const result = await this.processNonStreaming(request, context);\n return {\n type: 'non_streaming',\n json: JSON.stringify(result),\n };\n }\n }\n\n /**\n * Convert streaming events to SSE bytes\n */\n private async *processStreamingAsBytes(request: StreamingReq, context: TContext): AsyncIterable<Uint8Array> {\n const encoder = new TextEncoder();\n try {\n for await (const event of this.processStreaming(request, context)) {\n this.logger.info(`ChatKit streaming event (${request.type}): ${event.type}`);\n const data = JSON.stringify(event);\n yield encoder.encode(`data: ${data}\\n\\n`);\n }\n } catch (error: any) {\n this.logger.error(`ChatKit streaming request failed (${request.type}): ${error?.stack || error}`);\n const errorEvent: ThreadStreamEvent = {\n type: 'error',\n error: {\n code: 'internal_error',\n message: error.message || 'An error occurred',\n },\n };\n yield encoder.encode(`data: ${JSON.stringify(errorEvent)}\\n\\n`);\n }\n }\n\n /**\n * Process streaming requests\n */\n private async *processStreaming(request: StreamingReq, context: TContext): AsyncIterable<ThreadStreamEvent> {\n switch (request.type) {\n case 'threads.create':\n yield* this.handleThreadsCreate(request.params, context, request.metadata);\n break;\n case 'threads.add_user_message':\n yield* this.handleThreadsAddUserMessage(request.params, context);\n break;\n case 'threads.add_client_tool_output':\n yield* this.handleThreadsAddClientToolOutput(request.params, context);\n break;\n case 'threads.retry_after_item':\n yield* this.handleThreadsRetryAfterItem(request.params, context);\n break;\n case 'threads.custom_action':\n yield* this.handleThreadsCustomAction(request.params, context);\n break;\n }\n }\n\n /**\n * Process non-streaming requests\n */\n private async processNonStreaming(request: NonStreamingReq, context: TContext): Promise<unknown> {\n switch (request.type) {\n case 'threads.get_by_id':\n return this.handleThreadsGetById(request.params, context);\n case 'threads.list':\n return this.handleThreadsList(request.params, context);\n case 'items.list':\n return this.handleItemsList(request.params, context);\n case 'items.feedback':\n return this.handleItemsFeedback(request.params, context);\n case 'attachments.create':\n return this.handleAttachmentsCreate(request.params, context);\n case 'attachments.delete':\n return this.handleAttachmentsDelete(request.params, context);\n case 'threads.update':\n return this.handleThreadsUpdate(request.params, context);\n case 'threads.delete':\n return this.handleThreadsDelete(request.params, context);\n }\n }\n\n // =========================================================================\n // Streaming Request Handlers\n // =========================================================================\n\n /**\n * Handle threads.create - Create a new thread and optionally respond to initial message\n */\n private async *handleThreadsCreate(\n params: ThreadCreateParams,\n context: TContext,\n metadata?: Record<string, unknown>,\n ): AsyncIterable<ThreadStreamEvent> {\n // Create new thread\n const threadId = this.store.generateThreadId(context);\n const now = nowTimestamp();\n const normalizedMetadata = this.normalizeThreadMetadata(metadata);\n const coordination = reconcilerCoordinationMetadata(\n normalizeReconcilerOwner(normalizedMetadata?.reconcilerOwner, 'client'),\n );\n \n const thread: ThreadMetadata = {\n id: threadId,\n parent: getThreadParent({ id: threadId })?.parent,\n status: { type: 'active' },\n workspace: this.resolveThreadWorkspace(params.workspace),\n ...coordination,\n created_at: now,\n updated_at: now,\n metadata: withReconcilerCoordinationMetadata(normalizedMetadata, coordination.reconcilerOwner),\n };\n\n await this.store.saveThread(thread, context);\n\n // Emit thread created event\n yield {\n type: 'thread.created',\n thread,\n } as ThreadCreatedEvent;\n\n // If input provided, add user message and respond\n if (params.input) {\n const threadRef = this.threadRefFromThread(thread);\n const userMessage = await this.createUserMessage(threadRef, params.input.content, context, thread);\n await this.store.addThreadItem(threadRef, userMessage, context);\n\n yield {\n type: 'thread.item.added',\n item: userMessage,\n } as ThreadItemAddedEvent;\n\n yield {\n type: 'thread.item.done',\n item: userMessage,\n } as ThreadItemDoneEvent;\n\n // Generate response (AI provider or Agent Runtime)\n yield* this.respond(thread, userMessage, context, params.input.inference_options);\n }\n }\n\n /**\n * Handle threads.add_user_message - Add a user message and respond\n */\n private async *handleThreadsAddUserMessage(\n params: ThreadAddUserMessageParams,\n context: TContext,\n ): AsyncIterable<ThreadStreamEvent> {\n const threadRef = this.threadRefFromParams(params);\n const thread = await this.store.loadThread(threadRef, context);\n\n // Create and save user message\n const userMessage = await this.createUserMessage(threadRef, params.input.content, context);\n await this.store.addThreadItem(threadRef, userMessage, context);\n\n yield {\n type: 'thread.item.added',\n item: userMessage,\n } as ThreadItemAddedEvent;\n\n yield {\n type: 'thread.item.done',\n item: userMessage,\n } as ThreadItemDoneEvent;\n\n // Generate response (AI provider or Agent Runtime)\n yield* this.respond(thread, userMessage, context, params.input.inference_options, threadRef);\n }\n\n /**\n * Handle threads.add_client_tool_output - Handle tool output (not fully implemented)\n */\n private async *handleThreadsAddClientToolOutput(\n params: ThreadAddClientToolOutputParams,\n context: TContext,\n ): AsyncIterable<ThreadStreamEvent> {\n const threadRef = this.threadRefFromParams(params);\n const prepared = await this.runStateCenter.prepareClientToolOutput({\n threadRef,\n itemId: params.item_id,\n output: params.output,\n context,\n });\n if (!prepared) {\n yield this.projectRunStateEvent({\n type: 'error',\n code: 'client_tool_output_conflict',\n message: 'Client tool output was already claimed or completed',\n });\n return;\n }\n let completed = false;\n try {\n const executionContext = await this.withInvocationAiConnection(context);\n for await (\n const event of this.runStateCenter.completePreparedClientToolOutput(prepared, executionContext)\n ) {\n yield this.projectRunStateEvent(event);\n }\n completed = true;\n } finally {\n if (!completed) {\n await this.runStateCenter.releaseClientToolOutput(prepared, context);\n }\n }\n }\n\n /**\n * Handle threads.retry_after_item - Retry generation after a specific item\n */\n private async *handleThreadsRetryAfterItem(\n params: ThreadRetryAfterItemParams,\n context: TContext,\n ): AsyncIterable<ThreadStreamEvent> {\n const threadRef = this.threadRefFromParams(params);\n const thread = await this.store.loadThread(threadRef, context);\n \n // Load all items and find the last user message before the retry point\n const items = await this.store.loadThreadItems(threadRef, undefined, 1000, 'asc', context);\n \n let lastUserMessage: UserMessageItem | undefined;\n for (const item of items.data) {\n if (item.id === params.item_id) {\n break;\n }\n if (item.type === 'user_message') {\n lastUserMessage = item;\n }\n }\n\n if (lastUserMessage) {\n yield* this.respond(thread, lastUserMessage, context, undefined, threadRef);\n }\n }\n\n /**\n * Handle threads.custom_action - Handle custom widget actions (not fully implemented)\n */\n private async *handleThreadsCustomAction(\n params: ThreadCustomActionParams,\n context: TContext,\n ): AsyncIterable<ThreadStreamEvent> {\n this.logger.info(`Custom action: ${params.action} on item ${params.item_id}`);\n // Custom actions can be implemented based on specific needs\n }\n\n // =========================================================================\n // Non-Streaming Request Handlers\n // =========================================================================\n\n /**\n * Handle threads.get_by_id\n */\n private async handleThreadsGetById(\n params: ThreadGetByIdParams,\n context: TContext,\n ): Promise<Thread> {\n const threadRef = this.threadRefFromParams(params);\n const thread = await this.store.loadThread(threadRef, context);\n const items = await this.store.loadThreadItems(threadRef, undefined, 50, 'asc', context);\n \n return {\n ...thread,\n items,\n };\n }\n\n /**\n * Handle threads.list\n */\n private async handleThreadsList(\n params: { limit?: number; order?: string; after?: string } | undefined,\n context: TContext,\n ): Promise<Page<ThreadMetadata>> {\n return this.store.loadThreads(\n params?.limit ?? 20,\n params?.after,\n params?.order ?? 'desc',\n context,\n );\n }\n\n /**\n * Handle items.list\n */\n private async handleItemsList(\n params: ItemsListParams,\n context: TContext,\n ): Promise<Page<ThreadItem>> {\n return this.store.loadThreadItems(\n this.threadRefFromParams(params),\n params.after,\n params.limit ?? 50,\n params.order ?? 'asc',\n context,\n );\n }\n\n /**\n * Handle items.feedback (acknowledge only for now)\n */\n private async handleItemsFeedback(\n params: ItemFeedbackParams,\n context: TContext,\n ): Promise<{ success: boolean }> {\n this.logger.info(`Feedback received: ${params.feedback} for items ${params.item_ids.join(', ')}`);\n // Store feedback in metadata or separate table if needed\n return { success: true };\n }\n\n /**\n * Handle attachments.create\n */\n private async handleAttachmentsCreate(\n params: { name: string; size: number; mime_type: string },\n context: TContext,\n ): Promise<{ attachment_id: string; upload_url?: string }> {\n const attachmentId = generateId('attach');\n // For now, return a placeholder - actual upload handling would need S3/MinIO integration\n return {\n attachment_id: attachmentId,\n // upload_url would be provided for actual file upload\n };\n }\n\n /**\n * Handle attachments.delete\n */\n private async handleAttachmentsDelete(\n params: { attachment_id: string },\n context: TContext,\n ): Promise<{ success: boolean }> {\n if (this.store.deleteAttachment) {\n await this.store.deleteAttachment(params.attachment_id, context);\n }\n return { success: true };\n }\n\n /**\n * Handle threads.update\n */\n private async handleThreadsUpdate(\n params: ThreadUpdateParams,\n context: TContext,\n ): Promise<ThreadMetadata> {\n const threadRef = this.threadRefFromParams(params);\n const thread = await this.store.loadThread(threadRef, context);\n \n if (params.title !== undefined) {\n thread.title = params.title;\n }\n if (params.workspace !== undefined) {\n thread.workspace = params.workspace || undefined;\n }\n thread.updated_at = nowTimestamp();\n\n await this.store.saveThread(thread, context);\n return thread;\n }\n\n /**\n * Handle threads.delete\n */\n private async handleThreadsDelete(\n params: ThreadDeleteParams,\n context: TContext,\n ): Promise<{ success: boolean }> {\n await this.store.deleteThread(this.threadRefFromParams(params), context);\n return { success: true };\n }\n\n // =========================================================================\n // Core Response Generation\n // =========================================================================\n\n /**\n * Generate AI response for a user message\n * This is the main response generation logic\n */\n private async *respond(\n thread: ThreadMetadata,\n userMessage: UserMessageItem,\n context: TContext,\n inferenceOptions?: any,\n threadRef: ThreadRef = this.threadRefFromThread(thread),\n ): AsyncIterable<ThreadStreamEvent> {\n const configuredRuntime = this.runStateCenter.getAgentRuntimeConfig(thread, context)\n ?? this.runStateCenter.getDefaultAgentRuntimeConfig(context);\n const executionContext = configuredRuntime\n ? await this.withInvocationAiConnection(context)\n : context;\n const runtimeConfig = configuredRuntime\n ? (this.runStateCenter.getAgentRuntimeConfig(thread, executionContext) ?? configuredRuntime)\n : null;\n if (runtimeConfig) {\n for await (\n const event of this.runStateCenter.startAgentRun({\n thread,\n userMessage,\n context: executionContext,\n runtimeConfig,\n })\n ) {\n yield this.projectRunStateEvent(event);\n }\n return;\n }\n\n if (!this.allowDirectAiFallback || !this.aiProvider) {\n yield {\n type: 'error',\n error: {\n code: 'runtime_required',\n message: 'Chat requires Agent Runtime; direct AI fallback is disabled',\n },\n };\n return;\n }\n\n // Build conversation history\n const messages = await this.buildConversationHistory(threadRef, context);\n \n // Create assistant message item\n const assistantItemId = this.store.generateItemId('assistant_message', thread, context);\n const assistantItem: AssistantMessageItem = {\n id: assistantItemId,\n thread_id: thread.id,\n type: 'assistant_message',\n content: [{ type: 'output_text', text: '' }],\n status: 'in_progress',\n created_at: nowTimestamp(),\n };\n\n await this.store.addThreadItem(threadRef, assistantItem, context);\n\n // Emit item added event\n yield {\n type: 'thread.item.added',\n item: assistantItem,\n } as ThreadItemAddedEvent;\n\n // Stream AI response\n let fullText = '';\n let partIndex = 0;\n\n try {\n for await (const chunk of this.aiProvider.streamResponse(messages, {\n model: inferenceOptions?.model,\n temperature: inferenceOptions?.temperature,\n maxTokens: inferenceOptions?.max_tokens,\n context, // Pass context for auth\n })) {\n fullText += chunk;\n\n // Emit text delta update\n yield {\n type: 'thread.item.updated',\n item_id: assistantItemId,\n update: {\n type: 'assistant_message.content_part.text_delta',\n part_index: partIndex,\n delta: chunk,\n },\n } as ThreadItemUpdatedEvent;\n }\n\n // Update item with full content\n assistantItem.content = [{ type: 'output_text', text: fullText }];\n assistantItem.status = 'completed';\n await this.store.saveItem(threadRef, assistantItem, context);\n\n // Emit item done event\n yield {\n type: 'thread.item.done',\n item: assistantItem,\n } as ThreadItemDoneEvent;\n } catch (error: any) {\n this.logger.error(`AI response generation failed: ${error}`);\n\n assistantItem.content = [{ type: 'output_text', text: 'Sorry, an error occurred while generating the response.' }];\n assistantItem.status = 'incomplete';\n await this.store.saveItem(threadRef, assistantItem, context);\n\n yield {\n type: 'thread.item.done',\n item: assistantItem,\n } as ThreadItemDoneEvent;\n\n yield {\n type: 'error',\n error: {\n code: 'generation_error',\n message: error.message || 'Failed to generate response',\n },\n };\n }\n\n // Auto-generate title if this is the first exchange (outside try/catch to not affect message saving)\n if (!thread.title) {\n try {\n const title = this.generateThreadTitle(userMessage, fullText);\n thread.title = title;\n thread.updated_at = nowTimestamp();\n await this.store.saveThread(thread, context);\n\n yield {\n type: 'thread.updated',\n thread,\n };\n } catch (titleError: any) {\n this.logger.warn(`Failed to auto-generate thread title: ${titleError.message}`);\n // Don't throw - title generation failure shouldn't affect the response\n }\n }\n }\n\n private async withInvocationAiConnection(context: TContext): Promise<TContext> {\n if (!this.aiConnectionInvocationKeyIssuer) {\n if (this.requireAiConnectionInvocationKeyIssuer) {\n throw new Error('AI Connection invocation key issuer is required');\n }\n return context;\n }\n const aiConnection = await this.aiConnectionInvocationKeyIssuer.issue(context as StoreContext);\n return {\n ...(context as Record<string, unknown>),\n aiConnection,\n } as TContext;\n }\n\n /**\n * Build conversation history from thread items\n */\n private async buildConversationHistory(\n thread: ThreadRef,\n context: TContext,\n ): Promise<Array<{ role: 'system' | 'user' | 'assistant'; content: string }>> {\n const messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }> = [];\n\n // Add system prompt\n messages.push({ role: 'system', content: this.systemPrompt });\n\n // Load thread items\n const items = await this.store.loadThreadItems(thread, undefined, 100, 'asc', context);\n\n for (const item of items.data) {\n if (item.type === 'user_message') {\n const text = extractUserMessageText(item.content);\n if (text) {\n messages.push({ role: 'user', content: text });\n }\n } else if (item.type === 'assistant_message') {\n const text = item.content\n .filter((c) => c.type === 'output_text')\n .map((c) => c.text)\n .join('\\n');\n if (text) {\n messages.push({ role: 'assistant', content: text });\n }\n }\n }\n\n return messages;\n }\n\n /**\n * Create a user message item\n */\n private async createUserMessage(\n threadRef: ThreadRef,\n content: UserMessageContent[],\n context: TContext,\n thread?: ThreadMetadata,\n ): Promise<UserMessageItem> {\n // Use provided thread or load it\n const threadMeta = thread || await this.store.loadThread(threadRef, context);\n const threadId = getThreadIdFromRef(threadRef);\n const itemId = this.store.generateItemId('user_message', threadMeta, context);\n\n return {\n id: itemId,\n thread_id: threadId,\n type: 'user_message',\n content,\n created_at: nowTimestamp(),\n };\n }\n\n /**\n * Generate a title for the thread based on the first exchange\n */\n private generateThreadTitle(userMessage: UserMessageItem, assistantResponse: string): string {\n const userText = extractUserMessageText(userMessage.content);\n // Use the first 50 chars of user message as title\n let title = userText.slice(0, 50);\n if (userText.length > 50) {\n title += '...';\n }\n return title || 'New Chat';\n }\n\n private projectRunStateEvent(event: RunStateEvent): ThreadStreamEvent {\n switch (event.type) {\n case 'item_added':\n return { type: 'thread.item.added', item: event.item } as ThreadItemAddedEvent;\n case 'item_updated':\n return {\n type: 'thread.item.updated',\n item_id: event.itemId,\n update: {\n type: 'assistant_message.content_part.text_delta',\n part_index: 0,\n delta: event.delta,\n },\n } as ThreadItemUpdatedEvent;\n case 'item_done':\n return { type: 'thread.item.done', item: event.item } as ThreadItemDoneEvent;\n case 'client_effect':\n return { type: 'client_effect', effect: event.effect };\n case 'error':\n return {\n type: 'error',\n error: {\n code: event.code,\n message: event.message,\n },\n };\n }\n }\n\n private normalizeThreadMetadata(\n metadata: Record<string, unknown> | undefined,\n ): Record<string, unknown> | undefined {\n const normalized = { ...(metadata ?? {}) };\n delete normalized.chat_id;\n delete normalized.surface_id;\n delete normalized.commandKind;\n delete normalized.conversationKind;\n const reconcilerOwner = normalizeReconcilerOwner(normalized.reconcilerOwner, 'client');\n return withReconcilerCoordinationMetadata(\n Object.keys(normalized).length > 0 ? normalized : undefined,\n reconcilerOwner,\n );\n }\n\n private resolveThreadWorkspace(workspace: WorkspaceRef | undefined): WorkspaceRef | undefined {\n return isWorkspaceRef(workspace) ? workspace : undefined;\n }\n\n private threadRefFromParams(params: { thread_id: string }): ThreadRef {\n return toThreadRef(params);\n }\n\n private threadRefFromThread(thread: ThreadMetadata): ThreadRef {\n return {\n thread_id: thread.id,\n };\n }\n}\n"]}
@@ -4,7 +4,7 @@
4
4
  * Abstract interface for persisting threads and items.
5
5
  * Based on https://github.com/openai/chatkit-python/blob/main/chatkit/store.py
6
6
  */
7
- import type { ThreadMetadata, ThreadRef, ThreadItem, Attachment, Page, StoreItemType } from './types';
7
+ import type { ThreadMetadata, ThreadRef, ThreadItem, Attachment, Page, StoreItemType, ClientToolCallItem } from './types';
8
8
  import { type RunListOptions, type RunRecordData, type RunStepRecordData, type RunStore } from '../runs/store';
9
9
  import { type TaskListOptions, type TaskRecordData, type TaskStore } from '../tasks/store';
10
10
  import { type TaskAuthBindingRepository, type TaskAuthCredentialRecord } from '../tasks/TaskAuthBinding';
@@ -12,6 +12,12 @@ import { type TaskAuthBindingRepository, type TaskAuthCredentialRecord } from '.
12
12
  * Context type for store operations (generic)
13
13
  */
14
14
  export type StoreContext = Record<string, unknown>;
15
+ export interface ClientToolContinuationClaim {
16
+ claimId: string;
17
+ threadRef: ThreadRef;
18
+ item: ClientToolCallItem;
19
+ run: RunRecordData;
20
+ }
15
21
  /**
16
22
  * Abstract Store interface
17
23
  */
@@ -27,6 +33,14 @@ export interface ChatKitStore<TContext = StoreContext> extends Partial<RunStore<
27
33
  saveItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise<void>;
28
34
  loadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<ThreadItem>;
29
35
  deleteThreadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<void>;
36
+ claimClientToolContinuation?(input: {
37
+ threadRef: ThreadRef;
38
+ itemId: string;
39
+ claimId: string;
40
+ leaseExpiresAt: number;
41
+ now: number;
42
+ }, context: TContext): Promise<ClientToolContinuationClaim | undefined>;
43
+ releaseClientToolContinuation?(claim: ClientToolContinuationClaim, now: number, context: TContext): Promise<boolean>;
30
44
  saveAttachment?(attachment: Attachment, context: TContext): Promise<void>;
31
45
  loadAttachment?(attachmentId: string, context: TContext): Promise<Attachment>;
32
46
  deleteAttachment?(attachmentId: string, context: TContext): Promise<void>;
@@ -60,6 +74,14 @@ export declare class InMemoryStore<TContext = StoreContext> implements ChatKitSt
60
74
  saveItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise<void>;
61
75
  loadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<ThreadItem>;
62
76
  deleteThreadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<void>;
77
+ claimClientToolContinuation(input: {
78
+ threadRef: ThreadRef;
79
+ itemId: string;
80
+ claimId: string;
81
+ leaseExpiresAt: number;
82
+ now: number;
83
+ }, context: TContext): Promise<ClientToolContinuationClaim | undefined>;
84
+ releaseClientToolContinuation(claim: ClientToolContinuationClaim, now: number, context: TContext): Promise<boolean>;
63
85
  saveAttachment(attachment: Attachment, _context: TContext): Promise<void>;
64
86
  loadAttachment(attachmentId: string, _context: TContext): Promise<Attachment>;
65
87
  deleteAttachment(attachmentId: string, _context: TContext): Promise<void>;
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.InMemoryStore = void 0;
10
10
  const types_1 = require("./types");
11
11
  const store_1 = require("../runs/store");
12
+ const schema_1 = require("../runs/schema");
12
13
  const store_2 = require("../tasks/store");
13
14
  const TaskAuthBinding_1 = require("../tasks/TaskAuthBinding");
14
15
  /**
@@ -181,6 +182,61 @@ class InMemoryStore {
181
182
  threadItems.delete(itemId);
182
183
  }
183
184
  }
185
+ async claimClientToolContinuation(input, context) {
186
+ const item = await this.loadItem(input.threadRef, input.itemId, context);
187
+ if (item.type !== 'client_tool_call' || item.status !== 'pending') {
188
+ return undefined;
189
+ }
190
+ const runId = item.metadata?.runId;
191
+ if (typeof runId !== 'string') {
192
+ return undefined;
193
+ }
194
+ const key = this.getRunKey(runId, context);
195
+ const run = this.runs.get(key);
196
+ const waitingTool = run?.metadata?.waitingTool;
197
+ if (!run
198
+ || run.status !== schema_1.RunStatus.WAITING_INPUT
199
+ || (run.leaseOwner && run.leaseExpiresAt && run.leaseExpiresAt > input.now)
200
+ || typeof waitingTool !== 'object'
201
+ || waitingTool.itemId !== item.id) {
202
+ return undefined;
203
+ }
204
+ const claimed = {
205
+ ...run,
206
+ leaseOwner: input.claimId,
207
+ leaseExpiresAt: input.leaseExpiresAt,
208
+ heartbeatAt: input.now,
209
+ updatedAt: input.now,
210
+ };
211
+ this.runs.set(key, claimed);
212
+ return {
213
+ claimId: input.claimId,
214
+ threadRef: input.threadRef,
215
+ item: { ...item },
216
+ run: { ...claimed },
217
+ };
218
+ }
219
+ async releaseClientToolContinuation(claim, now, context) {
220
+ const key = this.getRunKey(claim.run.id, context);
221
+ const run = this.runs.get(key);
222
+ if (!run || run.leaseOwner !== claim.claimId) {
223
+ return false;
224
+ }
225
+ this.runs.set(key, {
226
+ ...claim.run,
227
+ status: schema_1.RunStatus.WAITING_INPUT,
228
+ leaseOwner: undefined,
229
+ leaseExpiresAt: undefined,
230
+ heartbeatAt: now,
231
+ updatedAt: now,
232
+ });
233
+ await this.saveItem(claim.threadRef, {
234
+ ...claim.item,
235
+ status: 'pending',
236
+ output: undefined,
237
+ }, context);
238
+ return true;
239
+ }
184
240
  // Attachment operations
185
241
  async saveAttachment(attachment, _context) {
186
242
  this.attachments.set(attachment.id, attachment);
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/api/chatkit/store.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ChatKit Store Interface\n * \n * Abstract interface for persisting threads and items.\n * Based on https://github.com/openai/chatkit-python/blob/main/chatkit/store.py\n */\n\nimport type {\n ThreadMetadata,\n ThreadRef,\n ThreadItem,\n Attachment,\n Page,\n StoreItemType,\n} from './types';\nimport { generateId, getThreadIdFromRef, getThreadParent, nowTimestamp } from './types';\nimport {\n buildRunResourceId,\n buildRunStepResourceId,\n canClaimRun,\n isRunResourceId,\n type RunListOptions,\n type RunRecordData,\n type RunStepRecordData,\n type RunStore,\n} from '../runs/store';\nimport { buildTaskResourceId, type TaskListOptions, type TaskRecordData, type TaskStore } from '../tasks/store';\nimport {\n TASK_AUTH_CREDENTIAL_SERVICE,\n type TaskAuthBindingRepository,\n type TaskAuthCredentialRecord,\n} from '../tasks/TaskAuthBinding';\n\n/**\n * Context type for store operations (generic)\n */\nexport type StoreContext = Record<string, unknown>;\n\n/**\n * Abstract Store interface\n */\nexport interface ChatKitStore<TContext = StoreContext> extends Partial<RunStore<TContext>> {\n // ID Generation\n generateThreadId(context: TContext): string;\n generateItemId(itemType: StoreItemType, thread: ThreadMetadata, context: TContext): string;\n\n // Thread operations\n loadThread(thread: ThreadRef, context: TContext): Promise<ThreadMetadata>;\n saveThread(thread: ThreadMetadata, context: TContext): Promise<void>;\n loadThreads(limit: number, after: string | undefined, order: string, context: TContext): Promise<Page<ThreadMetadata>>;\n deleteThread(thread: ThreadRef, context: TContext): Promise<void>;\n\n // Thread Item operations\n loadThreadItems(thread: ThreadRef, after: string | undefined, limit: number, order: string, context: TContext): Promise<Page<ThreadItem>>;\n addThreadItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise<void>;\n saveItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise<void>;\n loadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<ThreadItem>;\n deleteThreadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<void>;\n\n // Attachment operations (optional)\n saveAttachment?(attachment: Attachment, context: TContext): Promise<void>;\n loadAttachment?(attachmentId: string, context: TContext): Promise<Attachment>;\n deleteAttachment?(attachmentId: string, context: TContext): Promise<void>;\n}\n\n/**\n * In-Memory Store Implementation\n * \n * Simple in-memory store for development and testing.\n * Data is lost when the server restarts.\n */\nexport class InMemoryStore<TContext = StoreContext> implements ChatKitStore<TContext>, TaskStore<TContext>, TaskAuthBindingRepository<TContext & StoreContext> {\n private threads: Map<string, ThreadMetadata> = new Map();\n private items: Map<string, Map<string, ThreadItem>> = new Map(); // threadId -> (itemId -> item)\n private attachments: Map<string, Attachment> = new Map();\n private runs: Map<string, RunRecordData> = new Map();\n private runSteps: Map<string, RunStepRecordData[]> = new Map();\n private tasks: Map<string, TaskRecordData> = new Map();\n private taskAuthCredentials: Map<string, TaskAuthCredentialRecord> = new Map();\n\n // Store per-user data using a key from context\n private getUserKey(context: TContext): string {\n const userId = (context as Record<string, unknown>).userId;\n return typeof userId === 'string' ? userId : 'default';\n }\n\n private getThreadKey(threadId: string, context: TContext): string {\n return `${this.getUserKey(context)}:${threadId}`;\n }\n\n private normalizeThreadId(thread: ThreadRef): string {\n return getThreadIdFromRef(thread);\n }\n\n private stripThreadProtocolMetadata(metadata: Record<string, unknown> | undefined): Record<string, unknown> | undefined {\n if (!metadata) {\n return undefined;\n }\n const stripped = { ...metadata };\n delete stripped.chat_id;\n delete stripped.surface_id;\n delete stripped.commandKind;\n delete stripped.parent;\n return Object.keys(stripped).length > 0 ? stripped : undefined;\n }\n\n // ID Generation\n generateThreadId(_context: TContext): string {\n return `chat/default/index.ttl#${generateId('thread')}`;\n }\n\n generateItemId(itemType: StoreItemType, thread: ThreadMetadata, _context: TContext): string {\n const parent = getThreadParent(thread);\n const storageKind = parent?.kind ?? 'chat';\n const storageKey = parent?.key ?? 'default';\n const date = new Date();\n const yyyy = String(date.getUTCFullYear());\n const MM = String(date.getUTCMonth() + 1).padStart(2, '0');\n const dd = String(date.getUTCDate()).padStart(2, '0');\n return `${storageKind}/${storageKey}/${yyyy}/${MM}/${dd}/messages.ttl#${generateId(itemType)}`;\n }\n\n // Thread operations\n async loadThread(thread: ThreadRef, context: TContext): Promise<ThreadMetadata> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n const threadData = this.threads.get(key);\n if (!threadData) {\n throw new Error(`Thread not found: ${threadId}`);\n }\n return threadData;\n }\n\n async saveThread(thread: ThreadMetadata, context: TContext): Promise<void> {\n const key = this.getThreadKey(thread.id, context);\n this.threads.set(key, {\n ...thread,\n parent: thread.parent ?? getThreadParent(thread)?.parent,\n metadata: this.stripThreadProtocolMetadata(thread.metadata),\n updated_at: nowTimestamp(),\n });\n }\n\n async loadThreads(limit: number, after: string | undefined, order: string, context: TContext): Promise<Page<ThreadMetadata>> {\n const userKey = this.getUserKey(context);\n const prefix = `${userKey}:`;\n \n // Get all threads for this user\n const userThreads: ThreadMetadata[] = [];\n for (const [key, thread] of this.threads) {\n if (key.startsWith(prefix)) {\n userThreads.push(thread);\n }\n }\n\n // Sort by created_at\n userThreads.sort((a, b) => {\n return order === 'desc' ? b.created_at - a.created_at : a.created_at - b.created_at;\n });\n\n // Apply pagination\n let startIndex = 0;\n if (after) {\n const afterIndex = userThreads.findIndex((t) => t.id === after);\n if (afterIndex !== -1) {\n startIndex = afterIndex + 1;\n }\n }\n\n const slice = userThreads.slice(startIndex, startIndex + limit);\n const hasMore = startIndex + limit < userThreads.length;\n\n return {\n data: slice,\n has_more: hasMore,\n after: slice.length > 0 ? slice[slice.length - 1].id : undefined,\n };\n }\n\n async deleteThread(thread: ThreadRef, context: TContext): Promise<void> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n this.threads.delete(key);\n this.items.delete(key);\n }\n\n // Thread Item operations\n async loadThreadItems(thread: ThreadRef, after: string | undefined, limit: number, order: string, context: TContext): Promise<Page<ThreadItem>> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n const threadItems = this.items.get(key);\n \n if (!threadItems) {\n return { data: [], has_more: false };\n }\n\n const itemList = Array.from(threadItems.values());\n \n // Sort by created_at\n itemList.sort((a, b) => {\n return order === 'desc' ? b.created_at - a.created_at : a.created_at - b.created_at;\n });\n\n // Apply pagination\n let startIndex = 0;\n if (after) {\n const afterIndex = itemList.findIndex((item) => item.id === after);\n if (afterIndex !== -1) {\n startIndex = afterIndex + 1;\n }\n }\n\n const slice = itemList.slice(startIndex, startIndex + limit);\n const hasMore = startIndex + limit < itemList.length;\n\n return {\n data: slice,\n has_more: hasMore,\n after: slice.length > 0 ? slice[slice.length - 1].id : undefined,\n };\n }\n\n async addThreadItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise<void> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n let threadItems = this.items.get(key);\n if (!threadItems) {\n threadItems = new Map();\n this.items.set(key, threadItems);\n }\n threadItems.set(item.id, item);\n }\n\n async saveItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise<void> {\n await this.addThreadItem(thread, item, context);\n }\n\n async loadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<ThreadItem> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n const threadItems = this.items.get(key);\n if (!threadItems) {\n throw new Error(`Thread not found: ${threadId}`);\n }\n const item = threadItems.get(itemId);\n if (!item) {\n throw new Error(`Item not found: ${itemId}`);\n }\n return item;\n }\n\n async deleteThreadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<void> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n const threadItems = this.items.get(key);\n if (threadItems) {\n threadItems.delete(itemId);\n }\n }\n\n // Attachment operations\n async saveAttachment(attachment: Attachment, _context: TContext): Promise<void> {\n this.attachments.set(attachment.id, attachment);\n }\n\n async loadAttachment(attachmentId: string, _context: TContext): Promise<Attachment> {\n const attachment = this.attachments.get(attachmentId);\n if (!attachment) {\n throw new Error(`Attachment not found: ${attachmentId}`);\n }\n return attachment;\n }\n\n async deleteAttachment(attachmentId: string, _context: TContext): Promise<void> {\n this.attachments.delete(attachmentId);\n }\n\n async saveRun(run: RunRecordData, context: TContext): Promise<void> {\n run.id = buildRunResourceId(run.id);\n this.runs.set(this.getRunKey(run.id, context), { ...run });\n }\n\n async loadRun(runId: string, context: TContext): Promise<RunRecordData> {\n const run = this.runs.get(this.getRunKey(runId, context));\n if (!run) {\n throw new Error(`Run not found: ${runId}`);\n }\n return { ...run };\n }\n\n async listRuns(options: RunListOptions, context: TContext): Promise<RunRecordData[]> {\n const userKey = this.getUserKey(context);\n const prefix = `${userKey}:`;\n let runs = Array.from(this.runs.entries())\n .filter(([key]) => key.startsWith(prefix))\n .map(([, run]) => ({ ...run }));\n\n if (options.task) {\n runs = runs.filter((run) => run.task === options.task);\n }\n if (options.thread) {\n runs = runs.filter((run) => run.thread === options.thread);\n }\n if (options.workspace) {\n runs = runs.filter((run) => run.workspace === options.workspace);\n }\n if (options.status) {\n runs = runs.filter((run) => run.status === options.status);\n }\n\n runs.sort((a, b) => b.createdAt - a.createdAt || b.id.localeCompare(a.id));\n return runs.slice(0, options.limit ?? runs.length);\n }\n\n async appendRunStep(event: RunStepRecordData, context: TContext): Promise<void> {\n if (!isRunResourceId(event.runId)) {\n throw new Error(`RunStep runId must be a complete Run resource id: ${event.runId}`);\n }\n event.id = buildRunStepResourceId(event.id);\n const key = this.getRunKey(event.runId, context);\n const events = this.runSteps.get(key) ?? [];\n events.push({ ...event });\n this.runSteps.set(key, events);\n }\n\n async loadRunSteps(runId: string, context: TContext): Promise<RunStepRecordData[]> {\n return [...(this.runSteps.get(this.getRunKey(runId, context)) ?? [])];\n }\n\n async claimRun(input: {\n runId: string;\n leaseOwner: string;\n leaseExpiresAt: number;\n now: number;\n }, context: TContext): Promise<RunRecordData | undefined> {\n const key = this.getRunKey(input.runId, context);\n const run = this.runs.get(key);\n if (!run || !canClaimRun(run, input)) {\n return undefined;\n }\n const claimed = {\n ...run,\n leaseOwner: input.leaseOwner,\n leaseExpiresAt: input.leaseExpiresAt,\n heartbeatAt: input.now,\n updatedAt: input.now,\n };\n this.runs.set(key, claimed);\n return { ...claimed };\n }\n\n async saveTask(task: TaskRecordData, context: TContext): Promise<void> {\n task.id = buildTaskResourceId(task.id);\n this.tasks.set(this.getTaskKey(task.id, context), {\n ...task,\n metadata: this.withAuthBindingMetadata(task.metadata, task.authBinding),\n });\n }\n\n async loadTask(taskId: string, context: TContext): Promise<TaskRecordData> {\n const task = this.tasks.get(this.getTaskKey(taskId, context));\n if (!task) {\n throw new Error(`Task not found: ${taskId}`);\n }\n return { ...task };\n }\n\n async listTasks(options: TaskListOptions, context: TContext): Promise<TaskRecordData[]> {\n const userKey = this.getUserKey(context);\n const prefix = `${userKey}:`;\n const dueAt = options.dueAt ?? nowTimestamp();\n let tasks = Array.from(this.tasks.entries())\n .filter(([key]) => key.startsWith(prefix))\n .map(([, task]) => ({ ...task }));\n\n if (options.status) {\n tasks = tasks.filter((task) => task.status === options.status);\n }\n if (options.triggerKind) {\n tasks = tasks.filter((task) => task.triggerKind === options.triggerKind);\n }\n if (options.eventName) {\n tasks = tasks.filter((task) => task.eventName === options.eventName);\n }\n if (typeof options.dueAt === 'number') {\n tasks = tasks.filter((task) => typeof task.nextRunAt === 'number' && task.nextRunAt <= dueAt);\n }\n\n tasks.sort((a, b) => (a.nextRunAt ?? a.createdAt) - (b.nextRunAt ?? b.createdAt) || a.id.localeCompare(b.id));\n return tasks.slice(0, options.limit ?? tasks.length);\n }\n\n async saveTaskAuthCredential(input: {\n id: string;\n apiKey: string;\n displayName?: string;\n expiresAt?: number;\n }, context: TContext & StoreContext): Promise<TaskAuthCredentialRecord> {\n const record: TaskAuthCredentialRecord = {\n id: input.id,\n service: TASK_AUTH_CREDENTIAL_SERVICE,\n status: 'active',\n apiKey: input.apiKey,\n label: input.displayName,\n oauthExpiresAt: input.expiresAt ? new Date(input.expiresAt * 1000).toISOString() : undefined,\n createdAt: new Date().toISOString(),\n };\n this.taskAuthCredentials.set(this.getTaskAuthCredentialKey(input.id, context), record);\n return { ...record };\n }\n\n async loadTaskAuthCredential(id: string, context: TContext & StoreContext): Promise<TaskAuthCredentialRecord | undefined> {\n const record = this.taskAuthCredentials.get(this.getTaskAuthCredentialKey(id, context));\n return record ? { ...record } : undefined;\n }\n\n private withAuthBindingMetadata(\n metadata: Record<string, unknown> | undefined,\n authBinding: TaskRecordData['authBinding'],\n ): Record<string, unknown> | undefined {\n if (!authBinding) {\n return metadata;\n }\n return {\n ...(metadata ?? {}),\n authBinding,\n };\n }\n\n // Utility methods for debugging\n getStats(): { threads: number; items: number; attachments: number } {\n let totalItems = 0;\n for (const threadItems of this.items.values()) {\n totalItems += threadItems.size;\n }\n return {\n threads: this.threads.size,\n items: totalItems,\n attachments: this.attachments.size,\n };\n }\n\n clear(): void {\n this.threads.clear();\n this.items.clear();\n this.attachments.clear();\n this.runs.clear();\n this.runSteps.clear();\n this.tasks.clear();\n this.taskAuthCredentials.clear();\n }\n\n private getRunKey(runId: string, context: TContext): string {\n return `${this.getUserKey(context)}:${runId}`;\n }\n\n private getTaskKey(taskId: string, context: TContext): string {\n return `${this.getUserKey(context)}:${taskId}`;\n }\n\n private getTaskAuthCredentialKey(id: string, context: TContext): string {\n return `${this.getUserKey(context)}:${id}`;\n }\n}\n"]}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/api/chatkit/store.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ChatKit Store Interface\n * \n * Abstract interface for persisting threads and items.\n * Based on https://github.com/openai/chatkit-python/blob/main/chatkit/store.py\n */\n\nimport type {\n ThreadMetadata,\n ThreadRef,\n ThreadItem,\n Attachment,\n Page,\n StoreItemType,\n ClientToolCallItem,\n} from './types';\nimport { generateId, getThreadIdFromRef, getThreadParent, nowTimestamp } from './types';\nimport {\n buildRunResourceId,\n buildRunStepResourceId,\n canClaimRun,\n isRunResourceId,\n type RunListOptions,\n type RunRecordData,\n type RunStepRecordData,\n type RunStore,\n} from '../runs/store';\nimport { RunStatus } from '../runs/schema';\nimport { buildTaskResourceId, type TaskListOptions, type TaskRecordData, type TaskStore } from '../tasks/store';\nimport {\n TASK_AUTH_CREDENTIAL_SERVICE,\n type TaskAuthBindingRepository,\n type TaskAuthCredentialRecord,\n} from '../tasks/TaskAuthBinding';\n\n/**\n * Context type for store operations (generic)\n */\nexport type StoreContext = Record<string, unknown>;\n\nexport interface ClientToolContinuationClaim {\n claimId: string;\n threadRef: ThreadRef;\n item: ClientToolCallItem;\n run: RunRecordData;\n}\n\n/**\n * Abstract Store interface\n */\nexport interface ChatKitStore<TContext = StoreContext> extends Partial<RunStore<TContext>> {\n // ID Generation\n generateThreadId(context: TContext): string;\n generateItemId(itemType: StoreItemType, thread: ThreadMetadata, context: TContext): string;\n\n // Thread operations\n loadThread(thread: ThreadRef, context: TContext): Promise<ThreadMetadata>;\n saveThread(thread: ThreadMetadata, context: TContext): Promise<void>;\n loadThreads(limit: number, after: string | undefined, order: string, context: TContext): Promise<Page<ThreadMetadata>>;\n deleteThread(thread: ThreadRef, context: TContext): Promise<void>;\n\n // Thread Item operations\n loadThreadItems(thread: ThreadRef, after: string | undefined, limit: number, order: string, context: TContext): Promise<Page<ThreadItem>>;\n addThreadItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise<void>;\n saveItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise<void>;\n loadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<ThreadItem>;\n deleteThreadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<void>;\n claimClientToolContinuation?(\n input: {\n threadRef: ThreadRef;\n itemId: string;\n claimId: string;\n leaseExpiresAt: number;\n now: number;\n },\n context: TContext,\n ): Promise<ClientToolContinuationClaim | undefined>;\n releaseClientToolContinuation?(\n claim: ClientToolContinuationClaim,\n now: number,\n context: TContext,\n ): Promise<boolean>;\n\n // Attachment operations (optional)\n saveAttachment?(attachment: Attachment, context: TContext): Promise<void>;\n loadAttachment?(attachmentId: string, context: TContext): Promise<Attachment>;\n deleteAttachment?(attachmentId: string, context: TContext): Promise<void>;\n}\n\n/**\n * In-Memory Store Implementation\n * \n * Simple in-memory store for development and testing.\n * Data is lost when the server restarts.\n */\nexport class InMemoryStore<TContext = StoreContext> implements ChatKitStore<TContext>, TaskStore<TContext>, TaskAuthBindingRepository<TContext & StoreContext> {\n private threads: Map<string, ThreadMetadata> = new Map();\n private items: Map<string, Map<string, ThreadItem>> = new Map(); // threadId -> (itemId -> item)\n private attachments: Map<string, Attachment> = new Map();\n private runs: Map<string, RunRecordData> = new Map();\n private runSteps: Map<string, RunStepRecordData[]> = new Map();\n private tasks: Map<string, TaskRecordData> = new Map();\n private taskAuthCredentials: Map<string, TaskAuthCredentialRecord> = new Map();\n\n // Store per-user data using a key from context\n private getUserKey(context: TContext): string {\n const userId = (context as Record<string, unknown>).userId;\n return typeof userId === 'string' ? userId : 'default';\n }\n\n private getThreadKey(threadId: string, context: TContext): string {\n return `${this.getUserKey(context)}:${threadId}`;\n }\n\n private normalizeThreadId(thread: ThreadRef): string {\n return getThreadIdFromRef(thread);\n }\n\n private stripThreadProtocolMetadata(metadata: Record<string, unknown> | undefined): Record<string, unknown> | undefined {\n if (!metadata) {\n return undefined;\n }\n const stripped = { ...metadata };\n delete stripped.chat_id;\n delete stripped.surface_id;\n delete stripped.commandKind;\n delete stripped.parent;\n return Object.keys(stripped).length > 0 ? stripped : undefined;\n }\n\n // ID Generation\n generateThreadId(_context: TContext): string {\n return `chat/default/index.ttl#${generateId('thread')}`;\n }\n\n generateItemId(itemType: StoreItemType, thread: ThreadMetadata, _context: TContext): string {\n const parent = getThreadParent(thread);\n const storageKind = parent?.kind ?? 'chat';\n const storageKey = parent?.key ?? 'default';\n const date = new Date();\n const yyyy = String(date.getUTCFullYear());\n const MM = String(date.getUTCMonth() + 1).padStart(2, '0');\n const dd = String(date.getUTCDate()).padStart(2, '0');\n return `${storageKind}/${storageKey}/${yyyy}/${MM}/${dd}/messages.ttl#${generateId(itemType)}`;\n }\n\n // Thread operations\n async loadThread(thread: ThreadRef, context: TContext): Promise<ThreadMetadata> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n const threadData = this.threads.get(key);\n if (!threadData) {\n throw new Error(`Thread not found: ${threadId}`);\n }\n return threadData;\n }\n\n async saveThread(thread: ThreadMetadata, context: TContext): Promise<void> {\n const key = this.getThreadKey(thread.id, context);\n this.threads.set(key, {\n ...thread,\n parent: thread.parent ?? getThreadParent(thread)?.parent,\n metadata: this.stripThreadProtocolMetadata(thread.metadata),\n updated_at: nowTimestamp(),\n });\n }\n\n async loadThreads(limit: number, after: string | undefined, order: string, context: TContext): Promise<Page<ThreadMetadata>> {\n const userKey = this.getUserKey(context);\n const prefix = `${userKey}:`;\n \n // Get all threads for this user\n const userThreads: ThreadMetadata[] = [];\n for (const [key, thread] of this.threads) {\n if (key.startsWith(prefix)) {\n userThreads.push(thread);\n }\n }\n\n // Sort by created_at\n userThreads.sort((a, b) => {\n return order === 'desc' ? b.created_at - a.created_at : a.created_at - b.created_at;\n });\n\n // Apply pagination\n let startIndex = 0;\n if (after) {\n const afterIndex = userThreads.findIndex((t) => t.id === after);\n if (afterIndex !== -1) {\n startIndex = afterIndex + 1;\n }\n }\n\n const slice = userThreads.slice(startIndex, startIndex + limit);\n const hasMore = startIndex + limit < userThreads.length;\n\n return {\n data: slice,\n has_more: hasMore,\n after: slice.length > 0 ? slice[slice.length - 1].id : undefined,\n };\n }\n\n async deleteThread(thread: ThreadRef, context: TContext): Promise<void> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n this.threads.delete(key);\n this.items.delete(key);\n }\n\n // Thread Item operations\n async loadThreadItems(thread: ThreadRef, after: string | undefined, limit: number, order: string, context: TContext): Promise<Page<ThreadItem>> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n const threadItems = this.items.get(key);\n \n if (!threadItems) {\n return { data: [], has_more: false };\n }\n\n const itemList = Array.from(threadItems.values());\n \n // Sort by created_at\n itemList.sort((a, b) => {\n return order === 'desc' ? b.created_at - a.created_at : a.created_at - b.created_at;\n });\n\n // Apply pagination\n let startIndex = 0;\n if (after) {\n const afterIndex = itemList.findIndex((item) => item.id === after);\n if (afterIndex !== -1) {\n startIndex = afterIndex + 1;\n }\n }\n\n const slice = itemList.slice(startIndex, startIndex + limit);\n const hasMore = startIndex + limit < itemList.length;\n\n return {\n data: slice,\n has_more: hasMore,\n after: slice.length > 0 ? slice[slice.length - 1].id : undefined,\n };\n }\n\n async addThreadItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise<void> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n let threadItems = this.items.get(key);\n if (!threadItems) {\n threadItems = new Map();\n this.items.set(key, threadItems);\n }\n threadItems.set(item.id, item);\n }\n\n async saveItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise<void> {\n await this.addThreadItem(thread, item, context);\n }\n\n async loadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<ThreadItem> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n const threadItems = this.items.get(key);\n if (!threadItems) {\n throw new Error(`Thread not found: ${threadId}`);\n }\n const item = threadItems.get(itemId);\n if (!item) {\n throw new Error(`Item not found: ${itemId}`);\n }\n return item;\n }\n\n async deleteThreadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<void> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n const threadItems = this.items.get(key);\n if (threadItems) {\n threadItems.delete(itemId);\n }\n }\n\n async claimClientToolContinuation(\n input: {\n threadRef: ThreadRef;\n itemId: string;\n claimId: string;\n leaseExpiresAt: number;\n now: number;\n },\n context: TContext,\n ): Promise<ClientToolContinuationClaim | undefined> {\n const item = await this.loadItem(input.threadRef, input.itemId, context);\n if (item.type !== 'client_tool_call' || item.status !== 'pending') {\n return undefined;\n }\n const runId = item.metadata?.runId;\n if (typeof runId !== 'string') {\n return undefined;\n }\n const key = this.getRunKey(runId, context);\n const run = this.runs.get(key);\n const waitingTool = run?.metadata?.waitingTool;\n if (\n !run\n || run.status !== RunStatus.WAITING_INPUT\n || (run.leaseOwner && run.leaseExpiresAt && run.leaseExpiresAt > input.now)\n || typeof waitingTool !== 'object'\n || (waitingTool as { itemId?: unknown }).itemId !== item.id\n ) {\n return undefined;\n }\n const claimed = {\n ...run,\n leaseOwner: input.claimId,\n leaseExpiresAt: input.leaseExpiresAt,\n heartbeatAt: input.now,\n updatedAt: input.now,\n };\n this.runs.set(key, claimed);\n return {\n claimId: input.claimId,\n threadRef: input.threadRef,\n item: { ...item },\n run: { ...claimed },\n };\n }\n\n async releaseClientToolContinuation(\n claim: ClientToolContinuationClaim,\n now: number,\n context: TContext,\n ): Promise<boolean> {\n const key = this.getRunKey(claim.run.id, context);\n const run = this.runs.get(key);\n if (!run || run.leaseOwner !== claim.claimId) {\n return false;\n }\n this.runs.set(key, {\n ...claim.run,\n status: RunStatus.WAITING_INPUT,\n leaseOwner: undefined,\n leaseExpiresAt: undefined,\n heartbeatAt: now,\n updatedAt: now,\n });\n await this.saveItem(claim.threadRef, {\n ...claim.item,\n status: 'pending',\n output: undefined,\n }, context);\n return true;\n }\n\n // Attachment operations\n async saveAttachment(attachment: Attachment, _context: TContext): Promise<void> {\n this.attachments.set(attachment.id, attachment);\n }\n\n async loadAttachment(attachmentId: string, _context: TContext): Promise<Attachment> {\n const attachment = this.attachments.get(attachmentId);\n if (!attachment) {\n throw new Error(`Attachment not found: ${attachmentId}`);\n }\n return attachment;\n }\n\n async deleteAttachment(attachmentId: string, _context: TContext): Promise<void> {\n this.attachments.delete(attachmentId);\n }\n\n async saveRun(run: RunRecordData, context: TContext): Promise<void> {\n run.id = buildRunResourceId(run.id);\n this.runs.set(this.getRunKey(run.id, context), { ...run });\n }\n\n async loadRun(runId: string, context: TContext): Promise<RunRecordData> {\n const run = this.runs.get(this.getRunKey(runId, context));\n if (!run) {\n throw new Error(`Run not found: ${runId}`);\n }\n return { ...run };\n }\n\n async listRuns(options: RunListOptions, context: TContext): Promise<RunRecordData[]> {\n const userKey = this.getUserKey(context);\n const prefix = `${userKey}:`;\n let runs = Array.from(this.runs.entries())\n .filter(([key]) => key.startsWith(prefix))\n .map(([, run]) => ({ ...run }));\n\n if (options.task) {\n runs = runs.filter((run) => run.task === options.task);\n }\n if (options.thread) {\n runs = runs.filter((run) => run.thread === options.thread);\n }\n if (options.workspace) {\n runs = runs.filter((run) => run.workspace === options.workspace);\n }\n if (options.status) {\n runs = runs.filter((run) => run.status === options.status);\n }\n\n runs.sort((a, b) => b.createdAt - a.createdAt || b.id.localeCompare(a.id));\n return runs.slice(0, options.limit ?? runs.length);\n }\n\n async appendRunStep(event: RunStepRecordData, context: TContext): Promise<void> {\n if (!isRunResourceId(event.runId)) {\n throw new Error(`RunStep runId must be a complete Run resource id: ${event.runId}`);\n }\n event.id = buildRunStepResourceId(event.id);\n const key = this.getRunKey(event.runId, context);\n const events = this.runSteps.get(key) ?? [];\n events.push({ ...event });\n this.runSteps.set(key, events);\n }\n\n async loadRunSteps(runId: string, context: TContext): Promise<RunStepRecordData[]> {\n return [...(this.runSteps.get(this.getRunKey(runId, context)) ?? [])];\n }\n\n async claimRun(input: {\n runId: string;\n leaseOwner: string;\n leaseExpiresAt: number;\n now: number;\n }, context: TContext): Promise<RunRecordData | undefined> {\n const key = this.getRunKey(input.runId, context);\n const run = this.runs.get(key);\n if (!run || !canClaimRun(run, input)) {\n return undefined;\n }\n const claimed = {\n ...run,\n leaseOwner: input.leaseOwner,\n leaseExpiresAt: input.leaseExpiresAt,\n heartbeatAt: input.now,\n updatedAt: input.now,\n };\n this.runs.set(key, claimed);\n return { ...claimed };\n }\n\n async saveTask(task: TaskRecordData, context: TContext): Promise<void> {\n task.id = buildTaskResourceId(task.id);\n this.tasks.set(this.getTaskKey(task.id, context), {\n ...task,\n metadata: this.withAuthBindingMetadata(task.metadata, task.authBinding),\n });\n }\n\n async loadTask(taskId: string, context: TContext): Promise<TaskRecordData> {\n const task = this.tasks.get(this.getTaskKey(taskId, context));\n if (!task) {\n throw new Error(`Task not found: ${taskId}`);\n }\n return { ...task };\n }\n\n async listTasks(options: TaskListOptions, context: TContext): Promise<TaskRecordData[]> {\n const userKey = this.getUserKey(context);\n const prefix = `${userKey}:`;\n const dueAt = options.dueAt ?? nowTimestamp();\n let tasks = Array.from(this.tasks.entries())\n .filter(([key]) => key.startsWith(prefix))\n .map(([, task]) => ({ ...task }));\n\n if (options.status) {\n tasks = tasks.filter((task) => task.status === options.status);\n }\n if (options.triggerKind) {\n tasks = tasks.filter((task) => task.triggerKind === options.triggerKind);\n }\n if (options.eventName) {\n tasks = tasks.filter((task) => task.eventName === options.eventName);\n }\n if (typeof options.dueAt === 'number') {\n tasks = tasks.filter((task) => typeof task.nextRunAt === 'number' && task.nextRunAt <= dueAt);\n }\n\n tasks.sort((a, b) => (a.nextRunAt ?? a.createdAt) - (b.nextRunAt ?? b.createdAt) || a.id.localeCompare(b.id));\n return tasks.slice(0, options.limit ?? tasks.length);\n }\n\n async saveTaskAuthCredential(input: {\n id: string;\n apiKey: string;\n displayName?: string;\n expiresAt?: number;\n }, context: TContext & StoreContext): Promise<TaskAuthCredentialRecord> {\n const record: TaskAuthCredentialRecord = {\n id: input.id,\n service: TASK_AUTH_CREDENTIAL_SERVICE,\n status: 'active',\n apiKey: input.apiKey,\n label: input.displayName,\n oauthExpiresAt: input.expiresAt ? new Date(input.expiresAt * 1000).toISOString() : undefined,\n createdAt: new Date().toISOString(),\n };\n this.taskAuthCredentials.set(this.getTaskAuthCredentialKey(input.id, context), record);\n return { ...record };\n }\n\n async loadTaskAuthCredential(id: string, context: TContext & StoreContext): Promise<TaskAuthCredentialRecord | undefined> {\n const record = this.taskAuthCredentials.get(this.getTaskAuthCredentialKey(id, context));\n return record ? { ...record } : undefined;\n }\n\n private withAuthBindingMetadata(\n metadata: Record<string, unknown> | undefined,\n authBinding: TaskRecordData['authBinding'],\n ): Record<string, unknown> | undefined {\n if (!authBinding) {\n return metadata;\n }\n return {\n ...(metadata ?? {}),\n authBinding,\n };\n }\n\n // Utility methods for debugging\n getStats(): { threads: number; items: number; attachments: number } {\n let totalItems = 0;\n for (const threadItems of this.items.values()) {\n totalItems += threadItems.size;\n }\n return {\n threads: this.threads.size,\n items: totalItems,\n attachments: this.attachments.size,\n };\n }\n\n clear(): void {\n this.threads.clear();\n this.items.clear();\n this.attachments.clear();\n this.runs.clear();\n this.runSteps.clear();\n this.tasks.clear();\n this.taskAuthCredentials.clear();\n }\n\n private getRunKey(runId: string, context: TContext): string {\n return `${this.getUserKey(context)}:${runId}`;\n }\n\n private getTaskKey(taskId: string, context: TContext): string {\n return `${this.getUserKey(context)}:${taskId}`;\n }\n\n private getTaskAuthCredentialKey(id: string, context: TContext): string {\n return `${this.getUserKey(context)}:${id}`;\n }\n}\n"]}
@@ -50,6 +50,7 @@ export interface Thread extends ThreadMetadata {
50
50
  export type HttpResource = `http://${string}` | `https://${string}`;
51
51
  export interface ThreadRef {
52
52
  thread_id: string;
53
+ chat_id?: string;
53
54
  }
54
55
  export interface ThreadParentRef {
55
56
  kind: 'chat' | 'task';