@undefineds.co/xpod 0.4.10 → 0.4.12

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 (402) hide show
  1. package/config/components-ignore.json +5 -1
  2. package/config/notifications.json +68 -0
  3. package/config/xpod.base.json +9 -11
  4. package/dist/ai/service/AiCredentialSecret.d.ts +30 -0
  5. package/dist/ai/service/AiCredentialSecret.js +120 -0
  6. package/dist/ai/service/CredentialReaderImpl.d.ts +18 -0
  7. package/dist/ai/service/CredentialReaderImpl.js +81 -5
  8. package/dist/ai/service/CredentialReaderImpl.jsonld +42 -2
  9. package/dist/ai/service/EmbeddingModelPolicy.d.ts +79 -0
  10. package/dist/ai/service/EmbeddingModelPolicy.js +134 -0
  11. package/dist/ai/service/EmbeddingProviderError.js +6 -0
  12. package/dist/ai/service/EmbeddingServiceImpl.d.ts +13 -1
  13. package/dist/ai/service/EmbeddingServiceImpl.js +18 -5
  14. package/dist/ai/service/EmbeddingServiceImpl.jsonld +35 -0
  15. package/dist/ai/service/index.d.ts +2 -0
  16. package/dist/ai/service/index.js +2 -0
  17. package/dist/api/ai-gateway/connect/index.d.ts +20 -2
  18. package/dist/api/ai-gateway/connect/index.js +162 -16
  19. package/dist/api/ai-gateway/credentials/AiCredentialSecretDecoder.d.ts +12 -0
  20. package/dist/api/ai-gateway/credentials/AiCredentialSecretDecoder.js +30 -0
  21. package/dist/api/ai-gateway/errors.d.ts +1 -1
  22. package/dist/api/ai-gateway/models/GatewayEmbeddingModelCatalog.d.ts +11 -0
  23. package/dist/api/ai-gateway/models/GatewayEmbeddingModelCatalog.js +31 -0
  24. package/dist/api/ai-gateway/models/PodModelSelectionRepository.js +7 -3
  25. package/dist/api/ai-gateway/models/ProviderCustomModelsService.d.ts +18 -0
  26. package/dist/api/ai-gateway/models/ProviderCustomModelsService.js +23 -0
  27. package/dist/api/ai-gateway/models/ProviderModelDiscoveryAdapters.d.ts +3 -1
  28. package/dist/api/ai-gateway/models/ProviderModelDiscoveryAdapters.js +2 -45
  29. package/dist/api/ai-gateway/models/ProviderModelSelectionService.d.ts +10 -0
  30. package/dist/api/ai-gateway/models/ProviderModelSelectionService.js +57 -20
  31. package/dist/api/ai-gateway/models/ProviderModelType.d.ts +28 -0
  32. package/dist/api/ai-gateway/models/ProviderModelType.js +34 -0
  33. package/dist/api/ai-gateway/models/ProviderModelsAdapter.d.ts +10 -0
  34. package/dist/api/ai-gateway/models/ProviderModelsAdapter.js +3 -4
  35. package/dist/api/ai-gateway/models/index.d.ts +1 -0
  36. package/dist/api/ai-gateway/models/index.js +3 -1
  37. package/dist/api/ai-gateway/providers/CustomRuntimeAdapter.d.ts +7 -0
  38. package/dist/api/ai-gateway/providers/CustomRuntimeAdapter.js +9 -2
  39. package/dist/api/ai-gateway/providers/ModelsDevCatalog.d.ts +7 -1
  40. package/dist/api/ai-gateway/providers/ModelsDevCatalog.js +4 -10
  41. package/dist/api/ai-gateway/providers/ProviderRegistry.d.ts +107 -0
  42. package/dist/api/ai-gateway/providers/ProviderRegistry.js +244 -21
  43. package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.d.ts +5 -0
  44. package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.js +5 -1
  45. package/dist/api/ai-gateway/quota/SubscriptionQuotaAdapters.d.ts +12 -4
  46. package/dist/api/ai-gateway/quota/SubscriptionQuotaAdapters.js +11 -11
  47. package/dist/api/ai-gateway/routing/ModelRouter.d.ts +14 -0
  48. package/dist/api/ai-gateway/routing/ModelRouter.js +43 -4
  49. package/dist/api/ai-gateway/service-access/AiConnectionsServiceAccess.d.ts +9 -1
  50. package/dist/api/ai-gateway/service-access/AiConnectionsServiceAccess.js +3 -27
  51. package/dist/api/auth/ClientCredentialsAuthenticator.d.ts +0 -1
  52. package/dist/api/auth/ClientCredentialsAuthenticator.js +0 -3
  53. package/dist/api/auth/index.d.ts +1 -0
  54. package/dist/api/auth/index.js +1 -1
  55. package/dist/api/chatkit/pod-store.d.ts +31 -0
  56. package/dist/api/chatkit/pod-store.js +132 -8
  57. package/dist/api/container/common.js +24 -4
  58. package/dist/api/container/routes.js +17 -2
  59. package/dist/api/container/types.d.ts +3 -1
  60. package/dist/api/handlers/AdminHandler.d.ts +13 -0
  61. package/dist/api/handlers/AdminHandler.js +47 -18
  62. package/dist/api/handlers/AiConfigHandler.d.ts +6 -0
  63. package/dist/api/handlers/AiConfigHandler.js +28 -0
  64. package/dist/api/handlers/AiGatewayManagementHandler.js +36 -0
  65. package/dist/api/runs/RdfRunContextRetriever.d.ts +14 -0
  66. package/dist/api/runs/RdfRunContextRetriever.js +41 -5
  67. package/dist/api/runtime.js +2 -1
  68. package/dist/cli/commands/secret.d.ts +1 -0
  69. package/dist/cli/commands/secret.js +25 -7
  70. package/dist/components/components.jsonld +3 -1
  71. package/dist/components/context.jsonld +53 -1
  72. package/dist/http/SubgraphSparqlHttpHandler.d.ts +59 -2
  73. package/dist/http/SubgraphSparqlHttpHandler.js +145 -13
  74. package/dist/http/SubgraphSparqlHttpHandler.jsonld +37 -0
  75. package/dist/identity/drizzle/AccountRoleRepository.d.ts +30 -2
  76. package/dist/identity/drizzle/AccountRoleRepository.js +163 -15
  77. package/dist/identity/drizzle/EdgeNodeRepository.d.ts +0 -12
  78. package/dist/identity/drizzle/EdgeNodeRepository.js +5 -13
  79. package/dist/identity/drizzle/PodLookupRepository.d.ts +58 -4
  80. package/dist/identity/drizzle/PodLookupRepository.js +248 -105
  81. package/dist/identity/drizzle/db.d.ts +19 -0
  82. package/dist/identity/drizzle/db.js +39 -4
  83. package/dist/index.d.ts +2 -1
  84. package/dist/index.js +7 -3
  85. package/dist/logging/log-file.d.ts +17 -0
  86. package/dist/logging/log-file.js +69 -0
  87. package/dist/main.js +2 -1
  88. package/dist/notifications/NotificationChannelSweeper.d.ts +50 -0
  89. package/dist/notifications/NotificationChannelSweeper.js +131 -0
  90. package/dist/notifications/NotificationChannelSweeper.jsonld +136 -0
  91. package/dist/notifications/ReclaimingWebSocket2023Storer.d.ts +25 -0
  92. package/dist/notifications/ReclaimingWebSocket2023Storer.js +56 -0
  93. package/dist/notifications/ReclaimingWebSocket2023Storer.jsonld +77 -0
  94. package/dist/notifications/index.d.ts +2 -0
  95. package/dist/notifications/index.js +2 -0
  96. package/dist/runtime/Proxy.d.ts +37 -0
  97. package/dist/runtime/Proxy.js +88 -16
  98. package/dist/runtime/bootstrap.js +2 -1
  99. package/dist/runtime/upgrade/BunNativeUpgradeRelay.d.ts +116 -0
  100. package/dist/runtime/upgrade/BunNativeUpgradeRelay.js +423 -0
  101. package/dist/runtime/upgrade/UpgradeHandshake.d.ts +63 -0
  102. package/dist/runtime/upgrade/UpgradeHandshake.js +199 -0
  103. package/dist/runtime/upgrade/WebSocketFrames.d.ts +67 -0
  104. package/dist/runtime/upgrade/WebSocketFrames.js +224 -0
  105. package/node_modules/@undefineds.co/ai-connections/dist/AiApiKeyPool.js +8 -1
  106. package/node_modules/@undefineds.co/ai-connections/dist/AiAuthorizationActions.d.ts +11 -2
  107. package/node_modules/@undefineds.co/ai-connections/dist/AiAuthorizationActions.js +27 -10
  108. package/node_modules/@undefineds.co/ai-connections/dist/AiClientConfigurationSection.d.ts +7 -0
  109. package/node_modules/@undefineds.co/ai-connections/dist/AiClientConfigurationSection.js +13 -11
  110. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectDialog.js +1 -1
  111. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsList.js +10 -6
  112. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsMain.d.ts +15 -0
  113. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsMain.js +29 -3
  114. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsMainHeader.js +18 -3
  115. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsPanel.d.ts +16 -1
  116. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsPanel.js +92 -20
  117. package/node_modules/@undefineds.co/ai-connections/dist/AiCopyButton.d.ts +35 -0
  118. package/node_modules/@undefineds.co/ai-connections/dist/AiCopyButton.js +45 -0
  119. package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialPoolSection.js +71 -11
  120. package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialRow.js +9 -7
  121. package/node_modules/@undefineds.co/ai-connections/dist/AiEndpointList.d.ts +23 -0
  122. package/node_modules/@undefineds.co/ai-connections/dist/AiEndpointList.js +24 -0
  123. package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeysSection.d.ts +13 -4
  124. package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeysSection.js +35 -38
  125. package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayModelsSection.d.ts +21 -0
  126. package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayModelsSection.js +51 -0
  127. package/node_modules/@undefineds.co/ai-connections/dist/AiInfoTooltip.d.ts +15 -0
  128. package/node_modules/@undefineds.co/ai-connections/dist/AiInfoTooltip.js +16 -0
  129. package/node_modules/@undefineds.co/ai-connections/dist/AiModelCatalog.d.ts +175 -0
  130. package/node_modules/@undefineds.co/ai-connections/dist/AiModelCatalog.js +133 -0
  131. package/node_modules/@undefineds.co/ai-connections/dist/AiOfferingDetails.js +2 -2
  132. package/node_modules/@undefineds.co/ai-connections/dist/AiProviderCard.js +13 -64
  133. package/node_modules/@undefineds.co/ai-connections/dist/AiProviderHeader.d.ts +21 -0
  134. package/node_modules/@undefineds.co/ai-connections/dist/AiProviderHeader.js +12 -0
  135. package/node_modules/@undefineds.co/ai-connections/dist/AiRowAction.d.ts +15 -0
  136. package/node_modules/@undefineds.co/ai-connections/dist/AiRowAction.js +12 -0
  137. package/node_modules/@undefineds.co/ai-connections/dist/AiSortableCredentialList.js +2 -1
  138. package/node_modules/@undefineds.co/ai-connections/dist/ai-connections-client.d.ts +7 -0
  139. package/node_modules/@undefineds.co/ai-connections/dist/ai-connections-client.js +6 -0
  140. package/node_modules/@undefineds.co/ai-connections/dist/authorization-methods.d.ts +36 -5
  141. package/node_modules/@undefineds.co/ai-connections/dist/authorization-methods.js +52 -9
  142. package/node_modules/@undefineds.co/ai-connections/dist/client/normalize.js +30 -3
  143. package/node_modules/@undefineds.co/ai-connections/dist/client/types.d.ts +21 -1
  144. package/node_modules/@undefineds.co/ai-connections/dist/client-config/base-adapter.d.ts +1 -3
  145. package/node_modules/@undefineds.co/ai-connections/dist/client-config/base-adapter.js +3 -7
  146. package/node_modules/@undefineds.co/ai-connections/dist/client-config/index.cjs +9 -7
  147. package/node_modules/@undefineds.co/ai-connections/dist/collection-runtime.d.ts +46 -0
  148. package/node_modules/@undefineds.co/ai-connections/dist/collection-runtime.js +231 -0
  149. package/node_modules/@undefineds.co/ai-connections/dist/collections.d.ts +119 -0
  150. package/node_modules/@undefineds.co/ai-connections/dist/collections.js +173 -0
  151. package/node_modules/@undefineds.co/ai-connections/dist/controller.d.ts +71 -5
  152. package/node_modules/@undefineds.co/ai-connections/dist/controller.js +285 -16
  153. package/node_modules/@undefineds.co/ai-connections/dist/credential-labels.d.ts +5 -0
  154. package/node_modules/@undefineds.co/ai-connections/dist/credential-labels.js +8 -3
  155. package/node_modules/@undefineds.co/ai-connections/dist/credential-storage.d.ts +59 -0
  156. package/node_modules/@undefineds.co/ai-connections/dist/credential-storage.js +131 -0
  157. package/node_modules/@undefineds.co/ai-connections/dist/endpoint-urls.d.ts +15 -0
  158. package/node_modules/@undefineds.co/ai-connections/dist/endpoint-urls.js +20 -0
  159. package/node_modules/@undefineds.co/ai-connections/dist/gateway-endpoints.d.ts +14 -0
  160. package/node_modules/@undefineds.co/ai-connections/dist/gateway-endpoints.js +20 -0
  161. package/node_modules/@undefineds.co/ai-connections/dist/index.d.ts +8 -0
  162. package/node_modules/@undefineds.co/ai-connections/dist/index.js +8 -0
  163. package/node_modules/@undefineds.co/ai-connections/dist/manifest.js +1 -1
  164. package/node_modules/@undefineds.co/ai-connections/dist/offering-endpoints.d.ts +14 -0
  165. package/node_modules/@undefineds.co/ai-connections/dist/offering-endpoints.js +17 -0
  166. package/node_modules/@undefineds.co/ai-connections/dist/provider-catalog.cjs +68 -1
  167. package/node_modules/@undefineds.co/ai-connections/dist/provider-catalog.d.ts +75 -1
  168. package/node_modules/@undefineds.co/ai-connections/dist/provider-catalog.js +119 -0
  169. package/node_modules/@undefineds.co/ai-connections/dist/provider-visuals.d.ts +5 -0
  170. package/node_modules/@undefineds.co/ai-connections/dist/provider-visuals.js +5 -0
  171. package/node_modules/@undefineds.co/ai-connections/dist/service-access.js +2 -27
  172. package/node_modules/@undefineds.co/ai-connections/package.json +1 -0
  173. package/node_modules/@undefineds.co/extension-sdk/dist/manifest.d.ts +1 -1
  174. package/node_modules/@undefineds.co/extension-sdk/dist/manifest.js +2 -0
  175. package/node_modules/@undefineds.co/extension-sdk/dist/web.d.ts +150 -0
  176. package/node_modules/@undefineds.co/extension-sdk/package.json +2 -1
  177. package/node_modules/@undefineds.co/models/README.md +1 -1
  178. package/node_modules/@undefineds.co/models/dist/ai-config/index.d.ts +3 -3
  179. package/node_modules/@undefineds.co/models/dist/ai-gateway.schema.d.ts +5 -0
  180. package/node_modules/@undefineds.co/models/dist/ai-gateway.schema.js +9 -0
  181. package/node_modules/@undefineds.co/models/dist/ai-runtime.repository.d.ts +1 -1
  182. package/node_modules/@undefineds.co/models/dist/approval.repository.d.ts +2 -2
  183. package/node_modules/@undefineds.co/models/dist/audit.presentation.d.ts +2 -2
  184. package/node_modules/@undefineds.co/models/dist/capture.repository.d.ts +1 -1
  185. package/node_modules/@undefineds.co/models/dist/chat-project.repository.d.ts +1 -1
  186. package/node_modules/@undefineds.co/models/dist/chat.repository.d.ts +2 -2
  187. package/node_modules/@undefineds.co/models/dist/control-request.repository.d.ts +2 -2
  188. package/node_modules/@undefineds.co/models/dist/conversation-share.repository.d.ts +1 -1
  189. package/node_modules/@undefineds.co/models/dist/credential.schema.d.ts +12 -0
  190. package/node_modules/@undefineds.co/models/dist/credential.schema.js +15 -1
  191. package/node_modules/@undefineds.co/models/dist/discovery/index.d.ts +2 -2
  192. package/node_modules/@undefineds.co/models/dist/discovery/providers.json +248 -7
  193. package/node_modules/@undefineds.co/models/dist/discovery/types.d.ts +31 -0
  194. package/node_modules/@undefineds.co/models/dist/extension/index.d.ts +1 -1
  195. package/node_modules/@undefineds.co/models/dist/favorite/index.d.ts +2 -2
  196. package/node_modules/@undefineds.co/models/dist/fixtures/contracts-chat-contact.d.ts +5 -5
  197. package/node_modules/@undefineds.co/models/dist/import/index.d.ts +1 -1
  198. package/node_modules/@undefineds.co/models/dist/index.d.ts +73 -73
  199. package/node_modules/@undefineds.co/models/dist/index.js +1 -1
  200. package/node_modules/@undefineds.co/models/dist/input-request.repository.d.ts +2 -2
  201. package/node_modules/@undefineds.co/models/dist/knowledge/index.d.ts +1 -1
  202. package/node_modules/@undefineds.co/models/dist/message.repository.d.ts +1 -1
  203. package/node_modules/@undefineds.co/models/dist/namespaces.js +5 -0
  204. package/node_modules/@undefineds.co/models/dist/pod-storage-descriptor.d.ts +4815 -26
  205. package/node_modules/@undefineds.co/models/dist/pod-storage-descriptor.js +482 -132
  206. package/node_modules/@undefineds.co/models/dist/schema.d.ts +4 -0
  207. package/node_modules/@undefineds.co/models/dist/session/index.d.ts +1 -1
  208. package/node_modules/@undefineds.co/models/dist/settings/index.d.ts +1 -1
  209. package/node_modules/@undefineds.co/models/dist/sidecar/persistence-mapping.d.ts +5 -5
  210. package/node_modules/@undefineds.co/models/dist/thread.repository.d.ts +2 -2
  211. package/node_modules/@undefineds.co/models/dist/types/message-block.d.ts +1 -1
  212. package/node_modules/@undefineds.co/models/dist/vocab/_namespaces.d.ts +1 -1
  213. package/node_modules/@undefineds.co/models/dist/vocab/index.d.ts +10 -10
  214. package/node_modules/@undefineds.co/models/dist/vocab/sidecar.vocab.d.ts +1 -0
  215. package/node_modules/@undefineds.co/models/dist/vocab/sidecar.vocab.js +1 -0
  216. package/node_modules/@undefineds.co/models/package.json +4 -2
  217. package/node_modules/@undefineds.co/pod-collections/README.md +71 -0
  218. package/node_modules/@undefineds.co/pod-collections/dist/diff.d.ts +85 -0
  219. package/node_modules/@undefineds.co/pod-collections/dist/diff.js +166 -0
  220. package/node_modules/@undefineds.co/pod-collections/dist/feed.d.ts +17 -0
  221. package/node_modules/@undefineds.co/pod-collections/dist/feed.js +27 -0
  222. package/node_modules/@undefineds.co/pod-collections/dist/index.cjs +1042 -0
  223. package/node_modules/@undefineds.co/pod-collections/dist/index.d.ts +37 -0
  224. package/node_modules/@undefineds.co/pod-collections/dist/index.js +89 -0
  225. package/node_modules/@undefineds.co/pod-collections/dist/layout.d.ts +75 -0
  226. package/node_modules/@undefineds.co/pod-collections/dist/layout.js +173 -0
  227. package/node_modules/@undefineds.co/pod-collections/dist/mapping.d.ts +78 -0
  228. package/node_modules/@undefineds.co/pod-collections/dist/mapping.js +287 -0
  229. package/node_modules/@undefineds.co/pod-collections/dist/mutations.d.ts +83 -0
  230. package/node_modules/@undefineds.co/pod-collections/dist/mutations.js +273 -0
  231. package/node_modules/@undefineds.co/pod-collections/dist/react.d.ts +21 -0
  232. package/node_modules/@undefineds.co/pod-collections/dist/react.js +22 -0
  233. package/node_modules/@undefineds.co/pod-collections/dist/read.d.ts +65 -0
  234. package/node_modules/@undefineds.co/pod-collections/dist/read.js +31 -0
  235. package/node_modules/@undefineds.co/pod-collections/dist/sync.d.ts +66 -0
  236. package/node_modules/@undefineds.co/pod-collections/dist/sync.js +260 -0
  237. package/node_modules/@undefineds.co/pod-collections/dist/types.d.ts +155 -0
  238. package/node_modules/@undefineds.co/pod-collections/dist/types.js +9 -0
  239. package/node_modules/@undefineds.co/pod-collections/package.json +42 -0
  240. package/node_modules/@undefineds.co/shared-ui/dist/index.d.ts +0 -1
  241. package/node_modules/@undefineds.co/shared-ui/dist/index.js +0 -1
  242. package/package.json +15 -7
  243. package/static/app/assets/main.css +1 -1
  244. package/static/app/assets/main.js +12 -13
  245. package/static/auth-callback/assets/AiConfigContext-DnQs1ZpW.js +1 -0
  246. package/static/auth-callback/assets/AiConfigPage-DOtvlxH0.js +1 -0
  247. package/static/auth-callback/assets/DocumentProcessingPanel-BS2voQgL.js +1 -0
  248. package/static/auth-callback/assets/IndexLifecyclePanel-Cvt0cJtN.js +1 -0
  249. package/static/auth-callback/assets/{IndexSubjectPanel-C4YG0whI.js → IndexSubjectPanel-Dhf01GqF.js} +1 -1
  250. package/static/auth-callback/assets/ModelAssignmentsPanel-BJutWaAF.js +1 -0
  251. package/static/auth-callback/assets/ModelsPage-BRS0sje3.js +11 -0
  252. package/static/auth-callback/assets/{NetworkPage-Cbdn_P1e.js → NetworkPage-B3qBfANA.js} +2 -2
  253. package/static/auth-callback/assets/{PaneListHeader-jy70Q00L.js → PaneListHeader-QQeJGTp4.js} +1 -1
  254. package/static/auth-callback/assets/SearchIndexingPanel-MyNUSEwT.js +1 -0
  255. package/static/auth-callback/assets/{StatusSubjectPanel-hfjoB5aS.js → StatusSubjectPanel-DQkEVsFs.js} +1 -1
  256. package/static/{settings/assets/StatusWorkspace-CKD_Rzdr.js → auth-callback/assets/StatusWorkspace-Dkv63Uwk.js} +1 -1
  257. package/static/auth-callback/assets/SystemSettingsPage-TIsUfX5d.js +1 -0
  258. package/static/auth-callback/assets/SystemSettingsSubjectPanel-BJWEt2-7.js +33 -0
  259. package/static/auth-callback/assets/XpodAiConnectionsPodStore-BJiXm-PF.js +3 -0
  260. package/static/auth-callback/assets/{activity-BcsZZxxw.js → activity-5hNeNKnL.js} +1 -1
  261. package/static/auth-callback/assets/admin-C6qCRFiY.js +1 -0
  262. package/static/auth-callback/assets/ai-connections-CryuHGKW.js +1 -0
  263. package/static/auth-callback/assets/{auth-callback-atKg_oig.js → auth-callback-CAFZ3R0B.js} +80 -84
  264. package/static/auth-callback/assets/auth-callback-rk080mvG.css +1 -0
  265. package/static/auth-callback/assets/{badge-BWbRHThQ.js → badge-CAIPI0CB.js} +1 -1
  266. package/static/auth-callback/assets/collection-runtime-D9s7h9YA.js +1 -0
  267. package/static/auth-callback/assets/dialog-BjA109aX.js +1 -0
  268. package/static/auth-callback/assets/{download-BmvG1Vya.js → download-B3Up5W2G.js} +1 -1
  269. package/static/auth-callback/assets/{external-link-DZ34d3g3.js → external-link-BTXgSPzB.js} +1 -1
  270. package/static/auth-callback/assets/index-BppXlxcp.js +41 -0
  271. package/static/auth-callback/assets/index-CirW4CJf.js +1 -0
  272. package/static/auth-callback/assets/index-DlLYWOhw.js +4 -0
  273. package/static/auth-callback/assets/{index-browser-B9Z7GU-T.js → index-browser-DtU38ni3.js} +1 -1
  274. package/static/auth-callback/assets/{key-round-tjP76Se-.js → key-round-CQCOrZ7x.js} +1 -1
  275. package/static/auth-callback/assets/layout-DB3pMyTl.js +1 -0
  276. package/static/auth-callback/assets/pod-collections-host-KnnGFZHL.js +8 -0
  277. package/static/auth-callback/assets/{rotate-ccw-C_L5ZLx1.js → rotate-ccw-C1zM2KtS.js} +1 -1
  278. package/static/auth-callback/assets/settings-projection-CUkyprDQ.js +1 -0
  279. package/static/auth-callback/assets/{skeleton-C7tGDQIs.js → skeleton-Cqp7_M9-.js} +1 -1
  280. package/static/auth-callback/assets/{waypoints-VMNQlWdU.js → waypoints-Bj6gAUSQ.js} +1 -1
  281. package/static/auth-callback/assets/{workspace-layout-SAp6BtYK.js → workspace-layout-DK8mDzrY.js} +1 -1
  282. package/static/auth-callback/auth-callback.html +2 -2
  283. package/static/dashboard/assets/AiConfigContext-BsE7MqX8.js +1 -0
  284. package/static/dashboard/assets/AiConfigPage-DvM-lRXa.js +1 -0
  285. package/static/dashboard/assets/DocumentProcessingPanel-BPfdlfuf.js +1 -0
  286. package/static/dashboard/assets/IndexLifecyclePanel--m0AGxvh.js +1 -0
  287. package/static/dashboard/assets/{IndexSubjectPanel-DQFPP6-p.js → IndexSubjectPanel-Bb7m1k3d.js} +1 -1
  288. package/static/dashboard/assets/ModelAssignmentsPanel-BLi_zbMa.js +1 -0
  289. package/static/dashboard/assets/ModelsPage-CxdpgnfR.js +11 -0
  290. package/static/dashboard/assets/{NetworkPage-CHQ3YxIB.js → NetworkPage-BAIPw-D_.js} +2 -2
  291. package/static/dashboard/assets/{PaneListHeader-DsXemAdR.js → PaneListHeader-BBCMei0r.js} +1 -1
  292. package/static/dashboard/assets/SearchIndexingPanel-Ck4Y-xjR.js +1 -0
  293. package/static/dashboard/assets/{StatusSubjectPanel-D3PGEYT4.js → StatusSubjectPanel-D1KWfAXE.js} +1 -1
  294. package/static/dashboard/assets/{StatusWorkspace-BcpePYUW.js → StatusWorkspace-JbA5gzXx.js} +1 -1
  295. package/static/dashboard/assets/SystemSettingsPage-BbwQWsSR.js +1 -0
  296. package/static/dashboard/assets/SystemSettingsSubjectPanel-N117nMt5.js +33 -0
  297. package/static/dashboard/assets/XpodAiConnectionsPodStore-CdDOb4SV.js +18 -0
  298. package/static/dashboard/assets/{activity-j5zrznu-.js → activity-DX1I96o_.js} +1 -1
  299. package/static/dashboard/assets/admin-C6qCRFiY.js +1 -0
  300. package/static/dashboard/assets/ai-connections-DwCRqOQa.js +1 -0
  301. package/static/dashboard/assets/{badge-CzeBdG7h.js → badge-k2vhtDqH.js} +1 -1
  302. package/static/dashboard/assets/collection-runtime-BFQ8teQJ.js +1 -0
  303. package/static/dashboard/assets/{dashboard-D-xANHk1.js → dashboard-DWZ-fmCT.js} +105 -109
  304. package/static/dashboard/assets/dashboard-rk080mvG.css +1 -0
  305. package/static/dashboard/assets/dialog-1CCw-iHT.js +1 -0
  306. package/static/dashboard/assets/{download-IcNdEZWi.js → download-C6-SNY1q.js} +1 -1
  307. package/static/dashboard/assets/{external-link-DxBxK8Vu.js → external-link-BgPcZ_j2.js} +1 -1
  308. package/static/dashboard/assets/index-6LcIUIYO.js +1 -0
  309. package/static/dashboard/assets/index-D7A8U6Pt.js +41 -0
  310. package/static/dashboard/assets/index-UD6QOE7H.js +4 -0
  311. package/static/dashboard/assets/{key-round-D1K7warM.js → key-round-BOd7Jo0Q.js} +1 -1
  312. package/static/dashboard/assets/layout-DB3pMyTl.js +1 -0
  313. package/static/dashboard/assets/pod-collections-host-KnnGFZHL.js +8 -0
  314. package/static/dashboard/assets/{rotate-ccw-CcN1N6p9.js → rotate-ccw-CCgJqsvx.js} +1 -1
  315. package/static/dashboard/assets/settings-projection-CUkyprDQ.js +1 -0
  316. package/static/dashboard/assets/{skeleton-CKnmJMUH.js → skeleton-Bc7abAn5.js} +1 -1
  317. package/static/dashboard/assets/{waypoints-DuZPO_wu.js → waypoints-s-opmJxx.js} +1 -1
  318. package/static/dashboard/assets/{workspace-layout-BUj3wZ_m.js → workspace-layout-DqIQeTBV.js} +1 -1
  319. package/static/dashboard/dashboard.html +2 -2
  320. package/static/settings/assets/AiConfigContext-BB9KZySa.js +1 -0
  321. package/static/settings/assets/AiConfigPage-DGSXUkLs.js +1 -0
  322. package/static/settings/assets/DocumentProcessingPanel-Da2Re6Rg.js +1 -0
  323. package/static/settings/assets/IndexLifecyclePanel-BSZuIzgr.js +1 -0
  324. package/static/settings/assets/{IndexSubjectPanel-73sM16Ma.js → IndexSubjectPanel-CFd0ay-r.js} +1 -1
  325. package/static/settings/assets/ModelAssignmentsPanel-CSAryvWJ.js +1 -0
  326. package/static/settings/assets/ModelsPage-BQwCwLHU.js +11 -0
  327. package/static/settings/assets/{NetworkPage-i6j-M2RY.js → NetworkPage-BKymvsQc.js} +2 -2
  328. package/static/settings/assets/{PaneListHeader-DpqC0jd5.js → PaneListHeader-Bjh3hRdQ.js} +1 -1
  329. package/static/settings/assets/SearchIndexingPanel-MjKL5QLU.js +1 -0
  330. package/static/settings/assets/{StatusSubjectPanel-Dv4q3PGh.js → StatusSubjectPanel-Bvl6K4mx.js} +1 -1
  331. package/static/settings/assets/StatusWorkspace-B0NzrP--.js +1 -0
  332. package/static/settings/assets/SystemSettingsPage-D2z6Z4FE.js +1 -0
  333. package/static/settings/assets/SystemSettingsSubjectPanel-4sxma4X4.js +33 -0
  334. package/static/settings/assets/XpodAiConnectionsPodStore-BkNQ8fZx.js +3 -0
  335. package/static/settings/assets/{activity-DaFkk8f3.js → activity-CgJJGpjx.js} +1 -1
  336. package/static/settings/assets/admin-C6qCRFiY.js +1 -0
  337. package/static/settings/assets/ai-connections-CryuHGKW.js +1 -0
  338. package/static/settings/assets/{badge-d5SHdc-x.js → badge-C4NypVyT.js} +1 -1
  339. package/static/settings/assets/collection-runtime-CTLCDxAi.js +1 -0
  340. package/static/settings/assets/dialog-Csq0vWUi.js +1 -0
  341. package/static/settings/assets/{download-CpkwomDr.js → download-DaLJJ-Wp.js} +1 -1
  342. package/static/settings/assets/{external-link-_4YT42Mf.js → external-link--w_iW5Au.js} +1 -1
  343. package/static/settings/assets/index-B0mQa59b.js +4 -0
  344. package/static/settings/assets/index-BukHiu4y.js +1 -0
  345. package/static/settings/assets/index-COmVnZi2.js +41 -0
  346. package/static/settings/assets/{index-browser-B06xjBdZ.js → index-browser-BGpvHwD0.js} +1 -1
  347. package/static/settings/assets/{key-round-Dlqmp1Kq.js → key-round-Bk4YRjBu.js} +1 -1
  348. package/static/settings/assets/layout-DB3pMyTl.js +1 -0
  349. package/static/settings/assets/pod-collections-host-KnnGFZHL.js +8 -0
  350. package/static/settings/assets/{rotate-ccw-TAY65xWT.js → rotate-ccw-TCabbqsr.js} +1 -1
  351. package/static/settings/assets/{settings-ExBXGgbj.js → settings-CJWpdbNC.js} +105 -109
  352. package/static/settings/assets/settings-projection-CUkyprDQ.js +1 -0
  353. package/static/settings/assets/settings-rk080mvG.css +1 -0
  354. package/static/settings/assets/{skeleton-DKIWjNr9.js → skeleton-JDHYVe7t.js} +1 -1
  355. package/static/settings/assets/{waypoints-9erLIxyR.js → waypoints-DDvEl-MU.js} +1 -1
  356. package/static/settings/assets/{workspace-layout-CYXfYIa3.js → workspace-layout-DV5QU30U.js} +1 -1
  357. package/static/settings/settings.html +2 -2
  358. package/node_modules/@undefineds.co/shared-ui/dist/oidc-consent.d.ts +0 -54
  359. package/node_modules/@undefineds.co/shared-ui/dist/oidc-consent.js +0 -21
  360. package/static/auth-callback/assets/AiConfigContext-C81deMM9.js +0 -1
  361. package/static/auth-callback/assets/AiConfigPage-evWI8T56.js +0 -1
  362. package/static/auth-callback/assets/DocumentProcessingPanel-B9GrDEMe.js +0 -1
  363. package/static/auth-callback/assets/IndexLifecyclePanel-qCo8ABQZ.js +0 -1
  364. package/static/auth-callback/assets/ModelAssignmentsPanel-DG7Lxh3t.js +0 -1
  365. package/static/auth-callback/assets/ModelsPage-CgEuqE6p.js +0 -10
  366. package/static/auth-callback/assets/SearchIndexingPanel-ByU3u7kp.js +0 -1
  367. package/static/auth-callback/assets/StatusWorkspace-BZd617sV.js +0 -1
  368. package/static/auth-callback/assets/SystemSettingsPage-BirzWAQM.js +0 -1
  369. package/static/auth-callback/assets/SystemSettingsSubjectPanel-CmsVWNCx.js +0 -31
  370. package/static/auth-callback/assets/admin-BU4m6Ko2.js +0 -1
  371. package/static/auth-callback/assets/ai-connections-CHNTKemd.js +0 -1
  372. package/static/auth-callback/assets/auth-callback-C_7MUXJb.css +0 -1
  373. package/static/auth-callback/assets/index-BpV1hsqs.js +0 -4
  374. package/static/auth-callback/assets/index-D9oE6FXK.js +0 -41
  375. package/static/dashboard/assets/AiConfigContext-De-OtAWo.js +0 -1
  376. package/static/dashboard/assets/AiConfigPage-macP4Mop.js +0 -1
  377. package/static/dashboard/assets/DocumentProcessingPanel-C5ObvCCl.js +0 -1
  378. package/static/dashboard/assets/IndexLifecyclePanel-xVNa2l40.js +0 -1
  379. package/static/dashboard/assets/ModelAssignmentsPanel-DMOATFpQ.js +0 -1
  380. package/static/dashboard/assets/ModelsPage-91UbnETA.js +0 -25
  381. package/static/dashboard/assets/SearchIndexingPanel-Dh70PNFZ.js +0 -1
  382. package/static/dashboard/assets/SystemSettingsPage-BiN5GcKx.js +0 -1
  383. package/static/dashboard/assets/SystemSettingsSubjectPanel-B9QrSiFp.js +0 -31
  384. package/static/dashboard/assets/admin-BU4m6Ko2.js +0 -1
  385. package/static/dashboard/assets/ai-connections-CHNTKemd.js +0 -1
  386. package/static/dashboard/assets/dashboard-C_7MUXJb.css +0 -1
  387. package/static/dashboard/assets/index-FWZ-s52O.js +0 -41
  388. package/static/dashboard/assets/index-ZiQZ96oC.js +0 -4
  389. package/static/settings/assets/AiConfigContext-C0cQMPfG.js +0 -1
  390. package/static/settings/assets/AiConfigPage-CPhB4iFb.js +0 -1
  391. package/static/settings/assets/DocumentProcessingPanel-sYI7OpuH.js +0 -1
  392. package/static/settings/assets/IndexLifecyclePanel-yj8iyiT8.js +0 -1
  393. package/static/settings/assets/ModelAssignmentsPanel-BFIgUX5v.js +0 -1
  394. package/static/settings/assets/ModelsPage-BdppXl7E.js +0 -10
  395. package/static/settings/assets/SearchIndexingPanel-BlPnrkT3.js +0 -1
  396. package/static/settings/assets/SystemSettingsPage-CiOm2NzV.js +0 -1
  397. package/static/settings/assets/SystemSettingsSubjectPanel-Cd-GECon.js +0 -31
  398. package/static/settings/assets/admin-BU4m6Ko2.js +0 -1
  399. package/static/settings/assets/ai-connections-CHNTKemd.js +0 -1
  400. package/static/settings/assets/index-BFi9yn7_.js +0 -41
  401. package/static/settings/assets/index-BGgEhIUy.js +0 -4
  402. package/static/settings/assets/settings-C_7MUXJb.css +0 -1
