@undefineds.co/xpod 0.4.11 → 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 (372) 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/chatkit/pod-store.d.ts +31 -0
  52. package/dist/api/chatkit/pod-store.js +132 -8
  53. package/dist/api/container/common.js +24 -4
  54. package/dist/api/container/routes.js +17 -2
  55. package/dist/api/container/types.d.ts +3 -1
  56. package/dist/api/handlers/AdminHandler.d.ts +13 -0
  57. package/dist/api/handlers/AdminHandler.js +47 -18
  58. package/dist/api/handlers/AiConfigHandler.d.ts +6 -0
  59. package/dist/api/handlers/AiConfigHandler.js +28 -0
  60. package/dist/api/handlers/AiGatewayManagementHandler.js +36 -0
  61. package/dist/api/runs/RdfRunContextRetriever.d.ts +14 -0
  62. package/dist/api/runs/RdfRunContextRetriever.js +41 -5
  63. package/dist/api/runtime.js +2 -1
  64. package/dist/cli/commands/secret.d.ts +1 -0
  65. package/dist/cli/commands/secret.js +25 -7
  66. package/dist/components/components.jsonld +3 -1
  67. package/dist/components/context.jsonld +53 -1
  68. package/dist/http/SubgraphSparqlHttpHandler.d.ts +59 -2
  69. package/dist/http/SubgraphSparqlHttpHandler.js +145 -13
  70. package/dist/http/SubgraphSparqlHttpHandler.jsonld +37 -0
  71. package/dist/identity/drizzle/EdgeNodeRepository.d.ts +0 -12
  72. package/dist/identity/drizzle/EdgeNodeRepository.js +5 -13
  73. package/dist/index.d.ts +2 -1
  74. package/dist/index.js +7 -3
  75. package/dist/logging/log-file.d.ts +17 -0
  76. package/dist/logging/log-file.js +69 -0
  77. package/dist/main.js +2 -1
  78. package/dist/notifications/NotificationChannelSweeper.d.ts +50 -0
  79. package/dist/notifications/NotificationChannelSweeper.js +131 -0
  80. package/dist/notifications/NotificationChannelSweeper.jsonld +136 -0
  81. package/dist/notifications/ReclaimingWebSocket2023Storer.d.ts +25 -0
  82. package/dist/notifications/ReclaimingWebSocket2023Storer.js +56 -0
  83. package/dist/notifications/ReclaimingWebSocket2023Storer.jsonld +77 -0
  84. package/dist/notifications/index.d.ts +2 -0
  85. package/dist/notifications/index.js +2 -0
  86. package/dist/runtime/Proxy.d.ts +37 -0
  87. package/dist/runtime/Proxy.js +88 -16
  88. package/dist/runtime/bootstrap.js +2 -1
  89. package/dist/runtime/upgrade/BunNativeUpgradeRelay.d.ts +116 -0
  90. package/dist/runtime/upgrade/BunNativeUpgradeRelay.js +423 -0
  91. package/dist/runtime/upgrade/UpgradeHandshake.d.ts +63 -0
  92. package/dist/runtime/upgrade/UpgradeHandshake.js +199 -0
  93. package/dist/runtime/upgrade/WebSocketFrames.d.ts +67 -0
  94. package/dist/runtime/upgrade/WebSocketFrames.js +224 -0
  95. package/node_modules/@undefineds.co/ai-connections/dist/AiApiKeyPool.js +8 -1
  96. package/node_modules/@undefineds.co/ai-connections/dist/AiAuthorizationActions.d.ts +11 -2
  97. package/node_modules/@undefineds.co/ai-connections/dist/AiAuthorizationActions.js +27 -10
  98. package/node_modules/@undefineds.co/ai-connections/dist/AiClientConfigurationSection.d.ts +7 -0
  99. package/node_modules/@undefineds.co/ai-connections/dist/AiClientConfigurationSection.js +13 -11
  100. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectDialog.js +1 -1
  101. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsList.js +10 -6
  102. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsMain.d.ts +15 -0
  103. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsMain.js +29 -3
  104. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsMainHeader.js +18 -3
  105. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsPanel.d.ts +16 -1
  106. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsPanel.js +92 -20
  107. package/node_modules/@undefineds.co/ai-connections/dist/AiCopyButton.d.ts +35 -0
  108. package/node_modules/@undefineds.co/ai-connections/dist/AiCopyButton.js +45 -0
  109. package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialPoolSection.js +71 -11
  110. package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialRow.js +9 -7
  111. package/node_modules/@undefineds.co/ai-connections/dist/AiEndpointList.d.ts +23 -0
  112. package/node_modules/@undefineds.co/ai-connections/dist/AiEndpointList.js +24 -0
  113. package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeysSection.d.ts +13 -4
  114. package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeysSection.js +35 -38
  115. package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayModelsSection.d.ts +21 -0
  116. package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayModelsSection.js +51 -0
  117. package/node_modules/@undefineds.co/ai-connections/dist/AiInfoTooltip.d.ts +15 -0
  118. package/node_modules/@undefineds.co/ai-connections/dist/AiInfoTooltip.js +16 -0
  119. package/node_modules/@undefineds.co/ai-connections/dist/AiModelCatalog.d.ts +175 -0
  120. package/node_modules/@undefineds.co/ai-connections/dist/AiModelCatalog.js +133 -0
  121. package/node_modules/@undefineds.co/ai-connections/dist/AiOfferingDetails.js +2 -2
  122. package/node_modules/@undefineds.co/ai-connections/dist/AiProviderCard.js +13 -64
  123. package/node_modules/@undefineds.co/ai-connections/dist/AiProviderHeader.d.ts +21 -0
  124. package/node_modules/@undefineds.co/ai-connections/dist/AiProviderHeader.js +12 -0
  125. package/node_modules/@undefineds.co/ai-connections/dist/AiRowAction.d.ts +15 -0
  126. package/node_modules/@undefineds.co/ai-connections/dist/AiRowAction.js +12 -0
  127. package/node_modules/@undefineds.co/ai-connections/dist/AiSortableCredentialList.js +2 -1
  128. package/node_modules/@undefineds.co/ai-connections/dist/ai-connections-client.d.ts +7 -0
  129. package/node_modules/@undefineds.co/ai-connections/dist/ai-connections-client.js +6 -0
  130. package/node_modules/@undefineds.co/ai-connections/dist/authorization-methods.d.ts +36 -5
  131. package/node_modules/@undefineds.co/ai-connections/dist/authorization-methods.js +52 -9
  132. package/node_modules/@undefineds.co/ai-connections/dist/client/normalize.js +30 -3
  133. package/node_modules/@undefineds.co/ai-connections/dist/client/types.d.ts +21 -1
  134. package/node_modules/@undefineds.co/ai-connections/dist/client-config/base-adapter.d.ts +1 -3
  135. package/node_modules/@undefineds.co/ai-connections/dist/client-config/base-adapter.js +3 -7
  136. package/node_modules/@undefineds.co/ai-connections/dist/client-config/index.cjs +9 -7
  137. package/node_modules/@undefineds.co/ai-connections/dist/collection-runtime.d.ts +46 -0
  138. package/node_modules/@undefineds.co/ai-connections/dist/collection-runtime.js +231 -0
  139. package/node_modules/@undefineds.co/ai-connections/dist/collections.d.ts +119 -0
  140. package/node_modules/@undefineds.co/ai-connections/dist/collections.js +173 -0
  141. package/node_modules/@undefineds.co/ai-connections/dist/controller.d.ts +71 -5
  142. package/node_modules/@undefineds.co/ai-connections/dist/controller.js +285 -16
  143. package/node_modules/@undefineds.co/ai-connections/dist/credential-labels.d.ts +5 -0
  144. package/node_modules/@undefineds.co/ai-connections/dist/credential-labels.js +8 -3
  145. package/node_modules/@undefineds.co/ai-connections/dist/credential-storage.d.ts +59 -0
  146. package/node_modules/@undefineds.co/ai-connections/dist/credential-storage.js +131 -0
  147. package/node_modules/@undefineds.co/ai-connections/dist/endpoint-urls.d.ts +15 -0
  148. package/node_modules/@undefineds.co/ai-connections/dist/endpoint-urls.js +20 -0
  149. package/node_modules/@undefineds.co/ai-connections/dist/gateway-endpoints.d.ts +14 -0
  150. package/node_modules/@undefineds.co/ai-connections/dist/gateway-endpoints.js +20 -0
  151. package/node_modules/@undefineds.co/ai-connections/dist/index.d.ts +8 -0
  152. package/node_modules/@undefineds.co/ai-connections/dist/index.js +8 -0
  153. package/node_modules/@undefineds.co/ai-connections/dist/manifest.js +1 -1
  154. package/node_modules/@undefineds.co/ai-connections/dist/offering-endpoints.d.ts +14 -0
  155. package/node_modules/@undefineds.co/ai-connections/dist/offering-endpoints.js +17 -0
  156. package/node_modules/@undefineds.co/ai-connections/dist/provider-catalog.cjs +68 -1
  157. package/node_modules/@undefineds.co/ai-connections/dist/provider-catalog.d.ts +75 -1
  158. package/node_modules/@undefineds.co/ai-connections/dist/provider-catalog.js +119 -0
  159. package/node_modules/@undefineds.co/ai-connections/dist/provider-visuals.d.ts +5 -0
  160. package/node_modules/@undefineds.co/ai-connections/dist/provider-visuals.js +5 -0
  161. package/node_modules/@undefineds.co/ai-connections/dist/service-access.js +2 -27
  162. package/node_modules/@undefineds.co/ai-connections/package.json +1 -0
  163. package/node_modules/@undefineds.co/extension-sdk/dist/manifest.d.ts +1 -1
  164. package/node_modules/@undefineds.co/extension-sdk/dist/manifest.js +2 -0
  165. package/node_modules/@undefineds.co/extension-sdk/dist/web.d.ts +150 -0
  166. package/node_modules/@undefineds.co/extension-sdk/package.json +2 -1
  167. package/node_modules/@undefineds.co/models/README.md +1 -1
  168. package/node_modules/@undefineds.co/models/dist/ai-config/index.d.ts +3 -3
  169. package/node_modules/@undefineds.co/models/dist/ai-gateway.schema.d.ts +5 -0
  170. package/node_modules/@undefineds.co/models/dist/ai-gateway.schema.js +9 -0
  171. package/node_modules/@undefineds.co/models/dist/ai-runtime.repository.d.ts +1 -1
  172. package/node_modules/@undefineds.co/models/dist/approval.repository.d.ts +2 -2
  173. package/node_modules/@undefineds.co/models/dist/audit.presentation.d.ts +2 -2
  174. package/node_modules/@undefineds.co/models/dist/capture.repository.d.ts +1 -1
  175. package/node_modules/@undefineds.co/models/dist/chat-project.repository.d.ts +1 -1
  176. package/node_modules/@undefineds.co/models/dist/chat.repository.d.ts +2 -2
  177. package/node_modules/@undefineds.co/models/dist/control-request.repository.d.ts +2 -2
  178. package/node_modules/@undefineds.co/models/dist/conversation-share.repository.d.ts +1 -1
  179. package/node_modules/@undefineds.co/models/dist/credential.schema.d.ts +12 -0
  180. package/node_modules/@undefineds.co/models/dist/credential.schema.js +15 -1
  181. package/node_modules/@undefineds.co/models/dist/discovery/index.d.ts +2 -2
  182. package/node_modules/@undefineds.co/models/dist/discovery/providers.json +248 -7
  183. package/node_modules/@undefineds.co/models/dist/discovery/types.d.ts +31 -0
  184. package/node_modules/@undefineds.co/models/dist/extension/index.d.ts +1 -1
  185. package/node_modules/@undefineds.co/models/dist/favorite/index.d.ts +2 -2
  186. package/node_modules/@undefineds.co/models/dist/fixtures/contracts-chat-contact.d.ts +5 -5
  187. package/node_modules/@undefineds.co/models/dist/import/index.d.ts +1 -1
  188. package/node_modules/@undefineds.co/models/dist/index.d.ts +73 -73
  189. package/node_modules/@undefineds.co/models/dist/index.js +1 -1
  190. package/node_modules/@undefineds.co/models/dist/input-request.repository.d.ts +2 -2
  191. package/node_modules/@undefineds.co/models/dist/knowledge/index.d.ts +1 -1
  192. package/node_modules/@undefineds.co/models/dist/message.repository.d.ts +1 -1
  193. package/node_modules/@undefineds.co/models/dist/namespaces.js +5 -0
  194. package/node_modules/@undefineds.co/models/dist/pod-storage-descriptor.d.ts +4815 -26
  195. package/node_modules/@undefineds.co/models/dist/pod-storage-descriptor.js +482 -132
  196. package/node_modules/@undefineds.co/models/dist/schema.d.ts +4 -0
  197. package/node_modules/@undefineds.co/models/dist/session/index.d.ts +1 -1
  198. package/node_modules/@undefineds.co/models/dist/settings/index.d.ts +1 -1
  199. package/node_modules/@undefineds.co/models/dist/sidecar/persistence-mapping.d.ts +5 -5
  200. package/node_modules/@undefineds.co/models/dist/thread.repository.d.ts +2 -2
  201. package/node_modules/@undefineds.co/models/dist/types/message-block.d.ts +1 -1
  202. package/node_modules/@undefineds.co/models/dist/vocab/_namespaces.d.ts +1 -1
  203. package/node_modules/@undefineds.co/models/dist/vocab/index.d.ts +10 -10
  204. package/node_modules/@undefineds.co/models/dist/vocab/sidecar.vocab.d.ts +1 -0
  205. package/node_modules/@undefineds.co/models/dist/vocab/sidecar.vocab.js +1 -0
  206. package/node_modules/@undefineds.co/models/package.json +4 -2
  207. package/node_modules/@undefineds.co/pod-collections/README.md +71 -0
  208. package/node_modules/@undefineds.co/pod-collections/dist/diff.d.ts +85 -0
  209. package/node_modules/@undefineds.co/pod-collections/dist/diff.js +166 -0
  210. package/node_modules/@undefineds.co/pod-collections/dist/feed.d.ts +17 -0
  211. package/node_modules/@undefineds.co/pod-collections/dist/feed.js +27 -0
  212. package/node_modules/@undefineds.co/pod-collections/dist/index.cjs +1042 -0
  213. package/node_modules/@undefineds.co/pod-collections/dist/index.d.ts +37 -0
  214. package/node_modules/@undefineds.co/pod-collections/dist/index.js +89 -0
  215. package/node_modules/@undefineds.co/pod-collections/dist/layout.d.ts +75 -0
  216. package/node_modules/@undefineds.co/pod-collections/dist/layout.js +173 -0
  217. package/node_modules/@undefineds.co/pod-collections/dist/mapping.d.ts +78 -0
  218. package/node_modules/@undefineds.co/pod-collections/dist/mapping.js +287 -0
  219. package/node_modules/@undefineds.co/pod-collections/dist/mutations.d.ts +83 -0
  220. package/node_modules/@undefineds.co/pod-collections/dist/mutations.js +273 -0
  221. package/node_modules/@undefineds.co/pod-collections/dist/react.d.ts +21 -0
  222. package/node_modules/@undefineds.co/pod-collections/dist/react.js +22 -0
  223. package/node_modules/@undefineds.co/pod-collections/dist/read.d.ts +65 -0
  224. package/node_modules/@undefineds.co/pod-collections/dist/read.js +31 -0
  225. package/node_modules/@undefineds.co/pod-collections/dist/sync.d.ts +66 -0
  226. package/node_modules/@undefineds.co/pod-collections/dist/sync.js +260 -0
  227. package/node_modules/@undefineds.co/pod-collections/dist/types.d.ts +155 -0
  228. package/node_modules/@undefineds.co/pod-collections/dist/types.js +9 -0
  229. package/node_modules/@undefineds.co/pod-collections/package.json +42 -0
  230. package/package.json +15 -7
  231. package/static/app/assets/main.css +1 -1
  232. package/static/auth-callback/assets/AiConfigContext-DnQs1ZpW.js +1 -0
  233. package/static/auth-callback/assets/AiConfigPage-DOtvlxH0.js +1 -0
  234. package/static/auth-callback/assets/DocumentProcessingPanel-BS2voQgL.js +1 -0
  235. package/static/auth-callback/assets/IndexLifecyclePanel-Cvt0cJtN.js +1 -0
  236. package/static/auth-callback/assets/{IndexSubjectPanel-BbUqop4b.js → IndexSubjectPanel-Dhf01GqF.js} +1 -1
  237. package/static/auth-callback/assets/ModelAssignmentsPanel-BJutWaAF.js +1 -0
  238. package/static/auth-callback/assets/ModelsPage-BRS0sje3.js +11 -0
  239. package/static/auth-callback/assets/{NetworkPage-Vp2PrMxs.js → NetworkPage-B3qBfANA.js} +2 -2
  240. package/static/auth-callback/assets/{PaneListHeader-DY7baSFl.js → PaneListHeader-QQeJGTp4.js} +1 -1
  241. package/static/auth-callback/assets/SearchIndexingPanel-MyNUSEwT.js +1 -0
  242. package/static/auth-callback/assets/{StatusSubjectPanel-ArIS-TxT.js → StatusSubjectPanel-DQkEVsFs.js} +1 -1
  243. package/static/{settings/assets/StatusWorkspace-CoMFRXoV.js → auth-callback/assets/StatusWorkspace-Dkv63Uwk.js} +1 -1
  244. package/static/auth-callback/assets/{SystemSettingsPage-BDvT1NUz.js → SystemSettingsPage-TIsUfX5d.js} +1 -1
  245. package/static/{dashboard/assets/SystemSettingsSubjectPanel-WaE8mTQi.js → auth-callback/assets/SystemSettingsSubjectPanel-BJWEt2-7.js} +5 -5
  246. package/static/auth-callback/assets/XpodAiConnectionsPodStore-BJiXm-PF.js +3 -0
  247. package/static/auth-callback/assets/{activity-D1Dsfa_0.js → activity-5hNeNKnL.js} +1 -1
  248. package/static/auth-callback/assets/ai-connections-CryuHGKW.js +1 -0
  249. package/static/auth-callback/assets/{auth-callback-Cmf4hXVZ.js → auth-callback-CAFZ3R0B.js} +6 -6
  250. package/static/auth-callback/assets/auth-callback-rk080mvG.css +1 -0
  251. package/static/auth-callback/assets/{badge-CZsHq3Ih.js → badge-CAIPI0CB.js} +1 -1
  252. package/static/auth-callback/assets/collection-runtime-D9s7h9YA.js +1 -0
  253. package/static/auth-callback/assets/dialog-BjA109aX.js +1 -0
  254. package/static/auth-callback/assets/{download-DU9ntlHw.js → download-B3Up5W2G.js} +1 -1
  255. package/static/auth-callback/assets/{external-link-BfzaaZDx.js → external-link-BTXgSPzB.js} +1 -1
  256. package/static/auth-callback/assets/index-BppXlxcp.js +41 -0
  257. package/static/auth-callback/assets/index-CirW4CJf.js +1 -0
  258. package/static/auth-callback/assets/index-DlLYWOhw.js +4 -0
  259. package/static/auth-callback/assets/{index-browser-BNFqqC74.js → index-browser-DtU38ni3.js} +1 -1
  260. package/static/auth-callback/assets/{key-round-BwP3DBWo.js → key-round-CQCOrZ7x.js} +1 -1
  261. package/static/auth-callback/assets/layout-DB3pMyTl.js +1 -0
  262. package/static/auth-callback/assets/pod-collections-host-KnnGFZHL.js +8 -0
  263. package/static/auth-callback/assets/{rotate-ccw-VMwnmyab.js → rotate-ccw-C1zM2KtS.js} +1 -1
  264. package/static/auth-callback/assets/{skeleton-CoD55rBT.js → skeleton-Cqp7_M9-.js} +1 -1
  265. package/static/auth-callback/assets/{waypoints-DRo_1Ca7.js → waypoints-Bj6gAUSQ.js} +1 -1
  266. package/static/auth-callback/assets/{workspace-layout--mcXl3My.js → workspace-layout-DK8mDzrY.js} +1 -1
  267. package/static/auth-callback/auth-callback.html +2 -2
  268. package/static/dashboard/assets/AiConfigContext-BsE7MqX8.js +1 -0
  269. package/static/dashboard/assets/AiConfigPage-DvM-lRXa.js +1 -0
  270. package/static/dashboard/assets/DocumentProcessingPanel-BPfdlfuf.js +1 -0
  271. package/static/dashboard/assets/IndexLifecyclePanel--m0AGxvh.js +1 -0
  272. package/static/dashboard/assets/{IndexSubjectPanel-B2cXwl8X.js → IndexSubjectPanel-Bb7m1k3d.js} +1 -1
  273. package/static/dashboard/assets/ModelAssignmentsPanel-BLi_zbMa.js +1 -0
  274. package/static/dashboard/assets/ModelsPage-CxdpgnfR.js +11 -0
  275. package/static/dashboard/assets/{NetworkPage-DV2V0qWO.js → NetworkPage-BAIPw-D_.js} +2 -2
  276. package/static/dashboard/assets/{PaneListHeader-D0c1yCFH.js → PaneListHeader-BBCMei0r.js} +1 -1
  277. package/static/dashboard/assets/SearchIndexingPanel-Ck4Y-xjR.js +1 -0
  278. package/static/dashboard/assets/{StatusSubjectPanel-oPSECj7i.js → StatusSubjectPanel-D1KWfAXE.js} +1 -1
  279. package/static/dashboard/assets/{StatusWorkspace-PdovQPKa.js → StatusWorkspace-JbA5gzXx.js} +1 -1
  280. package/static/dashboard/assets/{SystemSettingsPage-CtNDklkx.js → SystemSettingsPage-BbwQWsSR.js} +1 -1
  281. package/static/{settings/assets/SystemSettingsSubjectPanel-DExjDo_v.js → dashboard/assets/SystemSettingsSubjectPanel-N117nMt5.js} +5 -5
  282. package/static/dashboard/assets/XpodAiConnectionsPodStore-CdDOb4SV.js +18 -0
  283. package/static/dashboard/assets/{activity-B9ylSoyr.js → activity-DX1I96o_.js} +1 -1
  284. package/static/dashboard/assets/ai-connections-DwCRqOQa.js +1 -0
  285. package/static/dashboard/assets/{badge-BNbFbpIb.js → badge-k2vhtDqH.js} +1 -1
  286. package/static/dashboard/assets/collection-runtime-BFQ8teQJ.js +1 -0
  287. package/static/dashboard/assets/{dashboard-CD-FFVRD.js → dashboard-DWZ-fmCT.js} +4 -4
  288. package/static/dashboard/assets/dashboard-rk080mvG.css +1 -0
  289. package/static/dashboard/assets/dialog-1CCw-iHT.js +1 -0
  290. package/static/dashboard/assets/{download-nOP38LtW.js → download-C6-SNY1q.js} +1 -1
  291. package/static/dashboard/assets/{external-link-Bh2ewN9E.js → external-link-BgPcZ_j2.js} +1 -1
  292. package/static/dashboard/assets/index-6LcIUIYO.js +1 -0
  293. package/static/dashboard/assets/index-D7A8U6Pt.js +41 -0
  294. package/static/dashboard/assets/index-UD6QOE7H.js +4 -0
  295. package/static/dashboard/assets/{key-round-bGmguBLv.js → key-round-BOd7Jo0Q.js} +1 -1
  296. package/static/dashboard/assets/layout-DB3pMyTl.js +1 -0
  297. package/static/dashboard/assets/pod-collections-host-KnnGFZHL.js +8 -0
  298. package/static/dashboard/assets/{rotate-ccw-D2x__ODW.js → rotate-ccw-CCgJqsvx.js} +1 -1
  299. package/static/dashboard/assets/{skeleton-VOqft8WS.js → skeleton-Bc7abAn5.js} +1 -1
  300. package/static/dashboard/assets/{waypoints-fgRqm4oH.js → waypoints-s-opmJxx.js} +1 -1
  301. package/static/dashboard/assets/{workspace-layout-DV4dgeHX.js → workspace-layout-DqIQeTBV.js} +1 -1
  302. package/static/dashboard/dashboard.html +2 -2
  303. package/static/settings/assets/AiConfigContext-BB9KZySa.js +1 -0
  304. package/static/settings/assets/AiConfigPage-DGSXUkLs.js +1 -0
  305. package/static/settings/assets/DocumentProcessingPanel-Da2Re6Rg.js +1 -0
  306. package/static/settings/assets/IndexLifecyclePanel-BSZuIzgr.js +1 -0
  307. package/static/settings/assets/{IndexSubjectPanel-BgbI9c-a.js → IndexSubjectPanel-CFd0ay-r.js} +1 -1
  308. package/static/settings/assets/ModelAssignmentsPanel-CSAryvWJ.js +1 -0
  309. package/static/settings/assets/ModelsPage-BQwCwLHU.js +11 -0
  310. package/static/settings/assets/{NetworkPage-C8OA9Mtp.js → NetworkPage-BKymvsQc.js} +2 -2
  311. package/static/settings/assets/{PaneListHeader-COvlPJWj.js → PaneListHeader-Bjh3hRdQ.js} +1 -1
  312. package/static/settings/assets/SearchIndexingPanel-MjKL5QLU.js +1 -0
  313. package/static/settings/assets/{StatusSubjectPanel-BuLml7qn.js → StatusSubjectPanel-Bvl6K4mx.js} +1 -1
  314. package/static/settings/assets/StatusWorkspace-B0NzrP--.js +1 -0
  315. package/static/settings/assets/{SystemSettingsPage-DlzmaWV-.js → SystemSettingsPage-D2z6Z4FE.js} +1 -1
  316. package/static/{auth-callback/assets/SystemSettingsSubjectPanel-CDqRuC4t.js → settings/assets/SystemSettingsSubjectPanel-4sxma4X4.js} +5 -5
  317. package/static/settings/assets/XpodAiConnectionsPodStore-BkNQ8fZx.js +3 -0
  318. package/static/settings/assets/{activity-TLerXgMs.js → activity-CgJJGpjx.js} +1 -1
  319. package/static/settings/assets/ai-connections-CryuHGKW.js +1 -0
  320. package/static/settings/assets/{badge-Bcs8iWrH.js → badge-C4NypVyT.js} +1 -1
  321. package/static/settings/assets/collection-runtime-CTLCDxAi.js +1 -0
  322. package/static/settings/assets/dialog-Csq0vWUi.js +1 -0
  323. package/static/settings/assets/{download-Ct3QmHPt.js → download-DaLJJ-Wp.js} +1 -1
  324. package/static/settings/assets/{external-link-C8KiHbss.js → external-link--w_iW5Au.js} +1 -1
  325. package/static/settings/assets/index-B0mQa59b.js +4 -0
  326. package/static/settings/assets/index-BukHiu4y.js +1 -0
  327. package/static/settings/assets/index-COmVnZi2.js +41 -0
  328. package/static/settings/assets/{index-browser-CazX1pc2.js → index-browser-BGpvHwD0.js} +1 -1
  329. package/static/settings/assets/{key-round-B19YD1GA.js → key-round-Bk4YRjBu.js} +1 -1
  330. package/static/settings/assets/layout-DB3pMyTl.js +1 -0
  331. package/static/settings/assets/pod-collections-host-KnnGFZHL.js +8 -0
  332. package/static/settings/assets/{rotate-ccw-AQm2kMgU.js → rotate-ccw-TCabbqsr.js} +1 -1
  333. package/static/settings/assets/{settings-C-VBtt9r.js → settings-CJWpdbNC.js} +5 -5
  334. package/static/settings/assets/settings-rk080mvG.css +1 -0
  335. package/static/settings/assets/{skeleton-DyZ1OBYf.js → skeleton-JDHYVe7t.js} +1 -1
  336. package/static/settings/assets/{waypoints-CC3wq-SU.js → waypoints-DDvEl-MU.js} +1 -1
  337. package/static/settings/assets/{workspace-layout-BxXNKgf9.js → workspace-layout-DV5QU30U.js} +1 -1
  338. package/static/settings/settings.html +2 -2
  339. package/static/auth-callback/assets/AiConfigContext-DqWRSm7n.js +0 -1
  340. package/static/auth-callback/assets/AiConfigPage-C5YYyvzl.js +0 -1
  341. package/static/auth-callback/assets/DocumentProcessingPanel-DZCiacBz.js +0 -1
  342. package/static/auth-callback/assets/IndexLifecyclePanel-CCLeOljB.js +0 -1
  343. package/static/auth-callback/assets/ModelAssignmentsPanel-jUUTDKuh.js +0 -1
  344. package/static/auth-callback/assets/ModelsPage-B08zdtff.js +0 -10
  345. package/static/auth-callback/assets/SearchIndexingPanel-D4YRg1-8.js +0 -1
  346. package/static/auth-callback/assets/StatusWorkspace-Cp5LQ9Yx.js +0 -1
  347. package/static/auth-callback/assets/ai-connections-CHNTKemd.js +0 -1
  348. package/static/auth-callback/assets/auth-callback-DWMMiFjh.css +0 -1
  349. package/static/auth-callback/assets/index-DSNnLUbU.js +0 -4
  350. package/static/auth-callback/assets/index-FHhHoKgp.js +0 -41
  351. package/static/dashboard/assets/AiConfigContext-BpPDKSzI.js +0 -1
  352. package/static/dashboard/assets/AiConfigPage-wsqEZDIX.js +0 -1
  353. package/static/dashboard/assets/DocumentProcessingPanel-CDSy3juc.js +0 -1
  354. package/static/dashboard/assets/IndexLifecyclePanel-CVd6vQCX.js +0 -1
  355. package/static/dashboard/assets/ModelAssignmentsPanel-BeBZhnQd.js +0 -1
  356. package/static/dashboard/assets/ModelsPage-B6McSCJw.js +0 -25
  357. package/static/dashboard/assets/SearchIndexingPanel-CGs0OZ12.js +0 -1
  358. package/static/dashboard/assets/ai-connections-CHNTKemd.js +0 -1
  359. package/static/dashboard/assets/dashboard-DWMMiFjh.css +0 -1
  360. package/static/dashboard/assets/index-PgS-Bt7X.js +0 -41
  361. package/static/dashboard/assets/index-QN2QgEwr.js +0 -4
  362. package/static/settings/assets/AiConfigContext-zKQYdfai.js +0 -1
  363. package/static/settings/assets/AiConfigPage-Bs1EE3Ei.js +0 -1
  364. package/static/settings/assets/DocumentProcessingPanel-CSFfdOXS.js +0 -1
  365. package/static/settings/assets/IndexLifecyclePanel-BR9Su49B.js +0 -1
  366. package/static/settings/assets/ModelAssignmentsPanel-C0BE7nbk.js +0 -1
  367. package/static/settings/assets/ModelsPage-CU-YQ8_7.js +0 -10
  368. package/static/settings/assets/SearchIndexingPanel-Bdd46mIV.js +0 -1
  369. package/static/settings/assets/ai-connections-CHNTKemd.js +0 -1
  370. package/static/settings/assets/index-1Q2cRjZd.js +0 -41
  371. package/static/settings/assets/index-DBO_Vq0P.js +0 -4
  372. package/static/settings/assets/settings-DWMMiFjh.css +0 -1
