@undefineds.co/xpod 0.3.57 → 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 (779) 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/obj.d.ts +9 -0
  345. package/dist/cli/commands/obj.js +74 -3
  346. package/dist/cli/commands/obj.js.map +1 -1
  347. package/dist/cli/commands/rdf.d.ts +9 -0
  348. package/dist/cli/commands/rdf.js +66 -1
  349. package/dist/cli/commands/rdf.js.map +1 -1
  350. package/dist/cli/commands/start.js +3 -0
  351. package/dist/cli/commands/start.js.map +1 -1
  352. package/dist/cli/lib/solid-auth.d.ts +3 -3
  353. package/dist/cli/lib/solid-auth.js +4 -4
  354. package/dist/cli/lib/solid-auth.js.map +1 -1
  355. package/dist/components/components.jsonld +16 -0
  356. package/dist/components/context.jsonld +815 -28
  357. package/dist/document/Chunker.jsonld +110 -0
  358. package/dist/document/{DocumentParser.d.ts → DocumentReader.d.ts} +23 -11
  359. package/dist/document/{DocumentParser.js → DocumentReader.js} +2 -2
  360. package/dist/document/DocumentReader.js.map +1 -0
  361. package/dist/document/DocumentReader.jsonld +82 -0
  362. package/dist/document/HeadingChunker.jsonld +41 -0
  363. package/dist/document/{JinaDocumentParser.d.ts → JinaReader.d.ts} +7 -7
  364. package/dist/document/{JinaDocumentParser.js → JinaReader.js} +12 -12
  365. package/dist/document/JinaReader.js.map +1 -0
  366. package/dist/document/JinaReader.jsonld +133 -0
  367. package/dist/document/L0SourceSummary.d.ts +103 -0
  368. package/dist/document/L0SourceSummary.js +157 -0
  369. package/dist/document/L0SourceSummary.js.map +1 -0
  370. package/dist/document/L0SourceSummary.jsonld +326 -0
  371. package/dist/document/PaddleOcrReader.d.ts +40 -0
  372. package/dist/document/PaddleOcrReader.js +53 -0
  373. package/dist/document/PaddleOcrReader.js.map +1 -0
  374. package/dist/document/PaddleOcrReader.jsonld +234 -0
  375. package/dist/document/ReaderAiConfig.d.ts +50 -0
  376. package/dist/document/ReaderAiConfig.js +109 -0
  377. package/dist/document/ReaderAiConfig.js.map +1 -0
  378. package/dist/document/ReaderAiConfig.jsonld +185 -0
  379. package/dist/document/ReaderPolicy.d.ts +89 -0
  380. package/dist/document/ReaderPolicy.js +158 -0
  381. package/dist/document/ReaderPolicy.js.map +1 -0
  382. package/dist/document/ReaderPolicy.jsonld +218 -0
  383. package/dist/document/index.d.ts +6 -2
  384. package/dist/document/index.js +6 -2
  385. package/dist/document/index.js.map +1 -1
  386. package/dist/edge/DdnsManager.d.ts +1 -1
  387. package/dist/edge/DdnsManager.js.map +1 -1
  388. package/dist/edge/EdgeNodeAgent.d.ts +4 -0
  389. package/dist/edge/EdgeNodeAgent.js +6 -0
  390. package/dist/edge/EdgeNodeAgent.js.map +1 -1
  391. package/dist/edge/EdgeNodeAgent.jsonld +8 -0
  392. package/dist/edge/EdgeNodeAgentInitializer.d.ts +16 -0
  393. package/dist/edge/EdgeNodeAgentInitializer.js +51 -0
  394. package/dist/edge/EdgeNodeAgentInitializer.js.map +1 -1
  395. package/dist/edge/EdgeNodeAgentInitializer.jsonld +250 -0
  396. package/dist/edge/EdgeNodeCertificateCapabilityBridge.d.ts +34 -0
  397. package/dist/edge/EdgeNodeCertificateCapabilityBridge.js +111 -0
  398. package/dist/edge/EdgeNodeCertificateCapabilityBridge.js.map +1 -0
  399. package/dist/edge/acme/AcmeCertificateManager.d.ts +14 -1
  400. package/dist/edge/acme/AcmeCertificateManager.js +67 -7
  401. package/dist/edge/acme/AcmeCertificateManager.js.map +1 -1
  402. package/dist/edge/acme/AcmeCertificateManager.jsonld +22 -2
  403. package/dist/edge/acme/ClusterCertificateManager.d.ts +12 -0
  404. package/dist/edge/acme/ClusterCertificateManager.js +38 -0
  405. package/dist/edge/acme/ClusterCertificateManager.js.map +1 -1
  406. package/dist/extensions/ExtensionRuntime.d.ts +17 -0
  407. package/dist/extensions/ExtensionRuntime.js +171 -0
  408. package/dist/extensions/ExtensionRuntime.js.map +1 -0
  409. package/dist/extensions/PodCredentialResolver.d.ts +23 -0
  410. package/dist/extensions/PodCredentialResolver.js +139 -0
  411. package/dist/extensions/PodCredentialResolver.js.map +1 -0
  412. package/dist/extensions/index.d.ts +3 -0
  413. package/dist/extensions/index.js +20 -0
  414. package/dist/extensions/index.js.map +1 -0
  415. package/dist/extensions/types.d.ts +73 -0
  416. package/dist/extensions/types.js +3 -0
  417. package/dist/extensions/types.js.map +1 -0
  418. package/dist/http/SubgraphSparqlHttpHandler.d.ts +20 -1
  419. package/dist/http/SubgraphSparqlHttpHandler.js +324 -43
  420. package/dist/http/SubgraphSparqlHttpHandler.js.map +1 -1
  421. package/dist/http/SubgraphSparqlHttpHandler.jsonld +87 -0
  422. package/dist/identity/drizzle/EdgeNodeRepository.js +3 -2
  423. package/dist/identity/drizzle/EdgeNodeRepository.js.map +1 -1
  424. package/dist/identity/drizzle/schema.pg.js +1 -1
  425. package/dist/identity/drizzle/schema.pg.js.map +1 -1
  426. package/dist/identity/drizzle/schema.sqlite.js +1 -1
  427. package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
  428. package/dist/identity/oidc/ScopedPickWebIdHandler.js +5 -5
  429. package/dist/identity/oidc/ScopedPickWebIdHandler.js.map +1 -1
  430. package/dist/index.d.ts +12 -2
  431. package/dist/index.js +13 -1
  432. package/dist/index.js.map +1 -1
  433. package/dist/main.js +3 -0
  434. package/dist/main.js.map +1 -1
  435. package/dist/provision/LocalProvisionState.d.ts +28 -0
  436. package/dist/provision/LocalProvisionState.js +124 -0
  437. package/dist/provision/LocalProvisionState.js.map +1 -0
  438. package/dist/provision/ProvisionCodeCodec.d.ts +7 -3
  439. package/dist/provision/ProvisionCodeCodec.js +10 -3
  440. package/dist/provision/ProvisionCodeCodec.js.map +1 -1
  441. package/dist/provision/ProvisionPodCreator.d.ts +15 -1
  442. package/dist/provision/ProvisionPodCreator.js +68 -1
  443. package/dist/provision/ProvisionPodCreator.js.map +1 -1
  444. package/dist/provision/ProvisionPodCreator.jsonld +31 -0
  445. package/dist/provision/ServiceAccessTokenCodec.d.ts +45 -0
  446. package/dist/provision/ServiceAccessTokenCodec.js +86 -0
  447. package/dist/provision/ServiceAccessTokenCodec.js.map +1 -0
  448. package/dist/runtime/GatewayAdminProxyAuth.d.ts +29 -0
  449. package/dist/runtime/GatewayAdminProxyAuth.js +108 -0
  450. package/dist/runtime/GatewayAdminProxyAuth.js.map +1 -0
  451. package/dist/runtime/Proxy.d.ts +10 -0
  452. package/dist/runtime/Proxy.js +64 -6
  453. package/dist/runtime/Proxy.js.map +1 -1
  454. package/dist/runtime/XpodRuntime.js +1 -0
  455. package/dist/runtime/XpodRuntime.js.map +1 -1
  456. package/dist/runtime/bootstrap.d.ts +1 -0
  457. package/dist/runtime/bootstrap.js +29 -0
  458. package/dist/runtime/bootstrap.js.map +1 -1
  459. package/dist/runtime/css-process.d.ts +1 -0
  460. package/dist/runtime/css-process.js +1 -0
  461. package/dist/runtime/css-process.js.map +1 -1
  462. package/dist/runtime/index.d.ts +1 -0
  463. package/dist/runtime/index.js +3 -1
  464. package/dist/runtime/index.js.map +1 -1
  465. package/dist/runtime/lifecycle.d.ts +3 -1
  466. package/dist/runtime/lifecycle.js +3 -1
  467. package/dist/runtime/lifecycle.js.map +1 -1
  468. package/dist/runtime/runner/node/NodeGatewayRuntimeRunner.js +2 -0
  469. package/dist/runtime/runner/node/NodeGatewayRuntimeRunner.js.map +1 -1
  470. package/dist/runtime/runner/types.d.ts +3 -0
  471. package/dist/runtime/runner/types.js.map +1 -1
  472. package/dist/runtime/runtime-types.d.ts +2 -0
  473. package/dist/runtime/runtime-types.js.map +1 -1
  474. package/dist/runtime/safe-env.d.ts +15 -0
  475. package/dist/runtime/safe-env.js +109 -0
  476. package/dist/runtime/safe-env.js.map +1 -0
  477. package/dist/security/index.d.ts +1 -0
  478. package/dist/security/index.js +18 -0
  479. package/dist/security/index.js.map +1 -0
  480. package/dist/security/secret-cell/DeploymentRootKeyProvider.d.ts +17 -0
  481. package/dist/security/secret-cell/DeploymentRootKeyProvider.js +61 -0
  482. package/dist/security/secret-cell/DeploymentRootKeyProvider.js.map +1 -0
  483. package/dist/security/secret-cell/DeploymentRootKeyProvider.jsonld +124 -0
  484. package/dist/security/secret-cell/SecretCellVault.d.ts +55 -0
  485. package/dist/security/secret-cell/SecretCellVault.js +242 -0
  486. package/dist/security/secret-cell/SecretCellVault.js.map +1 -0
  487. package/dist/security/secret-cell/SecretCellVault.jsonld +207 -0
  488. package/dist/security/secret-cell/index.d.ts +2 -0
  489. package/dist/security/secret-cell/index.js +11 -0
  490. package/dist/security/secret-cell/index.js.map +1 -0
  491. package/dist/solidfs/CompositeSolidFsSyncer.d.ts +18 -0
  492. package/dist/solidfs/CompositeSolidFsSyncer.js +32 -0
  493. package/dist/solidfs/CompositeSolidFsSyncer.js.map +1 -0
  494. package/dist/solidfs/LocalSolidFS.js +25 -1
  495. package/dist/solidfs/LocalSolidFS.js.map +1 -1
  496. package/dist/solidfs/RdfIndexSolidFsSyncer.d.ts +41 -2
  497. package/dist/solidfs/RdfIndexSolidFsSyncer.js +331 -21
  498. package/dist/solidfs/RdfIndexSolidFsSyncer.js.map +1 -1
  499. package/dist/solidfs/SolidFsMetaNotes.d.ts +25 -0
  500. package/dist/solidfs/SolidFsMetaNotes.js +103 -0
  501. package/dist/solidfs/SolidFsMetaNotes.js.map +1 -0
  502. package/dist/solidfs/SolidFsSyncJournal.d.ts +2 -2
  503. package/dist/solidfs/SolidFsSyncJournal.js +9 -4
  504. package/dist/solidfs/SolidFsSyncJournal.js.map +1 -1
  505. package/dist/solidfs/SolidFsSyncJournal.jsonld +119 -0
  506. package/dist/solidfs/WorkspacePrompt.d.ts +13 -0
  507. package/dist/solidfs/WorkspacePrompt.js +42 -0
  508. package/dist/solidfs/WorkspacePrompt.js.map +1 -0
  509. package/dist/solidfs/index.d.ts +3 -0
  510. package/dist/solidfs/index.js +3 -0
  511. package/dist/solidfs/index.js.map +1 -1
  512. package/dist/solidfs/types.d.ts +12 -2
  513. package/dist/solidfs/types.js.map +1 -1
  514. package/dist/storage/accessors/MixDataAccessor.d.ts +36 -4
  515. package/dist/storage/accessors/MixDataAccessor.js +222 -23
  516. package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
  517. package/dist/storage/accessors/MixDataAccessor.jsonld +89 -0
  518. package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +6 -1
  519. package/dist/storage/accessors/SolidRdfDataAccessor.js +35 -0
  520. package/dist/storage/accessors/SolidRdfDataAccessor.js.map +1 -1
  521. package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +20 -0
  522. package/dist/storage/database/PostgresPoolManager.d.ts +1 -0
  523. package/dist/storage/database/PostgresPoolManager.js +2 -2
  524. package/dist/storage/database/PostgresPoolManager.js.map +1 -1
  525. package/dist/storage/locking/UrlAwareRedisLocker.d.ts +2 -0
  526. package/dist/storage/locking/UrlAwareRedisLocker.js +65 -0
  527. package/dist/storage/locking/UrlAwareRedisLocker.js.map +1 -1
  528. package/dist/storage/locking/UrlAwareRedisLocker.jsonld +19 -0
  529. package/dist/storage/rdf/PostgresRdfEngine.d.ts +286 -9
  530. package/dist/storage/rdf/PostgresRdfEngine.js +10773 -2084
  531. package/dist/storage/rdf/PostgresRdfEngine.js.map +1 -1
  532. package/dist/storage/rdf/PostgresRdfEngine.jsonld +1693 -89
  533. package/dist/storage/rdf/PostgresRdfSqlExecutor.d.ts +24 -0
  534. package/dist/storage/rdf/PostgresRdfSqlExecutor.js +131 -0
  535. package/dist/storage/rdf/PostgresRdfSqlExecutor.js.map +1 -0
  536. package/dist/storage/rdf/PostgresRdfTextIndex.d.ts +54 -0
  537. package/dist/storage/rdf/PostgresRdfTextIndex.js +1255 -0
  538. package/dist/storage/rdf/PostgresRdfTextIndex.js.map +1 -0
  539. package/dist/storage/rdf/PostgresRdfTextIndex.jsonld +487 -0
  540. package/dist/storage/rdf/PostgresRdfVectorIndex.d.ts +46 -0
  541. package/dist/storage/rdf/PostgresRdfVectorIndex.js +1165 -0
  542. package/dist/storage/rdf/PostgresRdfVectorIndex.js.map +1 -0
  543. package/dist/storage/rdf/PostgresRdfVectorIndex.jsonld +423 -0
  544. package/dist/storage/rdf/Rdf3xIndex.d.ts +14 -1
  545. package/dist/storage/rdf/Rdf3xIndex.js +286 -2
  546. package/dist/storage/rdf/Rdf3xIndex.js.map +1 -1
  547. package/dist/storage/rdf/Rdf3xIndex.jsonld +36 -0
  548. package/dist/storage/rdf/Rdf3xSchema.d.ts +5 -1
  549. package/dist/storage/rdf/Rdf3xSchema.js +17 -3
  550. package/dist/storage/rdf/Rdf3xSchema.js.map +1 -1
  551. package/dist/storage/rdf/RdfAccessScope.d.ts +22 -0
  552. package/dist/storage/rdf/RdfAccessScope.js +345 -0
  553. package/dist/storage/rdf/RdfAccessScope.js.map +1 -0
  554. package/dist/storage/rdf/RdfAccessScope.jsonld +45 -0
  555. package/dist/storage/rdf/RdfFusionRankPlan.d.ts +2 -0
  556. package/dist/storage/rdf/RdfFusionRankPlan.js +186 -0
  557. package/dist/storage/rdf/RdfFusionRankPlan.js.map +1 -0
  558. package/dist/storage/rdf/RdfJoinShape.d.ts +8 -0
  559. package/dist/storage/rdf/RdfJoinShape.js +31 -0
  560. package/dist/storage/rdf/RdfJoinShape.js.map +1 -0
  561. package/dist/storage/rdf/RdfQuadIndex.d.ts +5 -2
  562. package/dist/storage/rdf/RdfQuadIndex.js +94 -6
  563. package/dist/storage/rdf/RdfQuadIndex.js.map +1 -1
  564. package/dist/storage/rdf/RdfQuadIndex.jsonld +12 -0
  565. package/dist/storage/rdf/RdfQueryExecutor.d.ts +3 -4
  566. package/dist/storage/rdf/RdfQueryExecutor.js +235 -8
  567. package/dist/storage/rdf/RdfQueryExecutor.js.map +1 -1
  568. package/dist/storage/rdf/RdfSearchSourceFilter.d.ts +10 -0
  569. package/dist/storage/rdf/RdfSearchSourceFilter.js +83 -0
  570. package/dist/storage/rdf/RdfSearchSourceFilter.js.map +1 -0
  571. package/dist/storage/rdf/RdfSparqlAdapter.d.ts +27 -1
  572. package/dist/storage/rdf/RdfSparqlAdapter.js +265 -3
  573. package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -1
  574. package/dist/storage/rdf/RdfSparqlAdapter.jsonld +8 -0
  575. package/dist/storage/rdf/RdfTermDictionary.d.ts +7 -1
  576. package/dist/storage/rdf/RdfTermDictionary.js +139 -0
  577. package/dist/storage/rdf/RdfTermDictionary.js.map +1 -1
  578. package/dist/storage/rdf/RdfTermDictionary.jsonld +4 -0
  579. package/dist/storage/rdf/RdfTextIndex.d.ts +45 -2
  580. package/dist/storage/rdf/RdfTextIndex.js +810 -114
  581. package/dist/storage/rdf/RdfTextIndex.js.map +1 -1
  582. package/dist/storage/rdf/RdfTextIndex.jsonld +193 -0
  583. package/dist/storage/rdf/RdfTextProjection.d.ts +10 -0
  584. package/dist/storage/rdf/RdfTextProjection.js +258 -0
  585. package/dist/storage/rdf/RdfTextProjection.js.map +1 -0
  586. package/dist/storage/rdf/RdfVectorIndex.d.ts +30 -2
  587. package/dist/storage/rdf/RdfVectorIndex.js +461 -38
  588. package/dist/storage/rdf/RdfVectorIndex.js.map +1 -1
  589. package/dist/storage/rdf/RdfVectorIndex.jsonld +163 -0
  590. package/dist/storage/rdf/SolidRdfEngine.d.ts +12 -9
  591. package/dist/storage/rdf/SolidRdfEngine.js +48 -22
  592. package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
  593. package/dist/storage/rdf/SolidRdfEngine.jsonld +33 -43
  594. package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +19 -8
  595. package/dist/storage/rdf/SolidRdfSparqlEngine.js +674 -44
  596. package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
  597. package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +51 -0
  598. package/dist/storage/rdf/index.d.ts +9 -5
  599. package/dist/storage/rdf/index.js +42 -1
  600. package/dist/storage/rdf/index.js.map +1 -1
  601. package/dist/storage/rdf/models-benchmark.d.ts +264 -2
  602. package/dist/storage/rdf/models-benchmark.js +4207 -155
  603. package/dist/storage/rdf/models-benchmark.js.map +1 -1
  604. package/dist/storage/rdf/types.d.ts +833 -4
  605. package/dist/storage/rdf/types.js.map +1 -1
  606. package/dist/storage/rdf/types.jsonld +348 -0
  607. package/dist/storage/sparql/CompatibilitySparqlEngine.d.ts +14 -13
  608. package/dist/storage/sparql/CompatibilitySparqlEngine.js +24 -24
  609. package/dist/storage/sparql/CompatibilitySparqlEngine.js.map +1 -1
  610. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.d.ts +14 -13
  611. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js +30 -18
  612. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js.map +1 -1
  613. package/dist/storage/sparql/SubgraphQueryEngine.d.ts +21 -12
  614. package/dist/storage/sparql/SubgraphQueryEngine.js +12 -12
  615. package/dist/storage/sparql/SubgraphQueryEngine.js.map +1 -1
  616. package/dist/terminal/sandbox/MacOSSandbox.js +2 -1
  617. package/dist/terminal/sandbox/MacOSSandbox.js.map +1 -1
  618. package/dist/terminal/sandbox/index.js +2 -1
  619. package/dist/terminal/sandbox/index.js.map +1 -1
  620. package/dist/test-utils/no-auth-xpod.js +3 -0
  621. package/dist/test-utils/no-auth-xpod.js.map +1 -1
  622. package/dist/tunnel/LocalTunnelProvider.d.ts +3 -0
  623. package/dist/tunnel/LocalTunnelProvider.js +17 -1
  624. package/dist/tunnel/LocalTunnelProvider.js.map +1 -1
  625. package/dist/tunnel/LocalTunnelProvider.jsonld +23 -0
  626. package/dist/tunnel/SakuraFrpTunnelProvider.d.ts +3 -0
  627. package/dist/tunnel/SakuraFrpTunnelProvider.js +18 -2
  628. package/dist/tunnel/SakuraFrpTunnelProvider.js.map +1 -1
  629. package/dist/tunnel/TunnelProfiles.d.ts +22 -0
  630. package/dist/tunnel/TunnelProfiles.js +208 -0
  631. package/dist/tunnel/TunnelProfiles.js.map +1 -0
  632. package/dist/tunnel/index.d.ts +2 -0
  633. package/dist/tunnel/index.js +4 -1
  634. package/dist/tunnel/index.js.map +1 -1
  635. package/dist/util/identifiers/ClusterIdentifierStrategy.d.ts +3 -0
  636. package/dist/util/identifiers/ClusterIdentifierStrategy.js +18 -2
  637. package/dist/util/identifiers/ClusterIdentifierStrategy.js.map +1 -1
  638. package/dist/util/identifiers/ClusterIdentifierStrategy.jsonld +5 -1
  639. package/node_modules/@undefineds.co/ai-connection/dist/AiClientConfigurationSection.d.ts +55 -0
  640. package/node_modules/@undefineds.co/ai-connection/dist/AiClientConfigurationSection.js +167 -0
  641. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionHeader.d.ts +3 -0
  642. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionHeader.js +8 -0
  643. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionList.d.ts +4 -0
  644. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionList.js +36 -0
  645. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMain.d.ts +4 -0
  646. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMain.js +37 -0
  647. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMainHeader.d.ts +3 -0
  648. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMainHeader.js +7 -0
  649. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionPanel.d.ts +14 -0
  650. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionPanel.js +333 -0
  651. package/node_modules/@undefineds.co/ai-connection/dist/AiProviderCard.d.ts +22 -0
  652. package/node_modules/@undefineds.co/ai-connection/dist/AiProviderCard.js +43 -0
  653. package/node_modules/@undefineds.co/ai-connection/dist/AiQuotaCard.d.ts +8 -0
  654. package/node_modules/@undefineds.co/ai-connection/dist/AiQuotaCard.js +6 -0
  655. package/node_modules/@undefineds.co/ai-connection/dist/ai-connection-client.d.ts +120 -0
  656. package/node_modules/@undefineds.co/ai-connection/dist/ai-connection-client.js +414 -0
  657. package/node_modules/@undefineds.co/ai-connection/dist/client-config/base-adapter.d.ts +32 -0
  658. package/node_modules/@undefineds.co/ai-connection/dist/client-config/base-adapter.js +212 -0
  659. package/node_modules/@undefineds.co/ai-connection/dist/client-config/codex.d.ts +14 -0
  660. package/node_modules/@undefineds.co/ai-connection/dist/client-config/codex.js +90 -0
  661. package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.cjs +668 -0
  662. package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.d.ts +6 -0
  663. package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.js +6 -0
  664. package/node_modules/@undefineds.co/ai-connection/dist/client-config/json-env-adapter.d.ts +21 -0
  665. package/node_modules/@undefineds.co/ai-connection/dist/client-config/json-env-adapter.js +82 -0
  666. package/node_modules/@undefineds.co/ai-connection/dist/client-config/pi.d.ts +13 -0
  667. package/node_modules/@undefineds.co/ai-connection/dist/client-config/pi.js +83 -0
  668. package/node_modules/@undefineds.co/ai-connection/dist/client-config/transaction.d.ts +17 -0
  669. package/node_modules/@undefineds.co/ai-connection/dist/client-config/transaction.js +153 -0
  670. package/node_modules/@undefineds.co/ai-connection/dist/client-config/types.d.ts +40 -0
  671. package/node_modules/@undefineds.co/ai-connection/dist/client-config/types.js +1 -0
  672. package/node_modules/@undefineds.co/ai-connection/dist/controller.d.ts +42 -0
  673. package/node_modules/@undefineds.co/ai-connection/dist/controller.js +289 -0
  674. package/node_modules/@undefineds.co/ai-connection/dist/index.d.ts +16 -0
  675. package/node_modules/@undefineds.co/ai-connection/dist/index.js +41 -0
  676. package/node_modules/@undefineds.co/ai-connection/dist/manifest.d.ts +1 -0
  677. package/node_modules/@undefineds.co/ai-connection/dist/manifest.js +18 -0
  678. package/node_modules/@undefineds.co/ai-connection/dist/service-access.d.ts +3 -0
  679. package/node_modules/@undefineds.co/ai-connection/dist/service-access.js +133 -0
  680. package/node_modules/@undefineds.co/ai-connection/package.json +50 -0
  681. package/node_modules/@undefineds.co/extension-sdk/README.md +299 -0
  682. package/node_modules/@undefineds.co/extension-sdk/dist/index.d.ts +5 -0
  683. package/node_modules/@undefineds.co/extension-sdk/dist/index.js +5 -0
  684. package/node_modules/@undefineds.co/extension-sdk/dist/layout.d.ts +16 -0
  685. package/node_modules/@undefineds.co/extension-sdk/dist/layout.js +36 -0
  686. package/node_modules/@undefineds.co/extension-sdk/dist/manifest.d.ts +27 -0
  687. package/node_modules/@undefineds.co/extension-sdk/dist/manifest.js +79 -0
  688. package/node_modules/@undefineds.co/extension-sdk/dist/react/app-layout.d.ts +7 -0
  689. package/node_modules/@undefineds.co/extension-sdk/dist/react/app-layout.js +8 -0
  690. package/node_modules/@undefineds.co/extension-sdk/dist/react/auth-boundary.d.ts +27 -0
  691. package/node_modules/@undefineds.co/extension-sdk/dist/react/auth-boundary.js +49 -0
  692. package/node_modules/@undefineds.co/extension-sdk/dist/react/layout-context.d.ts +11 -0
  693. package/node_modules/@undefineds.co/extension-sdk/dist/react/layout-context.js +9 -0
  694. package/node_modules/@undefineds.co/extension-sdk/dist/react/workspace-layout.d.ts +38 -0
  695. package/node_modules/@undefineds.co/extension-sdk/dist/react/workspace-layout.js +132 -0
  696. package/node_modules/@undefineds.co/extension-sdk/dist/react.d.ts +12 -0
  697. package/node_modules/@undefineds.co/extension-sdk/dist/react.js +19 -0
  698. package/node_modules/@undefineds.co/extension-sdk/dist/testing.d.ts +7 -0
  699. package/node_modules/@undefineds.co/extension-sdk/dist/testing.js +27 -0
  700. package/node_modules/@undefineds.co/extension-sdk/dist/web.d.ts +225 -0
  701. package/node_modules/@undefineds.co/extension-sdk/dist/web.js +142 -0
  702. package/node_modules/@undefineds.co/extension-sdk/package.json +49 -0
  703. package/node_modules/@undefineds.co/shared-ui/dist/badge.d.ts +8 -0
  704. package/node_modules/@undefineds.co/shared-ui/dist/badge.js +17 -0
  705. package/node_modules/@undefineds.co/shared-ui/dist/button.d.ts +10 -0
  706. package/node_modules/@undefineds.co/shared-ui/dist/button.js +30 -0
  707. package/node_modules/@undefineds.co/shared-ui/dist/card.d.ts +7 -0
  708. package/node_modules/@undefineds.co/shared-ui/dist/card.js +15 -0
  709. package/node_modules/@undefineds.co/shared-ui/dist/index.d.ts +6 -0
  710. package/node_modules/@undefineds.co/shared-ui/dist/index.js +6 -0
  711. package/node_modules/@undefineds.co/shared-ui/dist/input.d.ts +4 -0
  712. package/node_modules/@undefineds.co/shared-ui/dist/input.js +5 -0
  713. package/node_modules/@undefineds.co/shared-ui/dist/theme.css +121 -0
  714. package/node_modules/@undefineds.co/shared-ui/dist/utils.d.ts +2 -0
  715. package/node_modules/@undefineds.co/shared-ui/dist/utils.js +5 -0
  716. package/node_modules/@undefineds.co/shared-ui/dist/workspace.d.ts +23 -0
  717. package/node_modules/@undefineds.co/shared-ui/dist/workspace.js +38 -0
  718. package/node_modules/@undefineds.co/shared-ui/package.json +39 -0
  719. package/node_modules/@undefineds.co/solid-sdk/dist/index.d.ts +3 -0
  720. package/node_modules/@undefineds.co/solid-sdk/dist/index.js +3 -0
  721. package/node_modules/@undefineds.co/solid-sdk/dist/pod-runtime.d.ts +45 -0
  722. package/node_modules/@undefineds.co/solid-sdk/dist/pod-runtime.js +147 -0
  723. package/node_modules/@undefineds.co/solid-sdk/dist/react.d.ts +15 -0
  724. package/node_modules/@undefineds.co/solid-sdk/dist/react.js +15 -0
  725. package/node_modules/@undefineds.co/solid-sdk/dist/session.d.ts +42 -0
  726. package/node_modules/@undefineds.co/solid-sdk/dist/session.js +127 -0
  727. package/node_modules/@undefineds.co/solid-sdk/package.json +45 -0
  728. package/package.json +32 -12
  729. package/static/app/assets/index-BoYHJ6si.js +230 -0
  730. package/static/app/assets/inrupt-smoke.js +2 -2
  731. package/static/app/assets/main.css +1 -1
  732. package/static/app/assets/main.js +9 -9
  733. package/static/dashboard/assets/NetworkPage-Brt79fuQ.js +2 -0
  734. package/static/dashboard/assets/PaneListHeader-57nvMwH6.js +1 -0
  735. package/static/dashboard/assets/PodPage-CM6do1vB.js +2 -0
  736. package/static/dashboard/assets/ServicesPage-BUNxGJRz.js +1 -0
  737. package/static/dashboard/assets/card-B9Zjf_2p.js +1 -0
  738. package/static/dashboard/assets/dashboard-8C6o666W.js +305 -0
  739. package/static/dashboard/assets/dashboard-CSdewNeA.css +1 -0
  740. package/static/dashboard/assets/database-DPh9wDY9.js +1 -0
  741. package/static/dashboard/assets/external-link-VbMQvVMz.js +1 -0
  742. package/static/dashboard/assets/index-RfiFckzb.js +51 -0
  743. package/static/dashboard/assets/refresh-cw-BxVxNxNr.js +1 -0
  744. package/static/dashboard/assets/services-status-context-DKmJ7ISr.js +1 -0
  745. package/static/dashboard/dashboard.html +2 -2
  746. package/static/settings/assets/ModelsPage-D_IH7AH3.js +1 -0
  747. package/static/settings/assets/PaneListHeader-Bgaze006.js +1 -0
  748. package/static/settings/assets/PodPage-Cy1VNObw.js +2 -0
  749. package/static/settings/assets/ServicesPage-BsFaxVWC.js +1 -0
  750. package/static/settings/assets/SettingsPage-UafNWE_p.js +48 -0
  751. package/static/settings/assets/card-B_bXSIn-.js +1 -0
  752. package/static/settings/assets/services-status-context-DiX-AbrP.js +1 -0
  753. package/static/settings/assets/settings-B30oMfZq.js +305 -0
  754. package/static/settings/assets/settings-CSdewNeA.css +1 -0
  755. package/static/settings/assets/workspace-layout-Dv1Yn9Ci.js +1 -0
  756. package/static/settings/auth.html +21 -0
  757. package/static/settings/reachability.html +221 -0
  758. package/static/settings/reachability.svg +7 -0
  759. package/static/settings/reachability.webmanifest +18 -0
  760. package/static/settings/settings.html +13 -0
  761. package/static/settings/signal-pod.html +293 -0
  762. package/static/settings/vite.svg +1 -0
  763. package/dist/api/service/ai-gateway-transport.d.ts +0 -25
  764. package/dist/api/service/ai-gateway-transport.js +0 -136
  765. package/dist/api/service/ai-gateway-transport.js.map +0 -1
  766. package/dist/api/service/chat-protocol-adapters.d.ts +0 -5
  767. package/dist/api/service/chat-protocol-adapters.js +0 -146
  768. package/dist/api/service/chat-protocol-adapters.js.map +0 -1
  769. package/dist/api/service/chat-routing.d.ts +0 -8
  770. package/dist/api/service/chat-routing.js +0 -16
  771. package/dist/api/service/chat-routing.js.map +0 -1
  772. package/dist/api/service/platform-ai-config.d.ts +0 -10
  773. package/dist/api/service/platform-ai-config.js +0 -76
  774. package/dist/api/service/platform-ai-config.js.map +0 -1
  775. package/dist/document/DocumentParser.js.map +0 -1
  776. package/dist/document/JinaDocumentParser.js.map +0 -1
  777. package/static/app/assets/index-C1yksyT4.js +0 -171
  778. package/static/dashboard/assets/dashboard-BssaVKTn.css +0 -1
  779. package/static/dashboard/assets/dashboard-Ckuadl3C.js +0 -54