@@ -1,13 +1,49 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_PROVIDER_DESCRIPTORS = exports.DEFAULT_PROVIDER_PRODUCT_DESCRIPTORS = exports.ProviderRegistry = exports.OPENAI_SUBSCRIPTION_BASE_URL = void 0;
3
+ exports.DEFAULT_PROVIDER_DESCRIPTORS = exports.DEFAULT_PROVIDER_PRODUCT_DESCRIPTORS = exports.ProviderRegistry = exports.XPOD_PROVIDER_TO_MODELS_DEV = exports.MANAGED_PROVIDER_ALIASES = exports.MANAGED_PROVIDER_VOCABULARY = exports.OPENAI_SUBSCRIPTION_BASE_URL = void 0;
4
+ exports.discoveryProviderSlug = discoveryProviderSlug;
4
5
  exports.createDefaultProviderRegistry = createDefaultProviderRegistry;
5
6
  exports.providerProductsForDeployment = providerProductsForDeployment;
7
+ exports.offeringDeclaresUpstreamCapability = offeringDeclaresUpstreamCapability;
6
8
  exports.normalizeProviderId = normalizeProviderId;
7
9
  const models_1 = require("@undefineds.co/models");
10
+ const defaultEmbeddingProfile_1 = require("../../../ai/service/defaultEmbeddingProfile");
8
11
  const provider_catalog_1 = require("@undefineds.co/ai-connections/provider-catalog");
