@undefineds.co/xpod 0.4.12 → 0.4.13

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 (207) hide show
  1. package/dist/acceptance/QleverSemanticConformance.js +7 -0
  2. package/dist/api/ai-gateway/providers/OfferingAuthorization.d.ts +6 -1
  3. package/dist/api/ai-gateway/providers/OfferingAuthorization.js +0 -3
  4. package/dist/api/ai-gateway/providers/ProviderRegistry.js +2 -2
  5. package/dist/api/ai-gateway/service-access/AiConnectionsServiceAccess.d.ts +1 -1
  6. package/dist/api/ai-gateway/service-access/AiConnectionsServiceAccess.js +1 -1
  7. package/dist/api/service/AiClientConfigurationService.d.ts +1 -1
  8. package/dist/api/service/AiClientConfigurationService.js +1 -1
  9. package/dist/storage/rdf/PostgresRdfEngine.js +10 -4
  10. package/dist/storage/rdf/RdfAccessScope.js +15 -1
  11. package/dist/storage/rdf/RdfEngineRdfJsSource.js +10 -2
  12. package/node_modules/@undefineds.co/ai-connections/dist/AiApiKeyPool.d.ts +1 -1
  13. package/node_modules/@undefineds.co/ai-connections/dist/AiApiKeyPool.js +1 -1
  14. package/node_modules/@undefineds.co/ai-connections/dist/AiAuthorizationActions.d.ts +1 -1
  15. package/node_modules/@undefineds.co/ai-connections/dist/AiClientConfigurationSection.d.ts +1 -1
  16. package/node_modules/@undefineds.co/ai-connections/dist/AiClientConfigurationSection.js +3 -3
  17. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectDialog.d.ts +1 -1
  18. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsPanel.d.ts +1 -1
  19. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsPanel.js +2 -2
  20. package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialPoolSection.d.ts +1 -1
  21. package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialRow.d.ts +1 -1
  22. package/node_modules/@undefineds.co/ai-connections/dist/AiCustomProviderDialog.d.ts +1 -1
  23. package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeyRow.d.ts +1 -1
  24. package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeysSection.d.ts +1 -1
  25. package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayModelsSection.d.ts +1 -1
  26. package/node_modules/@undefineds.co/ai-connections/dist/AiOfferingDetails.d.ts +1 -1
  27. package/node_modules/@undefineds.co/ai-connections/dist/AiProviderCard.d.ts +1 -1
  28. package/node_modules/@undefineds.co/ai-connections/dist/AiQuotaCard.d.ts +1 -1
  29. package/node_modules/@undefineds.co/ai-connections/dist/AiSortableCredentialList.d.ts +1 -1
  30. package/node_modules/@undefineds.co/ai-connections/dist/authorization-methods.d.ts +13 -11
  31. package/node_modules/@undefineds.co/ai-connections/dist/authorization-methods.js +16 -13
  32. package/node_modules/@undefineds.co/ai-connections/dist/collection-runtime.d.ts +1 -1
  33. package/node_modules/@undefineds.co/ai-connections/dist/collection-runtime.js +3 -3
  34. package/node_modules/@undefineds.co/ai-connections/dist/collections.d.ts +1 -1
  35. package/node_modules/@undefineds.co/ai-connections/dist/collections.js +3 -3
  36. package/node_modules/@undefineds.co/ai-connections/dist/controller.d.ts +1 -1
  37. package/node_modules/@undefineds.co/ai-connections/dist/controller.js +3 -2
  38. package/node_modules/@undefineds.co/ai-connections/dist/credential-labels.d.ts +1 -1
  39. package/node_modules/@undefineds.co/ai-connections/dist/display-wording.d.ts +20 -0
  40. package/node_modules/@undefineds.co/ai-connections/dist/display-wording.js +73 -0
  41. package/node_modules/@undefineds.co/ai-connections/dist/error-wording.d.ts +24 -0
  42. package/node_modules/@undefineds.co/ai-connections/dist/error-wording.js +253 -0
  43. package/node_modules/@undefineds.co/ai-connections/dist/gateway-endpoints.js +1 -1
  44. package/node_modules/@undefineds.co/ai-connections/dist/index.d.ts +2 -3
  45. package/node_modules/@undefineds.co/ai-connections/dist/index.js +2 -3
  46. package/node_modules/@undefineds.co/ai-connections/dist/offering-endpoints.d.ts +1 -1
  47. package/node_modules/@undefineds.co/ai-connections/dist/offering-label.d.ts +1 -1
  48. package/node_modules/@undefineds.co/ai-connections/dist/provider-visuals.d.ts +1 -1
  49. package/node_modules/@undefineds.co/ai-connections/dist/service-access.js +1 -1
  50. package/node_modules/@undefineds.co/ai-connections/dist/useAiConnectDialog.d.ts +1 -1
  51. package/node_modules/@undefineds.co/ai-connections/package.json +1 -24
  52. package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/ai-connections-client.d.ts +5 -3
  53. package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/ai-connections-client.js +5 -3
  54. package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client/normalize.d.ts +17 -7
  55. package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client/normalize.js +18 -213
  56. package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client/request.js +3 -3
  57. package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client/types.d.ts +11 -2
  58. package/node_modules/@undefineds.co/ai-connections-core/dist/index.d.ts +9 -0
  59. package/node_modules/@undefineds.co/ai-connections-core/dist/index.js +9 -0
  60. package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/provider-catalog.cjs +2 -25
  61. package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/provider-catalog.d.ts +9 -8
  62. package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/provider-catalog.js +11 -31
  63. package/node_modules/@undefineds.co/ai-connections-core/package.json +61 -0
  64. package/node_modules/@undefineds.co/shared-ui/dist/index.d.ts +4 -2
  65. package/node_modules/@undefineds.co/shared-ui/dist/index.js +4 -2
  66. package/node_modules/@undefineds.co/shared-ui/dist/login/LoginModal.d.ts +4 -1
  67. package/node_modules/@undefineds.co/shared-ui/dist/login/LoginModal.js +12 -6
  68. package/node_modules/@undefineds.co/shared-ui/dist/login/LoginView.d.ts +1 -1
  69. package/node_modules/@undefineds.co/shared-ui/dist/login/host-types.d.ts +7 -1
  70. package/node_modules/@undefineds.co/shared-ui/dist/login/login-branding.d.ts +6 -0
  71. package/node_modules/@undefineds.co/shared-ui/dist/login/login-branding.js +18 -0
  72. package/node_modules/@undefineds.co/shared-ui/dist/user-facing-errors.d.ts +14 -2
  73. package/node_modules/@undefineds.co/shared-ui/dist/user-facing-errors.js +26 -17
  74. package/node_modules/@undefineds.co/solid-sdk/dist/login-store.d.ts +3 -3
  75. package/node_modules/@undefineds.co/solid-sdk/dist/login-store.js +3 -3
  76. package/package.json +5 -3
  77. package/static/app/assets/main.css +1 -1
  78. package/static/auth-callback/assets/{AiConfigContext-DnQs1ZpW.js → AiConfigContext-DlFyEWy9.js} +1 -1
  79. package/static/auth-callback/assets/{AiConfigPage-DOtvlxH0.js → AiConfigPage-CkYk-SFW.js} +1 -1
  80. package/static/auth-callback/assets/{DocumentProcessingPanel-BS2voQgL.js → DocumentProcessingPanel-CqIr3JqN.js} +1 -1
  81. package/static/auth-callback/assets/{IndexLifecyclePanel-Cvt0cJtN.js → IndexLifecyclePanel-C1GKV3Vx.js} +1 -1
  82. package/static/auth-callback/assets/{IndexSubjectPanel-Dhf01GqF.js → IndexSubjectPanel-ro9lC6XW.js} +1 -1
  83. package/static/auth-callback/assets/{ModelAssignmentsPanel-BJutWaAF.js → ModelAssignmentsPanel-DxNdyKRJ.js} +1 -1
  84. package/static/auth-callback/assets/{ModelsPage-BRS0sje3.js → ModelsPage-BVtWSPBU.js} +6 -6
  85. package/static/auth-callback/assets/{NetworkPage-B3qBfANA.js → NetworkPage-cEvxRMAl.js} +1 -1
  86. package/static/auth-callback/assets/{PaneListHeader-QQeJGTp4.js → PaneListHeader-ByKw8ada.js} +1 -1
  87. package/static/auth-callback/assets/{SearchIndexingPanel-MyNUSEwT.js → SearchIndexingPanel-CulBKcYT.js} +1 -1
  88. package/static/auth-callback/assets/{StatusSubjectPanel-DQkEVsFs.js → StatusSubjectPanel-VOcfrt8o.js} +1 -1
  89. package/static/auth-callback/assets/{StatusWorkspace-Dkv63Uwk.js → StatusWorkspace-Jsz6hAdE.js} +1 -1
  90. package/static/auth-callback/assets/{SystemSettingsPage-TIsUfX5d.js → SystemSettingsPage-BFNvGAle.js} +1 -1
  91. package/static/auth-callback/assets/{SystemSettingsSubjectPanel-BJWEt2-7.js → SystemSettingsSubjectPanel-DFRdrSfK.js} +1 -1
  92. package/static/auth-callback/assets/XpodAiConnectionsPodStore-C6KpvHVg.js +3 -0
  93. package/static/auth-callback/assets/{activity-5hNeNKnL.js → activity-DnTlb9iM.js} +1 -1
  94. package/static/auth-callback/assets/ai-connections-C6yaE6WQ.js +1 -0
  95. package/static/auth-callback/assets/auth-callback-Cx9D_1qj.css +1 -0
  96. package/static/auth-callback/assets/{auth-callback-CAFZ3R0B.js → auth-callback-D2UkK5Xj.js} +3 -3
  97. package/static/auth-callback/assets/{badge-CAIPI0CB.js → badge-D7IJuuTM.js} +1 -1
  98. package/static/auth-callback/assets/{collection-runtime-D9s7h9YA.js → collection-runtime-wT1n4GS2.js} +1 -1
  99. package/static/auth-callback/assets/{dialog-BjA109aX.js → dialog-DickLu5z.js} +1 -1
  100. package/static/auth-callback/assets/{download-B3Up5W2G.js → download-kn8WnRu3.js} +1 -1
  101. package/static/auth-callback/assets/{external-link-BTXgSPzB.js → external-link-B6B8jfSn.js} +1 -1
  102. package/static/auth-callback/assets/{index-DlLYWOhw.js → index-Cu0EguPo.js} +2 -2
  103. package/static/auth-callback/assets/{index-BppXlxcp.js → index-DHF97YLP.js} +1 -1
  104. package/static/auth-callback/assets/{index-CirW4CJf.js → index-Dz83EEHD.js} +1 -1
  105. package/static/auth-callback/assets/{index-browser-DtU38ni3.js → index-browser-CSghinyi.js} +1 -1
  106. package/static/auth-callback/assets/{key-round-CQCOrZ7x.js → key-round-ChkOx3E1.js} +1 -1
  107. package/static/auth-callback/assets/{rotate-ccw-C1zM2KtS.js → rotate-ccw-B3hE-nyd.js} +1 -1
  108. package/static/auth-callback/assets/{skeleton-Cqp7_M9-.js → skeleton-kEqR7tpI.js} +1 -1
  109. package/static/auth-callback/assets/{waypoints-Bj6gAUSQ.js → waypoints-D6Jo-SZa.js} +1 -1
  110. package/static/auth-callback/assets/{workspace-layout-DK8mDzrY.js → workspace-layout-BHwT_cHd.js} +1 -1
  111. package/static/auth-callback/auth-callback.html +2 -2
  112. package/static/dashboard/assets/{AiConfigContext-BsE7MqX8.js → AiConfigContext-BfC3v-x2.js} +1 -1
  113. package/static/dashboard/assets/{AiConfigPage-DvM-lRXa.js → AiConfigPage-QNS3u7Ff.js} +1 -1
  114. package/static/dashboard/assets/{DocumentProcessingPanel-BPfdlfuf.js → DocumentProcessingPanel-Dr4XLeT4.js} +1 -1
  115. package/static/dashboard/assets/{IndexLifecyclePanel--m0AGxvh.js → IndexLifecyclePanel-KtM_gpeO.js} +1 -1
  116. package/static/dashboard/assets/{IndexSubjectPanel-Bb7m1k3d.js → IndexSubjectPanel-DLaiKdLc.js} +1 -1
  117. package/static/dashboard/assets/{ModelAssignmentsPanel-BLi_zbMa.js → ModelAssignmentsPanel-Bk7TvQRq.js} +1 -1
  118. package/static/dashboard/assets/{ModelsPage-CxdpgnfR.js → ModelsPage-Cci3vlos.js} +6 -6
  119. package/static/dashboard/assets/{NetworkPage-BAIPw-D_.js → NetworkPage-Ot4G2dX5.js} +1 -1
  120. package/static/dashboard/assets/{PaneListHeader-BBCMei0r.js → PaneListHeader-qHME_s08.js} +1 -1
  121. package/static/dashboard/assets/{SearchIndexingPanel-Ck4Y-xjR.js → SearchIndexingPanel-HZPKj8H9.js} +1 -1
  122. package/static/dashboard/assets/{StatusSubjectPanel-D1KWfAXE.js → StatusSubjectPanel-ij7IpI8d.js} +1 -1
  123. package/static/dashboard/assets/{StatusWorkspace-JbA5gzXx.js → StatusWorkspace-Cp02JcaN.js} +1 -1
  124. package/static/dashboard/assets/{SystemSettingsPage-BbwQWsSR.js → SystemSettingsPage-BSeuvb8X.js} +1 -1
  125. package/static/dashboard/assets/{SystemSettingsSubjectPanel-N117nMt5.js → SystemSettingsSubjectPanel-CP4_luGS.js} +1 -1
  126. package/static/dashboard/assets/{XpodAiConnectionsPodStore-CdDOb4SV.js → XpodAiConnectionsPodStore-urO6zaHL.js} +7 -7
  127. package/static/dashboard/assets/{activity-DX1I96o_.js → activity-DxjgQNvr.js} +1 -1
  128. package/static/dashboard/assets/ai-connections-CXp5gd1J.js +1 -0
  129. package/static/dashboard/assets/{badge-k2vhtDqH.js → badge-53qCrRbl.js} +1 -1
  130. package/static/dashboard/assets/{collection-runtime-BFQ8teQJ.js → collection-runtime-BPAmHG46.js} +1 -1
  131. package/static/dashboard/assets/{dashboard-DWZ-fmCT.js → dashboard-BcT2ByXw.js} +2 -2
  132. package/static/dashboard/assets/dashboard-Cx9D_1qj.css +1 -0
  133. package/static/dashboard/assets/{dialog-1CCw-iHT.js → dialog-B28YtNhS.js} +1 -1
  134. package/static/dashboard/assets/{download-C6-SNY1q.js → download-DkLNceJ4.js} +1 -1
  135. package/static/dashboard/assets/{external-link-BgPcZ_j2.js → external-link-D3TXnlo3.js} +1 -1
  136. package/static/dashboard/assets/{index-D7A8U6Pt.js → index-CFIenkeK.js} +1 -1
  137. package/static/dashboard/assets/{index-6LcIUIYO.js → index-CIiBu9mr.js} +1 -1
  138. package/static/dashboard/assets/{index-UD6QOE7H.js → index-Gp3cLolR.js} +2 -2
  139. package/static/dashboard/assets/{key-round-BOd7Jo0Q.js → key-round-B5ccp6nx.js} +1 -1
  140. package/static/dashboard/assets/{rotate-ccw-CCgJqsvx.js → rotate-ccw-DUpfkNnk.js} +1 -1
  141. package/static/dashboard/assets/{skeleton-Bc7abAn5.js → skeleton-BRe19fO0.js} +1 -1
  142. package/static/dashboard/assets/{waypoints-s-opmJxx.js → waypoints-BKDMxEvu.js} +1 -1
  143. package/static/dashboard/assets/{workspace-layout-DqIQeTBV.js → workspace-layout-ZTF7C16h.js} +1 -1
  144. package/static/dashboard/dashboard.html +2 -2
  145. package/static/settings/assets/{AiConfigContext-BB9KZySa.js → AiConfigContext-DsyWgu2i.js} +1 -1
  146. package/static/settings/assets/{AiConfigPage-DGSXUkLs.js → AiConfigPage-CSCBckKo.js} +1 -1
  147. package/static/settings/assets/{DocumentProcessingPanel-Da2Re6Rg.js → DocumentProcessingPanel-w9yQDbBe.js} +1 -1
  148. package/static/settings/assets/{IndexLifecyclePanel-BSZuIzgr.js → IndexLifecyclePanel-CUUXI8mP.js} +1 -1
  149. package/static/settings/assets/{IndexSubjectPanel-CFd0ay-r.js → IndexSubjectPanel-BypAU5TJ.js} +1 -1
  150. package/static/settings/assets/{ModelAssignmentsPanel-CSAryvWJ.js → ModelAssignmentsPanel-BetgXw1G.js} +1 -1
  151. package/static/settings/assets/{ModelsPage-BQwCwLHU.js → ModelsPage-DZpTlTZ3.js} +6 -6
  152. package/static/settings/assets/{NetworkPage-BKymvsQc.js → NetworkPage-BVkasFGM.js} +1 -1
  153. package/static/settings/assets/{PaneListHeader-Bjh3hRdQ.js → PaneListHeader-BGOqGec4.js} +1 -1
  154. package/static/settings/assets/{SearchIndexingPanel-MjKL5QLU.js → SearchIndexingPanel-DYAbpZ_9.js} +1 -1
  155. package/static/settings/assets/{StatusSubjectPanel-Bvl6K4mx.js → StatusSubjectPanel-CFgzeQ8Q.js} +1 -1
  156. package/static/settings/assets/{StatusWorkspace-B0NzrP--.js → StatusWorkspace-4Z6g4Jvv.js} +1 -1
  157. package/static/settings/assets/{SystemSettingsPage-D2z6Z4FE.js → SystemSettingsPage-C1tlrgvI.js} +1 -1
  158. package/static/settings/assets/{SystemSettingsSubjectPanel-4sxma4X4.js → SystemSettingsSubjectPanel-CcURI-1L.js} +1 -1
  159. package/static/settings/assets/XpodAiConnectionsPodStore-owBQc5nY.js +3 -0
  160. package/static/settings/assets/{activity-CgJJGpjx.js → activity-CtBc9cNy.js} +1 -1
  161. package/static/settings/assets/ai-connections-C6yaE6WQ.js +1 -0
  162. package/static/settings/assets/{badge-C4NypVyT.js → badge--r-FDIhU.js} +1 -1
  163. package/static/settings/assets/{collection-runtime-CTLCDxAi.js → collection-runtime-CnhPmwAM.js} +1 -1
  164. package/static/settings/assets/{dialog-Csq0vWUi.js → dialog-B7ZRsjN7.js} +1 -1
  165. package/static/settings/assets/{download-DaLJJ-Wp.js → download-DgQ1F8QR.js} +1 -1
  166. package/static/settings/assets/{external-link--w_iW5Au.js → external-link-Bz7NckNO.js} +1 -1
  167. package/static/settings/assets/{index-B0mQa59b.js → index-BdXwm8nh.js} +2 -2
  168. package/static/settings/assets/{index-COmVnZi2.js → index-CkGda_Pg.js} +1 -1
  169. package/static/settings/assets/{index-BukHiu4y.js → index-Vv-8Vslg.js} +1 -1
  170. package/static/settings/assets/{index-browser-BGpvHwD0.js → index-browser-Dq7omlpY.js} +1 -1
  171. package/static/settings/assets/{key-round-Bk4YRjBu.js → key-round-CvuhloKV.js} +1 -1
  172. package/static/settings/assets/{rotate-ccw-TCabbqsr.js → rotate-ccw-DgFKDaz7.js} +1 -1
  173. package/static/settings/assets/{settings-CJWpdbNC.js → settings-BvqY7K96.js} +3 -3
  174. package/static/settings/assets/settings-Cx9D_1qj.css +1 -0
  175. package/static/settings/assets/{skeleton-JDHYVe7t.js → skeleton-D3OeFDF6.js} +1 -1
  176. package/static/settings/assets/{waypoints-DDvEl-MU.js → waypoints-C4WbspTb.js} +1 -1
  177. package/static/settings/assets/{workspace-layout-DV5QU30U.js → workspace-layout-B9H1Tqrk.js} +1 -1
  178. package/static/settings/settings.html +2 -2
  179. package/static/auth-callback/assets/XpodAiConnectionsPodStore-BJiXm-PF.js +0 -3
  180. package/static/auth-callback/assets/ai-connections-CryuHGKW.js +0 -1
  181. package/static/auth-callback/assets/auth-callback-rk080mvG.css +0 -1
  182. package/static/dashboard/assets/ai-connections-DwCRqOQa.js +0 -1
  183. package/static/dashboard/assets/dashboard-rk080mvG.css +0 -1
  184. package/static/settings/assets/XpodAiConnectionsPodStore-BkNQ8fZx.js +0 -3
  185. package/static/settings/assets/ai-connections-CryuHGKW.js +0 -1
  186. package/static/settings/assets/settings-rk080mvG.css +0 -1
  187. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client/request.d.ts +0 -0
  188. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client/types.js +0 -0
  189. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/base-adapter.d.ts +0 -0
  190. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/base-adapter.js +0 -0
  191. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/codex.d.ts +0 -0
  192. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/codex.js +0 -0
  193. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/index.cjs +0 -0
  194. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/index.d.ts +0 -0
  195. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/index.js +0 -0
  196. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/json-env-adapter.d.ts +0 -0
  197. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/json-env-adapter.js +0 -0
  198. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/pi.d.ts +0 -0
  199. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/pi.js +0 -0
  200. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/transaction.d.ts +0 -0
  201. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/transaction.js +0 -0
  202. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/types.d.ts +0 -0
  203. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/client-config/types.js +0 -0
  204. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/credential-storage.d.ts +0 -0
  205. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/credential-storage.js +0 -0
  206. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/endpoint-urls.d.ts +0 -0
  207. /package/node_modules/@undefineds.co/{ai-connections → ai-connections-core}/dist/endpoint-urls.js +0 -0
