@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
@@ -1,4 +1,6 @@
1
1
  import type { OpenPodRuntime, SolidSessionRuntime } from '@undefineds.co/solid-sdk';
2
+ import type { PodModelDescriptor } from '@undefineds.co/models';
3
+ import type { PodCollection, PodCollectionOptions, PodSyncState, RowOf } from '@undefineds.co/pod-collections';
2
4
  import { type ReactElement } from 'react';
3
5
  import { type AppletLayoutType, SinglePaneAppletLayoutDescriptor, ThreePaneAppletLayoutDescriptor, TwoPaneAppletLayoutDescriptor } from './layout';
4
6
  import type { AppletManifest, ExtensionManifest } from './manifest';
@@ -69,6 +71,19 @@ export interface AiClientConfigurationCapability {
69
71
  export interface AiConnectionsPodStore {
70
72
  listProviders(): Promise<unknown[]>;
71
73
  listModels?(): Promise<unknown[]>;
74
+ /**
75
+ * `settings/credentials.ttl`: the document credential rows live in, and
76
+ * therefore the live-update topic of the credentials table.
77
+ */
78
+ credentialsTableDocument?(): string;
79
+ /**
80
+ * The document a provider's own row and its model rows live in
81
+ * (`providers/<provider>.ttl`), and therefore that table's live-update topic.
82
+ *
83
+ * `instanceId` selects the document of a user-defined provider instance,
84
+ * which owns its own document; catalog providers ignore it.
85
+ */
86
+ providerTableDocument?(provider: string, instanceId?: string): string;
72
87
  createApiKeyCredential?(provider: string, input: {
73
88
  offeringId?: string;
74
89
  apiKey: string;
@@ -77,6 +92,16 @@ export interface AiConnectionsPodStore {
77
92
  proxyUrl?: string;
78
93
  priority?: number;
79
94
  compatibility?: 'auto' | 'openai' | 'anthropic';
95
+ /**
96
+ * The row this credential must be written at.
97
+ *
98
+ * A live collection creates the row optimistically from the models
99
+ * descriptor and then asks the store for the complete row at that id: the
100
+ * secret envelope and the columns the descriptor does not declare are the
101
+ * store's to write. The row already exists then, so the store updates it in
102
+ * place instead of inserting a second one. Omitted = create a new id.
103
+ */
104
+ id?: string;
80
105
  }): Promise<unknown>;
81
106
  createLocalCredential?(provider: string, input: {
82
107
  authorizationMethodId?: string;
@@ -84,6 +109,8 @@ export interface AiConnectionsPodStore {
84
109
  label?: string;
85
110
  baseUrl?: string;
86
111
  priority?: number;
112
+ /** See {@link AiConnectionsPodStore.createApiKeyCredential}. */
113
+ id?: string;
87
114
  }): Promise<unknown>;
88
115
  saveOAuthCredential?(provider: string, input: AiConnectionsOAuthCredential): Promise<unknown>;
89
116
  updateOAuthCredential?(provider: string, credentialId: string, expectedVersion: number, input: AiConnectionsOAuthCredential): Promise<unknown>;
@@ -182,6 +209,129 @@ export interface WebExtensionHostCapabilities {
182
209
  aiConnectionsPodStore?: AiConnectionsPodStore;
183
210
  /** Account-owned credentials; the applet never receives the Account session token. */
184
211
  aiClientCredentials?: AiClientCredentialsCapability;
212
+ /** Live updates for the Pod documents an applet is rendering. */
213
+ solidNotifications?: SolidNotificationsCapability;
214
+ /** Live Pod table collections; the applet declares the table, the host owns the I/O. */
215
+ podCollections?: PodCollectionsCapability;
216
+ }
217
+ /**
218
+ * Whether live Pod updates are reaching this page.
219
+ *
220
+ * `idle` covers "nothing is being watched", "still opening a channel" and
221
+ * "paused because the tab is hidden"; `live` means at least one watched
222
+ * document has an open channel; `unavailable` means live updates could not be
223
+ * established at all, so the page must keep working from explicit reads only.
224
+ */
225
+ export type SolidLiveUpdateState = 'idle' | 'live' | 'unavailable';
226
+ /**
227
+ * One dirty signal from a watched Pod table document.
228
+ *
229
+ * It carries delivery metadata only - never table data, and never an opinion
230
+ * about what the consumer should do with it. Conflict resolution, rollback,
231
+ * pending/confirmed row state and "server wins" reconciliation belong to the
232
+ * table consumer; this transport neither mutates nor interprets rows.
233
+ *
234
+ * A consumer that needs to tell a foreign change from the echo of its own write
235
+ * must correlate `receivedAt` with the write windows it tracks itself: applet
236
+ * writes do not travel through the notification channel, so the transport
237
+ * cannot know whether a local write was in flight and does not guess.
238
+ */
239
+ export interface SolidLiveUpdateSignal {
240
+ /** The watched table document that changed. */
241
+ topic: string;
242
+ /** Per-topic delivery counter, starting at 1 and strictly increasing. */
243
+ sequence: number;
244
+ /** When this client received the signal, in epoch milliseconds. */
245
+ receivedAt: number;
246
+ }
247
+ /**
248
+ * Live updates for Pod table documents (Solid Notifications, WebSocketChannel2023).
249
+ *
250
+ * A table is one RDF document and that document is the topic; rows inside it are
251
+ * never separate subscriptions. A signal only says "this document changed", so
252
+ * the consumer re-reads through its own read path and coalesces bursts.
253
+ */
254
+ export interface SolidNotificationsCapability {
255
+ /**
256
+ * Watch one table document.
257
+ *
258
+ * Listeners of the same topic share a single channel and a single socket; the
259
+ * returned function detaches this listener, and detaching the last one closes
260
+ * the socket and deletes the subscription. Watching a row IRI watches the
261
+ * document that holds the row.
262
+ *
263
+ * We are given a plain resource URL: which documents a page watches is the
264
+ * caller's decision, and no schema flag or registry declares it.
265
+ */
266
+ watch(topicUrl: string, listener: (signal: SolidLiveUpdateSignal) => void): () => void;
267
+ /** Current state, for a status affordance that stays out of the way. */
268
+ getState(): SolidLiveUpdateState;
269
+ /** Observe {@link SolidNotificationsCapability.getState}. */
270
+ subscribeState(listener: (state: SolidLiveUpdateState) => void): () => void;
271
+ /** Drops every subscription; called when the page that wanted them goes away. */
272
+ dispose(): void;
273
+ }
274
+ /**
275
+ * The declaration an applet hands to {@link PodCollectionsCapability.define}.
276
+ *
277
+ * Everything schema-shaped comes from the table's models descriptor and its
278
+ * drizzle table; the host fills in the I/O wiring (database, Pod URL, change
279
+ * feed), so an applet never names a document, a predicate or a refetch policy.
280
+ */
281
+ export type PodCollectionHostRequest<D extends PodModelDescriptor> = Omit<PodCollectionOptions<D>, 'database' | 'podUrl' | 'feed'>;
282
+ /**
283
+ * Live Pod table collections (`docs/pod-collections.md` §6.4).
284
+ *
285
+ * A table is declared once, by the applet that renders it, and the host turns
286
+ * that declaration into a live collection: reads land in the collection's own
287
+ * view of the table, writes are optimistic and roll back on rejection, and the
288
+ * host's change feed - the same notification primitive that drives
289
+ * {@link SolidNotificationsCapability} - refreshes it. No polling is installed.
290
+ */
291
+ export interface PodCollectionsCapability {
292
+ /**
293
+ * The collection for one table, loading whatever the host needs first.
294
+ *
295
+ * This is the accessor a page should use. A host may keep the collection
296
+ * engine out of the page's initial bundle and fetch it on first use, so the
297
+ * only honest answer to "give me this table" is a promise: a host whose engine
298
+ * is already in memory answers on the next microtask, a deferring host answers
299
+ * once the engine is there.
300
+ *
301
+ * Optional so that an eager host - one whose engine is unconditionally loaded -
302
+ * needs nothing beyond {@link define}: a page falls back to `define` when this
303
+ * is absent.
304
+ */
305
+ load?<D extends PodModelDescriptor>(descriptor: D, request: PodCollectionHostRequest<D>): Promise<PodCollection<RowOf<D>>>;
306
+ /**
307
+ * The collection for one table.
308
+ *
309
+ * One `(descriptor.uri, document)` pair is one collection: defining the same
310
+ * table twice returns the same instance, so two pages of one applet share one
311
+ * sync engine and one subscription instead of racing two.
312
+ *
313
+ * A table whose document the descriptor cannot derive throws
314
+ * `layout_document_required`; the caller passes `document`/`scope` explicitly
315
+ * rather than guessing a layout.
316
+ *
317
+ * This call is synchronous by contract, so a host that defers its engine (see
318
+ * {@link load}) cannot answer it before that engine has arrived: such a host
319
+ * reports the reservation instead of inventing a collection.
320
+ */
321
+ define<D extends PodModelDescriptor>(descriptor: D, request: PodCollectionHostRequest<D>): PodCollection<RowOf<D>>;
322
+ /**
323
+ * How the collection is keeping up: `live` when its change feed is
324
+ * established, `unavailable` when it is read-once-plus-explicit-refresh,
325
+ * `degraded` after a failed read. This is the availability signal a page
326
+ * shows, in place of the transport's own state.
327
+ */
328
+ syncState<R extends {
329
+ id: string;
330
+ }>(collection: PodCollection<R>): PodSyncState;
331
+ /** Observe every collection's {@link PodCollectionsCapability.syncState}. */
332
+ subscribeSyncState(listener: () => void): () => void;
333
+ /** Releases every collection this capability created (session teardown). */
334
+ dispose(): void;
185
335
  }
186
336
  export interface AiClientCredentialSummary {
187
337
  /** CSS label, i.e. the `client_id` inside the `sk-` wrapper. */
@@ -35,7 +35,8 @@
35
35
  "test": "vitest run test --config ../../vitest.packages.config.mts"
36
36
  },
37
37
  "dependencies": {
38
- "@inrupt/solid-client": "^3.0.0"
38
+ "@inrupt/solid-client": "^3.0.0",
39
+ "@undefineds.co/models": "0.2.59"
39
40
  },
40
41
  "peerDependencies": {
41
42
  "react": "^19.2.0"
@@ -150,7 +150,7 @@ const selected = selectAIConfigCredential('openai', credentialRows, providerRows
150
150
  Embedding defaults:
151
151
 
152
152
  - `dashscope` is the canonical provider id for Qwen/DashScope embedding; `qwen`, `alibaba`, and `dashscope-cn` normalize to `dashscope`.
153
- - The catalog default embedding model is `text-embedding-v4` with `modelType = "embedding"`; callers can use it as a fallback when the user has a DashScope credential but no explicit `AIConfig.embeddingModel`.
153
+ - The catalog default embedding model is `text-embedding-v4`, represented as an `EmbeddingModel`; callers can use it as a fallback when the user has a DashScope credential but no explicit `AIConfig.embeddingModel`. Legacy adapter DTOs may still expose `modelType: "embedding"`, but persisted RDF uses the subclass URI.
154
154
  - `paddleocr` has the official PaddleOCR AI Studio endpoint as provider `baseUrl`; users should only provide the TOKEN/API key credential.
155
155
 
156
156
  Selection semantics:
@@ -1,6 +1,6 @@
1
- import { type AIModelInsert, type AIModelRow } from '../ai-model.schema';
2
- import { type AIProviderInsert, type AIProviderRow } from '../ai-provider.schema';
3
- import type { CredentialInsert, CredentialRow } from '../credential.schema';
1
+ import { type AIModelInsert, type AIModelRow } from '../ai-model.schema.js';
2
+ import { type AIProviderInsert, type AIProviderRow } from '../ai-provider.schema.js';
3
+ import type { CredentialInsert, CredentialRow } from '../credential.schema.js';
4
4
  export interface AIConfigProviderCatalogEntry {
5
5
  id: string;
6
6
  displayName: string;
@@ -123,6 +123,11 @@ export declare const aiGatewayRepository: {
123
123
  id: string;
124
124
  revokedAt?: Date | string | number;
125
125
  }) => Promise<GatewayAccessKeyRow | null>;
126
+ readonly setAccessKeyEnabled: (db: AIGatewayRepositoryDb, input: {
127
+ id: string;
128
+ enabled: boolean;
129
+ disabledAt?: Date | string | number;
130
+ }) => Promise<GatewayAccessKeyRow | null>;
126
131
  readonly upsertQuotaSnapshot: (db: AIGatewayRepositoryDb, snapshot: QuotaSnapshotUpsert) => Promise<QuotaSnapshotRow | null>;
127
132
  readonly findFreshQuotaSnapshot: (db: AIGatewayRepositoryDb, input: FindFreshQuotaSnapshotInput) => Promise<QuotaSnapshotRow | null>;
128
133
  readonly findLatestQuotaSnapshot: (db: AIGatewayRepositoryDb, input: FindLatestQuotaSnapshotInput) => Promise<QuotaSnapshotRow | null>;
@@ -167,6 +167,15 @@ export const aiGatewayRepository = {
167
167
  }
168
168
  return db.updateById(gatewayAccessKeyResource, input.id, patch);
169
169
  },
170
+ setAccessKeyEnabled(db, input) {
171
+ const patch = {
172
+ disabledAt: input.enabled ? null : (asDate(input.disabledAt) ?? new Date()),
173
+ };
174
+ if (isAbsoluteIri(input.id)) {
175
+ return db.updateByIri(gatewayAccessKeyResource, input.id, patch);
176
+ }
177
+ return db.updateById(gatewayAccessKeyResource, input.id, patch);
178
+ },
170
179
  async upsertQuotaSnapshot(db, snapshot) {
171
180
  const validSnapshot = validateQuotaSnapshot(snapshot);
172
181
  const existing = isAbsoluteIri(validSnapshot.id)
@@ -1,4 +1,4 @@
1
- import { credentialResource, type CredentialInsert, type CredentialRow, type CredentialUpdate } from './credential.schema';
1
+ import { credentialResource, type CredentialInsert, type CredentialRow, type CredentialUpdate } from './credential.schema.js';
2
2
  export type AiRuntimeDeployment = 'local' | 'cloud' | string;
3
3
  export interface AiRuntimeCredentialTargetInput {
4
4
  deployment: AiRuntimeDeployment;
@@ -1,5 +1,5 @@
1
- import { type ControlRequestClaimDatabase, type ControlRequestClaimStatus } from './control-request.repository';
2
- import { approvalResource, type ApprovalRow } from './approval.schema';
1
+ import { type ControlRequestClaimDatabase, type ControlRequestClaimStatus } from './control-request.repository.js';
2
+ import { approvalResource, type ApprovalRow } from './approval.schema.js';
3
3
  export type ApprovalClaimStatus = ControlRequestClaimStatus;
4
4
  export interface ApprovalClaimRequest {
5
5
  /** Full ApprovalRequest IRI. Subscribe/watch envelopes should pass as:object. */
@@ -1,5 +1,5 @@
1
- import type { ApprovalRow } from './approval.schema';
2
- import type { AuditRow } from './audit.schema';
1
+ import type { ApprovalRow } from './approval.schema.js';
2
+ import type { AuditRow } from './audit.schema.js';
3
3
  export interface AuditPresentation {
4
4
  title: string;
5
5
  description: string;
@@ -1,4 +1,4 @@
1
- import { captureEventResource, type CaptureDecisionType, type CaptureEventRow } from './capture.schema';
1
+ import { captureEventResource, type CaptureDecisionType, type CaptureEventRow } from './capture.schema.js';
2
2
  export interface CaptureCandidateListWhere extends Record<string, unknown> {
3
3
  source?: string | null;
4
4
  suggestedType?: string | null;
@@ -1,4 +1,4 @@
1
- import { type SolidDatabase } from './repository';
1
+ import { type SolidDatabase } from './repository.js';
2
2
  export interface ChatProjectMemoryEntry {
3
3
  id: string;
4
4
  text: string;
@@ -1,5 +1,5 @@
1
- import { definePodRepository } from './repository';
2
- import { chatResource, type ChatRow, type ChatInsert, type ChatUpdate } from './chat.schema';
1
+ import { definePodRepository } from './repository.js';
2
+ import { chatResource, type ChatRow, type ChatInsert, type ChatUpdate } from './chat.schema.js';
3
3
  export declare function buildChatRepositoryTarget(chatIdOrRef: string): {
4
4
  id: string;
5
5
  };
@@ -1,5 +1,5 @@
1
- import type { approvalResource, ApprovalRow, ApprovalUpdate } from './approval.schema';
2
- import type { inputRequestResource, InputRequestRow, InputRequestUpdate } from './input-request.schema';
1
+ import type { approvalResource, ApprovalRow, ApprovalUpdate } from './approval.schema.js';
2
+ import type { inputRequestResource, InputRequestRow, InputRequestUpdate } from './input-request.schema.js';
3
3
  export type ControlRequestClaimStatus = 'claimed' | 'lost' | 'not_found' | 'not_actionable';
4
4
  export interface ClaimableControlRequestRow {
5
5
  status?: string | null;
@@ -1,4 +1,4 @@
1
- import { type SolidDatabase } from './repository';
1
+ import { type SolidDatabase } from './repository.js';
2
2
  export interface ConversationShareWhere extends Record<string, unknown> {
3
3
  thread?: string;
4
4
  }
@@ -18,6 +18,7 @@ export declare const credentialResource: import("@undefineds.co/drizzle-solid/di
18
18
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
19
19
  provider: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
20
20
  authMode: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, true>;
21
+ offeringId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
21
22
  service: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
22
23
  status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
23
24
  apiKey: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
@@ -49,11 +50,13 @@ export declare const credentialResource: import("@undefineds.co/drizzle-solid/di
49
50
  oauthExpiresAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
50
51
  projectId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
51
52
  organizationId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
53
+ metadata: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"json", null, false, false>;
52
54
  }>>;
53
55
  export declare const credentialTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
54
56
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
55
57
  provider: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
56
58
  authMode: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, true>;
59
+ offeringId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
57
60
  service: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
58
61
  status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
59
62
  apiKey: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
@@ -85,11 +88,13 @@ export declare const credentialTable: import("@undefineds.co/drizzle-solid/dist/
85
88
  oauthExpiresAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
86
89
  projectId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
87
90
  organizationId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
91
+ metadata: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"json", null, false, false>;
88
92
  }>>;
89
93
  export declare const apiKeyCredentialResource: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
90
94
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
91
95
  provider: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
92
96
  authMode: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, true>;
97
+ offeringId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
93
98
  service: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
94
99
  status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
95
100
  apiKey: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
@@ -121,11 +126,13 @@ export declare const apiKeyCredentialResource: import("@undefineds.co/drizzle-so
121
126
  oauthExpiresAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
122
127
  projectId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
123
128
  organizationId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
129
+ metadata: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"json", null, false, false>;
124
130
  }>>;
125
131
  export declare const apiKeyCredentialTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
126
132
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
127
133
  provider: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
128
134
  authMode: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, true>;
135
+ offeringId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
129
136
  service: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
130
137
  status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
131
138
  apiKey: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
@@ -157,11 +164,13 @@ export declare const apiKeyCredentialTable: import("@undefineds.co/drizzle-solid
157
164
  oauthExpiresAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
158
165
  projectId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
159
166
  organizationId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
167
+ metadata: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"json", null, false, false>;
160
168
  }>>;
161
169
  export declare const oauthCredentialResource: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
162
170
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
163
171
  provider: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
164
172
  authMode: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, true>;
173
+ offeringId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
165
174
  service: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
166
175
  status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
167
176
  apiKey: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
@@ -193,11 +202,13 @@ export declare const oauthCredentialResource: import("@undefineds.co/drizzle-sol
193
202
  oauthExpiresAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
194
203
  projectId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
195
204
  organizationId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
205
+ metadata: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"json", null, false, false>;
196
206
  }>>;
197
207
  export declare const oauthCredentialTable: import("@undefineds.co/drizzle-solid/dist/core/schema").PodTableWithColumns<import("@undefineds.co/drizzle-solid/dist/core/schema").ResolvedColumns<{
198
208
  id: import("@undefineds.co/drizzle-solid/dist/core/schema").PodStringColumn<false, false>;
199
209
  provider: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"uri", null, false, false>;
200
210
  authMode: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, true>;
211
+ offeringId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
201
212
  service: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
202
213
  status: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, true, true>;
203
214
  apiKey: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
@@ -229,6 +240,7 @@ export declare const oauthCredentialTable: import("@undefineds.co/drizzle-solid/
229
240
  oauthExpiresAt: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"datetime", null, false, false>;
230
241
  projectId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
231
242
  organizationId: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"string", null, false, false>;
243
+ metadata: import("@undefineds.co/drizzle-solid/dist/core/schema").ColumnBuilder<"json", null, false, false>;
232
244
  }>>;
233
245
  export type CredentialRow = typeof credentialResource.$inferSelect;
234
246
  export type CredentialInsert = typeof credentialResource.$inferInsert;
@@ -1,4 +1,4 @@
1
- import { boolean, id, integer, podTable, string, text, timestamp, uri } from "@undefineds.co/drizzle-solid";
1
+ import { boolean, id, integer, json, podTable, string, text, timestamp, uri } from "@undefineds.co/drizzle-solid";
2
2
  import { DCTerms, UDFS } from "./namespaces.js";
3
3
  export const ProviderAuthMode = {
4
4
  oauth: "oauth",
@@ -19,6 +19,14 @@ export const credentialResource = podTable("credential", {
19
19
  // Keep the write default while allowing credentials created before authMode
20
20
  // was introduced to remain queryable and migratable.
21
21
  authMode: string("authMode").predicate(UDFS.authMode).default(ProviderAuthMode.apiKey),
22
+ // Which offering of the provider this credential connects through, by the
23
+ // offering id the provider catalog publishes (`api-platform`,
24
+ // `official-subscription`, `subscription-key`, `token-plan`,
25
+ // `pay-as-you-go`, `local`, …). A plain attribute rather than a relation:
26
+ // offerings are catalog content, not Pod resources, and the set grows with
27
+ // the catalog, so the schema does not enumerate it. Never encode it in the
28
+ // provider resource id - `provider` says which provider, this says how.
29
+ offeringId: string("offeringId").predicate(UDFS.offeringId),
22
30
  service: string("service").predicate(UDFS.service).notNull().default("ai"),
23
31
  status: string("status").predicate(UDFS.status).notNull().default("active"),
24
32
  apiKey: string("apiKey").predicate(UDFS.apiKey),
@@ -37,6 +45,7 @@ export const credentialResource = podTable("credential", {
37
45
  proxyUrl: string("proxyUrl").predicate(UDFS.proxyUrl),
38
46
  label: string("label").predicate(UDFS.label),
39
47
  isDefault: boolean("isDefault").predicate(UDFS.isDefault).default(false),
48
+ // Older credentials predate this field; keep reads optional and default new writes.
40
49
  createdAt: timestamp("createdAt").predicate(DCTerms.created).defaultNow(),
41
50
  lastUsedAt: timestamp("lastUsedAt").predicate(UDFS.lastUsedAt),
42
51
  // A credential Xpod itself issued to a client (the gateway `sk-` key) names the
@@ -56,6 +65,11 @@ export const credentialResource = podTable("credential", {
56
65
  oauthExpiresAt: timestamp("oauthExpiresAt").predicate(UDFS.oauthExpiresAt),
57
66
  projectId: string("projectId").predicate(UDFS.projectId),
58
67
  organizationId: string("organizationId").predicate(UDFS.organizationId),
68
+ // Opaque adapter-local metadata only (account identity, compat switches, UI
69
+ // health/priority …). Shared relations must be explicit typed columns: a write
70
+ // to an undeclared column is dropped silently, so this declaration is what
71
+ // keeps existing callers' `metadata.*` reads and writes working.
72
+ metadata: json("metadata").predicate(UDFS.metadata),
59
73
  }, {
60
74
  base: "/settings/",
61
75
  sparqlEndpoint: "/settings/-/sparql",
@@ -4,8 +4,8 @@
4
4
  * 提供 AI 供应商、模型等元数据的发现服务
5
5
  * 支持内置数据 + 远程 API 获取(有 Key 时)
6
6
  */
7
- export * from './types';
8
- import type { ProviderMetadata, ModelMetadata, DiscoveryService } from './types';
7
+ export * from './types.js';
8
+ import type { ProviderMetadata, ModelMetadata, DiscoveryService } from './types.js';
9
9
  declare class BuiltinDiscoveryService implements DiscoveryService {
10
10
  getProviders(): Promise<ProviderMetadata[]>;
11
11
  getProvider(slug: string): Promise<ProviderMetadata | undefined>;