9
12
  const OfferingAuthorization_1 = require("./OfferingAuthorization");
10
13
  exports.OPENAI_SUBSCRIPTION_BASE_URL = 'https://chatgpt.com/backend-api/codex';
14
+ exports.MANAGED_PROVIDER_VOCABULARY = [
15
+ { id: 'openai', runtimeIds: ['codex'], modelsDevId: 'openai' },
16
+ { id: 'anthropic', runtimeIds: ['claude'], modelsDevId: 'anthropic' },
17
+ { id: 'kimi', runtimeIds: ['moonshot', 'moonshotai'], discoverySlug: 'moonshot', modelsDevId: 'moonshotai' },
18
+ {
19
+ id: 'bailian',
20
+ runtimeIds: ['dashscope', 'dashscope-cn', 'dashscope-intl', 'qwen', 'alibaba'],
21
+ discoverySlug: 'qwen',
22
+ modelsDevId: 'alibaba-cn',
23
+ },
24
+ { id: 'deepseek', runtimeIds: [], modelsDevId: 'deepseek' },
25
+ { id: 'zhipu', runtimeIds: ['zhipuai', 'bigmodel', 'glm'], modelsDevId: 'zhipuai' },
26
+ { id: 'ollama', runtimeIds: [] },
27
+ ];
28
+ /**
29
+ * Runtime vocabulary to canonical provider id, derived from
30
+ * `MANAGED_PROVIDER_VOCABULARY`.
31
+ *
32
+ * `ProviderRegistry.resolveManagedProviderId` is the translation entry point:
33
+ * it validates the canonical id against the registered catalog, which a raw
34
+ * table lookup cannot do.
35
+ */
36
+ exports.MANAGED_PROVIDER_ALIASES = Object.fromEntries(exports.MANAGED_PROVIDER_VOCABULARY.flatMap((provider) => [provider.id, ...provider.runtimeIds].map((runtimeId) => [runtimeId, provider.id])));
37
+ /** Discovery-catalog slug of a gateway catalog provider id (identity when undeclared). */
38
+ function discoveryProviderSlug(providerId) {
39
+ return managedProviderVocabulary(providerId)?.discoverySlug ?? providerId;
40
+ }
41
+ /** models.dev provider ids keyed by gateway catalog provider id, derived from the vocabulary block. */
42
+ exports.XPOD_PROVIDER_TO_MODELS_DEV = Object.fromEntries(exports.MANAGED_PROVIDER_VOCABULARY.flatMap((provider) => provider.modelsDevId ? [[provider.id, provider.modelsDevId]] : []));
43
+ function managedProviderVocabulary(providerId) {
44
+ const canonical = exports.MANAGED_PROVIDER_ALIASES[normalizeProviderId(providerId)] ?? normalizeProviderId(providerId);
45
+ return exports.MANAGED_PROVIDER_VOCABULARY.find((provider) => provider.id === canonical);
46
+ }
11
47
  const RESERVED_DISCOVERY_METADATA_KEYS = new Set([
12
48
  'baseUrl',
13
49
  'base_url',
@@ -77,6 +113,63 @@ class ProviderRegistry {
77
113
  listProviders() {
78
114
  return Array.from(this.providers.values());
79
115
  }
116
+ /**
117
+ * Resolve a runtime provider vocabulary entry to the catalog provider that
118
+ * owns it. Unknown providers stay unresolved so a deployment can never treat
119
+ * a Pod-invented provider id as a catalog provider.
120
+ */
121
+ resolveManagedProviderId(provider) {
122
+ const normalized = normalizeProviderId(provider);
123
+ if (!normalized) {
124
+ return undefined;
125
+ }
126
+ const canonical = exports.MANAGED_PROVIDER_ALIASES[normalized] ?? normalized;
127
+ return this.providers.has(canonical) ? canonical : undefined;
128
+ }
129
+ /**
130
+ * Whether this deployment offers the provider at all.
131
+ *
132
+ * Cloud only offers the operator-designated providers with the endpoints the
133
+ * catalog names: a self-hosted `custom` endpoint or a local-daemon provider
134
+ * such as Ollama is a Local-only capability, because there the user owns the
135
+ * endpoint.
136
+ */
137
+ isProvidedInDeployment(provider, deployment) {
138
+ if (deployment !== 'cloud') {
139
+ return true;
140
+ }
141
+ const providerId = normalizeProviderId(provider);
142
+ if (!providerId || providerId === 'custom') {
143
+ return false;
144
+ }
145
+ if (!this.providers.has(providerId)) {
146
+ return false;
147
+ }
148
+ return this.products.get(providerId)?.offerings.some((offering) => offering.kind !== 'local') === true;
149
+ }
150
+ listProvidedProviders(deployment) {
151
+ return this.listProviders().filter((provider) => this.isProvidedInDeployment(provider.id, deployment));
152
+ }
153
+ /**
154
+ * Embedding models this catalog provides for a provider. This is the authority
155
+ * for embedding model policy; anything absent is not provided by the gateway.
156
+ */
157
+ listManagedEmbeddingModels(provider) {
158
+ const providerId = this.resolveManagedProviderId(provider);
159
+ const descriptor = providerId ? this.providers.get(providerId) : undefined;
160
+ if (!descriptor) {
161
+ return [];
162
+ }
163
+ return descriptor.models.filter((model) => model.capabilities?.embedding === true);
164
+ }
165
+ isManagedEmbeddingModel(provider, modelId) {
166
+ const model = normalizeKey(modelId);
167
+ if (!model) {
168
+ return false;
169
+ }
170
+ return this.listManagedEmbeddingModels(provider).some((candidate) => normalizeKey(candidate.id) === model
171
+ || (candidate.aliases ?? []).some((alias) => normalizeKey(alias) === model));
172
+ }
80
173
  getProduct(product) {
81
174
  const normalized = normalizeProviderId(product);
82
175
  return this.products.get(normalized) ?? this.productByRuntimeProvider.get(normalized);
@@ -103,6 +196,24 @@ class ProviderRegistry {
103
196
  resolveAlias(model) {
104
197
  return this.aliases.get(normalizeKey(model));
105
198
  }
199
+ /**
200
+ * Catalog descriptor for one model of one provider, matched by id or alias.
201
+ *
202
+ * Provider vocabularies differ between the Pod configuration and the catalog,
203
+ * so the runtime id is resolved through the same alias table the model-policy
204
+ * checks use. An unknown provider stays unresolved rather than falling back to
205
+ * another provider's catalog entry.
206
+ */
207
+ getModelDescriptor(provider, modelId) {
208
+ const providerId = this.resolveManagedProviderId(provider);
209
+ const descriptor = providerId ? this.providers.get(providerId) : undefined;
210
+ const normalizedModel = normalizeKey(modelId);
211
+ if (!descriptor || !normalizedModel) {
212
+ return undefined;
213
+ }
214
+ return descriptor.models.find((candidate) => normalizeKey(candidate.id) === normalizedModel
215
+ || (candidate.aliases ?? []).some((alias) => normalizeKey(alias) === normalizedModel));
216
+ }
106
217
  findModel(model) {
107
218
  const normalizedModel = normalizeKey(model);
108
219
  const matches = [];
@@ -134,6 +245,27 @@ exports.ProviderRegistry = ProviderRegistry;
134
245
  function createDefaultProviderRegistry(options = {}) {
135
246
  return new ProviderRegistry(exports.DEFAULT_PROVIDER_DESCRIPTORS, options);
136
247
  }
248
+ /**
249
+ * An offering's own connect entry, narrowed to the server's descriptor type.
250
+ * The catalog owns the declaration (id, mode, label); this deployment only says
251
+ * whether the offering it belongs to is usable at all, the same way the derived
252
+ * api-key entry does.
253
+ */
254
+ function catalogAuthorizationMethod(method, offeringLifecycle) {
255
+ const connectMode = method.connectMode === 'browserAssistedApiKey'
256
+ || method.connectMode === 'deviceCodeOAuth'
257
+ || method.connectMode === 'authorizationCodeOAuth'
258
+ ? method.connectMode
259
+ : undefined;
260
+ return {
261
+ id: method.id,
262
+ authMode: method.authMode,
263
+ ...(connectMode ? { connectMode } : {}),
264
+ label: method.label,
265
+ lifecycle: offeringLifecycle === 'unavailable' ? 'unavailable' : method.lifecycle ?? 'active',
266
+ ...(method.reason ? { reason: method.reason } : {}),
267
+ };
268
+ }
137
269
  function providerProductsForDeployment(deployment) {
138
270
  return exports.DEFAULT_PROVIDER_PRODUCT_DESCRIPTORS.map((product) => ({
139
271
  ...product,
@@ -141,10 +273,7 @@ function providerProductsForDeployment(deployment) {
141
273
  const binding = OfferingAuthorization_1.SUBSCRIPTION_AUTHORIZATION_BINDINGS.find((candidate) => candidate.provider === product.id && candidate.offeringId === offering.id);
142
274
  const authorizationMethods = [];
143
275
  if (offering.authModes.includes('apiKey')) {
144
- authorizationMethods.push({
145
- id: 'api-key', authMode: 'apiKey', label: '添加 API Key',
146
- lifecycle: offering.lifecycle === 'unavailable' ? 'unavailable' : 'active',
147
- });
276
+ authorizationMethods.push(catalogAuthorizationMethod(provider_catalog_1.API_KEY_METHOD, offering.lifecycle));
148
277
  }
149
278
  if (binding) {
150
279
  authorizationMethods.push(...(0, OfferingAuthorization_1.subscriptionAuthorizationMethods)(deployment, binding));
@@ -155,11 +284,20 @@ function providerProductsForDeployment(deployment) {
155
284
  lifecycle: offering.lifecycle === 'unavailable' ? 'unavailable' : 'active',
156
285
  });
157
286
  }
158
- else if (offering.authModes.some((mode) => mode === 'oauth' || mode === 'deviceCode')) {
159
- authorizationMethods.push({
160
- id: 'device-code', authMode: 'deviceCode', connectMode: 'deviceCodeOAuth',
161
- label: '浏览器登录', lifecycle: 'unavailable', reason: '此授权方式尚未接入。',
162
- });
287
+ // An oauth/deviceCode mode with no integration binding is a capability this
288
+ // build has not implemented, and it is omitted rather than published as a
289
+ // disabled entry: a button that cannot be pressed together with an internal
290
+ // reason is noise, and the offering's own lifecycle already says it is not
291
+ // available here. Entries that are merely unavailable in this deployment
292
+ // (cloud without a local callback, cloud without session import) come from
293
+ // the binding above and keep their place and their reason.
294
+ //
295
+ // The catalog's own connect entries, such as the browser-assisted console
296
+ // login, supplement the derived ones instead of replacing them.
297
+ for (const declared of offering.authorizationMethods ?? []) {
298
+ if (authorizationMethods.some((method) => method.id === declared.id))
299
+ continue;
300
+ authorizationMethods.push(catalogAuthorizationMethod(declared, offering.lifecycle));
163
301
  }
164
302
  return {
165
303
  ...offering,
@@ -181,7 +319,7 @@ function providerProductsForDeployment(deployment) {
181
319
  }),
182
320
  }));
183
321
  }
184
- function catalogOffering(productLabel, input) {
322
+ function catalogOffering(productId, productLabel, input) {
185
323
  const consoleUrl = input.consoleUrl ?? input.subscriptionUrl;
186
324
  if (!consoleUrl)
187
325
  throw new Error(`Provider offering "${input.id}" requires a console URL`);
@@ -260,12 +398,20 @@ const PROVIDER_UPSTREAM_OVERRIDES = {
260
398
  openai: {
261
399
  'official-subscription': [
262
400
  { capability: 'models', protocol: 'codex-models' },
263
- { capability: 'quota', protocol: 'rolling-quota-windows', options: { profile: 'codex' } },
401
+ {
402
+ capability: 'quota',
403
+ protocol: 'rolling-quota-windows',
404
+ options: { profile: 'codex', credentialAuthModes: ['deviceCodeOAuth'] },
405
+ },
264
406
  ],
265
407
  },
266
408
  anthropic: {
267
409
  'official-subscription': [
268
- { capability: 'quota', protocol: 'rolling-quota-windows', options: { profile: 'claude-code' } },
410
+ {
411
+ capability: 'quota',
412
+ protocol: 'rolling-quota-windows',
413
+ options: { profile: 'claude-code', credentialAuthModes: ['deviceCodeOAuth'] },
414
+ },
269
415
  ],
270
416
  },
271
417
  kimi: {
@@ -273,7 +419,23 @@ const PROVIDER_UPSTREAM_OVERRIDES = {
273
419
  { capability: 'models', protocol: 'openai-models', options: { path: '/models', endpointProtocol: 'chatCompletions' } },
274
420
  { capability: 'inference', protocol: 'chatCompletions', options: { baseUrl: 'https://api.kimi.com/coding/v1' } },
275
421
  { capability: 'inference', protocol: 'anthropic', options: { baseUrl: 'https://api.kimi.com/coding/' } },
276
- { capability: 'quota', protocol: 'rolling-quota-windows', options: { profile: 'kimi-code' } },
422
+ {
423
+ capability: 'quota',
424
+ protocol: 'rolling-quota-windows',
425
+ options: { profile: 'kimi-code', credentialAuthModes: ['apiKey', 'deviceCodeOAuth'] },
426
+ },
427
+ ],
428
+ // MIGRATION WINDOW: Kimi credentials written before the offering rename name
429
+ // the coding-plan quota by the generic subscription id, and only ever hold a
430
+ // device-code token. The declaration owns both facts so the quota handler
431
+ // never has to compare offering ids itself; delete this row once no stored
432
+ // credential carries the old id.
433
+ 'official-subscription': [
434
+ {
435
+ capability: 'quota',
436
+ protocol: 'rolling-quota-windows',
437
+ options: { profile: 'kimi-code', credentialAuthModes: ['deviceCodeOAuth'] },
438
+ },
277
439
  ],
278
440
  'api-platform': [
279
441
  { capability: 'models', protocol: 'openai-models', options: { path: '/models', endpointProtocol: 'chatCompletions' } },
@@ -289,6 +451,40 @@ const PROVIDER_UPSTREAM_OVERRIDES = {
289
451
  ],
290
452
  },
291
453
  };
454
+ /**
455
+ * Whether one declared upstream capability assigns a protocol+profile to a
456
+ * product offering under the credential kind that would use it.
457
+ *
458
+ * `PROVIDER_UPSTREAM_OVERRIDES` is the axis's single authority for the
459
+ * offering→capability mapping and `QuotaCapabilityRegistry` dispatches handlers
460
+ * from the protocol+profile declared here. A handler that needs to know whether
461
+ * an offering is its own asks the declaration instead of comparing offering id
462
+ * literals in `supports()`, which would be a second copy of this table.
463
+ *
464
+ * A capability may narrow itself to the credential auth modes it serves
465
+ * (`options.credentialAuthModes`); without that option every credential kind the
466
+ * Offering publishes is served. When the declaration narrows the kinds and the
467
+ * caller does not know the credential kind, the offering cannot be claimed.
468
+ */
469
+ function offeringDeclaresUpstreamCapability(product, offeringId, capability, credentialAuthMode) {
470
+ if (!offeringId) {
471
+ return false;
472
+ }
473
+ const declared = PROVIDER_UPSTREAM_OVERRIDES[normalizeProviderId(product)]?.[offeringId];
474
+ return declared?.some((candidate) => {
475
+ if (candidate.protocol !== capability.protocol) {
476
+ return false;
477
+ }
478
+ if (capability.profile !== undefined && candidate.options?.profile !== capability.profile) {
479
+ return false;
480
+ }
481
+ const credentialAuthModes = candidate.options?.credentialAuthModes;
482
+ if (!Array.isArray(credentialAuthModes)) {
483
+ return true;
484
+ }
485
+ return credentialAuthMode !== undefined && credentialAuthModes.includes(credentialAuthMode);
486
+ }) ?? false;
487
+ }
292
488
  function offeringsForProduct(provider) {
293
489
  if (provider === 'custom')
294
490
  return provider_catalog_1.CUSTOM_DEFAULT_OFFERINGS;
@@ -301,7 +497,7 @@ const LEGACY_PROVIDER_PRODUCT_DESCRIPTORS = Object.keys(PROVIDER_PRODUCT_LABELS)
301
497
  // The shared catalog is the source of the offering content; the server's
302
498
  // descriptor type narrows the same fields, so the projection converts at
303
499
  // this boundary rather than duplicating the values.
304
- catalogOffering(PROVIDER_PRODUCT_LABELS[provider], {
500
+ catalogOffering(provider, PROVIDER_PRODUCT_LABELS[provider], {
305
501
  ...offering,
306
502
  endpoints: offering.endpoints ?? [],
307
503
  ...(PROVIDER_UPSTREAM_OVERRIDES[provider]?.[offering.id]
@@ -309,10 +505,6 @@ const LEGACY_PROVIDER_PRODUCT_DESCRIPTORS = Object.keys(PROVIDER_PRODUCT_LABELS)
309
505
  : {}),
310
506
  })),
311
507
  }));
312
- const CANONICAL_PROVIDER_SLUGS = {
313
- kimi: 'moonshot',
314
- bailian: 'qwen',
315
- };
316
508
  /**
317
509
  * The provider/offering catalog belongs to `@undefineds.co/ai-connections`: it
318
510
  * is content rather than schema, and it carries endpoints, console links and
@@ -324,7 +516,7 @@ exports.DEFAULT_PROVIDER_PRODUCT_DESCRIPTORS = canonicalProviderProducts(LEGACY_
324
516
  .map(normalizeOpenAiSubscriptionProduct);
325
517
  function canonicalProviderProducts(legacy) {
326
518
  return legacy.map((fallback) => {
327
- const canonicalSlug = CANONICAL_PROVIDER_SLUGS[fallback.id] ?? fallback.id;
519
+ const canonicalSlug = discoveryProviderSlug(fallback.id);
328
520
  const provider = (0, models_1.getBuiltinProvider)(canonicalSlug);
329
521
  if (!provider?.offerings?.length)
330
522
  return fallback;
@@ -398,6 +590,9 @@ function canonicalOfferingDescriptor(provider, offering, fallback) {
398
590
  productLabel: offering.productLabel ?? provider.displayName,
399
591
  kind: offering.kind,
400
592
  authModes: offering.authModes,
593
+ // The canonical source carries schema, not actions: which connect entries an
594
+ // offering declares stays with the catalog that declared them.
595
+ ...(fallback?.authorizationMethods ? { authorizationMethods: fallback.authorizationMethods } : {}),
401
596
  auth: fallback?.auth ?? defaultAuthCapabilities(offering.kind, offering.authModes),
402
597
  upstream: fallback?.upstream ?? defaultUpstreamCapabilities(endpoints, modelDiscovery, quota),
403
598
  endpoints,
@@ -444,6 +639,8 @@ exports.DEFAULT_PROVIDER_DESCRIPTORS = [
444
639
  models: [
445
640
  { id: 'gpt-5', contextWindow: 400_000, capabilities: { toolCalls: true, reasoningEffort: true, imageInput: true } },
446
641
  { id: 'gpt-4.1', capabilities: { toolCalls: true, imageInput: true } },
642
+ embeddingModel('text-embedding-3-small', 1536),
643
+ embeddingModel('text-embedding-3-large', 3072),
447
644
  ],
448
645
  },
449
646
  {
@@ -525,6 +722,8 @@ exports.DEFAULT_PROVIDER_DESCRIPTORS = [
525
722
  models: [
526
723
  { id: 'qwen-max', capabilities: { toolCalls: true, imageInput: true } },
527
724
  { id: 'qwen-coder-plus', capabilities: { toolCalls: true } },
725
+ // The DashScope-compatible endpoint the default embedding profile uses.
726
+ embeddingModel(defaultEmbeddingProfile_1.DEFAULT_EMBEDDING_MODEL_ID, 1024),
528
727
  ],
529
728
  },
530
729
  {
@@ -550,6 +749,15 @@ exports.DEFAULT_PROVIDER_DESCRIPTORS = [
550
749
  { id: 'deepseek-chat', capabilities: { toolCalls: true } },
551
750
  { id: 'deepseek-reasoner', capabilities: { toolCalls: true, reasoningEffort: true } },
552
751
  { id: 'deepseek-flash', capabilities: { toolCalls: true, reasoningEffort: true } },
752
+ // models.dev lists this model under the third-party aggregators that serve
753
+ // it, not under the first-party DeepSeek entry, so the catalog seeds it
754
+ // here. `fast` is a curated tier claim, not a measurement.
755
+ {
756
+ id: 'deepseek-v4.1-flash',
757
+ contextWindow: 1_048_576,
758
+ inputModalities: ['text', 'image'],
759
+ capabilities: { toolCalls: true, reasoningEffort: true, imageInput: true, fast: true },
760
+ },
553
761
  { id: 'deepseek-v4-flash', capabilities: { toolCalls: true, reasoningEffort: true } },
554
762
  { id: 'deepseek-v4-pro', capabilities: { toolCalls: true, reasoningEffort: true } },
555
763
  ],
@@ -580,6 +788,7 @@ exports.DEFAULT_PROVIDER_DESCRIPTORS = [
580
788
  models: [
581
789
  { id: 'glm-4.5', capabilities: { toolCalls: true, reasoningEffort: true } },
582
790
  { id: 'glm-4.5-air', capabilities: { toolCalls: true, reasoningEffort: true } },
791
+ embeddingModel('embedding-2', 1024),
583
792
  ],
584
793
  },
585
794
  {
@@ -599,7 +808,9 @@ exports.DEFAULT_PROVIDER_DESCRIPTORS = [
599
808
  capabilities: {
600
809
  toolCalls: true,
601
810
  },
602
- models: [],
811
+ models: [
812
+ embeddingModel('nomic-embed-text', 768),
813
+ ],
603
814
  },
604
815
  {
605
816
  id: 'custom',
@@ -623,6 +834,18 @@ exports.DEFAULT_PROVIDER_DESCRIPTORS = [
623
834
  models: [],
624
835
  },
625
836
  ];
837
+ /**
838
+ * Registers an embedding model in the provided catalog. Embedding models exist
839
+ * here (not in the chat lists) so that provider/model capability and the
840
+ * deployment embedding policy read from one source.
841
+ */
842
+ function embeddingModel(id, dimension) {
843
+ return {
844
+ id,
845
+ capabilities: { embedding: true },
846
+ metadata: { modelType: 'embedding', dimension },
847
+ };
848
+ }
626
849
  function mergeModelDescriptor(existing, discovered, provider) {
627
850
  return {
628
851
  ...existing,
@@ -4,6 +4,11 @@ import type { ProviderRuntimeAdapter } from './ProviderRuntimeAdapter';
4
4
  export interface ProviderRuntimeRegistryOptions {
5
5
  registry?: ProviderRegistry;
6
6
  transport?: ProviderHttpTransport;
7
+ /**
8
+ * Whether a credential may supply its own base URL. Only a Local deployment
9
+ * may; Cloud resolves every provider against the catalog endpoint.
10
+ */
11
+ allowCredentialBaseUrl?: boolean;
7
12
  }
8
13
  export declare class ProviderRuntimeRegistry {
9
14
  private readonly adapters;
@@ -60,7 +60,11 @@ class ProviderRuntimeRegistry {
60
60
  allowToolChoiceRequired: true,
61
61
  }));
62
62
  const custom = registry.requireProvider('custom');
63
- this.adapters.set('custom', new CustomRuntimeAdapter_1.CustomRuntimeAdapter({ transport, descriptor: custom }));
63
+ this.adapters.set('custom', new CustomRuntimeAdapter_1.CustomRuntimeAdapter({
64
+ transport,
65
+ descriptor: custom,
66
+ allowCredentialBaseUrl: options.allowCredentialBaseUrl,
67
+ }));
64
68
  }
65
69
  get(provider) {
66
70
  const adapter = this.adapters.get((0, ProviderRegistry_1.normalizeProviderId)(provider));
@@ -6,10 +6,21 @@ interface SubscriptionQuotaAdapterOptions {
6
6
  }
7
7
  declare abstract class SubscriptionQuotaAdapter implements ProviderQuotaAdapter {
8
8
  abstract readonly provider: string;
9
+ abstract readonly capability: {
10
+ protocol: string;
11
+ profile?: string;
12
+ };
9
13
  protected readonly fetchFn: typeof fetch;
10
14
  protected readonly transport?: ProviderHttpTransport;
11
15
  constructor(options?: SubscriptionQuotaAdapterOptions);
12
- abstract supports(credential: QuotaCredentialRecord): boolean;
16
+ /**
17
+ * Whether the credential's Offering is one the runtime declaration assigns
18
+ * this handler's quota capability to, under the credential kind it holds. The
19
+ * declaration is the axis's single authority for offering→capability, so the
20
+ * handler asks it instead of re-typing the offering ids and auth modes it was
21
+ * bound to.
22
+ */
23
+ supports(credential: QuotaCredentialRecord): boolean;
13
24
  abstract fetch(input: ProviderQuotaFetchInput): Promise<NormalizedQuotaSnapshot>;
14
25
  protected snapshot(input: ProviderQuotaFetchInput, source: string, windows: QuotaWindow[]): NormalizedQuotaSnapshot;
15
26
  protected error(input: ProviderQuotaFetchInput, source: string, status?: number, retryAfter?: string | null): NormalizedQuotaSnapshot;
@@ -20,7 +31,6 @@ export declare class CodexSubscriptionQuotaAdapter extends SubscriptionQuotaAdap
20
31
  readonly protocol: "rolling-quota-windows";
21
32
  readonly profile: "codex";
22
33
  };
23
- supports(credential: QuotaCredentialRecord): boolean;
24
34
  fetch(input: ProviderQuotaFetchInput): Promise<NormalizedQuotaSnapshot>;
25
35
  }
26
36
  export declare class ClaudeSubscriptionQuotaAdapter extends SubscriptionQuotaAdapter {
@@ -29,7 +39,6 @@ export declare class ClaudeSubscriptionQuotaAdapter extends SubscriptionQuotaAda
29
39
  readonly protocol: "rolling-quota-windows";
30
40
  readonly profile: "claude-code";
31
41
  };
32
- supports(credential: QuotaCredentialRecord): boolean;
33
42
  fetch(input: ProviderQuotaFetchInput): Promise<NormalizedQuotaSnapshot>;
34
43
  }
35
44
  export declare class KimiCodeSubscriptionQuotaAdapter extends SubscriptionQuotaAdapter {
@@ -38,7 +47,6 @@ export declare class KimiCodeSubscriptionQuotaAdapter extends SubscriptionQuotaA
38
47
  readonly protocol: "rolling-quota-windows";
39
48
  readonly profile: "kimi-code";
40
49
  };
41
- supports(credential: QuotaCredentialRecord): boolean;
42
50
  fetch(input: ProviderQuotaFetchInput): Promise<NormalizedQuotaSnapshot>;
43
51
  }
44
52
  export {};
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.KimiCodeSubscriptionQuotaAdapter = exports.ClaudeSubscriptionQuotaAdapter = exports.CodexSubscriptionQuotaAdapter = void 0;
4
+ const ProviderRegistry_1 = require("../providers/ProviderRegistry");
4
5
  const ProviderQuotaAdapter_1 = require("./ProviderQuotaAdapter");
5
6
  const CODEX_USAGE_URL = 'https://chatgpt.com/backend-api/wham/usage';
6
7
  const CLAUDE_USAGE_URL = 'https://api.anthropic.com/api/oauth/usage';
@@ -11,6 +12,16 @@ class SubscriptionQuotaAdapter {
11
12
  this.fetchFn = options.fetch ?? fetch;
12
13
  this.transport = options.transport;
13
14
  }
15
+ /**
16
+ * Whether the credential's Offering is one the runtime declaration assigns
17
+ * this handler's quota capability to, under the credential kind it holds. The
18
+ * declaration is the axis's single authority for offering→capability, so the
19
+ * handler asks it instead of re-typing the offering ids and auth modes it was
20
+ * bound to.
21
+ */
22
+ supports(credential) {
23
+ return (0, ProviderRegistry_1.offeringDeclaresUpstreamCapability)(credential.provider, credential.offeringId, this.capability, credential.authMode);
24
+ }
14
25
  snapshot(input, source, windows) {
15
26
  return {
16
27
  credential: input.credential.credentialIri,
@@ -38,9 +49,6 @@ class CodexSubscriptionQuotaAdapter extends SubscriptionQuotaAdapter {
38
49
  this.provider = 'openai';
39
50
  this.capability = { protocol: 'rolling-quota-windows', profile: 'codex' };
40
51
  }
41
- supports(credential) {
42
- return credential.offeringId === 'official-subscription' && credential.authMode === 'deviceCodeOAuth';
43
- }
44
52
  async fetch(input) {
45
53
  const token = bearerFromSecret(input.secret);
46
54
  if (!token)
@@ -62,9 +70,6 @@ class ClaudeSubscriptionQuotaAdapter extends SubscriptionQuotaAdapter {
62
70
  this.provider = 'anthropic';
63
71
  this.capability = { protocol: 'rolling-quota-windows', profile: 'claude-code' };
64
72
  }
65
- supports(credential) {
66
- return credential.offeringId === 'official-subscription' && credential.authMode === 'deviceCodeOAuth';
67
- }
68
73
  async fetch(input) {
69
74
  const token = bearerFromSecret(input.secret);
70
75
  if (!token)
@@ -86,11 +91,6 @@ class KimiCodeSubscriptionQuotaAdapter extends SubscriptionQuotaAdapter {
86
91
  this.provider = 'kimi';
87
92
  this.capability = { protocol: 'rolling-quota-windows', profile: 'kimi-code' };
88
93
  }
89
- supports(credential) {
90
- return (credential.offeringId === 'official-subscription' && credential.authMode === 'deviceCodeOAuth')
91
- || (credential.offeringId === 'subscription-key'
92
- && (credential.authMode === 'apiKey' || credential.authMode === 'deviceCodeOAuth'));
93
- }
94
94
  async fetch(input) {
95
95
  const token = bearerFromSecret(input.secret);
96
96
  if (!token)
@@ -3,6 +3,7 @@ import { type ProviderAuthMode, type ProviderCapabilities, type ProviderDescript
3
3
  import { type SessionAffinityStore } from './SessionAffinityStore';
4
4
  import type { AuthContext } from '../../auth/AuthContext';
5
5
  import type { GatewayProtocol } from '../types';
6
+ import { EmbeddingModelPolicy } from '../../../ai/service/EmbeddingModelPolicy';
6
7
  export type GatewayCredentialHealth = 'healthy' | 'reauthRequired' | 'disabled' | 'error' | 'invalid' | 'unknown';
7
8
  export type GatewayQuotaStatus = 'available' | 'unsupported' | 'exhausted' | 'error';
8
9
  export type ModelRouteSource = 'alias' | 'explicit-provider' | 'exact-model' | 'default-provider' | 'default-model';
@@ -14,6 +15,8 @@ export interface GatewayCredentialCandidate {
14
15
  enabled: boolean;
15
16
  priority?: number;
16
17
  models?: string[];
18
+ /** Display names the Pod recorded for `models`, keyed by model id. */
19
+ modelNames?: Record<string, string>;
17
20
  customModels?: CustomProviderModel[];
18
21
  defaultModel?: string;
19
22
  health?: GatewayCredentialHealth;
@@ -35,6 +38,8 @@ export interface ModelRouterOptions {
35
38
  selectionRepository?: GatewayModelSelectionRepository;
36
39
  defaultProvider?: string;
37
40
  defaultModel?: string;
41
+ /** Deployment policy for embedding models; defaults to allow-all (Local). */
42
+ embeddingModelPolicy?: EmbeddingModelPolicy;
38
43
  now?: () => Date;
39
44
  }
40
45
  export interface GatewayModelSelection {
@@ -43,6 +48,7 @@ export interface GatewayModelSelection {
43
48
  id: string;
44
49
  modelType?: string;
45
50
  status?: 'active' | 'inactive';
51
+ displayName?: string;
46
52
  }>;
47
53
  version?: string;
48
54
  defaultModel?: string;
@@ -102,6 +108,7 @@ export declare class ModelRouter {
102
108
  private readonly selectionRepository?;
103
109
  private readonly defaultProvider?;
104
110
  private readonly defaultModel?;
111
+ private readonly embeddingModelPolicy;
105
112
  private readonly now;
106
113
  constructor(options: ModelRouterOptions);
107
114
  route(input: ModelRouteInput, excludeCredentialIds?: ReadonlySet<string>): Promise<ModelRouteResult>;
@@ -133,4 +140,11 @@ export declare class ModelRouter {
133
140
  private routeProviderIdForCredential;
134
141
  private credentialVisibleModels;
135
142
  private isCredentialModelVisible;
143
+ /**
144
+ * A Pod can declare any capability on a custom model. Embedding is the one
145
+ * capability a deployment gates through its own catalog, so never advertise an
146
+ * embedding model the catalog does not provide. Other declared capabilities
147
+ * keep their existing behavior.
148
+ */
149
+ private visibleCustomCapabilities;
136
150
  }