@@ -0,0 +1,97 @@
1
+ export type AiClientId = 'codex' | 'claude-code' | 'pi' | 'codebuddy';
2
+ export interface AiClientConfigurationCapabilityDescriptor {
3
+ available: boolean;
4
+ authority?: 'local-filesystem';
5
+ manualInstructions: string;
6
+ }
7
+ export interface AiClientConfigurationStatus {
8
+ status: 'notConfigured' | 'configured' | 'drifted' | 'unavailable' | 'unverifiable' | 'failedAndRestored';
9
+ message?: string;
10
+ installed?: boolean;
11
+ configExists?: boolean;
12
+ }
13
+ export interface AiClientConfigurationPlan {
14
+ planId: string;
15
+ client: AiClientId;
16
+ changes: AiClientConfigurationChange[];
17
+ conflicts: string[];
18
+ backupLocation: string;
19
+ replacementConfirmationRequired: boolean;
20
+ confirmation?: {
21
+ required: boolean;
22
+ token: string;
23
+ targetHash: string;
24
+ message?: string;
25
+ };
26
+ }
27
+ export interface AiClientConfigurationChange {
28
+ target: string;
29
+ action: 'update' | 'createOrUpdate' | 'delete';
30
+ backup: boolean;
31
+ current?: string;
32
+ replacement?: string;
33
+ }
34
+ export interface AiClientConfigurationServiceOptions {
35
+ homeDir?: string;
36
+ backupRoot?: string;
37
+ now?: () => Date;
38
+ verifyGateway?: (input: {
39
+ endpoint: string;
40
+ gatewayKey: string;
41
+ model?: string;
42
+ signal: AbortSignal;
43
+ }) => Promise<unknown>;
44
+ fetch?: typeof fetch;
45
+ verificationTimeoutMs?: number;
46
+ }
47
+ export interface PlanInput {
48
+ client: AiClientId;
49
+ endpoint: string;
50
+ model?: string;
51
+ webId?: string;
52
+ }
53
+ export interface ApplyInput {
54
+ client: AiClientId;
55
+ planId: string;
56
+ gatewayKey: string;
57
+ webId?: string;
58
+ confirmation?: {
59
+ token: string;
60
+ targetHash: string;
61
+ };
62
+ }
63
+ export interface VerifyInput {
64
+ client: AiClientId;
65
+ planId?: string;
66
+ }
67
+ export declare class AiClientConfigurationError extends Error {
68
+ readonly statusCode: number;
69
+ readonly code: string;
70
+ readonly details?: unknown;
71
+ constructor(code: string, message: string, statusCode: number, details?: unknown);
72
+ }
73
+ export declare class AiClientConfigurationService {
74
+ private readonly homeDir;
75
+ private readonly backupRoot;
76
+ private readonly now;
77
+ private readonly verifyGateway;
78
+ private readonly plans;
79
+ private readonly locks;
80
+ constructor(options?: AiClientConfigurationServiceOptions);
81
+ capability(): AiClientConfigurationCapabilityDescriptor;
82
+ inspect(client: AiClientId): Promise<AiClientConfigurationStatus>;
83
+ plan(input: PlanInput): Promise<AiClientConfigurationPlan>;
84
+ apply(input: ApplyInput): Promise<{
85
+ applied: true;
86
+ }>;
87
+ verify(input: VerifyInput): Promise<AiClientConfigurationStatus>;
88
+ restore(client: AiClientId, webId?: string): Promise<AiClientConfigurationStatus>;
89
+ private adapterFor;
90
+ private publicTargets;
91
+ private detectLockTargets;
92
+ private requirePlan;
93
+ private latestPlanFor;
94
+ private withTargetLocks;
95
+ }
96
+ export declare function redactSecretText(input: string): string;
97
+ export declare function unavailableAiClientConfigurationCapability(): AiClientConfigurationCapabilityDescriptor;
@@ -0,0 +1,379 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AiClientConfigurationService = exports.AiClientConfigurationError = void 0;
7
+ exports.redactSecretText = redactSecretText;
8
+ exports.unavailableAiClientConfigurationCapability = unavailableAiClientConfigurationCapability;
9
+ const node_crypto_1 = require("node:crypto");
10
+ const node_path_1 = __importDefault(require("node:path"));
11
+ const node_fs_1 = require("node:fs");
12
+ const client_config_1 = require("@undefineds.co/ai-connection/client-config");
13
+ const PLAN_SECRET_PLACEHOLDER = '[redacted]';
14
+ const MANUAL_INSTRUCTIONS = 'Manual client setup is available when this host cannot safely write local coding-client files.';
15
+ const CLIENT_LABELS = {
16
+ codex: 'Codex',
17
+ 'claude-code': 'Claude Code',
18
+ pi: 'Pi',
19
+ codebuddy: 'CodeBuddy',
20
+ };
21
+ class AiClientConfigurationError extends Error {
22
+ constructor(code, message, statusCode, details) {
23
+ super(message);
24
+ this.code = code;
25
+ this.statusCode = statusCode;
26
+ this.details = details;
27
+ }
28
+ }
29
+ exports.AiClientConfigurationError = AiClientConfigurationError;
30
+ class AiClientConfigurationService {
31
+ constructor(options = {}) {
32
+ this.plans = new Map();
33
+ this.locks = new Map();
34
+ this.homeDir = node_path_1.default.resolve(options.homeDir ?? process.env.HOME ?? process.cwd());
35
+ this.backupRoot = node_path_1.default.resolve(options.backupRoot ?? node_path_1.default.join(this.homeDir, '.xpod/client-config-backups'));
36
+ this.now = options.now ?? (() => new Date());
37
+ this.verifyGateway = options.verifyGateway ?? createDefaultGatewayVerifier(options.fetch ?? fetch, options.verificationTimeoutMs ?? 8_000);
38
+ }
39
+ capability() {
40
+ return {
41
+ available: true,
42
+ authority: 'local-filesystem',
43
+ manualInstructions: MANUAL_INSTRUCTIONS,
44
+ };
45
+ }
46
+ async inspect(client) {
47
+ const adapter = this.adapterFor(client);
48
+ const detection = await mapAdapterError(() => adapter.detect());
49
+ const inspection = await mapAdapterError(() => adapter.inspect());
50
+ const configured = inspection.ownership === 'owned';
51
+ return {
52
+ status: configured ? 'configured' : 'notConfigured',
53
+ installed: detection.installed,
54
+ configExists: detection.configExists,
55
+ message: configured
56
+ ? `${CLIENT_LABELS[client]} is configured for Xpod.`
57
+ : `${CLIENT_LABELS[client]} is not configured for Xpod.`,
58
+ };
59
+ }
60
+ async plan(input) {
61
+ const client = requireSupportedClient(input.client);
62
+ const profile = {
63
+ endpoint: normalizeEndpoint(input.endpoint),
64
+ gatewayKey: PLAN_SECRET_PLACEHOLDER,
65
+ webId: input.webId ?? 'https://xpod.local/.well-known/ai-client-configuration#owner',
66
+ model: input.model,
67
+ };
68
+ const adapter = this.adapterFor(client);
69
+ const nativePlan = await mapAdapterError(() => adapter.plan(profile));
70
+ const targets = await this.publicTargets(nativePlan.writes);
71
+ const beforeHash = hash(targets.map((target) => `${target.filePath}:${target.beforeHash}`).join('\n'));
72
+ const plan = {
73
+ planId: `aicfg_${(0, node_crypto_1.randomUUID)().replace(/-/gu, '')}`,
74
+ client,
75
+ profile,
76
+ nativePlan,
77
+ targets,
78
+ backupDir: node_path_1.default.join(this.backupRoot, client, timestampForPath(this.now())),
79
+ ...(isReplacementSensitive(client) ? {
80
+ confirmation: {
81
+ token: `confirm-${client}-${beforeHash.slice(0, 12)}`,
82
+ targetHash: beforeHash,
83
+ },
84
+ } : {}),
85
+ };
86
+ this.plans.set(plan.planId, plan);
87
+ return publicPlan(plan, this.homeDir);
88
+ }
89
+ async apply(input) {
90
+ const plan = this.requirePlan(input.client, input.planId);
91
+ if (!input.gatewayKey?.startsWith('xpod_')) {
92
+ throw new AiClientConfigurationError('invalid_gateway_key', 'Gateway key is required.', 400);
93
+ }
94
+ if (plan.confirmation) {
95
+ if (!input.confirmation?.token) {
96
+ throw new AiClientConfigurationError('confirmation_required', 'Replacement confirmation is required.', 409);
97
+ }
98
+ if (input.confirmation.token !== plan.confirmation.token ||
99
+ input.confirmation.targetHash !== plan.confirmation.targetHash) {
100
+ throw new AiClientConfigurationError('confirmation_stale', 'Replacement confirmation is stale.', 409);
101
+ }
102
+ }
103
+ return this.withTargetLocks(plan.nativePlan.writes.map((write) => write.path), async () => {
104
+ for (const target of plan.targets) {
105
+ const current = await readOptional(target.filePath);
106
+ if (hash(current ?? '') !== target.beforeHash) {
107
+ throw new AiClientConfigurationError('configuration_conflict', 'Configuration changed after planning.', 409);
108
+ }
109
+ }
110
+ const profile = {
111
+ ...plan.profile,
112
+ gatewayKey: input.gatewayKey,
113
+ webId: input.webId ?? plan.profile.webId,
114
+ };
115
+ const adapter = this.adapterFor(plan.client);
116
+ const nativePlan = await mapAdapterError(() => adapter.plan(profile));
117
+ await mapAdapterError(() => adapter.apply(nativePlan));
118
+ plan.gatewayKey = input.gatewayKey;
119
+ plan.profile = profile;
120
+ plan.nativePlan = nativePlan;
121
+ try {
122
+ await this.verify({ client: plan.client, planId: plan.planId });
123
+ }
124
+ catch {
125
+ await mapAdapterError(() => adapter.restore(profile.webId));
126
+ throw new AiClientConfigurationError('verification_failed_restored', 'Gateway verification failed.', 502, { restored: true });
127
+ }
128
+ return { applied: true };
129
+ });
130
+ }
131
+ async verify(input) {
132
+ const plan = input.planId ? this.requirePlan(input.client, input.planId) : undefined;
133
+ const status = await this.inspect(input.client);
134
+ if (status.status !== 'configured') {
135
+ return status;
136
+ }
137
+ if (!plan?.gatewayKey) {
138
+ return {
139
+ ...status,
140
+ status: 'unverifiable',
141
+ message: 'Gateway key is not recoverable after restart; re-apply the client configuration to verify it.',
142
+ };
143
+ }
144
+ const adapter = this.adapterFor(input.client);
145
+ const projection = await mapAdapterError(() => adapter.verify(plan.profile));
146
+ if (!projection.ok) {
147
+ throw new AiClientConfigurationError('client_projection_drifted', projection.reason ?? 'Client configuration drifted.', 409);
148
+ }
149
+ const controller = new AbortController();
150
+ await this.verifyGateway({
151
+ endpoint: plan.profile.endpoint,
152
+ gatewayKey: plan.gatewayKey,
153
+ model: plan.profile.model,
154
+ signal: controller.signal,
155
+ });
156
+ return { ...status, status: 'configured', message: `${CLIENT_LABELS[input.client]} verified against Xpod Gateway.` };
157
+ }
158
+ async restore(client, webId) {
159
+ const adapter = this.adapterFor(client);
160
+ const owner = webId ?? this.latestPlanFor(client)?.profile.webId;
161
+ if (owner) {
162
+ await this.withTargetLocks(await this.detectLockTargets(adapter), () => mapAdapterError(() => adapter.restore(owner)));
163
+ }
164
+ return this.inspect(client);
165
+ }
166
+ adapterFor(client) {
167
+ requireSupportedClient(client);
168
+ if (client === 'codex')
169
+ return new client_config_1.CodexConfigAdapter({ homeDir: this.homeDir });
170
+ if (client === 'claude-code')
171
+ return new client_config_1.ClaudeCodeConfigAdapter({ homeDir: this.homeDir });
172
+ if (client === 'pi')
173
+ return new client_config_1.PiConfigAdapter({ homeDir: this.homeDir });
174
+ return new client_config_1.CodeBuddyConfigAdapter({ homeDir: this.homeDir });
175
+ }
176
+ async publicTargets(writes) {
177
+ const targets = [];
178
+ for (const write of writes.filter((candidate) => !isStateWrite(candidate))) {
179
+ if (!isPathInside(this.homeDir, node_path_1.default.resolve(write.path))) {
180
+ throw new AiClientConfigurationError('unsafe_config_target', 'Configuration target is outside the owner home directory.', 400);
181
+ }
182
+ const before = await readOptional(write.path);
183
+ targets.push({
184
+ filePath: write.path,
185
+ displayPath: displayPath(this.homeDir, write.path),
186
+ beforeHash: hash(before ?? ''),
187
+ beforeExists: before !== undefined,
188
+ beforeContent: before ?? '',
189
+ plannedContentWithoutSecret: write.content ?? '',
190
+ action: write.content === null ? 'delete' : before === undefined ? 'createOrUpdate' : 'update',
191
+ });
192
+ }
193
+ return targets;
194
+ }
195
+ async detectLockTargets(adapter) {
196
+ const detection = await mapAdapterError(() => adapter.detect());
197
+ return detection.configPaths;
198
+ }
199
+ requirePlan(client, planId) {
200
+ const plan = this.plans.get(planId);
201
+ if (!plan || plan.client !== client) {
202
+ throw new AiClientConfigurationError('plan_not_found', 'Configuration plan was not found.', 404);
203
+ }
204
+ return plan;
205
+ }
206
+ latestPlanFor(client) {
207
+ return [...this.plans.values()].reverse().find((plan) => plan.client === client);
208
+ }
209
+ async withTargetLocks(targets, action) {
210
+ const sorted = [...new Set(targets.map((target) => node_path_1.default.resolve(target)))].sort();
211
+ const previous = Promise.all(sorted.map((target) => this.locks.get(target))).then(() => undefined);
212
+ let release;
213
+ const current = previous.then(() => new Promise((resolve) => { release = resolve; }));
214
+ for (const target of sorted) {
215
+ this.locks.set(target, current);
216
+ }
217
+ await previous;
218
+ try {
219
+ return await action();
220
+ }
221
+ finally {
222
+ release();
223
+ for (const target of sorted) {
224
+ if (this.locks.get(target) === current) {
225
+ this.locks.delete(target);
226
+ }
227
+ }
228
+ }
229
+ }
230
+ }
231
+ exports.AiClientConfigurationService = AiClientConfigurationService;
232
+ function publicPlan(plan, homeDir) {
233
+ return {
234
+ planId: plan.planId,
235
+ client: plan.client,
236
+ changes: plan.targets.map((target) => ({
237
+ target: target.displayPath,
238
+ action: target.action,
239
+ backup: target.beforeExists,
240
+ current: redactSecretText(target.beforeContent),
241
+ replacement: redactSecretText(target.plannedContentWithoutSecret),
242
+ })),
243
+ conflicts: [],
244
+ backupLocation: displayPath(homeDir, plan.backupDir),
245
+ replacementConfirmationRequired: isReplacementSensitive(plan.client),
246
+ ...(plan.confirmation ? {
247
+ confirmation: {
248
+ required: true,
249
+ token: plan.confirmation.token,
250
+ targetHash: plan.confirmation.targetHash,
251
+ message: 'This client may replace the active default model. Re-enter the confirmation token before applying.',
252
+ },
253
+ } : {}),
254
+ };
255
+ }
256
+ async function mapAdapterError(action) {
257
+ try {
258
+ return await action();
259
+ }
260
+ catch (error) {
261
+ if (error instanceof AiClientConfigurationError)
262
+ throw error;
263
+ const message = error instanceof Error ? error.message : String(error);
264
+ if (message.includes('symbolic link') || message.includes('outside the owner home') || message.includes('not a regular file')) {
265
+ throw new AiClientConfigurationError('unsafe_config_target', 'Configuration target is unsafe.', 400);
266
+ }
267
+ if (message.includes('invalid JSON') || message.includes('root must be a JSON object')) {
268
+ throw new AiClientConfigurationError('invalid_config', 'Configuration file must contain a JSON object.', 400);
269
+ }
270
+ throw error;
271
+ }
272
+ }
273
+ function requireSupportedClient(client) {
274
+ if (client === 'codex' || client === 'claude-code' || client === 'pi' || client === 'codebuddy') {
275
+ return client;
276
+ }
277
+ throw new AiClientConfigurationError('unsupported_client', 'Unsupported AI client.', 404);
278
+ }
279
+ function isReplacementSensitive(client) {
280
+ return client === 'pi';
281
+ }
282
+ function isStateWrite(write) {
283
+ return node_path_1.default.basename(write.path).startsWith('.xpod-ai-connection-');
284
+ }
285
+ async function readOptional(filePath) {
286
+ try {
287
+ return await node_fs_1.promises.readFile(filePath, 'utf8');
288
+ }
289
+ catch (error) {
290
+ if (error.code === 'ENOENT')
291
+ return undefined;
292
+ throw error;
293
+ }
294
+ }
295
+ function createDefaultGatewayVerifier(fetchImpl, timeoutMs) {
296
+ return async ({ endpoint, gatewayKey, model, signal }) => {
297
+ const timeout = AbortSignal.timeout(timeoutMs);
298
+ const linked = mergeSignals(signal, timeout);
299
+ const base = endpoint.replace(/\/+$/u, '');
300
+ await checkedGatewayFetch(fetchImpl, `${base}/v1/models`, {
301
+ method: 'GET',
302
+ headers: { accept: 'application/json', authorization: `Bearer ${gatewayKey}` },
303
+ signal: linked,
304
+ });
305
+ await checkedGatewayFetch(fetchImpl, `${base}/v1/responses`, {
306
+ method: 'POST',
307
+ headers: {
308
+ accept: 'application/json',
309
+ 'content-type': 'application/json',
310
+ authorization: `Bearer ${gatewayKey}`,
311
+ },
312
+ body: JSON.stringify({
313
+ model: model ?? 'xpod/default',
314
+ input: 'ping',
315
+ max_output_tokens: 1,
316
+ }),
317
+ signal: linked,
318
+ });
319
+ };
320
+ }
321
+ async function checkedGatewayFetch(fetchImpl, url, init) {
322
+ const response = await fetchImpl(url, init);
323
+ if (!response.ok) {
324
+ await response.arrayBuffer();
325
+ throw new Error(`Gateway verification failed: ${response.status}`);
326
+ }
327
+ await response.arrayBuffer();
328
+ }
329
+ function mergeSignals(a, b) {
330
+ if (a.aborted)
331
+ return a;
332
+ if (b.aborted)
333
+ return b;
334
+ const controller = new AbortController();
335
+ const abort = () => controller.abort();
336
+ a.addEventListener('abort', abort, { once: true });
337
+ b.addEventListener('abort', abort, { once: true });
338
+ return controller.signal;
339
+ }
340
+ function normalizeEndpoint(endpoint) {
341
+ try {
342
+ const parsed = new URL(endpoint);
343
+ if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
344
+ throw new Error('bad protocol');
345
+ }
346
+ return parsed.toString().replace(/\/+$/u, '');
347
+ }
348
+ catch {
349
+ throw new AiClientConfigurationError('invalid_endpoint', 'Endpoint must be an HTTP(S) URL.', 400);
350
+ }
351
+ }
352
+ function timestampForPath(date) {
353
+ return date.toISOString().replace(/[:.]/gu, '-');
354
+ }
355
+ function displayPath(homeDir, filePath) {
356
+ const relative = node_path_1.default.relative(homeDir, filePath);
357
+ return relative.startsWith('..') ? filePath : `~/${relative}`;
358
+ }
359
+ function isPathInside(root, target) {
360
+ const relative = node_path_1.default.relative(root, target);
361
+ return relative === '' || (!relative.startsWith('..') && !node_path_1.default.isAbsolute(relative));
362
+ }
363
+ function hash(content) {
364
+ return (0, node_crypto_1.createHash)('sha256').update(content).digest('hex');
365
+ }
366
+ function redactSecretText(input) {
367
+ return input
368
+ .replace(/\/(?:Users|var|tmp|private|home)\/[^\s"',)]+/gu, '[path]')
369
+ .replace(/xpod_[A-Za-z0-9._-]+/gu, '[redacted]')
370
+ .replace(/sk-[A-Za-z0-9._-]+/gu, '[redacted]')
371
+ .replace(/Bearer\s+[A-Za-z0-9._-]+/giu, 'Bearer [redacted]');
372
+ }
373
+ function unavailableAiClientConfigurationCapability() {
374
+ return {
375
+ available: false,
376
+ manualInstructions: MANUAL_INSTRUCTIONS,
377
+ };
378
+ }
379
+ //# sourceMappingURL=AiClientConfigurationService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AiClientConfigurationService.js","sourceRoot":"","sources":["../../../src/api/service/AiClientConfigurationService.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, randomUUID } from 'node:crypto';\nimport path from 'node:path';\nimport { promises as fs } from 'node:fs';\nimport {\n CodexConfigAdapter,\n ClaudeCodeConfigAdapter,\n CodeBuddyConfigAdapter,\n PiConfigAdapter,\n type AiClientConfigAdapter,\n AiClientConfigPlan,\n AiConnectionClientProfile,\n ConfigWrite,\n} from '@undefineds.co/ai-connection/client-config';\n\nexport type AiClientId = 'codex' | 'claude-code' | 'pi' | 'codebuddy';\n\nexport interface AiClientConfigurationCapabilityDescriptor {\n available: boolean;\n authority?: 'local-filesystem';\n manualInstructions: string;\n}\n\nexport interface AiClientConfigurationStatus {\n status: 'notConfigured' | 'configured' | 'drifted' | 'unavailable' | 'unverifiable' | 'failedAndRestored';\n message?: string;\n installed?: boolean;\n configExists?: boolean;\n}\n\nexport interface AiClientConfigurationPlan {\n planId: string;\n client: AiClientId;\n changes: AiClientConfigurationChange[];\n conflicts: string[];\n backupLocation: string;\n replacementConfirmationRequired: boolean;\n confirmation?: {\n required: boolean;\n token: string;\n targetHash: string;\n message?: string;\n };\n}\n\nexport interface AiClientConfigurationChange {\n target: string;\n action: 'update' | 'createOrUpdate' | 'delete';\n backup: boolean;\n current?: string;\n replacement?: string;\n}\n\nexport interface AiClientConfigurationServiceOptions {\n homeDir?: string;\n backupRoot?: string;\n now?: () => Date;\n verifyGateway?: (input: {\n endpoint: string;\n gatewayKey: string;\n model?: string;\n signal: AbortSignal;\n }) => Promise<unknown>;\n fetch?: typeof fetch;\n verificationTimeoutMs?: number;\n}\n\nexport interface PlanInput {\n client: AiClientId;\n endpoint: string;\n model?: string;\n webId?: string;\n}\n\nexport interface ApplyInput {\n client: AiClientId;\n planId: string;\n gatewayKey: string;\n webId?: string;\n confirmation?: {\n token: string;\n targetHash: string;\n };\n}\n\nexport interface VerifyInput {\n client: AiClientId;\n planId?: string;\n}\n\ninterface StoredPlan {\n planId: string;\n client: AiClientId;\n profile: AiConnectionClientProfile;\n nativePlan: AiClientConfigPlan;\n targets: PlannedTarget[];\n backupDir: string;\n gatewayKey?: string;\n confirmation?: {\n token: string;\n targetHash: string;\n };\n}\n\ninterface PlannedTarget {\n filePath: string;\n displayPath: string;\n beforeHash: string;\n beforeExists: boolean;\n beforeContent: string;\n plannedContentWithoutSecret: string;\n action: 'update' | 'createOrUpdate' | 'delete';\n}\n\nconst PLAN_SECRET_PLACEHOLDER = '[redacted]';\nconst MANUAL_INSTRUCTIONS = 'Manual client setup is available when this host cannot safely write local coding-client files.';\n\nconst CLIENT_LABELS: Record<AiClientId, string> = {\n codex: 'Codex',\n 'claude-code': 'Claude Code',\n pi: 'Pi',\n codebuddy: 'CodeBuddy',\n};\n\nexport class AiClientConfigurationError extends Error {\n public readonly statusCode: number;\n public readonly code: string;\n public readonly details?: unknown;\n\n public constructor(code: string, message: string, statusCode: number, details?: unknown) {\n super(message);\n this.code = code;\n this.statusCode = statusCode;\n this.details = details;\n }\n}\n\nexport class AiClientConfigurationService {\n private readonly homeDir: string;\n private readonly backupRoot: string;\n private readonly now: () => Date;\n private readonly verifyGateway: NonNullable<AiClientConfigurationServiceOptions['verifyGateway']>;\n private readonly plans = new Map<string, StoredPlan>();\n private readonly locks = new Map<string, Promise<void>>();\n\n public constructor(options: AiClientConfigurationServiceOptions = {}) {\n this.homeDir = path.resolve(options.homeDir ?? process.env.HOME ?? process.cwd());\n this.backupRoot = path.resolve(options.backupRoot ?? path.join(this.homeDir, '.xpod/client-config-backups'));\n this.now = options.now ?? (() => new Date());\n this.verifyGateway = options.verifyGateway ?? createDefaultGatewayVerifier(\n options.fetch ?? fetch,\n options.verificationTimeoutMs ?? 8_000,\n );\n }\n\n public capability(): AiClientConfigurationCapabilityDescriptor {\n return {\n available: true,\n authority: 'local-filesystem',\n manualInstructions: MANUAL_INSTRUCTIONS,\n };\n }\n\n public async inspect(client: AiClientId): Promise<AiClientConfigurationStatus> {\n const adapter = this.adapterFor(client);\n const detection = await mapAdapterError(() => adapter.detect());\n const inspection = await mapAdapterError(() => adapter.inspect());\n const configured = inspection.ownership === 'owned';\n return {\n status: configured ? 'configured' : 'notConfigured',\n installed: detection.installed,\n configExists: detection.configExists,\n message: configured\n ? `${CLIENT_LABELS[client]} is configured for Xpod.`\n : `${CLIENT_LABELS[client]} is not configured for Xpod.`,\n };\n }\n\n public async plan(input: PlanInput): Promise<AiClientConfigurationPlan> {\n const client = requireSupportedClient(input.client);\n const profile = {\n endpoint: normalizeEndpoint(input.endpoint),\n gatewayKey: PLAN_SECRET_PLACEHOLDER,\n webId: input.webId ?? 'https://xpod.local/.well-known/ai-client-configuration#owner',\n model: input.model,\n };\n const adapter = this.adapterFor(client);\n const nativePlan = await mapAdapterError(() => adapter.plan(profile));\n const targets = await this.publicTargets(nativePlan.writes);\n const beforeHash = hash(targets.map((target) => `${target.filePath}:${target.beforeHash}`).join('\\n'));\n const plan: StoredPlan = {\n planId: `aicfg_${randomUUID().replace(/-/gu, '')}`,\n client,\n profile,\n nativePlan,\n targets,\n backupDir: path.join(this.backupRoot, client, timestampForPath(this.now())),\n ...(isReplacementSensitive(client) ? {\n confirmation: {\n token: `confirm-${client}-${beforeHash.slice(0, 12)}`,\n targetHash: beforeHash,\n },\n } : {}),\n };\n this.plans.set(plan.planId, plan);\n return publicPlan(plan, this.homeDir);\n }\n\n public async apply(input: ApplyInput): Promise<{ applied: true }> {\n const plan = this.requirePlan(input.client, input.planId);\n if (!input.gatewayKey?.startsWith('xpod_')) {\n throw new AiClientConfigurationError('invalid_gateway_key', 'Gateway key is required.', 400);\n }\n if (plan.confirmation) {\n if (!input.confirmation?.token) {\n throw new AiClientConfigurationError('confirmation_required', 'Replacement confirmation is required.', 409);\n }\n if (input.confirmation.token !== plan.confirmation.token ||\n input.confirmation.targetHash !== plan.confirmation.targetHash) {\n throw new AiClientConfigurationError('confirmation_stale', 'Replacement confirmation is stale.', 409);\n }\n }\n\n return this.withTargetLocks(plan.nativePlan.writes.map((write) => write.path), async () => {\n for (const target of plan.targets) {\n const current = await readOptional(target.filePath);\n if (hash(current ?? '') !== target.beforeHash) {\n throw new AiClientConfigurationError('configuration_conflict', 'Configuration changed after planning.', 409);\n }\n }\n\n const profile = {\n ...plan.profile,\n gatewayKey: input.gatewayKey,\n webId: input.webId ?? plan.profile.webId,\n };\n const adapter = this.adapterFor(plan.client);\n const nativePlan = await mapAdapterError(() => adapter.plan(profile));\n await mapAdapterError(() => adapter.apply(nativePlan));\n plan.gatewayKey = input.gatewayKey;\n plan.profile = profile;\n plan.nativePlan = nativePlan;\n\n try {\n await this.verify({ client: plan.client, planId: plan.planId });\n } catch {\n await mapAdapterError(() => adapter.restore(profile.webId));\n throw new AiClientConfigurationError(\n 'verification_failed_restored',\n 'Gateway verification failed.',\n 502,\n { restored: true },\n );\n }\n return { applied: true };\n });\n }\n\n public async verify(input: VerifyInput): Promise<AiClientConfigurationStatus> {\n const plan = input.planId ? this.requirePlan(input.client, input.planId) : undefined;\n const status = await this.inspect(input.client);\n if (status.status !== 'configured') {\n return status;\n }\n if (!plan?.gatewayKey) {\n return {\n ...status,\n status: 'unverifiable',\n message: 'Gateway key is not recoverable after restart; re-apply the client configuration to verify it.',\n };\n }\n const adapter = this.adapterFor(input.client);\n const projection = await mapAdapterError(() => adapter.verify(plan.profile));\n if (!projection.ok) {\n throw new AiClientConfigurationError('client_projection_drifted', projection.reason ?? 'Client configuration drifted.', 409);\n }\n const controller = new AbortController();\n await this.verifyGateway({\n endpoint: plan.profile.endpoint,\n gatewayKey: plan.gatewayKey,\n model: plan.profile.model,\n signal: controller.signal,\n });\n return { ...status, status: 'configured', message: `${CLIENT_LABELS[input.client]} verified against Xpod Gateway.` };\n }\n\n public async restore(client: AiClientId, webId?: string): Promise<AiClientConfigurationStatus> {\n const adapter = this.adapterFor(client);\n const owner = webId ?? this.latestPlanFor(client)?.profile.webId;\n if (owner) {\n await this.withTargetLocks(await this.detectLockTargets(adapter), () => mapAdapterError(() => adapter.restore(owner)));\n }\n return this.inspect(client);\n }\n\n private adapterFor(client: AiClientId): AiClientConfigAdapter {\n requireSupportedClient(client);\n if (client === 'codex') return new CodexConfigAdapter({ homeDir: this.homeDir });\n if (client === 'claude-code') return new ClaudeCodeConfigAdapter({ homeDir: this.homeDir });\n if (client === 'pi') return new PiConfigAdapter({ homeDir: this.homeDir });\n return new CodeBuddyConfigAdapter({ homeDir: this.homeDir });\n }\n\n private async publicTargets(writes: ConfigWrite[]): Promise<PlannedTarget[]> {\n const targets: PlannedTarget[] = [];\n for (const write of writes.filter((candidate) => !isStateWrite(candidate))) {\n if (!isPathInside(this.homeDir, path.resolve(write.path))) {\n throw new AiClientConfigurationError('unsafe_config_target', 'Configuration target is outside the owner home directory.', 400);\n }\n const before = await readOptional(write.path);\n targets.push({\n filePath: write.path,\n displayPath: displayPath(this.homeDir, write.path),\n beforeHash: hash(before ?? ''),\n beforeExists: before !== undefined,\n beforeContent: before ?? '',\n plannedContentWithoutSecret: write.content ?? '',\n action: write.content === null ? 'delete' : before === undefined ? 'createOrUpdate' : 'update',\n });\n }\n return targets;\n }\n\n private async detectLockTargets(adapter: AiClientConfigAdapter): Promise<string[]> {\n const detection = await mapAdapterError(() => adapter.detect());\n return detection.configPaths;\n }\n\n private requirePlan(client: AiClientId, planId: string): StoredPlan {\n const plan = this.plans.get(planId);\n if (!plan || plan.client !== client) {\n throw new AiClientConfigurationError('plan_not_found', 'Configuration plan was not found.', 404);\n }\n return plan;\n }\n\n private latestPlanFor(client: AiClientId): StoredPlan | undefined {\n return [...this.plans.values()].reverse().find((plan) => plan.client === client);\n }\n\n private async withTargetLocks<T>(targets: string[], action: () => Promise<T>): Promise<T> {\n const sorted = [...new Set(targets.map((target) => path.resolve(target)))].sort();\n const previous = Promise.all(sorted.map((target) => this.locks.get(target))).then(() => undefined);\n let release!: () => void;\n const current = previous.then(() => new Promise<void>((resolve) => { release = resolve; }));\n for (const target of sorted) {\n this.locks.set(target, current);\n }\n await previous;\n try {\n return await action();\n } finally {\n release();\n for (const target of sorted) {\n if (this.locks.get(target) === current) {\n this.locks.delete(target);\n }\n }\n }\n }\n}\n\nfunction publicPlan(plan: StoredPlan, homeDir: string): AiClientConfigurationPlan {\n return {\n planId: plan.planId,\n client: plan.client,\n changes: plan.targets.map((target) => ({\n target: target.displayPath,\n action: target.action,\n backup: target.beforeExists,\n current: redactSecretText(target.beforeContent),\n replacement: redactSecretText(target.plannedContentWithoutSecret),\n })),\n conflicts: [],\n backupLocation: displayPath(homeDir, plan.backupDir),\n replacementConfirmationRequired: isReplacementSensitive(plan.client),\n ...(plan.confirmation ? {\n confirmation: {\n required: true,\n token: plan.confirmation.token,\n targetHash: plan.confirmation.targetHash,\n message: 'This client may replace the active default model. Re-enter the confirmation token before applying.',\n },\n } : {}),\n };\n}\n\nasync function mapAdapterError<T>(action: () => Promise<T>): Promise<T> {\n try {\n return await action();\n } catch (error) {\n if (error instanceof AiClientConfigurationError) throw error;\n const message = error instanceof Error ? error.message : String(error);\n if (message.includes('symbolic link') || message.includes('outside the owner home') || message.includes('not a regular file')) {\n throw new AiClientConfigurationError('unsafe_config_target', 'Configuration target is unsafe.', 400);\n }\n if (message.includes('invalid JSON') || message.includes('root must be a JSON object')) {\n throw new AiClientConfigurationError('invalid_config', 'Configuration file must contain a JSON object.', 400);\n }\n throw error;\n }\n}\n\nfunction requireSupportedClient(client: AiClientId): AiClientId {\n if (client === 'codex' || client === 'claude-code' || client === 'pi' || client === 'codebuddy') {\n return client;\n }\n throw new AiClientConfigurationError('unsupported_client', 'Unsupported AI client.', 404);\n}\n\nfunction isReplacementSensitive(client: AiClientId): boolean {\n return client === 'pi';\n}\n\nfunction isStateWrite(write: ConfigWrite): boolean {\n return path.basename(write.path).startsWith('.xpod-ai-connection-');\n}\n\nasync function readOptional(filePath: string): Promise<string | undefined> {\n try {\n return await fs.readFile(filePath, 'utf8');\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return undefined;\n throw error;\n }\n}\n\nfunction createDefaultGatewayVerifier(fetchImpl: typeof fetch, timeoutMs: number): NonNullable<AiClientConfigurationServiceOptions['verifyGateway']> {\n return async ({ endpoint, gatewayKey, model, signal }) => {\n const timeout = AbortSignal.timeout(timeoutMs);\n const linked = mergeSignals(signal, timeout);\n const base = endpoint.replace(/\\/+$/u, '');\n await checkedGatewayFetch(fetchImpl, `${base}/v1/models`, {\n method: 'GET',\n headers: { accept: 'application/json', authorization: `Bearer ${gatewayKey}` },\n signal: linked,\n });\n await checkedGatewayFetch(fetchImpl, `${base}/v1/responses`, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n 'content-type': 'application/json',\n authorization: `Bearer ${gatewayKey}`,\n },\n body: JSON.stringify({\n model: model ?? 'xpod/default',\n input: 'ping',\n max_output_tokens: 1,\n }),\n signal: linked,\n });\n };\n}\n\nasync function checkedGatewayFetch(fetchImpl: typeof fetch, url: string, init: RequestInit): Promise<void> {\n const response = await fetchImpl(url, init);\n if (!response.ok) {\n await response.arrayBuffer();\n throw new Error(`Gateway verification failed: ${response.status}`);\n }\n await response.arrayBuffer();\n}\n\nfunction mergeSignals(a: AbortSignal, b: AbortSignal): AbortSignal {\n if (a.aborted) return a;\n if (b.aborted) return b;\n const controller = new AbortController();\n const abort = () => controller.abort();\n a.addEventListener('abort', abort, { once: true });\n b.addEventListener('abort', abort, { once: true });\n return controller.signal;\n}\n\nfunction normalizeEndpoint(endpoint: string): string {\n try {\n const parsed = new URL(endpoint);\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new Error('bad protocol');\n }\n return parsed.toString().replace(/\\/+$/u, '');\n } catch {\n throw new AiClientConfigurationError('invalid_endpoint', 'Endpoint must be an HTTP(S) URL.', 400);\n }\n}\n\nfunction timestampForPath(date: Date): string {\n return date.toISOString().replace(/[:.]/gu, '-');\n}\n\nfunction displayPath(homeDir: string, filePath: string): string {\n const relative = path.relative(homeDir, filePath);\n return relative.startsWith('..') ? filePath : `~/${relative}`;\n}\n\nfunction isPathInside(root: string, target: string): boolean {\n const relative = path.relative(root, target);\n return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));\n}\n\nfunction hash(content: string): string {\n return createHash('sha256').update(content).digest('hex');\n}\n\nexport function redactSecretText(input: string): string {\n return input\n .replace(/\\/(?:Users|var|tmp|private|home)\\/[^\\s\"',)]+/gu, '[path]')\n .replace(/xpod_[A-Za-z0-9._-]+/gu, '[redacted]')\n .replace(/sk-[A-Za-z0-9._-]+/gu, '[redacted]')\n .replace(/Bearer\\s+[A-Za-z0-9._-]+/giu, 'Bearer [redacted]');\n}\n\nexport function unavailableAiClientConfigurationCapability(): AiClientConfigurationCapabilityDescriptor {\n return {\n available: false,\n manualInstructions: MANUAL_INSTRUCTIONS,\n };\n}\n"]}
@@ -0,0 +1,86 @@
1
+ export interface RdfBenchmarkReportCatalogOptions {
2
+ roots?: string[];
3
+ packageRoot?: string;
4
+ maxReports?: number;
5
+ maxDepth?: number;
6
+ cacheTtlMs?: number;
7
+ }
8
+ export interface RdfBenchmarkReportCatalogSnapshot {
9
+ roots: string[];
10
+ reportCount: number;
11
+ skippedFiles: number;
12
+ errors: RdfBenchmarkReportCatalogError[];
13
+ reports: RdfBenchmarkReportSummary[];
14
+ }
15
+ export interface RdfBenchmarkReportCatalogError {
16
+ path: string;
17
+ message: string;
18
+ }
19
+ export interface RdfBenchmarkReportSummary {
20
+ id: string;
21
+ path: string;
22
+ generatedAt: string;
23
+ engine: string;
24
+ driver?: string;
25
+ scale?: string;
26
+ caseProfile?: string;
27
+ rdfAccelerationProfile?: string;
28
+ textSearchBackend?: string;
29
+ seedQuadCount?: number;
30
+ targetQuadCount?: number;
31
+ fullScale?: boolean;
32
+ iterations?: number;
33
+ warmupIterations?: number;
34
+ concurrency?: number;
35
+ planMatched?: boolean;
36
+ failedPlanCases: string[];
37
+ concurrencyMatched?: boolean;
38
+ failedConcurrencyCases: string[];
39
+ servingRegressionMatched?: boolean;
40
+ servingRegressionThresholdsConfigured?: boolean;
41
+ failedServingRegressionCases: string[];
42
+ fusionBenchmarkMatched?: boolean;
43
+ fusionBenchmarkThresholdsConfigured?: boolean;
44
+ failedFusionBenchmarkCases: string[];
45
+ fusionBaselineComparisonMatched?: boolean;
46
+ failedFusionBaselineComparisonCases: string[];
47
+ benchmarkGateConfigSourcesConfigured?: boolean;
48
+ fusionBaselineReportSourceConfigured?: boolean;
49
+ benchmarkGateConfigSourceShapeMismatches: string[];
50
+ fusionBaselineReportSourceBaselineProfileConfigured?: boolean;
51
+ fusionHardFiltersBeforeRankCaseCount?: number;
52
+ fusionBatchedBroadCandidateJoinCaseCount?: number;
53
+ nativeTextFtsCaseCount?: number;
54
+ nativeVectorCaseCount?: number;
55
+ ingestDurationMs?: number;
56
+ copyRows?: number;
57
+ copyFallbacks?: number;
58
+ refreshDurationMs?: number;
59
+ plannerStatsDurationMs?: number;
60
+ plannerStatsAnalyzedTables: string[];
61
+ coldStartDurationMs?: number;
62
+ firstQueryDurationMs?: number;
63
+ warmP50DurationMs?: number;
64
+ warmP95DurationMs?: number;
65
+ storageFactsBytes?: number;
66
+ storageDerivedBytes?: number;
67
+ storageTotalBytes?: number;
68
+ storageTotalToFactsRatio?: number;
69
+ pgAccelerationEnabled?: boolean;
70
+ pgAccelerationFallbackReason?: string;
71
+ pgActiveOperators: string[];
72
+ }
73
+ export declare class RdfBenchmarkReportCatalog {
74
+ private readonly roots;
75
+ private readonly packageRoot;
76
+ private readonly maxReports;
77
+ private readonly maxDepth;
78
+ private readonly cacheTtlMs;
79
+ private cachedSnapshot?;
80
+ constructor(options?: RdfBenchmarkReportCatalogOptions);
81
+ snapshot(): Promise<RdfBenchmarkReportCatalogSnapshot>;
82
+ private findReportFiles;
83
+ private sortNewestFirst;
84
+ private readReport;
85
+ private displayPath;
86
+ }