@undefineds.co/xpod 0.4.3 → 0.4.5

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 (223) hide show
  1. package/config/cloud.json +1 -1
  2. package/config/main.json +36 -2
  3. package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.d.ts +3 -0
  4. package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.js +1 -1
  5. package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.d.ts +2 -1
  6. package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.js +101 -32
  7. package/dist/api/ai-gateway/connect/DeviceCodeProtocol.d.ts +80 -0
  8. package/dist/api/ai-gateway/connect/DeviceCodeProtocol.js +3 -0
  9. package/dist/api/ai-gateway/connect/FileSessionImportAdapter.d.ts +38 -0
  10. package/dist/api/ai-gateway/connect/FileSessionImportAdapter.js +63 -0
  11. package/dist/api/ai-gateway/connect/LoopbackAuthorizationCallbackReceiver.d.ts +24 -0
  12. package/dist/api/ai-gateway/connect/LoopbackAuthorizationCallbackReceiver.js +136 -0
  13. package/dist/api/ai-gateway/connect/OAuthConnectAdapter.d.ts +2 -0
  14. package/dist/api/ai-gateway/connect/OAuthConnectAdapter.js +2 -1
  15. package/dist/api/ai-gateway/connect/OAuthIntegrationRegistry.d.ts +17 -13
  16. package/dist/api/ai-gateway/connect/OAuthIntegrationRegistry.js +52 -19
  17. package/dist/api/ai-gateway/connect/OpenAiSubscriptionSessionImportAdapter.d.ts +4 -28
  18. package/dist/api/ai-gateway/connect/OpenAiSubscriptionSessionImportAdapter.js +7 -58
  19. package/dist/api/ai-gateway/connect/ProviderAuthorizationProfiles.d.ts +4 -0
  20. package/dist/api/ai-gateway/connect/ProviderAuthorizationProfiles.js +116 -0
  21. package/dist/api/ai-gateway/connect/SessionImportProfiles.d.ts +10 -0
  22. package/dist/api/ai-gateway/connect/SessionImportProfiles.js +112 -0
  23. package/dist/api/ai-gateway/connect/index.d.ts +125 -23
  24. package/dist/api/ai-gateway/connect/index.js +1277 -260
  25. package/dist/api/ai-gateway/models/PodModelSelectionRepository.d.ts +4 -1
  26. package/dist/api/ai-gateway/models/PodModelSelectionRepository.js +154 -19
  27. package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.js +10 -6
  28. package/dist/api/ai-gateway/providers/ModelsDevCatalog.d.ts +7 -0
  29. package/dist/api/ai-gateway/providers/ModelsDevCatalog.js +25 -1
  30. package/dist/api/ai-gateway/providers/OfferingAuthorization.d.ts +24 -0
  31. package/dist/api/ai-gateway/providers/OfferingAuthorization.js +37 -0
  32. package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.d.ts +1 -1
  33. package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.js +5 -3
  34. package/dist/api/ai-gateway/providers/ProviderRegistry.d.ts +6 -3
  35. package/dist/api/ai-gateway/providers/ProviderRegistry.js +55 -16
  36. package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.d.ts +2 -0
  37. package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.js +37 -4
  38. package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.js +7 -0
  39. package/dist/api/ai-gateway/quota/SubscriptionQuotaAdapters.js +2 -1
  40. package/dist/api/ai-gateway/routing/ModelRouter.js +3 -1
  41. package/dist/api/container/common.js +30 -40
  42. package/dist/api/container/index.js +6 -2
  43. package/dist/api/container/routes.js +5 -22
  44. package/dist/api/handlers/AiClientConfigurationHandler.js +39 -1
  45. package/dist/api/handlers/AiGatewayManagementHandler.d.ts +3 -0
  46. package/dist/api/handlers/AiGatewayManagementHandler.js +173 -58
  47. package/dist/api/service/AiClientConfigurationService.d.ts +4 -15
  48. package/dist/api/service/AiClientConfigurationService.js +17 -64
  49. package/dist/cli/commands/start.js +2 -0
  50. package/dist/components/components.jsonld +1 -0
  51. package/dist/components/context.jsonld +80 -0
  52. package/dist/http/InternalPodDataHttpHandler.d.ts +3 -0
  53. package/dist/http/InternalPodDataHttpHandler.js +13 -2
  54. package/dist/http/InternalPodDataHttpHandler.jsonld +12 -0
  55. package/dist/identity/oidc/RememberedClientPromptFactory.d.ts +1 -1
  56. package/dist/identity/oidc/RememberedClientPromptFactory.js +5 -2
  57. package/dist/identity/oidc/RememberedConsentHandler.js +1 -1
  58. package/dist/identity/oidc/ScopedPickWebIdHandler.d.ts +1 -0
  59. package/dist/identity/oidc/ScopedPickWebIdHandler.js +26 -0
  60. package/dist/identity/oidc/ScopedPickWebIdHandler.jsonld +4 -0
  61. package/dist/identity/oidc/SessionBoundIdentityProviderFactory.d.ts +10 -0
  62. package/dist/identity/oidc/SessionBoundIdentityProviderFactory.js +21 -0
  63. package/dist/identity/oidc/SessionBoundIdentityProviderFactory.jsonld +172 -0
  64. package/dist/index.d.ts +2 -1
  65. package/dist/index.js +4 -2
  66. package/dist/runtime/component-parameter-keys.js +18 -2
  67. package/dist/storage/accessors/MixDataAccessor.js +6 -2
  68. package/dist/storage/rdf/PostgresRdfEngine.js +10 -2
  69. package/dist/storage/rdf/RdfContentTypes.js +4 -0
  70. package/node_modules/@undefineds.co/ai-connections/dist/AiClientConfigurationSection.d.ts +3 -0
  71. package/node_modules/@undefineds.co/ai-connections/dist/AiClientConfigurationSection.js +13 -16
  72. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsList.js +1 -3
  73. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsMain.d.ts +2 -1
  74. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsMain.js +2 -2
  75. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsPanel.d.ts +4 -1
  76. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsPanel.js +127 -57
  77. package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialPoolSection.d.ts +6 -4
  78. package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialPoolSection.js +436 -83
  79. package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeysSection.d.ts +3 -2
  80. package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeysSection.js +212 -76
  81. package/node_modules/@undefineds.co/ai-connections/dist/AiProviderCard.d.ts +6 -4
  82. package/node_modules/@undefineds.co/ai-connections/dist/AiProviderCard.js +58 -41
  83. package/node_modules/@undefineds.co/ai-connections/dist/AiQuotaCard.d.ts +4 -1
  84. package/node_modules/@undefineds.co/ai-connections/dist/AiQuotaCard.js +63 -4
  85. package/node_modules/@undefineds.co/ai-connections/dist/ai-connections-client.d.ts +46 -6
  86. package/node_modules/@undefineds.co/ai-connections/dist/ai-connections-client.js +143 -14
  87. package/node_modules/@undefineds.co/ai-connections/dist/client-config/base-adapter.d.ts +19 -3
  88. package/node_modules/@undefineds.co/ai-connections/dist/client-config/base-adapter.js +45 -7
  89. package/node_modules/@undefineds.co/ai-connections/dist/client-config/codex.d.ts +7 -1
  90. package/node_modules/@undefineds.co/ai-connections/dist/client-config/codex.js +305 -40
  91. package/node_modules/@undefineds.co/ai-connections/dist/client-config/index.cjs +383 -50
  92. package/node_modules/@undefineds.co/ai-connections/dist/client-config/json-env-adapter.js +3 -2
  93. package/node_modules/@undefineds.co/ai-connections/dist/client-config/pi.js +12 -3
  94. package/node_modules/@undefineds.co/ai-connections/dist/client-config/transaction.d.ts +2 -0
  95. package/node_modules/@undefineds.co/ai-connections/dist/client-config/transaction.js +39 -4
  96. package/node_modules/@undefineds.co/ai-connections/dist/client-config/types.d.ts +8 -1
  97. package/node_modules/@undefineds.co/ai-connections/dist/client-visuals.d.ts +2 -0
  98. package/node_modules/@undefineds.co/ai-connections/dist/client-visuals.js +14 -0
  99. package/node_modules/@undefineds.co/ai-connections/dist/controller.d.ts +2 -2
  100. package/node_modules/@undefineds.co/ai-connections/dist/controller.js +216 -57
  101. package/node_modules/@undefineds.co/ai-connections/dist/index.d.ts +3 -1
  102. package/node_modules/@undefineds.co/ai-connections/dist/index.js +16 -2
  103. package/node_modules/@undefineds.co/ai-connections/dist/provider-visuals.js +6 -1
  104. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.js +27 -6
  105. package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.js +1 -1
  106. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js +2 -2
  107. package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql/builder/update-builder.js +12 -1
  108. package/node_modules/@undefineds.co/drizzle-solid/dist/core/triple/builder.js +1 -1
  109. package/node_modules/@undefineds.co/drizzle-solid/dist/core/triple/handlers/array.js +8 -0
  110. package/node_modules/@undefineds.co/drizzle-solid/dist/core/triple/handlers/default.js +9 -1
  111. package/node_modules/@undefineds.co/drizzle-solid/dist/core/triple/handlers/inline.js +3 -3
  112. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.js +27 -6
  113. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.js +1 -1
  114. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js +2 -2
  115. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql/builder/update-builder.js +12 -1
  116. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/triple/builder.js +1 -1
  117. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/triple/handlers/array.js +8 -0
  118. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/triple/handlers/default.js +9 -1
  119. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/triple/handlers/inline.js +3 -3
  120. package/node_modules/@undefineds.co/extension-sdk/dist/web.d.ts +31 -0
  121. package/package.json +2 -2
  122. package/static/app/assets/{index-BikOyGPu.js → index-BCZVzMpj.js} +44 -44
  123. package/static/app/assets/inrupt-smoke.js +2 -2
  124. package/static/app/assets/main.css +1 -1
  125. package/static/app/assets/main.js +10 -10
  126. package/static/auth-callback/assets/{AiConfigContext-DrCH6ckh.js → AiConfigContext-DVkh8Kg2.js} +1 -1
  127. package/static/auth-callback/assets/{AiConfigPage-DVrlSSdA.js → AiConfigPage-HWVWpe-P.js} +1 -1
  128. package/static/auth-callback/assets/{DocumentProcessingPanel-_Md-v2R2.js → DocumentProcessingPanel-DDq-mH17.js} +1 -1
  129. package/static/auth-callback/assets/{IndexLifecyclePanel-BbWwe23H.js → IndexLifecyclePanel-Cx4cjrdP.js} +1 -1
  130. package/static/auth-callback/assets/{IndexSubjectPanel-upH9MjU-.js → IndexSubjectPanel-DzSw8M9j.js} +1 -1
  131. package/static/auth-callback/assets/{ModelAssignmentsPanel-CVGH4t4g.js → ModelAssignmentsPanel-BsRxGc2p.js} +1 -1
  132. package/static/auth-callback/assets/ModelsPage-DEe1lo6Q.js +10 -0
  133. package/static/auth-callback/assets/{NetworkPage-Dcbrb1fd.js → NetworkPage-DBiEh1Oz.js} +1 -1
  134. package/static/auth-callback/assets/{PaneListHeader-DrY-1wBq.js → PaneListHeader-lEEgjyN9.js} +1 -1
  135. package/static/auth-callback/assets/{SearchIndexingPanel-Dw25y53v.js → SearchIndexingPanel-CZCUUGt6.js} +1 -1
  136. package/static/auth-callback/assets/{StatusSubjectPanel-BHlz9rNF.js → StatusSubjectPanel-21qdueMr.js} +1 -1
  137. package/static/auth-callback/assets/{StatusWorkspace-BH7exQP5.js → StatusWorkspace-R8RKsqVz.js} +1 -1
  138. package/static/auth-callback/assets/{SystemSettingsPage-BYLKnM9f.js → SystemSettingsPage-BQ4e-4Wy.js} +1 -1
  139. package/static/auth-callback/assets/{SystemSettingsSubjectPanel-DT34LKku.js → SystemSettingsSubjectPanel-BopXD7SE.js} +1 -1
  140. package/static/auth-callback/assets/{activity-DdULRcSI.js → activity-DSfmTGfY.js} +1 -1
  141. package/static/auth-callback/assets/ai-connections-C03UWyPh.js +1 -0
  142. package/static/auth-callback/assets/{auth-callback-D7l2P25I.js → auth-callback-DleaitAS.js} +91 -91
  143. package/static/auth-callback/assets/auth-callback-vPSC2d2F.css +1 -0
  144. package/static/auth-callback/assets/{badge-j4zjFnmg.js → badge-B0aLu1sl.js} +1 -1
  145. package/static/auth-callback/assets/{download-DGXoks01.js → download-D_bFwdYJ.js} +1 -1
  146. package/static/auth-callback/assets/{external-link-CvbgXXaI.js → external-link-DRfjTaQu.js} +1 -1
  147. package/static/auth-callback/assets/{index-LRWvKJ2i.js → index-CG23cLYQ.js} +1 -1
  148. package/static/auth-callback/assets/{index-BOK3j1dz.js → index-CyV9ejwx.js} +1 -1
  149. package/static/auth-callback/assets/{index-browser-C1Qpe0g4.js → index-browser-D70paxIg.js} +1 -1
  150. package/static/auth-callback/assets/{key-round-CmgS5UdQ.js → key-round-BjV_mVYH.js} +1 -1
  151. package/static/auth-callback/assets/{rotate-ccw-c4CSG6Rq.js → rotate-ccw-CKoOAfse.js} +1 -1
  152. package/static/auth-callback/assets/{skeleton-ZPMTiRSM.js → skeleton-BZNjZaHx.js} +1 -1
  153. package/static/auth-callback/assets/{waypoints-xjyBflU5.js → waypoints-DoaJVzZv.js} +1 -1
  154. package/static/auth-callback/assets/{workspace-layout-B9nj6F5J.js → workspace-layout-CaP46_ZR.js} +1 -1
  155. package/static/auth-callback/auth-callback.html +2 -2
  156. package/static/dashboard/assets/{AiConfigContext-BWOOSYNr.js → AiConfigContext-BSrR27yD.js} +1 -1
  157. package/static/dashboard/assets/{AiConfigPage-CG2kQ9Wy.js → AiConfigPage-D65Z2LET.js} +1 -1
  158. package/static/dashboard/assets/{DocumentProcessingPanel-B4VXajfj.js → DocumentProcessingPanel-DyTe7Nei.js} +1 -1
  159. package/static/dashboard/assets/{IndexLifecyclePanel-CWCy0CC8.js → IndexLifecyclePanel-fK8ZGlrL.js} +1 -1
  160. package/static/dashboard/assets/{IndexSubjectPanel-CSgyQnG_.js → IndexSubjectPanel-CZPGor7v.js} +1 -1
  161. package/static/dashboard/assets/{ModelAssignmentsPanel-CdGIGidT.js → ModelAssignmentsPanel-CfYn5LMQ.js} +1 -1
  162. package/static/dashboard/assets/ModelsPage-djlJsghe.js +25 -0
  163. package/static/dashboard/assets/{NetworkPage-COia9NCH.js → NetworkPage-Coj6GnPl.js} +1 -1
  164. package/static/dashboard/assets/{PaneListHeader-SZWyr602.js → PaneListHeader-CUuFNSsZ.js} +1 -1
  165. package/static/dashboard/assets/{SearchIndexingPanel-D6PZtG6k.js → SearchIndexingPanel-CyJLioXS.js} +1 -1
  166. package/static/dashboard/assets/{StatusSubjectPanel-CxRD4kv0.js → StatusSubjectPanel-Cv26GSVC.js} +1 -1
  167. package/static/dashboard/assets/{StatusWorkspace-D3PfmY9-.js → StatusWorkspace-CDjFrsmB.js} +1 -1
  168. package/static/dashboard/assets/{SystemSettingsPage-COg1MmMj.js → SystemSettingsPage-BuNOyNoa.js} +1 -1
  169. package/static/dashboard/assets/{SystemSettingsSubjectPanel-BSVVB9Ol.js → SystemSettingsSubjectPanel-B2dasdez.js} +1 -1
  170. package/static/dashboard/assets/{activity-BJJx5cN-.js → activity-D1d2j_4Z.js} +1 -1
  171. package/static/dashboard/assets/ai-connections-C03UWyPh.js +1 -0
  172. package/static/dashboard/assets/{badge-elmrFSCj.js → badge-BeAAv6sp.js} +1 -1
  173. package/static/dashboard/assets/{dashboard-IvQrNmru.js → dashboard-BnGrUGv8.js} +68 -68
  174. package/static/dashboard/assets/dashboard-vPSC2d2F.css +1 -0
  175. package/static/dashboard/assets/{download-C3FH2KzG.js → download-DfFGiZRn.js} +1 -1
  176. package/static/dashboard/assets/{external-link-Bx7F0uKb.js → external-link-IsjU_LC9.js} +1 -1
  177. package/static/dashboard/assets/{index-liRoRIP1.js → index-BWQTucPe.js} +1 -1
  178. package/static/dashboard/assets/{index-M4-kWiGz.js → index-Dj75OjnW.js} +1 -1
  179. package/static/dashboard/assets/{key-round-CXg0bKAj.js → key-round-BJ_9wmQ_.js} +1 -1
  180. package/static/dashboard/assets/{rotate-ccw-yxJKOBrX.js → rotate-ccw-D3JGiFbR.js} +1 -1
  181. package/static/dashboard/assets/{skeleton-x9jNGrQT.js → skeleton-CC4nc-z-.js} +1 -1
  182. package/static/dashboard/assets/{waypoints-CTKeRsGp.js → waypoints-h7sqFqiG.js} +1 -1
  183. package/static/dashboard/assets/{workspace-layout--YkgkS38.js → workspace-layout-ZAPTOHhs.js} +1 -1
  184. package/static/dashboard/dashboard.html +2 -2
  185. package/static/settings/assets/{AiConfigContext-CelxXFcQ.js → AiConfigContext-lGkWpvKP.js} +1 -1
  186. package/static/settings/assets/{AiConfigPage-BaP-EovM.js → AiConfigPage-BbZWIBZq.js} +1 -1
  187. package/static/settings/assets/{DocumentProcessingPanel-DzLZluFv.js → DocumentProcessingPanel-DvYdjT-V.js} +1 -1
  188. package/static/settings/assets/{IndexLifecyclePanel-Bzj1-_oI.js → IndexLifecyclePanel-W5OGQZj7.js} +1 -1
  189. package/static/settings/assets/{IndexSubjectPanel-B263QLUh.js → IndexSubjectPanel-g_Aa5soq.js} +1 -1
  190. package/static/settings/assets/{ModelAssignmentsPanel-BAdT4UR0.js → ModelAssignmentsPanel-COlMBKXj.js} +1 -1
  191. package/static/settings/assets/ModelsPage-mApKi-aw.js +10 -0
  192. package/static/settings/assets/{NetworkPage-BK6a7l4g.js → NetworkPage-BDT05JUq.js} +1 -1
  193. package/static/settings/assets/{PaneListHeader-BAS2ICPq.js → PaneListHeader-CByhNpMG.js} +1 -1
  194. package/static/settings/assets/{SearchIndexingPanel-Cb_p-NgW.js → SearchIndexingPanel-BFAyzXls.js} +1 -1
  195. package/static/settings/assets/{StatusSubjectPanel-CcjqUua6.js → StatusSubjectPanel-Bz_XZ3VU.js} +1 -1
  196. package/static/settings/assets/{StatusWorkspace-7Ibty3_k.js → StatusWorkspace-CeVypHcW.js} +1 -1
  197. package/static/settings/assets/{SystemSettingsPage-DPSz4dg4.js → SystemSettingsPage-Dh7cQIfx.js} +1 -1
  198. package/static/settings/assets/{SystemSettingsSubjectPanel-Cb4HkKT5.js → SystemSettingsSubjectPanel-CSnpciO0.js} +1 -1
  199. package/static/settings/assets/{activity-Qhsr5Pxu.js → activity-DXz3EfFN.js} +1 -1
  200. package/static/settings/assets/ai-connections-C03UWyPh.js +1 -0
  201. package/static/settings/assets/{badge-B1vf2qCl.js → badge-1ZA144i4.js} +1 -1
  202. package/static/settings/assets/{download-CYNt0aZ-.js → download-CUHimlYa.js} +1 -1
  203. package/static/settings/assets/{external-link-ClKb39NT.js → external-link-BYHSVj2Z.js} +1 -1
  204. package/static/settings/assets/{index-y8ew3MLM.js → index-DKPDMdW5.js} +1 -1
  205. package/static/settings/assets/{index-browser-DJhvgpNI.js → index-browser-BaEFz0e0.js} +1 -1
  206. package/static/settings/assets/{index-BgiIDSch.js → index-viSgSvbO.js} +1 -1
  207. package/static/settings/assets/{key-round-5d-DrJz-.js → key-round-COByPOg8.js} +1 -1
  208. package/static/settings/assets/{rotate-ccw-CHZY7kS5.js → rotate-ccw-BC2EN6cE.js} +1 -1
  209. package/static/settings/assets/{settings-D5VRWyx6.js → settings-DLH9XUoT.js} +86 -86
  210. package/static/settings/assets/settings-vPSC2d2F.css +1 -0
  211. package/static/settings/assets/{skeleton-FNabNxNE.js → skeleton-B0-FOhKL.js} +1 -1
  212. package/static/settings/assets/{waypoints-BnL_8ljo.js → waypoints-DGMsvqWo.js} +1 -1
  213. package/static/settings/assets/{workspace-layout-D5q3F59S.js → workspace-layout-B0SVrJIu.js} +1 -1
  214. package/static/settings/settings.html +2 -2
  215. package/static/auth-callback/assets/ModelsPage-BpkVFKbf.js +0 -10
  216. package/static/auth-callback/assets/ai-connections-Bm52UO7Y.js +0 -1
  217. package/static/auth-callback/assets/auth-callback-01yz-UDU.css +0 -1
  218. package/static/dashboard/assets/ModelsPage-Chd5UK0D.js +0 -25
  219. package/static/dashboard/assets/ai-connections-Bm52UO7Y.js +0 -1
  220. package/static/dashboard/assets/dashboard-01yz-UDU.css +0 -1
  221. package/static/settings/assets/ModelsPage-C0NFa1zq.js +0 -10
  222. package/static/settings/assets/ai-connections-Bm52UO7Y.js +0 -1
  223. package/static/settings/assets/settings-01yz-UDU.css +0 -1