@@ -3,8 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ProviderModelSelectionService = void 0;
4
4
  const PlaintextCredentialPayload_1 = require("../credentials/PlaintextCredentialPayload");
5
5
  const errors_1 = require("../errors");
6
+ const EmbeddingModelPolicy_1 = require("../../../ai/service/EmbeddingModelPolicy");
6
7
  const ProviderRegistry_1 = require("../providers/ProviderRegistry");
7
8
  const ProviderModelDiscoveryAdapters_1 = require("./ProviderModelDiscoveryAdapters");
9
+ const ProviderModelType_1 = require("./ProviderModelType");
8
10
  const DEFAULT_CACHE_TTL_MS = 5 * 60 * 1000;
9
11
  /**
10
12
  * Coordinates short-lived provider discovery with durable Pod selections.
@@ -32,11 +34,13 @@ class ProviderModelSelectionService {
32
34
  this.baseUrlForProvider = options.baseUrlForProvider;
33
35
  this.modelsService = options.modelsService;
34
36
  this.credentialVault = options.credentialVault;
37
+ this.embeddingModelPolicy = options.embeddingModelPolicy ?? EmbeddingModelPolicy_1.EmbeddingModelPolicy.allowAll();
35
38
  this.now = options.now ?? (() => new Date());
36
39
  this.cacheTtlMs = normalizeCacheTtl(options.cacheTtlMs);
37
40
  }
38
41
  async discover(input) {
39
42
  const normalizedProvider = normalizeProvider(input.provider);
43
+ this.requireProvidedProvider(normalizedProvider, input.deployment);
40
44
  const credential = await this.resolveCredential(input, normalizedProvider);
41
45
  const context = this.discoveryContext(normalizedProvider, credential);
42
46
  const key = cacheKey(input.webId, normalizedProvider, input.deployment, context);
@@ -82,6 +86,7 @@ class ProviderModelSelectionService {
82
86
  }
83
87
  async replaceSelection(input) {
84
88
  const normalizedProvider = normalizeProvider(input.provider);
89
+ this.requireProvidedProvider(normalizedProvider, input.deployment);
85
90
  const credential = await this.resolveOptionalCredential(input, normalizedProvider);
86
91
  const context = credential ? this.discoveryContext(normalizedProvider, credential) : undefined;
87
92
  const key = cacheKey(input.webId, normalizedProvider, input.deployment, context);
@@ -115,6 +120,12 @@ class ProviderModelSelectionService {
115
120
  if (input.defaultModel !== undefined && !availableById.has(modelIdentity(input.defaultModel))) {
116
121
  throw modelNotInCatalogError(normalizedProvider, input.defaultModel);
117
122
  }
123
+ assertEmbeddingSelectionAllowed({
124
+ provider: normalizedProvider,
125
+ modelIds: input.modelIds,
126
+ availableById,
127
+ policy: this.embeddingModelPolicy,
128
+ });
118
129
  const next = await this.selectionRepository.replaceSelection({
119
130
  webId: input.webId,
120
131
  provider: normalizedProvider,
@@ -122,7 +133,7 @@ class ProviderModelSelectionService {
122
133
  const discovered = availableById.get(modelIdentity(modelId));
123
134
  return {
124
135
  id: modelId,
125
- modelType: discovered?.modelType ?? 'other',
136
+ modelType: discovered?.modelType ?? 'chat',
126
137
  status: 'active',
127
138
  ...(discovered?.displayName ? { displayName: discovered.displayName } : {}),
128
139
  };
@@ -219,13 +230,13 @@ class ProviderModelSelectionService {
219
230
  return result.models.map((model) => ({
220
231
  id: model.id,
221
232
  ...(model.displayName ? { displayName: model.displayName } : {}),
222
- modelType: model.modelType ?? inferModelType(model.id),
233
+ modelType: model.modelType ?? (0, ProviderModelType_1.inferProviderModelType)({}, model.id),
223
234
  }));
224
235
  }
225
236
  if (offering?.modelDiscovery.strategy === 'unsupported') {
226
237
  return this.providerRegistry.requireProvider(input.input.provider).models.map((model) => ({
227
238
  id: model.id,
228
- modelType: inferModelType(model.id),
239
+ modelType: (0, ProviderModelType_1.inferProviderModelType)({}, model.id),
229
240
  }));
230
241
  }
231
242
  const adapter = this.discoveryRegistry.get(input.input.provider);
@@ -242,6 +253,16 @@ class ProviderModelSelectionService {
242
253
  };
243
254
  return adapter.discover(adapterInput);
244
255
  }
256
+ /** Cloud settings only manage providers this deployment provides. */
257
+ requireProvidedProvider(provider, deployment) {
258
+ if (deployment && !this.providerRegistry.isProvidedInDeployment(provider, deployment)) {
259
+ throw new errors_1.GatewayProtocolError('provider_not_available_in_deployment', {
260
+ code: 'invalid_request',
261
+ status: 403,
262
+ details: { provider },
263
+ });
264
+ }
265
+ }
245
266
  async resolveCredential(input, provider) {
246
267
  const credential = input.credentialId && this.credentialRepository.getCredentialById
247
268
  ? await this.credentialRepository.getCredentialById({
@@ -345,20 +366,6 @@ function stringValue(value) {
345
366
  function normalizeCompatibility(value) {
346
367
  return value === 'auto' || value === 'openai' || value === 'anthropic' ? value : undefined;
347
368
  }
348
- function inferModelType(id) {
349
- const normalized = id.toLowerCase();
350
- if (/(?:embedding|embed)/u.test(normalized))
351
- return 'embedding';
352
- if (/(?:dall[-_ ]?e|stable[-_ ]?diffusion|flux|imagen|midjourney|image[-_ ]?(?:generation|gen))/u.test(normalized)) {
353
- return 'image';
354
- }
355
- if (/(?:whisper|tts|speech|musicgen|audio[-_ ]?(?:generation|gen))/u.test(normalized))
356
- return 'audio';
357
- if (/(?:chat|completion|conversation|text[-_ ]?generation|instruct|reason|coder|gpt|claude|kimi|qwen|deepseek|llama|mistral|gemini)/u.test(normalized)) {
358
- return 'chat';
359
- }
360
- return 'other';
361
- }
362
369
  function normalizeCacheTtl(value) {
363
370
  return typeof value === 'number' && Number.isFinite(value) && value > 0
364
371
  ? value
@@ -461,10 +468,14 @@ function cloneCatalog(catalog) {
461
468
  models: catalog.models.map((model) => ({ ...model })),
462
469
  };
463
470
  }
471
+ /**
472
+ * A catalog type is one of the two classes the Pod can store.
473
+ *
474
+ * Anything else - an older row, a provider's own vocabulary - reads as a chat
475
+ * model rather than as a value the AI config write would reject.
476
+ */
464
477
  function normalizeCatalogModelType(value) {
465
- return value === 'chat' || value === 'embedding' || value === 'image' || value === 'audio' || value === 'other'
466
- ? value
467
- : 'other';
478
+ return value === 'embedding' ? 'embedding' : 'chat';
468
479
  }
469
480
  function activeCredentialRequiredError(provider) {
470
481
  return new errors_1.GatewayProtocolError('active_credential_required', {
@@ -480,6 +491,32 @@ function modelNotInCatalogError(provider, modelId) {
480
491
  details: { provider, modelId },
481
492
  });
482
493
  }
494
+ /**
495
+ * Discovery reports whatever a BYOK endpoint advertises, so a selected embedding
496
+ * model still has to be provided by the gateway catalog. Selecting one that is
497
+ * not would otherwise advertise an arbitrary embedding model in Cloud.
498
+ */
499
+ function assertEmbeddingSelectionAllowed(input) {
500
+ if (!input.policy.isEnforced()) {
501
+ return;
502
+ }
503
+ for (const modelId of input.modelIds) {
504
+ const identity = modelIdentity(modelId);
505
+ const discovered = input.availableById.get(identity);
506
+ const embedding = discovered?.modelType === 'embedding'
507
+ || (0, ProviderModelType_1.inferProviderModelType)({}, identity) === 'embedding';
508
+ if (!embedding) {
509
+ continue;
510
+ }
511
+ if (!input.policy.isAllowed({ provider: input.provider, model: identity })) {
512
+ throw new errors_1.GatewayProtocolError('embedding_model_not_allowed', {
513
+ code: 'embedding_model_not_allowed',
514
+ status: 400,
515
+ details: { provider: input.provider, modelId: identity },
516
+ });
517
+ }
518
+ }
519
+ }
483
520
  function modelSelectionDefaultNotPickedError(provider, defaultModel) {
484
521
  return new errors_1.GatewayProtocolError('model_selection_default_not_picked', {
485
522
  code: 'invalid_request',
@@ -0,0 +1,28 @@
1
+ /**
2
+ * What kind of model an upstream `/models` entry is, as Xpod records it.
3
+ *
4
+ * Discovery answers exactly one question the product acts on: is this an
5
+ * embedding model, or is it a chat model? Embedding is the value the embedding
6
+ * allowlist filters on and the one the settings list marks with a glyph, and the
7
+ * Pod stores such a row as `EmbeddingModel`; everything else is a chat model.
8
+ *
9
+ * The vocabulary is deliberately this short. A Pod row's class has to be one the
10
+ * shared schema knows (`toAIModelClassUri` in `@undefineds.co/models`); a third
11
+ * value invented here - `other`, `audio` - makes the AI config write throw
12
+ * `Unsupported AI model class`, so a synced list would stop being writable. Any
13
+ * finer distinction belongs to a model's capabilities, not to this column.
14
+ *
15
+ * Both discovery paths read the same provider payloads - the adapters behind
16
+ * `POST …/models/refresh` (同步模型) and the per-provider discovery adapters
17
+ * behind the selection service - so the rule lives here once and both import it.
18
+ */
19
+ export type DiscoveredProviderModelType = 'chat' | 'embedding';
20
+ /**
21
+ * Model type for one upstream entry.
22
+ *
23
+ * An explicit field the provider sends wins; otherwise the id is the only
24
+ * evidence available, and embeddings are the one kind that must never be missed:
25
+ * the embedding allowlist filters on this value, so a missed embedding model
26
+ * disappears from model management.
27
+ */
28
+ export declare function inferProviderModelType(record: Record<string, unknown>, id: string): DiscoveredProviderModelType;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.inferProviderModelType = inferProviderModelType;
4
+ /**
5
+ * Model type for one upstream entry.
6
+ *
7
+ * An explicit field the provider sends wins; otherwise the id is the only
8
+ * evidence available, and embeddings are the one kind that must never be missed:
9
+ * the embedding allowlist filters on this value, so a missed embedding model
10
+ * disappears from model management.
11
+ */
12
+ function inferProviderModelType(record, id) {
13
+ if (explicitProviderModelType(record) === 'embedding') {
14
+ return 'embedding';
15
+ }
16
+ return /(?:embedding|embed)/u.test(id.toLowerCase()) ? 'embedding' : 'chat';
17
+ }
18
+ /** The kind the provider payload itself declares, when it declares one. */
19
+ function explicitProviderModelType(record) {
20
+ for (const value of [record.modelType, record.model_type, record.type, record.object, record.category]) {
21
+ if (typeof value !== 'string') {
22
+ continue;
23
+ }
24
+ const normalized = value.trim().toLowerCase();
25
+ if (!normalized || normalized === 'model') {
26
+ continue;
27
+ }
28
+ if (/(?:embedding|embed)/u.test(normalized)) {
29
+ return 'embedding';
30
+ }
31
+ }
32
+ return undefined;
33
+ }
34
+ //# sourceMappingURL=ProviderModelType.js.map
@@ -2,10 +2,20 @@ import type { ConnectCredentialRecord } from '../connect';
2
2
  import type { ProviderSecret } from '../credentials/CredentialVault';
3
3
  import { ProviderHttpTransport } from '../../service/provider-http-transport';
4
4
  import type { ProviderProductDescriptor, ProviderRegistry } from '../providers/ProviderRegistry';
5
+ import { type DiscoveredProviderModelType } from './ProviderModelType';
5
6
  export interface DiscoveredProviderModel {
6
7
  id: string;
7
8
  displayName?: string;
8
9
  capabilities?: string[];
10
+ /**
11
+ * What the model is for, inferred from the provider payload.
12
+ *
13
+ * Discovery keeps embedding models in the list, and every consumer of this
14
+ * shape - the Pod row written on sync, the settings model list, the embedding
15
+ * allowlist - reads the type from here. Dropping it stores an embedding model
16
+ * as an ordinary one, which is how it disappears from model management.
17
+ */
18
+ modelType?: DiscoveredProviderModelType;
9
19
  availability?: 'available' | 'unavailable';
10
20
  metadata?: {
11
21
  sources?: ProviderModelDiscoverySource[];
@@ -5,6 +5,7 @@ exports.resolveSafeModelsBaseUrl = resolveSafeModelsBaseUrl;
5
5
  exports.normalizeDiscoveredModels = normalizeDiscoveredModels;
6
6
  const ProviderQuotaAdapter_1 = require("../quota/ProviderQuotaAdapter");
7
7
  const provider_http_transport_1 = require("../../service/provider-http-transport");
8
+ const ProviderModelType_1 = require("./ProviderModelType");
8
9
  class ProviderModelsFetchError extends Error {
9
10
  constructor(providerStatus, retryAfter, providerMessage) {
10
11
  super(`provider_models_fetch_failed:${providerStatus}`);
@@ -340,7 +341,7 @@ function normalizeDiscoveredModels(payload) {
340
341
  }
341
342
  const record = item;
342
343
  const id = String(record.id ?? record.name ?? record.model ?? record.slug ?? record.uid ?? '').trim();
343
- if (!id || seen.has(id) || isEmbeddingModel(id)) {
344
+ if (!id || seen.has(id)) {
344
345
  continue;
345
346
  }
346
347
  seen.add(id);
@@ -350,6 +351,7 @@ function normalizeDiscoveredModels(payload) {
350
351
  id,
351
352
  ...(displayName && displayName !== id ? { displayName } : {}),
352
353
  ...(capabilities.length > 0 ? { capabilities } : {}),
354
+ modelType: (0, ProviderModelType_1.inferProviderModelType)(record, id),
353
355
  });
354
356
  }
355
357
  return models;
@@ -406,9 +408,6 @@ function extractModelList(payload) {
406
408
  }
407
409
  return [];
408
410
  }
409
- function isEmbeddingModel(id) {
410
- return /embed/i.test(id);
411
- }
412
411
  function stringValue(value) {
413
412
  return typeof value === 'string' && value.trim() ? value.trim() : undefined;
414
413
  }
@@ -1,4 +1,5 @@
1
1
  export { AnthropicModelsAdapter, CodexSubscriptionModelsAdapter, OpenAiCompatibleModelsAdapter, ProviderModelsFetchError, ProviderModelsResponseError, normalizeDiscoveredModels, type DiscoveredProviderModel, type ModelsCredentialRecord, type ProviderModelsAdapter, type ProviderModelsFetchInput, } from './ProviderModelsAdapter';
2
2
  export { ProviderModelsService, type ProviderModelDiscovery, type ProviderModelsServiceOptions, } from './ProviderModelsService';
3
3
  export { ProviderCustomModelsService, type ProviderCustomModelsServiceOptions, } from './ProviderCustomModelsService';
4
+ export { createGatewayEmbeddingModelCatalog } from './GatewayEmbeddingModelCatalog';
4
5
  export type { CustomProviderModel } from '../connect';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ProviderCustomModelsService = exports.ProviderModelsService = exports.normalizeDiscoveredModels = exports.ProviderModelsResponseError = exports.ProviderModelsFetchError = exports.OpenAiCompatibleModelsAdapter = exports.CodexSubscriptionModelsAdapter = exports.AnthropicModelsAdapter = void 0;
3
+ exports.createGatewayEmbeddingModelCatalog = exports.ProviderCustomModelsService = exports.ProviderModelsService = exports.normalizeDiscoveredModels = exports.ProviderModelsResponseError = exports.ProviderModelsFetchError = exports.OpenAiCompatibleModelsAdapter = exports.CodexSubscriptionModelsAdapter = exports.AnthropicModelsAdapter = void 0;
4
4
  var ProviderModelsAdapter_1 = require("./ProviderModelsAdapter");
5
5
  Object.defineProperty(exports, "AnthropicModelsAdapter", { enumerable: true, get: function () { return ProviderModelsAdapter_1.AnthropicModelsAdapter; } });
6
6
  Object.defineProperty(exports, "CodexSubscriptionModelsAdapter", { enumerable: true, get: function () { return ProviderModelsAdapter_1.CodexSubscriptionModelsAdapter; } });
@@ -12,4 +12,6 @@ var ProviderModelsService_1 = require("./ProviderModelsService");
12
12
  Object.defineProperty(exports, "ProviderModelsService", { enumerable: true, get: function () { return ProviderModelsService_1.ProviderModelsService; } });
13
13
  var ProviderCustomModelsService_1 = require("./ProviderCustomModelsService");
14
14
  Object.defineProperty(exports, "ProviderCustomModelsService", { enumerable: true, get: function () { return ProviderCustomModelsService_1.ProviderCustomModelsService; } });
15
+ var GatewayEmbeddingModelCatalog_1 = require("./GatewayEmbeddingModelCatalog");
16
+ Object.defineProperty(exports, "createGatewayEmbeddingModelCatalog", { enumerable: true, get: function () { return GatewayEmbeddingModelCatalog_1.createGatewayEmbeddingModelCatalog; } });
15
17
  //# sourceMappingURL=index.js.map
@@ -6,9 +6,16 @@ export declare class CustomRuntimeAdapter implements ProviderRuntimeAdapter {
6
6
  readonly provider = "custom";
7
7
  private readonly openai;
8
8
  private readonly anthropic;
9
+ /**
10
+ * A user-owned endpoint is a Local capability: the operator cannot vouch for
11
+ * it, so Cloud never sends a provider key to a Pod-supplied base URL. Cloud
12
+ * therefore resolves `custom` against the catalog's placeholder endpoint and
13
+ * rejects the request instead of following the Pod.
14
+ */
9
15
  constructor(input: {
10
16
  transport: ProviderHttpTransport;
11
17
  descriptor: ProviderDescriptor;
18
+ allowCredentialBaseUrl?: boolean;
12
19
  });
13
20
  execute(input: ProviderRuntimeExecuteInput): AsyncIterable<GatewayEvent>;
14
21
  }
@@ -5,15 +5,22 @@ const errors_1 = require("../errors");
5
5
  const AnthropicRuntimeAdapter_1 = require("./AnthropicRuntimeAdapter");
6
6
  const ProviderRuntimeAdapter_1 = require("./ProviderRuntimeAdapter");
7
7
  class CustomRuntimeAdapter {
8
+ /**
9
+ * A user-owned endpoint is a Local capability: the operator cannot vouch for
10
+ * it, so Cloud never sends a provider key to a Pod-supplied base URL. Cloud
11
+ * therefore resolves `custom` against the catalog's placeholder endpoint and
12
+ * rejects the request instead of following the Pod.
13
+ */
8
14
  constructor(input) {
9
15
  this.provider = 'custom';
16
+ const options = { allowCredentialBaseUrl: input.allowCredentialBaseUrl ?? true };
10
17
  this.openai = new ProviderRuntimeAdapter_1.OpenAiCompatibleRuntimeAdapter({
11
18
  transport: input.transport,
12
19
  provider: 'custom',
13
20
  descriptor: input.descriptor,
14
21
  defaultBaseUrl: input.descriptor.defaultBaseUrl,
15
22
  safeBaseUrls: input.descriptor.safeBaseUrls,
16
- allowCredentialBaseUrl: true,
23
+ allowCredentialBaseUrl: options.allowCredentialBaseUrl,
17
24
  supportsImages: input.descriptor.capabilities.imageInput,
18
25
  supportsDeveloperMessages: true,
19
26
  allowToolChoiceRequired: true,
@@ -23,7 +30,7 @@ class CustomRuntimeAdapter {
23
30
  provider: 'custom',
24
31
  defaultBaseUrl: input.descriptor.defaultBaseUrl,
25
32
  safeBaseUrls: input.descriptor.safeBaseUrls,
26
- allowCredentialBaseUrl: true,
33
+ allowCredentialBaseUrl: options.allowCredentialBaseUrl,
27
34
  });
28
35
  }
29
36
  async *execute(input) {
@@ -1,6 +1,12 @@
1
+ import { XPOD_PROVIDER_TO_MODELS_DEV } from './ProviderRegistry';
1
2
  import type { ProviderModelDescriptor, ProviderRegistry } from './ProviderRegistry';
2
3
  export declare const MODELS_DEV_API_URL = "https://models.dev/api.json";
3
- export declare const XPOD_PROVIDER_TO_MODELS_DEV: Record<string, string>;
4
+ /**
5
+ * models.dev provider id per gateway catalog provider id. The mapping is a
6
+ * projection of `MANAGED_PROVIDER_VOCABULARY`, the single provider-vocabulary
7
+ * block: this module does not keep its own translation table.
8
+ */
9
+ export { XPOD_PROVIDER_TO_MODELS_DEV };
4
10
  export interface ModelsDevModel {
5
11
  id: string;
6
12
  name?: string;
@@ -8,17 +8,11 @@ exports.lookupModelsDevModelDescriptor = lookupModelsDevModelDescriptor;
8
8
  exports.syncProviderRegistryWithModelsDev = syncProviderRegistryWithModelsDev;
9
9
  exports.syncProviderRegistryFromModelsDev = syncProviderRegistryFromModelsDev;
10
10
  const global_logger_factory_1 = require("global-logger-factory");
11
+ const ProviderRegistry_1 = require("./ProviderRegistry");
12
+ Object.defineProperty(exports, "XPOD_PROVIDER_TO_MODELS_DEV", { enumerable: true, get: function () { return ProviderRegistry_1.XPOD_PROVIDER_TO_MODELS_DEV; } });
11
13
  exports.MODELS_DEV_API_URL = 'https://models.dev/api.json';
12
14
  const DEFAULT_CACHE_TTL_MS = 24 * 60 * 60 * 1000;
13
15
  const DEFAULT_TIMEOUT_MS = 10_000;
14
- exports.XPOD_PROVIDER_TO_MODELS_DEV = {
15
- openai: 'openai',
16
- anthropic: 'anthropic',
17
- kimi: 'moonshotai',
18
- bailian: 'alibaba-cn',
19
- deepseek: 'deepseek',
20
- zhipu: 'zhipuai',
21
- };
22
16
  let catalogCache;
23
17
  function resetModelsDevCatalogCache() {
24
18
  catalogCache = undefined;
@@ -85,7 +79,7 @@ function modelsDevModelDescriptors(provider) {
85
79
  * Used to enrich gateway projections for models that are absent from the static registry
86
80
  * (e.g. newly released models discovered via the provider's live /models endpoint).
87
81
  */
88
- function lookupModelsDevModelDescriptor(providerId, modelId, mapping = exports.XPOD_PROVIDER_TO_MODELS_DEV) {
82
+ function lookupModelsDevModelDescriptor(providerId, modelId, mapping = ProviderRegistry_1.XPOD_PROVIDER_TO_MODELS_DEV) {
89
83
  const modelsDevId = mapping[providerId];
90
84
  const models = modelsDevId ? catalogCache?.catalog[modelsDevId]?.models : undefined;
91
85
  if (!models) {
@@ -98,7 +92,7 @@ function lookupModelsDevModelDescriptor(providerId, modelId, mapping = exports.X
98
92
  }
99
93
  return modelsDevModelDescriptors({ id: modelsDevId, models: { [model.id]: model } })[0];
100
94
  }
101
- function syncProviderRegistryWithModelsDev(registry, catalog, mapping = exports.XPOD_PROVIDER_TO_MODELS_DEV) {
95
+ function syncProviderRegistryWithModelsDev(registry, catalog, mapping = ProviderRegistry_1.XPOD_PROVIDER_TO_MODELS_DEV) {
102
96
  const synced = [];
103
97
  for (const [providerId, modelsDevId] of Object.entries(mapping)) {
104
98
  const entry = catalog[modelsDevId];
@@ -78,7 +78,64 @@ export interface ProviderCapabilities {
78
78
  reasoningEffort?: boolean;
79
79
  imageInput?: boolean;
80
80
  promptCaching?: boolean;
81
+ /**
82
+ * Catalog marker for embedding models. This provider catalog is the single
83
+ * authority for the embedding models a deployment provides, so a model only
84
+ * becomes embeddable by being registered here (or merged from models.dev with
85
+ * this capability already set). User-declared custom models cannot add it.
86
+ */
87
+ embedding?: boolean;
88
+ /**
89
+ * Curated fast-tier marker.
90
+ *
91
+ * Neither this catalog nor models.dev carries latency data, so "fast" is a
92
+ * published judgement about a model's tier rather than a measurement. It is
93
+ * surfaced to clients as the `fast` capability token.
94
+ */
95
+ fast?: boolean;
81
96
  }
97
+ /**
98
+ * One row per managed provider: every vocabulary that names it.
99
+ *
100
+ * Pod AI config, credentials and the default embedding profile name providers in
101
+ * their own vocabulary (`dashscope`, `qwen`, `moonshot`, ...), while the gateway
102
+ * catalog names the product (`bailian`, `kimi`, ...), and the catalogs we
103
+ * project from name it again (`qwen`, `alibaba-cn`, `moonshotai`, `zhipuai`).
104
+ * Keeping all of that in one block means every model-policy check compares
105
+ * against one provider identity instead of each caller inventing its own
106
+ * aliases, and adding a provider cannot leave one of the parallel translations
107
+ * behind.
108
+ */
109
+ export interface ManagedProviderVocabulary {
110
+ /** Canonical gateway catalog provider id. */
111
+ readonly id: string;
112
+ /**
113
+ * Runtime vocabularies that resolve to `id`. The id itself is always an
114
+ * accepted spelling and does not need to be repeated here.
115
+ */
116
+ readonly runtimeIds: readonly string[];
117
+ /**
118
+ * Slug of the same provider in the bundled `@undefineds.co/models` discovery
119
+ * catalog. Defaults to `id` when the two agree.
120
+ */
121
+ readonly discoverySlug?: string;
122
+ /** Provider id in models.dev. Absent when models.dev does not carry the provider. */
123
+ readonly modelsDevId?: string;
124
+ }
125
+ export declare const MANAGED_PROVIDER_VOCABULARY: readonly ManagedProviderVocabulary[];
126
+ /**
127
+ * Runtime vocabulary to canonical provider id, derived from
128
+ * `MANAGED_PROVIDER_VOCABULARY`.
129
+ *
130
+ * `ProviderRegistry.resolveManagedProviderId` is the translation entry point:
131
+ * it validates the canonical id against the registered catalog, which a raw
132
+ * table lookup cannot do.
133
+ */
134
+ export declare const MANAGED_PROVIDER_ALIASES: Record<string, string>;
135
+ /** Discovery-catalog slug of a gateway catalog provider id (identity when undeclared). */
136
+ export declare function discoveryProviderSlug(providerId: string): string;
137
+ /** models.dev provider ids keyed by gateway catalog provider id, derived from the vocabulary block. */
138
+ export declare const XPOD_PROVIDER_TO_MODELS_DEV: Record<string, string>;
82
139
  export interface ProviderModelDescriptor {
83
140
  id: string;
84
141
  aliases?: string[];
@@ -118,12 +175,43 @@ export declare class ProviderRegistry {
118
175
  getProvider(provider: string): ProviderDescriptor | undefined;
119
176
  requireProvider(provider: string): ProviderDescriptor;
120
177
  listProviders(): ProviderDescriptor[];
178
+ /**
179
+ * Resolve a runtime provider vocabulary entry to the catalog provider that
180
+ * owns it. Unknown providers stay unresolved so a deployment can never treat
181
+ * a Pod-invented provider id as a catalog provider.
182
+ */
183
+ resolveManagedProviderId(provider: string): string | undefined;
184
+ /**
185
+ * Whether this deployment offers the provider at all.
186
+ *
187
+ * Cloud only offers the operator-designated providers with the endpoints the
188
+ * catalog names: a self-hosted `custom` endpoint or a local-daemon provider
189
+ * such as Ollama is a Local-only capability, because there the user owns the
190
+ * endpoint.
191
+ */
192
+ isProvidedInDeployment(provider: string, deployment: string): boolean;
193
+ listProvidedProviders(deployment: string): ProviderDescriptor[];
194
+ /**
195
+ * Embedding models this catalog provides for a provider. This is the authority
196
+ * for embedding model policy; anything absent is not provided by the gateway.
197
+ */
198
+ listManagedEmbeddingModels(provider: string): ProviderModelDescriptor[];
199
+ isManagedEmbeddingModel(provider: string, modelId: string): boolean;
121
200
  getProduct(product: string): ProviderProductDescriptor | undefined;
122
201
  requireProduct(product: string): ProviderProductDescriptor;
123
202
  listProducts(): ProviderProductDescriptor[];
124
203
  getOffering(product: string, offeringId: string): ProviderOfferingDescriptor | undefined;
125
204
  requireOffering(product: string, offeringId: string): ProviderOfferingDescriptor;
126
205
  resolveAlias(model: string): ModelAliasTarget | undefined;
206
+ /**
207
+ * Catalog descriptor for one model of one provider, matched by id or alias.
208
+ *
209
+ * Provider vocabularies differ between the Pod configuration and the catalog,
210
+ * so the runtime id is resolved through the same alias table the model-policy
211
+ * checks use. An unknown provider stays unresolved rather than falling back to
212
+ * another provider's catalog entry.
213
+ */
214
+ getModelDescriptor(provider: string, modelId: string): ProviderModelDescriptor | undefined;
127
215
  findModel(model: string): Array<{
128
216
  provider: ProviderDescriptor;
129
217
  model: ProviderModelDescriptor;
@@ -132,6 +220,25 @@ export declare class ProviderRegistry {
132
220
  }
133
221
  export declare function createDefaultProviderRegistry(options?: ProviderRegistryOptions): ProviderRegistry;
134
222
  export declare function providerProductsForDeployment(deployment: 'local' | 'cloud'): ProviderProductDescriptor[];
223
+ /**
224
+ * Whether one declared upstream capability assigns a protocol+profile to a
225
+ * product offering under the credential kind that would use it.
226
+ *
227
+ * `PROVIDER_UPSTREAM_OVERRIDES` is the axis's single authority for the
228
+ * offering→capability mapping and `QuotaCapabilityRegistry` dispatches handlers
229
+ * from the protocol+profile declared here. A handler that needs to know whether
230
+ * an offering is its own asks the declaration instead of comparing offering id
231
+ * literals in `supports()`, which would be a second copy of this table.
232
+ *
233
+ * A capability may narrow itself to the credential auth modes it serves
234
+ * (`options.credentialAuthModes`); without that option every credential kind the
235
+ * Offering publishes is served. When the declaration narrows the kinds and the
236
+ * caller does not know the credential kind, the offering cannot be claimed.
237
+ */
238
+ export declare function offeringDeclaresUpstreamCapability(product: string, offeringId: string | undefined, capability: {
239
+ protocol: string;
240
+ profile?: string;
241
+ }, credentialAuthMode?: string): boolean;
135
242
  /**
136
243
  * The provider/offering catalog belongs to `@undefineds.co/ai-connections`: it
137
244
  * is content rather than schema, and it carries endpoints, console links and