@@ -161,8 +161,15 @@ async function prepareAndApplyUpdate(engine, sparql, sourceUri, timeoutMs) {
161
161
  }
162
162
  const nativeSemanticCaseExecutor = {
163
163
  prepareAndApplyUpdate,
164
+ // The fixture queries a container endpoint (`DEFAULT_BASE_PATH`), and every
165
+ // `Pod` query that is not inside `GRAPH` reads that container plus its
166
+ // subgraphs. `scopedUnion` is the dataset mode the product uses for a
167
+ // container endpoint (`SubgraphSparqlHttpHandler`), so the native authority is
168
+ // exercised under the same rule as the public authority, which has no dataset
169
+ // switch and always reads the endpoint scope.
164
170
  query: (engine, testCase, timeoutMs) => nativeSparqlQuery(engine, testCase.query, {
165
171
  basePath: RdfSemanticConformance_1.DEFAULT_BASE_PATH,
172
+ defaultDataset: 'scopedUnion',
166
173
  operation: (0, RdfSemanticConformance_1.queryOperation)(testCase.acceptMediaType),
167
174
  acceptMediaType: testCase.acceptMediaType,
168
175
  timeoutMs,
@@ -3,7 +3,12 @@ export interface OfferingAuthorizationMethod {
3
3
  id: string;
4
4
  authMode: 'oauth' | 'deviceCode' | 'local' | 'apiKey';
5
5
  connectMode?: 'authorizationCodeOAuth' | 'deviceCodeOAuth' | 'browserAssistedApiKey';
6
- label: string;
6
+ /**
7
+ * Wording is the applet's (`display-wording.ts` in `@undefineds.co/ai-connections`),
8
+ * decided from the entry's id. The gateway names the entry and says whether this
9
+ * deployment can offer it; it does not write the button.
10
+ */
11
+ label?: string;
7
12
  lifecycle: 'active' | 'unavailable';
8
13
  reason?: string;
9
14
  }
@@ -12,7 +12,6 @@ function subscriptionAuthorizationMethods(deployment, binding) {
12
12
  id: 'browser-oauth',
13
13
  authMode: 'oauth',
14
14
  connectMode: 'authorizationCodeOAuth',
15
- label: '浏览器登录',
16
15
  lifecycle: deployment === 'local' ? 'active' : 'unavailable',
17
16
  ...(deployment === 'local' ? {} : { reason: '浏览器登录需要本机回调,请在本机 Xpod 中使用,或选择设备码登录。' }),
18
17
  }] : [];
@@ -22,13 +21,11 @@ function subscriptionAuthorizationMethods(deployment, binding) {
22
21
  id: 'device-code',
23
22
  authMode: 'deviceCode',
24
23
  connectMode: 'deviceCodeOAuth',
25
- label: '设备码登录',
26
24
  lifecycle: 'active',
27
25
  },
28
26
  {
29
27
  id: 'local-session-import',
30
28
  authMode: 'local',
31
- label: '已有登录态',
32
29
  lifecycle: deployment === 'local' ? 'active' : 'unavailable',
33
30
  ...(deployment === 'local' ? {} : { reason: '请在运行本机客户端的 Xpod 上导入登录态。' }),
34
31
  },
@@ -8,7 +8,7 @@ exports.offeringDeclaresUpstreamCapability = offeringDeclaresUpstreamCapability;
8
8
  exports.normalizeProviderId = normalizeProviderId;
9
9
  const models_1 = require("@undefineds.co/models");
10
10
  const defaultEmbeddingProfile_1 = require("../../../ai/service/defaultEmbeddingProfile");
11
- const provider_catalog_1 = require("@undefineds.co/ai-connections/provider-catalog");
11
+ const provider_catalog_1 = require("@undefineds.co/ai-connections-core/provider-catalog");
12
12
  const OfferingAuthorization_1 = require("./OfferingAuthorization");
13
13
  exports.OPENAI_SUBSCRIPTION_BASE_URL = 'https://chatgpt.com/backend-api/codex';
14
14
  exports.MANAGED_PROVIDER_VOCABULARY = [
@@ -280,7 +280,7 @@ function providerProductsForDeployment(deployment) {
280
280
  }
281
281
  else if (offering.kind === 'local') {
282
282
  authorizationMethods.push({
283
- id: 'local-service', authMode: 'local', label: '本地服务',
283
+ id: 'local-service', authMode: 'local',
284
284
  lifecycle: offering.lifecycle === 'unavailable' ? 'unavailable' : 'active',
285
285
  });
286
286
  }
@@ -1,4 +1,4 @@
1
- import { AI_CONNECTIONS_PROVIDER_DOCUMENT_IDS } from '@undefineds.co/ai-connections/provider-catalog';
1
+ import { AI_CONNECTIONS_PROVIDER_DOCUMENT_IDS } from '@undefineds.co/ai-connections-core/provider-catalog';
2
2
  export declare const AI_CONNECTIONS_APPLET_ID = "co.undefineds.ai-connections";
3
3
  /**
4
4
  * Provider documents this service may reach. The list is projected from the
@@ -7,7 +7,7 @@ exports.resolveGatewayAccessKeySecretResourceUrl = resolveGatewayAccessKeySecret
7
7
  exports.resolveGatewayAccessKeySparqlEndpoint = resolveGatewayAccessKeySparqlEndpoint;
8
8
  exports.isGatewayAccessKeySparqlEndpoint = isGatewayAccessKeySparqlEndpoint;
9
9
  const drizzle_solid_1 = require("@undefineds.co/drizzle-solid");
10
- const provider_catalog_1 = require("@undefineds.co/ai-connections/provider-catalog");
10
+ const provider_catalog_1 = require("@undefineds.co/ai-connections-core/provider-catalog");
11
11
  Object.defineProperty(exports, "AI_CONNECTIONS_PROVIDER_DOCUMENT_IDS", { enumerable: true, get: function () { return provider_catalog_1.AI_CONNECTIONS_PROVIDER_DOCUMENT_IDS; } });
12
12
  const models_1 = require("@undefineds.co/models");
13
13
  exports.AI_CONNECTIONS_APPLET_ID = 'co.undefineds.ai-connections';
@@ -1,4 +1,4 @@
1
- import { type AiClientModelReference } from '@undefineds.co/ai-connections/client-config';
1
+ import { type AiClientModelReference } from '@undefineds.co/ai-connections-core/client-config';
2
2
  import type { AuthContext } from '../auth/AuthContext';
3
3
  export type AiClientId = 'codex' | 'claude-code' | 'pi' | 'codebuddy';
4
4
  export interface AiClientConfigurationCapabilityDescriptor {
@@ -10,7 +10,7 @@ const node_crypto_1 = require("node:crypto");
10
10
  const node_path_1 = __importDefault(require("node:path"));
11
11
  const node_fs_1 = require("node:fs");
12
12
  const node_child_process_1 = require("node:child_process");
13
- const client_config_1 = require("@undefineds.co/ai-connections/client-config");
13
+ const client_config_1 = require("@undefineds.co/ai-connections-core/client-config");
14
14
  const PLAN_SECRET_PLACEHOLDER = '[redacted]';
15
15
  const MANUAL_INSTRUCTIONS = 'Manual client setup is available when this host cannot safely write local coding-client files.';
16
16
  const CLIENT_LABELS = {
@@ -5716,12 +5716,18 @@ class PostgresRdfEngine {
5716
5716
  continue;
5717
5717
  }
5718
5718
  if ((0, types_1.isTerm)(value)) {
5719
- // An access-scoped DefaultGraph represents the logical union of Pod
5720
- // source documents. Their physical facts retain named graph IDs, so
5721
- // constraining graph_id to the RDF default-graph term incorrectly
5722
- // turns every normal SPARQL query into an empty result.
5719
+ // A query that names no graph asks its own scope's container, so the
5720
+ // scope's container prefix becomes the graph prefix: Pod documents are
5721
+ // stored as named graphs (their document IRI) and a client cannot name
5722
+ // one, because the SPARQL endpoint takes no dataset parameter. Without a
5723
+ // prefix there is nothing to scope by and the condition stays off, which
5724
+ // is what used to keep ordinary Pod queries from returning nothing.
5725
+ // See docs/rdf-graph-semantics.md.
5723
5726
  const sourceScope = explicitSourceScope ?? pattern.sourceScope;
5724
5727
  if (key === 'graph' && value.termType === 'DefaultGraph' && sourceScopeHasFilters(sourceScope)) {
5728
+ if (sourceScope?.sourcePrefix) {
5729
+ graphPrefix = sourceScope.sourcePrefix;
5730
+ }
5725
5731
  continue;
5726
5732
  }
5727
5733
  const id = await this.requireDictionary().find(value);
@@ -168,7 +168,21 @@ function scopeOptionalGroup(group, scope, state) {
168
168
  }
169
169
  function scopePattern(pattern, filters, scope, state) {
170
170
  const sourceScope = scopeFactSources(pattern.sourceScope, scope);
171
- const graph = pattern.graph ?? { $startsWith: scope.basePath };
171
+ const requested = pattern.graph;
172
+ // A container IRI names a container, not a graph: asking for it asks for that
173
+ // container and its subgraphs (LDP containment). The trailing slash is what
174
+ // keeps `<pod/a/>` from matching `<pod/ab`, and a document IRI stays exact.
175
+ // Resolving it here rather than inside one engine means every query path - the
176
+ // public authority, the Pod endpoint, a direct engine query - reads the same
177
+ // rule. See docs/rdf-graph-semantics.md.
178
+ const containerPrefix = (0, types_1.isTerm)(requested)
179
+ && requested.termType === 'NamedNode'
180
+ && requested.value.endsWith('/')
181
+ ? { $startsWith: requested.value }
182
+ : undefined;
183
+ const graph = containerPrefix
184
+ ?? pattern.graph
185
+ ?? { $startsWith: scope.basePath };
172
186
  if (isVariable(graph)) {
173
187
  addGraphAccessFilters(filters, graph.variable, scope);
174
188
  return {
@@ -64,7 +64,15 @@ class RdfEngineMatchIterator extends asynciterator_1.BufferedIterator {
64
64
  }
65
65
  const SLOT_NAMES = ['subject', 'predicate', 'object', 'graph'];
66
66
  async function executeMatch(rdfEngine, terms, options) {
67
- const select = SLOT_NAMES.filter((slot) => isUnboundMatchTerm(terms[slot]));
67
+ // A graph term that names a container - or names nothing at all - is a *prefix*
68
+ // the facts must fall under, not a graph the rows belong to. Reporting it back
69
+ // would show the caller a graph that no triple is stored in (the container IRI,
70
+ // or the default-graph marker); the row's own graph is the truthful answer and
71
+ // is always under that prefix. See docs/rdf-graph-semantics.md.
72
+ const graphIsScopedPrefix = isUnboundMatchTerm(terms.graph)
73
+ || terms.graph.termType === 'DefaultGraph'
74
+ || (terms.graph.termType === 'NamedNode' && terms.graph.value.endsWith('/'));
75
+ const select = SLOT_NAMES.filter((slot) => isUnboundMatchTerm(terms[slot]) || (slot === 'graph' && graphIsScopedPrefix));
68
76
  const result = await queryWithAbort(rdfEngine, (0, RdfAccessScope_1.applyRdfAccessScope)({
69
77
  patterns: [matchPattern(terms)],
70
78
  select,
@@ -72,7 +80,7 @@ async function executeMatch(rdfEngine, terms, options) {
72
80
  assertNotAborted(options.signal);
73
81
  return result.bindings.map((row) => {
74
82
  assertNotAborted(options.signal);
75
- return quad(requireQuadSubject(isUnboundMatchTerm(terms.subject) ? requireBinding(row, 'subject') : terms.subject), requireQuadPredicate(isUnboundMatchTerm(terms.predicate) ? requireBinding(row, 'predicate') : terms.predicate), requireQuadObject(isUnboundMatchTerm(terms.object) ? requireBinding(row, 'object') : terms.object), requireQuadGraph(isUnboundMatchTerm(terms.graph) ? (row.graph ?? defaultGraph()) : terms.graph));
83
+ return quad(requireQuadSubject(isUnboundMatchTerm(terms.subject) ? requireBinding(row, 'subject') : terms.subject), requireQuadPredicate(isUnboundMatchTerm(terms.predicate) ? requireBinding(row, 'predicate') : terms.predicate), requireQuadObject(isUnboundMatchTerm(terms.object) ? requireBinding(row, 'object') : terms.object), requireQuadGraph(graphIsScopedPrefix ? (row.graph ?? defaultGraph()) : terms.graph));
76
84
  });
77
85
  }
78
86
  async function executeCount(rdfEngine, terms, options) {
@@ -1,4 +1,4 @@
1
- import type { AiConnectAttempt, AiProviderCredentialSummary, AiProviderOffering } from './ai-connections-client';
1
+ import type { AiConnectAttempt, AiProviderCredentialSummary, AiProviderOffering } from '@undefineds.co/ai-connections-core/client';
2
2
  import type { AiProviderDefinition } from './controller';
3
3
  import type { ProviderConnectionState } from './AiProviderCard';
4
4
  export declare function AiApiKeyPool({ definition, offering, createOfferings, status, credentials, attempt, apiKey, baseUrl, busy, disabled, error, onApiKeyChange, onBaseUrlChange, onBeginApiKey, onBeginBrowser, onSaveApiKey, onDisconnect, onCreateApiKeyCredential, onUpdateCredential, initialEditing, initialCreate, onSavingChange, onCloseEdit, }: {
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import { useEffect, useRef, useState } from 'react';
3
3
  import { Button, Input, cn } from '@undefineds.co/shared-ui';
4
4
  import { ExternalLink, Eye, EyeOff, KeyRound, Loader2, LogOut, Plus, RotateCw } from 'lucide-react';
5
- import { normalizeProxyUrl } from './ai-connections-client.js';
5
+ import { normalizeProxyUrl } from '@undefineds.co/ai-connections-core/client';
6
6
  import { offeringTitle } from './offering-label.js';
7
7
  import { authorizationMethodsForOffering, isApiKeyMethod } from './authorization-methods.js';
8
8
  import { nextCredentialPriority } from './credential-labels.js';
@@ -1,4 +1,4 @@
1
- import type { AiConnectionsMode, AiProviderAuthorizationMethod, AiProviderOffering } from './ai-connections-client';
1
+ import type { AiConnectionsMode, AiProviderAuthorizationMethod, AiProviderOffering } from '@undefineds.co/ai-connections-core/client';
2
2
  /**
3
3
  * The offering's own entries, one button per declared `authorizationMethod`.
4
4
  *
@@ -1,5 +1,5 @@
1
1
  import type { AiClientConfigurationModel } from '@undefineds.co/extension-sdk/web';
2
- import { normalizeV1Endpoint } from './endpoint-urls';
2
+ import { normalizeV1Endpoint } from '@undefineds.co/ai-connections-core/endpoint-urls';
3
3
  export declare const AI_CONNECTIONS_CLIENTS: readonly ["codex", "claude-code", "pi", "codebuddy"];
4
4
  export type AiConnectionsClientId = (typeof AI_CONNECTIONS_CLIENTS)[number];
5
5
  export interface AiClientConfigurationStatus {
@@ -2,9 +2,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useRef, useState } from 'react';
3
3
  import { Badge, Button, Input, } from '@undefineds.co/shared-ui';
4
4
  import { RotateCcw, SquareTerminal } from 'lucide-react';
5
- import { normalizeAiConnectionsThrownError } from './ai-connections-client.js';
5
+ import { aiConnectionsErrorMessage } from './error-wording.js';
6
6
  import { getClientAvatar } from './client-visuals.js';
7
- import { normalizeMessagesEndpoint, normalizeV1Endpoint } from './endpoint-urls.js';
7
+ import { normalizeMessagesEndpoint, normalizeV1Endpoint } from '@undefineds.co/ai-connections-core/endpoint-urls';
8
8
  import { AiCopyButton } from './AiCopyButton.js';
9
9
  export const AI_CONNECTIONS_CLIENTS = ['codex', 'claude-code', 'pi', 'codebuddy'];
10
10
  export const AI_CLIENT_LABELS = {
@@ -246,5 +246,5 @@ function failedAndRestoredError(error) {
246
246
  error.code === 'verification_failed_restored');
247
247
  }
248
248
  function errorMessage(error) {
249
- return normalizeAiConnectionsThrownError(error);
249
+ return aiConnectionsErrorMessage(error);
250
250
  }
@@ -1,4 +1,4 @@
1
- import type { AiConnectAttempt, AiConnectionsMode, AiProviderAuthorizationMethod, AiProviderCredentialSummary, AiProviderOffering } from './ai-connections-client';
1
+ import type { AiConnectAttempt, AiConnectionsMode, AiProviderAuthorizationMethod, AiProviderCredentialSummary, AiProviderOffering } from '@undefineds.co/ai-connections-core/client';
2
2
  import type { AiProviderDefinition } from './controller';
3
3
  import type { ProviderConnectionState } from './AiProviderCard';
4
4
  import type { AiOfferingActionError } from './AiCredentialPoolSection';
@@ -1,4 +1,4 @@
1
- import { type AiConnectionsClient, type AiConnectionsProvider, type AiProviderConnectionSummary, type AiProviderSummary } from './ai-connections-client';
1
+ import { type AiConnectionsClient, type AiConnectionsProvider, type AiProviderConnectionSummary, type AiProviderSummary } from '@undefineds.co/ai-connections-core/client';
2
2
  import { type AiConnectionsWorkspaceSection, type ProviderProductState } from './controller';
3
3
  import type { AiClientConfigurationBridge } from './AiClientConfigurationSection';
4
4
  import { type CredentialRow } from './collections';
@@ -1,8 +1,8 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
3
  import { Toaster, toast, } from '@undefineds.co/shared-ui';
4
- import { normalizeAiConnectionsThrownError, } from './ai-connections-client.js';
5
4
  import { PROVIDERS, } from './controller.js';
5
+ import { aiConnectionsErrorMessage } from './error-wording.js';
6
6
  import { offeringTitle } from './offering-label.js';
7
7
  import { AiProviderCard, } from './AiProviderCard.js';
8
8
  import { AiModelEditorDialog, } from './AiModelEditorDialog.js';
@@ -878,7 +878,7 @@ function errorMessage(error) {
878
878
  if (error instanceof TypeError && /failed to fetch|fetch failed|networkerror|load failed/i.test(error.message)) {
879
879
  return '暂时无法连接 Xpod,请在连接恢复后确认操作结果,再重试。';
880
880
  }
881
- const message = normalizeAiConnectionsThrownError(error);
881
+ const message = aiConnectionsErrorMessage(error);
882
882
  return message === 'AI Connection request failed. Please try again.'
883
883
  ? '请求未完成。请确认 Xpod 正在运行且登录仍有效,然后重试。'
884
884
  : message;
@@ -1,4 +1,4 @@
1
- import type { AiConnectAttempt, AiConnectionsMode, AiProviderAuthorizationMethod, AiProviderCredentialSummary, AiProviderOffering, AiProviderSummary, AiQuotaSnapshot } from './ai-connections-client';
1
+ import type { AiConnectAttempt, AiConnectionsMode, AiProviderAuthorizationMethod, AiProviderCredentialSummary, AiProviderOffering, AiProviderSummary, AiQuotaSnapshot } from '@undefineds.co/ai-connections-core/client';
2
2
  import type { AiProviderDefinition } from './controller';
3
3
  import type { ProviderConnectionState } from './AiProviderCard';
4
4
  export interface AiOfferingActionError {
@@ -1,5 +1,5 @@
1
1
  import type { ReactNode } from 'react';
2
- import type { AiProviderCredentialSummary } from './ai-connections-client';
2
+ import type { AiProviderCredentialSummary } from '@undefineds.co/ai-connections-core/client';
3
3
  export declare function AiCredentialRow({ credential, label, busy, disabled, dragHandle, kindLabel, quota, onToggle, onTest, onEdit, onDelete, deleteAriaLabel, }: {
4
4
  credential: AiProviderCredentialSummary;
5
5
  label: string;
@@ -1,4 +1,4 @@
1
- import type { CreateApiKeyCredentialInput } from './ai-connections-client';
1
+ import type { CreateApiKeyCredentialInput } from '@undefineds.co/ai-connections-core/client';
2
2
  export type CustomProviderCompatibility = 'auto' | 'openai' | 'anthropic';
3
3
  export interface CustomProviderValue extends CreateApiKeyCredentialInput {
4
4
  compatibility: CustomProviderCompatibility;
@@ -1,4 +1,4 @@
1
- import type { GatewayKeyRecord } from './ai-connections-client';
1
+ import type { GatewayKeyRecord } from '@undefineds.co/ai-connections-core/client';
2
2
  import { type AiConnectionsClientId } from './AiClientConfigurationSection';
3
3
  export interface AiGatewayKeyBinding {
4
4
  clientId?: AiConnectionsClientId;
@@ -1,4 +1,4 @@
1
- import type { AiConnectionsClient, AiGatewayModel } from './ai-connections-client';
1
+ import type { AiConnectionsClient, AiGatewayModel } from '@undefineds.co/ai-connections-core/client';
2
2
  import { type AiClientConfigurationBridge } from './AiClientConfigurationSection';
3
3
  import { type GatewayModelSelection } from './AiGatewayModelsSection';
4
4
  /**
@@ -1,4 +1,4 @@
1
- import type { AiGatewayModel } from './ai-connections-client';
1
+ import type { AiGatewayModel } from '@undefineds.co/ai-connections-core/client';
2
2
  /**
3
3
  * What the gateway list shares with the provider pages.
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { AiProviderAuthorizationMethod, AiProviderOffering } from './ai-connections-client';
1
+ import type { AiProviderAuthorizationMethod, AiProviderOffering } from '@undefineds.co/ai-connections-core/client';
2
2
  export declare function AiOfferingDetails({ offering, methods }: {
3
3
  offering: AiProviderOffering;
4
4
  methods?: AiProviderAuthorizationMethod[];
@@ -1,4 +1,4 @@
1
- import type { AiConnectAttempt, AiConnectionsMode, AiGatewayModel, AiProviderCredentialSummary, AiProviderAuthorizationMethod, AiProviderOffering, AiProviderSummary } from './ai-connections-client';
1
+ import type { AiConnectAttempt, AiConnectionsMode, AiGatewayModel, AiProviderCredentialSummary, AiProviderAuthorizationMethod, AiProviderOffering, AiProviderSummary } from '@undefineds.co/ai-connections-core/client';
2
2
  import { type AiOfferingActionError, type AiOfferingQuotaState } from './AiCredentialPoolSection';
3
3
  export type { AiProviderDefinition } from './controller';
4
4
  import type { AiProviderDefinition } from './controller';
@@ -1,4 +1,4 @@
1
- import type { AiQuotaSnapshot } from './ai-connections-client';
1
+ import type { AiQuotaSnapshot } from '@undefineds.co/ai-connections-core/client';
2
2
  export declare function AiQuotaCard({ providerName, offeringName, quota, busy, disabled, credentialLabel, multiple, compact, paused, error, onRefresh, }: {
3
3
  providerName: string;
4
4
  offeringName: string;
@@ -1,5 +1,5 @@
1
1
  import { type ReactNode } from 'react';
2
- import type { AiProviderCredentialSummary } from './ai-connections-client';
2
+ import type { AiProviderCredentialSummary } from '@undefineds.co/ai-connections-core/client';
3
3
  export declare function AiSortableCredentialList({ credentials, disabled, onMove, children }: {
4
4
  credentials: AiProviderCredentialSummary[];
5
5
  disabled: boolean;
@@ -1,16 +1,18 @@
1
- import type { AiConnectAttempt, AiConnectionsMode, AiProviderAuthorizationMethod, AiProviderOffering } from './ai-connections-client';
1
+ import type { AiConnectAttempt, AiConnectionsMode, AiProviderAuthorizationMethod, AiProviderOffering } from '@undefineds.co/ai-connections-core/client';
2
2
  /**
3
- * Authorization methods an offering exposes. An offering that declares them
4
- * keeps that list - including an empty one, which is how the server says "this
5
- * offering has no connect entry here" instead of publishing an entry that
6
- * cannot be used. The rest derive one method per entry of `authModes`, which is
7
- * what a payload without the field (a catalog consumer that never asked the
8
- * server) falls back to.
3
+ * Authorization methods an offering exposes, worded for display.
9
4
  *
10
- * The derivation is therefore a fallback for payloads that carry no
11
- * `authorizationMethods` at all, so it must stay a projection of the offering's
12
- * own data: no label is invented for a provider, and the wording mirrors the
13
- * server's own naming for the same `authModes`.
5
+ * An offering that declares them keeps that list - including an empty one, which
6
+ * is how the server says "this offering has no connect entry here" instead of
7
+ * publishing an entry that cannot be used. The rest derive one method per entry
8
+ * of `authModes`, which is what a payload without the field (a catalog consumer
9
+ * that never asked the server) falls back to.
10
+ *
11
+ * Neither branch carries wording of its own: every path that renders a connect
12
+ * entry goes through here, so this is the one place the applet's wording table
13
+ * is applied, and an entry the table does not know keeps whatever the payload
14
+ * declared - or stays unrendered, which is how "the offering did not ask for
15
+ * this button" has always been said.
14
16
  */
15
17
  export declare function authorizationMethodsForOffering(offering: AiProviderOffering): AiProviderAuthorizationMethod[];
16
18
  export declare function connectModeForMethod(method: AiProviderAuthorizationMethod): AiConnectionsMode | undefined;
@@ -1,17 +1,23 @@
1
+ import { withAuthorizationMethodLabels } from './display-wording.js';
1
2
  /**
2
- * Authorization methods an offering exposes. An offering that declares them
3
- * keeps that list - including an empty one, which is how the server says "this
4
- * offering has no connect entry here" instead of publishing an entry that
5
- * cannot be used. The rest derive one method per entry of `authModes`, which is
6
- * what a payload without the field (a catalog consumer that never asked the
7
- * server) falls back to.
3
+ * Authorization methods an offering exposes, worded for display.
8
4
  *
9
- * The derivation is therefore a fallback for payloads that carry no
10
- * `authorizationMethods` at all, so it must stay a projection of the offering's
11
- * own data: no label is invented for a provider, and the wording mirrors the
12
- * server's own naming for the same `authModes`.
5
+ * An offering that declares them keeps that list - including an empty one, which
6
+ * is how the server says "this offering has no connect entry here" instead of
7
+ * publishing an entry that cannot be used. The rest derive one method per entry
8
+ * of `authModes`, which is what a payload without the field (a catalog consumer
9
+ * that never asked the server) falls back to.
10
+ *
11
+ * Neither branch carries wording of its own: every path that renders a connect
12
+ * entry goes through here, so this is the one place the applet's wording table
13
+ * is applied, and an entry the table does not know keeps whatever the payload
14
+ * declared - or stays unrendered, which is how "the offering did not ask for
15
+ * this button" has always been said.
13
16
  */
14
17
  export function authorizationMethodsForOffering(offering) {
18
+ return withAuthorizationMethodLabels(declaredOrDerivedMethods(offering));
19
+ }
20
+ function declaredOrDerivedMethods(offering) {
15
21
  if (Array.isArray(offering.authorizationMethods))
16
22
  return offering.authorizationMethods;
17
23
  const lifecycle = offering.lifecycle === 'unavailable' ? 'unavailable' : 'active';
@@ -21,7 +27,6 @@ export function authorizationMethodsForOffering(offering) {
21
27
  id: 'api-key',
22
28
  authMode: 'apiKey',
23
29
  connectMode: 'browserAssistedApiKey',
24
- label: 'API Key',
25
30
  lifecycle,
26
31
  };
27
32
  }
@@ -30,7 +35,6 @@ export function authorizationMethodsForOffering(offering) {
30
35
  return {
31
36
  id: localService ? 'local-service' : 'local-session-import',
32
37
  authMode: 'local',
33
- label: localService ? '本地服务' : '已有登录态',
34
38
  lifecycle,
35
39
  };
36
40
  }
@@ -38,7 +42,6 @@ export function authorizationMethodsForOffering(offering) {
38
42
  id: 'device-code',
39
43
  authMode: mode,
40
44
  connectMode: 'deviceCodeOAuth',
41
- label: '浏览器登录',
42
45
  lifecycle,
43
46
  };
44
47
  });
@@ -1,5 +1,5 @@
1
1
  import type { AiConnectionsPodStore, WebExtensionHost } from '@undefineds.co/extension-sdk/web';
2
- import type { AiConnectionsClient } from './ai-connections-client';
2
+ import type { AiConnectionsClient } from '@undefineds.co/ai-connections-core/client';
3
3
  import { type CredentialCollection } from './collections';
4
4
  /**
5
5
  * The half of the credentials table that needs the collection layer at runtime.
@@ -1,9 +1,9 @@
1
1
  import { credentialDescriptor, credentialResource } from '@undefineds.co/models';
2
2
  import { rowKeyOf } from '@undefineds.co/pod-collections';
3
- import { credentialProviderRelation, credentialRowKeyFor, customCredentialProviderRelation, } from './credential-storage.js';
3
+ import { credentialProviderRelation, credentialRowKeyFor, customCredentialProviderRelation, } from '@undefineds.co/ai-connections-core/client';
4
4
  import { credentialSummaryFromRow } from './collections.js';
5
- import { normalizeProxyUrl } from './client/normalize.js';
6
- import { credentialOfferingMetadata, defaultOfferingFor, offeringBaseUrl, storedOfferingIdFor, } from './provider-catalog.js';
5
+ import { normalizeProxyUrl } from '@undefineds.co/ai-connections-core/client';
6
+ import { credentialOfferingMetadata, defaultOfferingFor, offeringBaseUrl, storedOfferingIdFor, } from '@undefineds.co/ai-connections-core/provider-catalog';
7
7
  /**
8
8
  * The half of the credentials table that needs the collection layer at runtime.
9
9
  *
@@ -1,6 +1,6 @@
1
1
  import { credentialDescriptor } from '@undefineds.co/models';
2
2
  import type { PodCollection, RowOf } from '@undefineds.co/pod-collections';
3
- import type { AiConnectionsProvider, AiProviderCredentialSummary, AiProviderSummary } from './ai-connections-client';
3
+ import type { AiConnectionsProvider, AiProviderCredentialSummary, AiProviderSummary } from '@undefineds.co/ai-connections-core/client';
4
4
  /**
5
5
  * The credentials table, declared once (`docs/pod-collections.md` §6.4-2).
6
6
  *
@@ -1,8 +1,8 @@
1
1
  import { credentialResource } from '@undefineds.co/models';
2
2
  import { useSyncExternalStore } from 'react';
3
- import { AI_CONNECTIONS_PROVIDERS } from './ai-connections-client.js';
4
- import { defaultOfferingFor } from './provider-catalog.js';
5
- import { providerOfCredentialKey, providerResourceKey } from './credential-storage.js';
3
+ import { AI_CONNECTIONS_PROVIDERS } from '@undefineds.co/ai-connections-core/client';
4
+ import { defaultOfferingFor } from '@undefineds.co/ai-connections-core/provider-catalog';
5
+ import { providerOfCredentialKey, providerResourceKey } from '@undefineds.co/ai-connections-core/client';
6
6
  /**
7
7
  * Live rows for the credentials table. Re-renders on sync and on optimistic
8
8
  * writes, because the source is the collection's own change feed.
@@ -1,5 +1,5 @@
1
1
  import type { SolidLiveUpdateState, WebExtensionHost } from '@undefineds.co/extension-sdk/web';
2
- import { type AiConnectionsClient, type AiConnectionsProvider, type AiProviderConnectionSummary, type AiProviderSummary } from './ai-connections-client';
2
+ import { type AiConnectionsClient, type AiConnectionsProvider, type AiProviderConnectionSummary, type AiProviderSummary } from '@undefineds.co/ai-connections-core/client';
3
3
  import type { AiClientConfigurationBridge } from './AiClientConfigurationSection';
4
4
  import { type CredentialRow } from './collections';
5
5
  import type { PodCollection } from '@undefineds.co/pod-collections';
@@ -1,5 +1,6 @@
1
1
  import { useSyncExternalStore } from 'react';
2
- import { AI_CONNECTIONS_PROVIDERS, AiConnectionsRequestError, createAiConnectionsClient, normalizeAiConnectionsThrownError, } from './ai-connections-client.js';
2
+ import { AI_CONNECTIONS_PROVIDERS, AiConnectionsRequestError, createAiConnectionsClient, } from '@undefineds.co/ai-connections-core/client';
3
+ import { aiConnectionsErrorMessage } from './error-wording.js';
3
4
  import { credentialCollectionRuntime, } from './collections.js';
4
5
  /**
5
6
  * Provider pages explain themselves through the header's ⓘ tooltip, so each
@@ -1014,7 +1015,7 @@ function isDefined(value) {
1014
1015
  return value !== undefined;
1015
1016
  }
1016
1017
  function errorMessage(error) {
1017
- return normalizeAiConnectionsThrownError(error);
1018
+ return aiConnectionsErrorMessage(error);
1018
1019
  }
1019
1020
  /** The wrapper carries the OIDC client id; parsing it needs no stored secret. */
1020
1021
  function clientIdFromApiKey(apiKey) {
@@ -1,4 +1,4 @@
1
- import type { AiProviderCredentialSummary } from './ai-connections-client';
1
+ import type { AiProviderCredentialSummary } from '@undefineds.co/ai-connections-core/client';
2
2
  /** Highest priority first: a new credential joins the end of the pool. */
3
3
  export declare function nextCredentialPriority(credentials: AiProviderCredentialSummary[]): number;
4
4
  export declare function credentialDisplayLabel(credential: AiProviderCredentialSummary): string;
@@ -0,0 +1,20 @@
1
+ import type { AiConnectionsProvider, AiProviderAuthorizationMethod } from '@undefineds.co/ai-connections-core/client';
2
+ /**
3
+ * Wording for one connect entry.
4
+ *
5
+ * A payload that declares its own wording keeps it: the entry's own name is the
6
+ * more specific statement, and it is how a provider the user configured names
7
+ * its entry, and how one offering renames a shared action for its context. The
8
+ * table only fills the gap the shared core deliberately leaves - it names the
9
+ * action by `id` and no longer writes the button.
10
+ */
11
+ export declare function authorizationMethodLabel(method: AiProviderAuthorizationMethod): string | undefined;
12
+ /** Fills in the wording of every entry that has one. */
13
+ export declare function withAuthorizationMethodLabels(methods: readonly AiProviderAuthorizationMethod[]): AiProviderAuthorizationMethod[];
14
+ /**
15
+ * The name this applet shows for a provider. English for the providers whose
16
+ * product name is English, Chinese where the product is known by its Chinese
17
+ * name - a display decision, so it lives with the display layer instead of
18
+ * travelling in every payload.
19
+ */
20
+ export declare function providerDisplayName(provider: AiConnectionsProvider): string;