@@ -78,6 +78,7 @@ class OpenAiCompatibleRuntimeAdapter extends BaseProviderRuntimeAdapter {
78
78
  this.supportsDeveloperMessages = options.supportsDeveloperMessages ?? true;
79
79
  this.allowToolChoiceRequired = options.allowToolChoiceRequired ?? true;
80
80
  this.descriptor = options.descriptor;
81
+ this.resolveModel = options.resolveModel;
81
82
  this.reasoningEffortMapper = options.reasoningEffortMapper;
82
83
  this.fallbackReasoningBody = options.fallbackReasoningBody;
83
84
  this.preserveReasoningContent = options.preserveReasoningContent ?? false;
@@ -145,6 +146,9 @@ class OpenAiCompatibleRuntimeAdapter extends BaseProviderRuntimeAdapter {
145
146
  };
146
147
  }
147
148
  findRegisteredModel(model) {
149
+ if (this.resolveModel) {
150
+ return this.resolveModel(this.provider, model);
151
+ }
148
152
  return this.descriptor?.models.find((candidate) => candidate.id === model);
149
153
  }
150
154
  resolveReasoningEffort(request, model) {
@@ -190,7 +194,7 @@ function toResponsesInputItems(message) {
190
194
  const functionCalls = responsesFunctionCallItems(message);
191
195
  const messageItem = {
192
196
  role: message.role,
193
- content: message.content.flatMap(toOpenAiContentPart),
197
+ content: message.content.flatMap((part) => toOpenAiContentPart(part, message.role)),
194
198
  ...(message.name ? { name: message.name } : {}),
195
199
  };
196
200
  return [
@@ -328,7 +332,7 @@ function toChatCompletionsBody(request, options) {
328
332
  ...(options.reasoningEffort ? { reasoning_effort: options.reasoningEffort } : {}),
329
333
  messages: [
330
334
  ...(request.instructions ? [{ role: 'system', content: request.instructions }] : []),
331
- ...request.messages.map((message) => toChatMessage(message, options)),
335
+ ...mergeAssistantToolMessages(request.messages).map((message) => toChatMessage(message, options)),
332
336
  ],
333
337
  ...(request.tools.length > 0 ? { tools: request.tools.map(toChatTool) } : {}),
334
338
  };
@@ -655,9 +659,9 @@ function classifyProviderStatus(status) {
655
659
  }
656
660
  return 'provider_error';
657
661
  }
658
- function toOpenAiContentPart(part) {
662
+ function toOpenAiContentPart(part, role) {
659
663
  if (part.type === 'text') {
660
- return [{ type: 'input_text', text: part.text }];
664
+ return [{ type: role === 'assistant' ? 'output_text' : 'input_text', text: part.text }];
661
665
  }
662
666
  return [{
663
667
  type: 'input_image',
@@ -687,6 +691,35 @@ function toAnthropicContentPart(part) {
687
691
  },
688
692
  };
689
693
  }
694
+ // Responses emits text and each tool call as separate items in one assistant turn.
695
+ // Chat requires all calls in one message followed immediately by their tool results.
696
+ function mergeAssistantToolMessages(messages) {
697
+ const merged = [];
698
+ for (const message of messages) {
699
+ const previous = merged[merged.length - 1];
700
+ const previousCalls = previous?.protocolExtensions?.tool_calls;
701
+ const calls = message.protocolExtensions?.tool_calls;
702
+ if (previous?.role === 'assistant' && message.role === 'assistant'
703
+ && (Array.isArray(previousCalls) || Array.isArray(calls))) {
704
+ merged[merged.length - 1] = {
705
+ ...previous,
706
+ content: [...previous.content, ...message.content],
707
+ protocolExtensions: {
708
+ ...previous.protocolExtensions,
709
+ ...message.protocolExtensions,
710
+ tool_calls: [
711
+ ...(Array.isArray(previousCalls) ? previousCalls : []),
712
+ ...(Array.isArray(calls) ? calls : []),
713
+ ],
714
+ },
715
+ };
716
+ }
717
+ else {
718
+ merged.push(message);
719
+ }
720
+ }
721
+ return merged;
722
+ }
690
723
  function toChatMessage(message, options) {
691
724
  const base = {
692
725
  role: message.role,
@@ -16,6 +16,9 @@ class ProviderRuntimeRegistry {
16
16
  this.adapters = new Map();
17
17
  const registry = options.registry ?? (0, ProviderRegistry_1.createDefaultProviderRegistry)();
18
18
  const transport = options.transport ?? new provider_http_transport_1.ProviderHttpTransport();
19
+ // Discovery replaces registry descriptors after these singleton adapters are created.
20
+ const resolveModel = (provider, model) => registry.requireProvider(provider)
21
+ .models.find((candidate) => candidate.id === model);
19
22
  this.adapters.set('openai', new OpenAiRuntimeAdapter_1.OpenAiRuntimeAdapter({
20
23
  transport,
21
24
  provider: registry.requireProvider('openai'),
@@ -23,16 +26,19 @@ class ProviderRuntimeRegistry {
23
26
  this.adapters.set('anthropic', new AnthropicRuntimeAdapter_1.AnthropicRuntimeAdapter({ transport }));
24
27
  this.adapters.set('kimi', new KimiRuntimeAdapter_1.KimiRuntimeAdapter({
25
28
  transport,
29
+ resolveModel,
26
30
  provider: registry.requireProvider('kimi'),
27
31
  }));
28
32
  this.adapters.set('bailian', new BailianRuntimeAdapter_1.BailianRuntimeAdapter({ transport }));
29
33
  this.adapters.set('deepseek', new DeepSeekRuntimeAdapter_1.DeepSeekRuntimeAdapter({
30
34
  transport,
35
+ resolveModel,
31
36
  provider: registry.requireProvider('deepseek'),
32
37
  }));
33
38
  const zhipu = registry.requireProvider('zhipu');
34
39
  this.adapters.set('zhipu', new ProviderRuntimeAdapter_1.OpenAiCompatibleRuntimeAdapter({
35
40
  transport,
41
+ resolveModel,
36
42
  provider: 'zhipu',
37
43
  descriptor: zhipu,
38
44
  defaultBaseUrl: zhipu.defaultBaseUrl,
@@ -44,6 +50,7 @@ class ProviderRuntimeRegistry {
44
50
  const ollama = registry.requireProvider('ollama');
45
51
  this.adapters.set('ollama', new ProviderRuntimeAdapter_1.OpenAiCompatibleRuntimeAdapter({
46
52
  transport,
53
+ resolveModel,
47
54
  provider: 'ollama',
48
55
  descriptor: ollama,
49
56
  defaultBaseUrl: ollama.defaultBaseUrl,
@@ -88,7 +88,8 @@ class KimiCodeSubscriptionQuotaAdapter extends SubscriptionQuotaAdapter {
88
88
  }
89
89
  supports(credential) {
90
90
  return (credential.offeringId === 'official-subscription' && credential.authMode === 'deviceCodeOAuth')
91
- || (credential.offeringId === 'subscription-key' && credential.authMode === 'apiKey');
91
+ || (credential.offeringId === 'subscription-key'
92
+ && (credential.authMode === 'apiKey' || credential.authMode === 'deviceCodeOAuth'));
92
93
  }
93
94
  async fetch(input) {
94
95
  const token = bearerFromSecret(input.secret);
@@ -4,6 +4,7 @@ exports.ModelRouter = void 0;
4
4
  const errors_1 = require("../errors");
5
5
  const connect_1 = require("../connect");
6
6
  const ProviderRegistry_1 = require("../providers/ProviderRegistry");
7
+ const ModelsDevCatalog_1 = require("../providers/ModelsDevCatalog");
7
8
  class ModelRouter {
8
9
  constructor(options) {
9
10
  this.registry = options.registry;
@@ -537,7 +538,8 @@ function sameModel(left, right) {
537
538
  }
538
539
  function modelProjection(provider, modelId) {
539
540
  const descriptor = provider.models.find((model) => sameModel(model.id, modelId)
540
- || (model.aliases ?? []).some((alias) => sameModel(alias, modelId)));
541
+ || (model.aliases ?? []).some((alias) => sameModel(alias, modelId)))
542
+ ?? (0, ModelsDevCatalog_1.lookupModelsDevModelDescriptor)((0, ProviderRegistry_1.normalizeProviderId)(provider.id), modelIdentity(modelId));
541
543
  return {
542
544
  id: modelIdentity(modelId),
543
545
  object: 'model',
@@ -31,6 +31,10 @@ const HostedPodDataAccess_1 = require("../ai-gateway/pod/HostedPodDataAccess");
31
31
  const AiGatewayService_1 = require("../ai-gateway/AiGatewayService");
32
32
  const PlaintextCredentialVault_1 = require("../ai-gateway/credentials/PlaintextCredentialVault");
33
33
  const connect_1 = require("../ai-gateway/connect");
34
+ const LoopbackAuthorizationCallbackReceiver_1 = require("../ai-gateway/connect/LoopbackAuthorizationCallbackReceiver");
35
+ const FileSessionImportAdapter_1 = require("../ai-gateway/connect/FileSessionImportAdapter");
36
+ const SessionImportProfiles_1 = require("../ai-gateway/connect/SessionImportProfiles");
37
+ const ProviderAuthorizationProfiles_1 = require("../ai-gateway/connect/ProviderAuthorizationProfiles");
34
38
  const ProviderRegistry_1 = require("../ai-gateway/providers/ProviderRegistry");
35
39
  const ModelsDevCatalog_1 = require("../ai-gateway/providers/ModelsDevCatalog");
36
40
  const ProviderRuntimeRegistry_1 = require("../ai-gateway/providers/ProviderRuntimeRegistry");
@@ -186,51 +190,37 @@ function registerCommonServices(container) {
186
190
  // state, so a process-random signing secret is sufficient by default.
187
191
  const signingSecret = config.aiGatewayConnectSigningSecret ?? (0, node_crypto_1.randomBytes)(32).toString('hex');
188
192
  const attempts = new connect_1.InMemoryConnectAttemptStore();
193
+ const registry = (0, ProviderRegistry_1.createDefaultProviderRegistry)({
194
+ products: (0, ProviderRegistry_1.providerProductsForDeployment)(config.edition),
195
+ });
196
+ const adapterOptions = {
197
+ attempts, credentialRepository, vault, deployment: config.edition, signingSecret,
198
+ };
199
+ const callbackReceiver = new LoopbackAuthorizationCallbackReceiver_1.LoopbackAuthorizationCallbackReceiver();
189
200
  const adapters = [
190
- new connect_1.BrowserAssistedApiKeyConnectAdapter({
191
- provider: 'openai',
192
- consoleUrl: 'https://platform.openai.com/api-keys',
193
- attempts,
194
- credentialRepository,
195
- vault,
196
- deployment: config.edition,
197
- signingSecret,
198
- }),
199
- new connect_1.BrowserAssistedApiKeyConnectAdapter({
200
- provider: 'anthropic',
201
- consoleUrl: 'https://console.anthropic.com/settings/keys',
202
- attempts,
203
- credentialRepository,
204
- vault,
205
- deployment: config.edition,
206
- signingSecret,
207
- }),
208
- new connect_1.BrowserAssistedApiKeyConnectAdapter({
209
- provider: 'kimi',
210
- consoleUrl: 'https://platform.moonshot.cn/console/api-keys',
211
- attempts,
212
- credentialRepository,
213
- vault,
214
- deployment: config.edition,
215
- signingSecret,
216
- }),
217
- new connect_1.BrowserAssistedApiKeyConnectAdapter({
218
- provider: 'bailian',
219
- consoleUrl: 'https://bailian.console.aliyun.com/',
220
- attempts,
221
- credentialRepository,
222
- vault,
223
- deployment: config.edition,
224
- signingSecret,
225
- }),
201
+ ...registry.listProviders()
202
+ .filter((provider) => provider.connect?.mode === 'browserAssistedApiKey')
203
+ .map((provider) => new connect_1.BrowserAssistedApiKeyConnectAdapter({
204
+ ...adapterOptions,
205
+ provider: provider.id,
206
+ consoleUrl: registry.requireProduct(provider.id).offerings
207
+ .find((offering) => offering.kind === 'api-platform')?.consoleUrl
208
+ ?? registry.requireProduct(provider.id).offerings[0].consoleUrl,
209
+ })),
210
+ ...(config.edition === 'local' ? (0, ProviderAuthorizationProfiles_1.createBrowserOAuthIntegrations)().map((integration) => new connect_1.AuthorizationCodeConnectAdapter({
211
+ ...adapterOptions, integration, callbackReceiver,
212
+ })) : []),
213
+ ...(0, ProviderAuthorizationProfiles_1.createProviderOAuthIntegrations)().map((integration) => new connect_1.DeviceCodeConnectAdapter({
214
+ ...adapterOptions,
215
+ integration,
216
+ })),
226
217
  ];
227
218
  return new connect_1.ProviderConnectService({
228
- registry: (0, ProviderRegistry_1.createDefaultProviderRegistry)({
229
- products: (0, ProviderRegistry_1.providerProductsForDeployment)(config.edition),
230
- }),
219
+ registry,
231
220
  adapters,
232
221
  localSessionImporters: config.edition === 'local'
233
- ? [new connect_1.OpenAiSubscriptionSessionImportAdapter()]
222
+ ? [SessionImportProfiles_1.OPENAI_CODEX_SESSION_IMPORT_PROFILE, SessionImportProfiles_1.KIMI_CODE_SESSION_IMPORT_PROFILE]
223
+ .map((profile) => new FileSessionImportAdapter_1.FileSessionImportAdapter({ profile }))
234
224
  : [],
235
225
  credentialRepository,
236
226
  vault,
@@ -130,8 +130,12 @@ function loadConfigFromEnv() {
130
130
  ?? (nodeToken
131
131
  ? OFFICIAL_CLOUD_IDENTITY_ORIGIN
132
132
  : undefined);
133
- const cloudApiEndpoint = localSetupState?.cloudApiUrl
134
- ?? (oidcIssuer ? (0, oidc_issuer_1.cloudApiEndpointFromIssuer)(oidcIssuer) : undefined);
133
+ const localIdentityProvider = edition === 'local' && oidcIssuer && solidBaseUrl
134
+ && new URL(oidcIssuer).origin === new URL(solidBaseUrl).origin;
135
+ const cloudApiEndpoint = localIdentityProvider
136
+ ? undefined
137
+ : localSetupState?.cloudApiUrl
138
+ ?? (oidcIssuer ? (0, oidc_issuer_1.cloudApiEndpointFromIssuer)(oidcIssuer) : undefined);
135
139
  const tunnelProfileState = (0, TunnelProfiles_1.resolveTunnelProfileState)(process.env);
136
140
  const managedCloudTunnelProfile = localSetupState?.tunnelProvider === 'cloudflare' && localSetupState.tunnelToken
137
141
  ? {
@@ -193,6 +193,11 @@ function registerSharedRoutes(container, server) {
193
193
  providerModelSelectionService,
194
194
  customModelsService: providerCustomModelsService,
195
195
  gatewayAccessKeyRepository,
196
+ validateClientCredential: (apiKey) => container.resolve('authenticator').authenticate({
197
+ headers: { authorization: `Bearer ${apiKey}` },
198
+ method: 'POST',
199
+ url: '/api/ai/gateway/keys',
200
+ }),
196
201
  aiClientConfiguration: aiClientConfigurationService?.capability(),
197
202
  aiConnectionInvocationKeyIssuer,
198
203
  });
@@ -324,31 +329,9 @@ function resolveAiClientConfigurationService(container, config) {
324
329
  if (!capability?.enabled || capability.authority !== 'local-filesystem') {
325
330
  return undefined;
326
331
  }
327
- const modelSelectionService = container.resolve('providerModelSelectionService', { allowUnregistered: true });
328
- const providerRegistry = container.resolve('gatewayProviderRegistry', { allowUnregistered: true });
329
332
  return new AiClientConfigurationService_1.AiClientConfigurationService({
330
333
  homeDir: capability.homeDir,
331
334
  backupRoot: capability.backupRoot,
332
- ...(modelSelectionService && providerRegistry ? {
333
- listActiveModels: async ({ webId, auth }) => {
334
- const catalogs = await Promise.allSettled(providerRegistry.listProviders().map(async ({ id: provider }) => (await modelSelectionService.getCatalog({
335
- webId,
336
- provider,
337
- deployment: config.edition,
338
- auth,
339
- }))));
340
- return catalogs.flatMap((result) => result.status === 'fulfilled'
341
- ? result.value.models
342
- .filter((model) => model.selected && model.availability === 'available')
343
- .map((model) => ({
344
- id: model.id,
345
- provider: result.value.provider,
346
- ...(model.displayName ? { displayName: model.displayName } : {}),
347
- availability: model.availability,
348
- }))
349
- : []);
350
- },
351
- } : {}),
352
335
  });
353
336
  }
354
337
  function createDynamicEdgeCertificateBridge(config) {
@@ -17,7 +17,7 @@ function registerAiClientConfigurationRoutes(server, options) {
17
17
  if (!authorizeClientConfig(request, response, 'client-config:read')) {
18
18
  return;
19
19
  }
20
- await sendServiceResult(response, () => options.service.inspect(requireClient(params.client)));
20
+ await sendServiceResult(response, () => options.service.inspect(requireClient(params.client), request.auth?.type === 'solid' ? request.auth.webId : undefined));
21
21
  });
22
22
  server.post('/api/ai/client-configuration/:client/plan', async (request, response, params) => {
23
23
  if (!requireService(options, response))
@@ -33,6 +33,7 @@ function registerAiClientConfigurationRoutes(server, options) {
33
33
  client: requireClient(params.client),
34
34
  endpoint: requireString(body.endpoint, 'endpoint'),
35
35
  model: optionalString(body.model),
36
+ activeModels: optionalModelCatalog(body.activeModels),
36
37
  auth: request.auth,
37
38
  webId: request.auth?.type === 'solid' ? request.auth.webId : optionalString(body.webId),
38
39
  }));
@@ -172,6 +173,43 @@ function requireString(value, field) {
172
173
  function optionalString(value) {
173
174
  return typeof value === 'string' && value.trim() ? value.trim() : undefined;
174
175
  }
176
+ function optionalModelCatalog(value) {
177
+ if (value === undefined)
178
+ return undefined;
179
+ const invalid = () => {
180
+ throw new AiClientConfigurationService_1.AiClientConfigurationError('invalid_request', 'activeModels must contain valid model metadata.', 400);
181
+ };
182
+ if (!Array.isArray(value))
183
+ return invalid();
184
+ return value.map((entry) => {
185
+ if (!entry || typeof entry !== 'object' || Array.isArray(entry))
186
+ return invalid();
187
+ const model = entry;
188
+ if (typeof model.id !== 'string' || !model.id.trim() || [...model.id].some((character) => character.charCodeAt(0) < 32))
189
+ return invalid();
190
+ if (model.provider !== undefined && (typeof model.provider !== 'string' || !model.provider.trim()))
191
+ return invalid();
192
+ if (model.displayName !== undefined && typeof model.displayName !== 'string')
193
+ return invalid();
194
+ if (model.availability !== undefined && !['available', 'unavailable', 'statusUnknown'].includes(String(model.availability)))
195
+ return invalid();
196
+ if (model.contextWindow !== undefined && (typeof model.contextWindow !== 'number' || !Number.isSafeInteger(model.contextWindow) || model.contextWindow <= 0))
197
+ return invalid();
198
+ for (const key of ['inputModalities', 'capabilities']) {
199
+ if (model[key] !== undefined && (!Array.isArray(model[key]) || !model[key].every((item) => typeof item === 'string')))
200
+ return invalid();
201
+ }
202
+ return {
203
+ id: model.id.trim(),
204
+ ...(model.provider !== undefined ? { provider: model.provider.trim() } : {}),
205
+ ...(model.displayName !== undefined ? { displayName: model.displayName } : {}),
206
+ ...(model.availability !== undefined ? { availability: model.availability } : {}),
207
+ ...(model.contextWindow !== undefined ? { contextWindow: model.contextWindow } : {}),
208
+ ...(model.inputModalities !== undefined ? { inputModalities: model.inputModalities } : {}),
209
+ ...(model.capabilities !== undefined ? { capabilities: model.capabilities } : {}),
210
+ };
211
+ });
212
+ }
175
213
  function optionalConfirmation(value) {
176
214
  if (!value || typeof value !== 'object' || Array.isArray(value))
177
215
  return undefined;
@@ -1,4 +1,5 @@
1
1
  import type { ApiServer } from '../ApiServer';
2
+ import type { AuthResult } from '../auth/Authenticator';
2
3
  import type { GatewayDeployment } from '../ai-gateway/auth/GatewayApiKey';
3
4
  import { type GatewayAccessKeyRepository } from '../ai-gateway/auth/GatewayApiKeyAuthenticator';
4
5
  import type { ProviderConnectService } from '../ai-gateway/connect';
@@ -22,6 +23,8 @@ export interface AiGatewayManagementHandlerOptions {
22
23
  }>;
23
24
  };
24
25
  gatewayAccessKeyRepository?: GatewayAccessKeyRepository;
26
+ /** Reuses the configured CSS authenticator; never trusts the claimed registration owner. */
27
+ validateClientCredential?: (apiKey: string) => Promise<AuthResult>;
25
28
  aiClientConfiguration?: AiClientConfigurationCapabilityDescriptor;
26
29
  aiConnectionInvocationKeyIssuer?: Pick<AiConnectionsInvocationKeyIssuer, 'issue' | 'issueClientConfiguration'>;
27
30
  jsonBodyLimitBytes?: number;