@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
@@ -7,13 +7,17 @@ import { getProviderDisplayLabel, } from './presentation.js';
7
7
  import { resolveLoginProviderSource } from './provider-model.js';
8
8
  import { LoginCardShell } from '../login.js';
9
9
  import { formatLoginErrorForUser } from './error-messages.js';
10
+ import { LoginProductNameProvider, useLoginProductName } from './login-branding.js';
10
11
  import { LocalReachabilitySummary } from './LocalReachabilitySummary.js';
11
- /** LinX product login modal. Xpod does not render this component. */
12
+ /**
13
+ * Shared login modal. The host supplies the brand and, optionally, the product
14
+ * name that user-facing messages refer to.
15
+ */
12
16
  export function LoginModal(props) {
13
17
  const { state, storageConflict, view } = props;
14
18
  if (state === 'authenticated' && !storageConflict)
15
19
  return null;
16
- return (_jsx(LoginCardShell, { ariaLabel: props.ariaLabel ?? 'Sign in', overlayClassName: props.overlayClassName, cardClassName: props.cardClassName, cardSize: "compact", children: storageConflict ? (_jsx(StorageConflictView, { storedAccount: props.storedAccount, storageConflict: storageConflict, onDismiss: props.onDismissStorageConflict, onOpenCurrentSpacePodSetup: props.onOpenCurrentSpacePodSetup })) : state === 'restoring' ? (_jsx(RestoringView, { storedAccount: props.storedAccount })) : state === 'connecting' ? (_jsx(ConnectingView, { authWindowStatus: props.authWindowStatus, connectingProvider: props.connectingProvider, onCancel: props.onCancelConnecting })) : view === 'local' ? (_jsx(LocalOnboardingView, { localOnboarding: props.localOnboarding, localProviderSource: props.localProviderSource, error: props.error, onBack: props.onBackFromLocal, onContinue: props.onContinueLocalLogin, onSwitchAccount: props.onSwitchAccount, onTestConnectivity: props.onTestLocalConnectivity, onOpenSettings: props.onOpenLocalSettings, onClearError: props.onClearError })) : props.storedAccount ? (_jsx(AccountView, { storedAccount: props.storedAccount, hasRestorableSession: props.hasRestorableSession, onContinueStoredAccount: props.onContinueStoredAccount, onSwitchAccount: props.onSwitchAccount, error: props.error, onClearError: props.onClearError })) : (_jsx(ProviderSelectionView, { providers: props.providers, error: props.error, localLoginStatus: props.localLoginStatus, onConnect: props.onConnect, onAddProvider: props.onAddProvider, onClearError: props.onClearError, brand: props.brand, capabilities: props.capabilities })) }));
20
+ return (_jsx(LoginProductNameProvider, { productName: props.productName, children: _jsx(LoginCardShell, { ariaLabel: props.ariaLabel ?? 'Sign in', overlayClassName: props.overlayClassName, cardClassName: props.cardClassName, cardSize: "compact", children: storageConflict ? (_jsx(StorageConflictView, { storedAccount: props.storedAccount, storageConflict: storageConflict, onDismiss: props.onDismissStorageConflict, onOpenCurrentSpacePodSetup: props.onOpenCurrentSpacePodSetup })) : state === 'restoring' ? (_jsx(RestoringView, { storedAccount: props.storedAccount })) : state === 'connecting' ? (_jsx(ConnectingView, { authWindowStatus: props.authWindowStatus, connectingProvider: props.connectingProvider, onCancel: props.onCancelConnecting })) : view === 'local' ? (_jsx(LocalOnboardingView, { localOnboarding: props.localOnboarding, localProviderSource: props.localProviderSource, error: props.error, onBack: props.onBackFromLocal, onContinue: props.onContinueLocalLogin, onSwitchAccount: props.onSwitchAccount, onTestConnectivity: props.onTestLocalConnectivity, onOpenSettings: props.onOpenLocalSettings, onClearError: props.onClearError })) : props.storedAccount ? (_jsx(AccountView, { storedAccount: props.storedAccount, hasRestorableSession: props.hasRestorableSession, onContinueStoredAccount: props.onContinueStoredAccount, onSwitchAccount: props.onSwitchAccount, error: props.error, onClearError: props.onClearError })) : (_jsx(ProviderSelectionView, { providers: props.providers, error: props.error, localLoginStatus: props.localLoginStatus, onConnect: props.onConnect, onAddProvider: props.onAddProvider, onClearError: props.onClearError, brand: props.brand, capabilities: props.capabilities })) }) }));
17
21
  }
18
22
  function StorageConflictView({ storedAccount, storageConflict, onDismiss, onOpenCurrentSpacePodSetup, }) {
19
23
  const accountName = storedAccount?.displayName || '当前账号';
@@ -89,6 +93,7 @@ function ConnectingView({ authWindowStatus, connectingProvider, onCancel, }) {
89
93
  }
90
94
  // ── LocalOnboardingView ──────────────────────────────────────────────
91
95
  function LocalOnboardingView({ localOnboarding, localProviderSource, error, onBack, onContinue, onSwitchAccount, onTestConnectivity, onOpenSettings, onClearError, }) {
96
+ const productName = useLoginProductName();
92
97
  const snapshot = localOnboarding;
93
98
  const autoProbeKeyRef = useRef(null);
94
99
  const isStandalone = localProviderSource === 'standalone';
@@ -132,7 +137,7 @@ function LocalOnboardingView({ localOnboarding, localProviderSource, error, onBa
132
137
  snapshot?.publicUrl,
133
138
  snapshot?.spaceKind,
134
139
  ]);
135
- return (_jsxs("div", { className: "flex-1 flex flex-col h-full", children: [_jsxs("div", { className: "px-5 pt-5 pb-3 shrink-0 flex items-center gap-2", children: [_jsxs("button", { onClick: onBack, className: "-ml-1.5 inline-flex h-8 items-center gap-1.5 rounded-lg px-2 text-xs text-muted-foreground hover:text-foreground hover:bg-muted/50 transition-colors cursor-pointer", "aria-label": "\u8FD4\u56DE\u7A7A\u95F4\u9009\u62E9", children: [_jsx(ArrowLeft, { className: "w-4 h-4" }), "\u8FD4\u56DE"] }), _jsx("h2", { className: "text-lg font-semibold text-foreground", children: productLabel })] }), _jsx(ErrorBanner, { error: error, onClearError: onClearError }), _jsx("div", { className: "flex-1 min-h-0 overflow-y-auto px-5 py-2", children: _jsxs("div", { className: "flex min-h-full flex-col justify-center gap-4", children: [(isPendingStart || isStarting) && (_jsxs("div", { className: "flex flex-col items-center gap-3 text-center", children: [_jsx(Loader2, { className: "w-6 h-6 text-primary animate-spin" }), _jsxs("p", { className: "text-sm font-medium text-foreground", children: ["\u6B63\u5728\u51C6\u5907", productLabel] }), _jsx("p", { className: "max-w-[18rem] text-xs leading-5 text-muted-foreground", children: progressDetail })] })), isReady && (_jsxs("div", { className: "flex flex-col gap-3", children: [_jsx("p", { className: "text-sm font-medium text-foreground text-center", children: isLocalNetworkBlocked ? '本机空间入口异常' : `${productLabel} 已准备好` }), isLocalNetworkBlocked ? (_jsx("p", { className: "text-xs text-muted-foreground leading-relaxed text-center", children: formatLocalStatusMessageForUser(connectivity?.message, '本机入口不可达。请确认本机空间已启动后重试。') })) : null, isStandalone ? (_jsx(RouteInfoCard, { title: "\u672C\u673A\u5165\u53E3", value: localUrl })) : null, !isStandalone ? (_jsx(LocalReachabilitySummary, { connectivity: connectivity, assumeLocalReachable: true })) : null, _jsx("button", { onClick: onContinue, className: "w-full h-10 rounded-xl bg-primary text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors cursor-pointer", children: isLocalNetworkBlocked ? '重新检测' : '继续登录' })] })), (isRepair || isError) && (_jsx(LocalUnavailableRecovery, { canOpenSettings: Boolean(snapshot?.canOpenSettings), canRetry: Boolean(snapshot?.canRetry), onRetry: onContinue, onOpenSettings: onOpenSettings ?? (() => undefined), onSwitchAccount: onSwitchAccount }))] }) }), _jsx("div", { className: "px-5 pb-5 shrink-0" }), _jsx(Footer, {})] }));
140
+ return (_jsxs("div", { className: "flex-1 flex flex-col h-full", children: [_jsxs("div", { className: "px-5 pt-5 pb-3 shrink-0 flex items-center gap-2", children: [_jsxs("button", { onClick: onBack, className: "-ml-1.5 inline-flex h-8 items-center gap-1.5 rounded-lg px-2 text-xs text-muted-foreground hover:text-foreground hover:bg-muted/50 transition-colors cursor-pointer", "aria-label": "\u8FD4\u56DE\u7A7A\u95F4\u9009\u62E9", children: [_jsx(ArrowLeft, { className: "w-4 h-4" }), "\u8FD4\u56DE"] }), _jsx("h2", { className: "text-lg font-semibold text-foreground", children: productLabel })] }), _jsx(ErrorBanner, { error: error, onClearError: onClearError }), _jsx("div", { className: "flex-1 min-h-0 overflow-y-auto px-5 py-2", children: _jsxs("div", { className: "flex min-h-full flex-col justify-center gap-4", children: [(isPendingStart || isStarting) && (_jsxs("div", { className: "flex flex-col items-center gap-3 text-center", children: [_jsx(Loader2, { className: "w-6 h-6 text-primary animate-spin" }), _jsxs("p", { className: "text-sm font-medium text-foreground", children: ["\u6B63\u5728\u51C6\u5907", productLabel] }), _jsx("p", { className: "max-w-[18rem] text-xs leading-5 text-muted-foreground", children: progressDetail })] })), isReady && (_jsxs("div", { className: "flex flex-col gap-3", children: [_jsx("p", { className: "text-sm font-medium text-foreground text-center", children: isLocalNetworkBlocked ? '本机空间入口异常' : `${productLabel} 已准备好` }), isLocalNetworkBlocked ? (_jsx("p", { className: "text-xs text-muted-foreground leading-relaxed text-center", children: formatLocalStatusMessageForUser(connectivity?.message, '本机入口不可达。请确认本机空间已启动后重试。', productName) })) : null, isStandalone ? (_jsx(RouteInfoCard, { title: "\u672C\u673A\u5165\u53E3", value: localUrl })) : null, !isStandalone ? (_jsx(LocalReachabilitySummary, { connectivity: connectivity, assumeLocalReachable: true })) : null, _jsx("button", { onClick: onContinue, className: "w-full h-10 rounded-xl bg-primary text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors cursor-pointer", children: isLocalNetworkBlocked ? '重新检测' : '继续登录' })] })), (isRepair || isError) && (_jsx(LocalUnavailableRecovery, { canOpenSettings: Boolean(snapshot?.canOpenSettings), canRetry: Boolean(snapshot?.canRetry), onRetry: onContinue, onOpenSettings: onOpenSettings ?? (() => undefined), onSwitchAccount: onSwitchAccount }))] }) }), _jsx("div", { className: "px-5 pb-5 shrink-0" }), _jsx(Footer, {})] }));
136
141
  }
137
142
  function RouteInfoCard({ title, value, action, }) {
138
143
  return (_jsxs("div", { className: "rounded-2xl border border-border/60 bg-muted/25 p-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx("p", { className: "text-[11px] font-medium tracking-wide text-muted-foreground/70", children: title }), action] }), _jsx("p", { className: "mt-2 break-all font-mono text-[11px] leading-5 text-foreground", children: value ?? '正在获取入口' })] }));
@@ -163,8 +168,8 @@ function getLocalPreparationDetail(state, progressPhase) {
163
168
  return '正在准备登录授权';
164
169
  return '正在启动本机服务';
165
170
  }
166
- function formatLocalStatusMessageForUser(value, fallback) {
167
- return formatLoginErrorForUser(value, fallback);
171
+ function formatLocalStatusMessageForUser(value, fallback, productName) {
172
+ return formatLoginErrorForUser(value, fallback, { productName });
168
173
  }
169
174
  function formatProviderLabelForUser(value) {
170
175
  if (value === 'Cloud')
@@ -176,9 +181,10 @@ function formatProviderLabelForUser(value) {
176
181
  return value ?? '所选空间';
177
182
  }
178
183
  function ErrorBanner({ error, onClearError }) {
184
+ const productName = useLoginProductName();
179
185
  if (!error)
180
186
  return null;
181
- const message = formatLoginErrorForUser(error, '操作失败,请返回上一步后重试。');
187
+ const message = formatLoginErrorForUser(error, '操作失败,请返回上一步后重试。', { productName });
182
188
  return (_jsxs("div", { className: "mx-4 mb-3 px-3 py-2 bg-destructive/10 rounded-lg flex items-start gap-2 shrink-0", children: [_jsx(AlertCircle, { className: "w-3.5 h-3.5 text-destructive mt-0.5 shrink-0" }), _jsx("p", { className: "text-xs text-destructive flex-1 leading-relaxed", children: message }), _jsx("button", { onClick: onClearError, className: "text-destructive/60 hover:text-destructive shrink-0 cursor-pointer", "aria-label": "\u5173\u95ED\u9519\u8BEF\u63D0\u793A", children: _jsx(X, { className: "w-3.5 h-3.5" }) })] }));
183
189
  }
184
190
  function Footer() {
@@ -9,7 +9,7 @@ export interface LoginViewActions {
9
9
  dismissError: () => void;
10
10
  }
11
11
  /**
12
- * LinX-controlled authentication presentation. Xpod does not render this.
12
+ * Shared authentication presentation, driven by the host that renders it.
13
13
  *
14
14
  * `error` is idle-context copy, not a fifth product phase. Session creation,
15
15
  * restoration and Account/WebID composition belong to the host.
@@ -64,9 +64,15 @@ export interface StorageConflict {
64
64
  export interface LoginModalHostProps {
65
65
  /** Presentational seam only; hosts supply their own product brand. */
66
66
  brand?: ReactNode;
67
+ /**
68
+ * The name this host's product is shown under, used in user-facing text such
69
+ * as an error that asks the user to restart the application. Shared components
70
+ * do not assume one: leaving it out renders the neutral default.
71
+ */
72
+ productName?: string;
67
73
  /** Accessible dialog label for the login surface. */
68
74
  ariaLabel?: string;
69
- /** Optional affordances. Omitted values preserve the complete LinX source UI. */
75
+ /** Optional affordances. Omitted values preserve the complete source UI. */
70
76
  capabilities?: {
71
77
  storageSelection?: boolean;
72
78
  additionalProviders?: boolean;
@@ -0,0 +1,6 @@
1
+ import { type ReactNode } from 'react';
2
+ export declare function LoginProductNameProvider({ productName, children, }: {
3
+ productName?: string;
4
+ children: ReactNode;
5
+ }): import("react").JSX.Element;
6
+ export declare function useLoginProductName(): string;
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext } from 'react';
3
+ import { DEFAULT_PRODUCT_NAME } from '../user-facing-errors.js';
4
+ /**
5
+ * The name the host's product is shown under, for the shared login surface.
6
+ *
7
+ * The login components are shared, so none of them may assume a product name:
8
+ * this carries the host's choice to the few places that mention the product in
9
+ * user-facing text - an error that asks the user to restart the application, for
10
+ * instance - without threading a prop through every nested view.
11
+ */
12
+ const LoginProductNameContext = createContext(DEFAULT_PRODUCT_NAME);
13
+ export function LoginProductNameProvider({ productName, children, }) {
14
+ return (_jsx(LoginProductNameContext.Provider, { value: productName?.trim() || DEFAULT_PRODUCT_NAME, children: children }));
15
+ }
16
+ export function useLoginProductName() {
17
+ return useContext(LoginProductNameContext);
18
+ }
@@ -1,2 +1,14 @@
1
- export declare function formatErrorForUser(error: unknown, fallback?: string): string;
2
- export declare function createUserFacingError(error: unknown, fallback: string): Error;
1
+ /**
2
+ * Product name used in user-facing text when the caller supplies none.
3
+ *
4
+ * These components are shared, so they must not assert a product identity: a
5
+ * host passes its own name in, and the fallback stays neutral enough to read
6
+ * correctly for any of them.
7
+ */
8
+ export declare const DEFAULT_PRODUCT_NAME = "\u5E94\u7528";
9
+ export interface UserFacingErrorOptions {
10
+ /** The name the host's product is shown under. */
11
+ productName?: string;
12
+ }
13
+ export declare function formatErrorForUser(error: unknown, fallback?: string, options?: UserFacingErrorOptions): string;
14
+ export declare function createUserFacingError(error: unknown, fallback: string, options?: UserFacingErrorOptions): Error;
@@ -1,7 +1,16 @@
1
1
  const INTERNAL_ERROR_PATTERN = /\b(provisionCode|providerCode|canonical|OIDC|openid-configuration|issuer|provider|storageProvider|publicUrl|baseUrl|spDomain|idpUrl|WebID|solid:storage|profile|dashboard|findById|IRI|HTTP\s+\d{3}|Cannot find module|node_modules|jsonld|componentsjs|cloudflared|Cloudflare Tunnel|container|root container|database|query failed|resource id|BadRequestHttpError|H400|xpod|runtime|Application Support|localhost|CSS_[A-Z_]+|XPOD_[A-Z_]+|Pod|podUrl|Solid|RDF|row\.id|row id|subject|Agent|Secretary|authenticated fetch|client_secret|client_id|access_token|refresh_token|threadId|chatId|messageId|workspaceUri|nodeId)\b/i;
2
2
  const STACK_OR_PATH_PATTERN = /(?:\/Users\/|\\Users\\|\.tsx?:\d+|\.jsx?:\d+|Require stack|at\s+\w+[\w.]*\s*\()/i;
3
3
  const RAW_ADDRESS_PATTERN = /(?:https?:\/\/|file:\/\/|127\.0\.0\.1|0\.0\.0\.0|\[::1\])/i;
4
- export function formatErrorForUser(error, fallback = '操作失败,请重试。') {
4
+ /**
5
+ * Product name used in user-facing text when the caller supplies none.
6
+ *
7
+ * These components are shared, so they must not assert a product identity: a
8
+ * host passes its own name in, and the fallback stays neutral enough to read
9
+ * correctly for any of them.
10
+ */
11
+ export const DEFAULT_PRODUCT_NAME = '应用';
12
+ export function formatErrorForUser(error, fallback = '操作失败,请重试。', options = {}) {
13
+ const productName = options.productName?.trim() || DEFAULT_PRODUCT_NAME;
5
14
  const raw = extractErrorMessage(error);
6
15
  if (!raw) {
7
16
  return fallback;
@@ -9,7 +18,7 @@ export function formatErrorForUser(error, fallback = '操作失败,请重试
9
18
  const message = safeDecodeURIComponent(raw).trim();
10
19
  const normalized = message.toLowerCase();
11
20
  if (/email_unverified|verify_required/.test(normalized)) {
12
- return '请先验证邮箱。打开注册邮箱里的验证邮件后,再回到 LinX 重试。';
21
+ return `请先验证邮箱。打开注册邮箱里的验证邮件后,再回到 ${productName} 重试。`;
13
22
  }
14
23
  if (/login_required|interaction_required|consent_required|account_selection_required/.test(normalized)) {
15
24
  return '需要重新确认登录。请在弹出的登录窗口完成授权。';
@@ -51,7 +60,7 @@ export function formatErrorForUser(error, fallback = '操作失败,请重试
51
60
  return '当前空间还没有创建完成。请回到空间选择页,重新进入后按提示创建。';
52
61
  }
53
62
  if (/selected sp pod url|current sp pod url|pod url was not applied|unable to resolve current pod url|cannot .* pod record|outside the current sp|pod 地址无效|pod 不属于当前选择的空间|当前空间没有声明可写入的 pod/.test(normalized)) {
54
- return 'LinX 还不能把数据保存到当前空间。请换一个空间;如果这是本地空间,请先完成空间创建。';
63
+ return `${productName} 还不能把数据保存到当前空间。请换一个空间;如果这是本地空间,请先完成空间创建。`;
55
64
  }
56
65
  if (/webid does not belong to this account|does not belong to this account/.test(normalized)) {
57
66
  return '账号和当前空间不匹配。请返回空间选择页,换账号或换空间。';
@@ -60,7 +69,7 @@ export function formatErrorForUser(error, fallback = '操作失败,请重试
60
69
  return '空间准备超时。请检查网络,或返回空间选择页重试。';
61
70
  }
62
71
  if (/pod write failed|write failed|read failed|solid database is missing authenticated fetch|agent resource id must|agent home|ai secretary|secretary.*初始化失败|created ai secretary.*missing id|secretary chat row|secretary thread row/.test(normalized)) {
63
- return 'LinX 还不能在当前空间保存数据。请返回空间选择页,换一个空间后重试。';
72
+ return `${productName} 还不能在当前空间保存数据。请返回空间选择页,换一个空间后重试。`;
64
73
  }
65
74
  if (/pod creation endpoint not found/.test(normalized)) {
66
75
  return '当前空间暂时不能创建。请返回空间选择页,确认选择正确后再试。';
@@ -99,34 +108,34 @@ export function formatErrorForUser(error, fallback = '操作失败,请重试
99
108
  return '本地工作区还没有配置完成。请在设置里检查本地空间后重试。';
100
109
  }
101
110
  if (/database not connected|solid database is not ready|database is not ready|数据库未就绪|not ready/.test(normalized)) {
102
- return 'LinX 还不能在当前空间保存数据。请稍后重试;如果仍失败,请换一个空间重新登录。';
111
+ return `${productName} 还不能在当前空间保存数据。请稍后重试;如果仍失败,请换一个空间重新登录。`;
103
112
  }
104
113
  if (/(?:chat|thread|message).*not found|no chat found|cannot find pod message|failed to resolve (?:chat|thread|message)|(?:chat|thread|message).*missing id|row is missing id/.test(normalized)) {
105
114
  return '当前内容还没有准备好。请刷新页面后重试。';
106
115
  }
107
116
  if (/findbyid requires|base-relative|full iris/.test(normalized)) {
108
- return 'LinX 初始化失败。请刷新页面;如果仍失败,请换一个空间重新登录。';
117
+ return `${productName} 初始化失败。请刷新页面;如果仍失败,请换一个空间重新登录。`;
109
118
  }
110
119
  if (/unable to install @undefineds\.co\/xpod|unable to prepare xpod runtime/.test(normalized)) {
111
120
  return '本地空间组件下载失败。请检查网络后重试。';
112
121
  }
113
122
  if (/unable to locate xpod|unable to determine exact @undefineds\.co\/xpod version/.test(normalized)) {
114
- return '本地空间启动文件损坏。请重启 LinX 让它自动修复;如果仍失败,请打开本地空间设置修复。';
123
+ return `本地空间启动文件损坏。请重启 ${productName} 让它自动修复;如果仍失败,请打开本地空间设置修复。`;
115
124
  }
116
125
  if (/missing required local login\/startup capabilities|scoped webid|scoped pickwebid|scoped picker|escaped recursive css runtime/.test(normalized)) {
117
- return '本地空间版本过旧。请重启 LinX 让它自动更新;如果仍失败,请打开本地空间设置修复。';
126
+ return `本地空间版本过旧。请重启 ${productName} 让它自动更新;如果仍失败,请打开本地空间设置修复。`;
118
127
  }
119
128
  if (/local 服务在完成启动前已退出|exceeded max restarts|failed to start xpod/.test(normalized)) {
120
- return '本地空间启动失败。请点“重新检查”;如果仍失败,请重启 LinX。';
129
+ return `本地空间启动失败。请点“重新检查”;如果仍失败,请重启 ${productName}。`;
121
130
  }
122
131
  if (/等待 local 服务就绪超时|local.*启动超时/.test(normalized)) {
123
- return '本地空间启动超时。请点“重新检查”;如果仍失败,请重启 LinX。';
132
+ return `本地空间启动超时。请点“重新检查”;如果仍失败,请重启 ${productName}。`;
124
133
  }
125
134
  if (/cannot find module|invalid resource iri|jsonld|componentsjs|application support|require stack/.test(normalized)) {
126
- return '本地空间启动文件损坏。请重启 LinX 让它自动修复;如果仍失败,请打开本地空间设置修复。';
135
+ return `本地空间启动文件损坏。请重启 ${productName} 让它自动修复;如果仍失败,请打开本地空间设置修复。`;
127
136
  }
128
137
  if (/spawn bun enoent|本地运行环境|node\/npm|npm|bun/.test(normalized)) {
129
- return '本机缺少本地空间运行环境。请检查网络后重试,LinX 会自动安装需要的组件。';
138
+ return `本机缺少本地空间运行环境。请检查网络后重试,${productName} 会自动安装需要的组件。`;
130
139
  }
131
140
  if (/spacekind must|configuredspacekind|requestedspacekind/.test(normalized)) {
132
141
  return '当前页面和已启动的空间不一致。请回到空间选择页重新进入。';
@@ -137,14 +146,14 @@ export function formatErrorForUser(error, fallback = '操作失败,请重试
137
146
  if (isInternalDiagnostic(message)) {
138
147
  return fallback;
139
148
  }
140
- const productMessage = localizeProductTerms(message);
149
+ const productMessage = localizeProductTerms(message, productName);
141
150
  if (isSafeUserMessage(productMessage)) {
142
151
  return productMessage;
143
152
  }
144
153
  return fallback;
145
154
  }
146
- export function createUserFacingError(error, fallback) {
147
- const userMessage = formatErrorForUser(error, fallback);
155
+ export function createUserFacingError(error, fallback, options = {}) {
156
+ const userMessage = formatErrorForUser(error, fallback, options);
148
157
  return new Error(userMessage);
149
158
  }
150
159
  function extractErrorMessage(error) {
@@ -182,10 +191,10 @@ function isSafeUserMessage(message) {
182
191
  function isInternalDiagnostic(message) {
183
192
  return INTERNAL_ERROR_PATTERN.test(message) || STACK_OR_PATH_PATTERN.test(message) || RAW_ADDRESS_PATTERN.test(message);
184
193
  }
185
- function localizeProductTerms(message) {
194
+ function localizeProductTerms(message, productName) {
186
195
  return message
187
196
  .replace(/Cloud-managed canonical URL/gi, '自动分配登录地址')
188
- .replace(/Cloud provisioning/gi, 'LinX')
197
+ .replace(/Cloud provisioning/gi, `${productName}`)
189
198
  .replace(/\bCloud\s+账号/g, '云端账号')
190
199
  .replace(/\bCloud\s+身份/g, '云端账号')
191
200
  .replace(/\bCloud\b/g, '云端')
@@ -63,10 +63,10 @@ export declare const useLoginStore: import("zustand").UseBoundStore<Omit<StoreAp
63
63
  };
64
64
  }>;
65
65
  /**
66
- * Creates the same LinX store for a host-owned lifetime.
66
+ * Creates the shared login store for a host-owned lifetime.
67
67
  *
68
- * This is the only product adaptation: callers may isolate the two persisted
69
- * keys or opt out of persistence without changing the LinX state machine.
68
+ * The only host adaptation: callers may isolate the two persisted keys or opt out
69
+ * of persistence without changing the shared state machine.
70
70
  */
71
71
  export declare function createLoginStore(options?: LoginStoreOptions): LoginStoreApi;
72
72
  export declare const DEFAULT_PROVIDERS: ProviderOption[];
@@ -183,10 +183,10 @@ function createLoginPersistOptions(storage, name) {
183
183
  const defaultPersistStorage = getBrowserStorage() ?? createMemoryStorage();
184
184
  export const useLoginStore = create()(persist(createLoginState(persistRememberedAccount), createLoginPersistOptions(defaultPersistStorage, LOGIN_STORE_KEY)));
185
185
  /**
186
- * Creates the same LinX store for a host-owned lifetime.
186
+ * Creates the shared login store for a host-owned lifetime.
187
187
  *
188
- * This is the only product adaptation: callers may isolate the two persisted
189
- * keys or opt out of persistence without changing the LinX state machine.
188
+ * The only host adaptation: callers may isolate the two persisted keys or opt out
189
+ * of persistence without changing the shared state machine.
190
190
  */
191
191
  export function createLoginStore(options = {}) {
192
192
  const rememberedStorage = options.storage === undefined ? getBrowserStorage() : options.storage;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@undefineds.co/xpod",
3
- "version": "0.4.12",
3
+ "version": "0.4.13",
4
4
  "description": "Xpod is an extended Community Solid Server, offering rich-feature, production-level Solid Pod and identity management.",
5
5
  "repository": "https://github.com/undefinedsco/xpod",
6
6
  "author": "developer@undefineds.co",
@@ -65,7 +65,7 @@
65
65
  },
66
66
  "scripts": {
67
67
  "build": "bun run build:packages && bun run build:ts && bun run build:components && bun run build:ui",
68
- "build:packages": "bun run --filter '@undefineds.co/solid-sdk' build && bun run --filter '@undefineds.co/shared-ui' build && bun run --filter '@undefineds.co/pod-collections' build && bun run --filter '@undefineds.co/extension-sdk' build && bun run --filter '@undefineds.co/ai-connections' build",
68
+ "build:packages": "bun run --filter '@undefineds.co/solid-sdk' build && bun run --filter '@undefineds.co/shared-ui' build && bun run --filter '@undefineds.co/pod-collections' build && bun run --filter '@undefineds.co/extension-sdk' build && bun run --filter '@undefineds.co/ai-connections-core' build && bun run --filter '@undefineds.co/ai-connections' build",
69
69
  "test:packages": "bun run --filter './packages/*' test",
70
70
  "build:ts": "tsc",
71
71
  "build:components": "componentsjs-generator -s src -c dist/components -r undefineds -i config/components-ignore.json",
@@ -351,6 +351,7 @@
351
351
  "@undefineds.co/drizzle-solid": "file:./node_modules/@undefineds.co/drizzle-solid",
352
352
  "@undefineds.co/extensions": "file:./node_modules/@undefineds.co/extensions",
353
353
  "@undefineds.co/ai-connections": "file:./node_modules/@undefineds.co/ai-connections",
354
+ "@undefineds.co/ai-connections-core": "file:./node_modules/@undefineds.co/ai-connections-core",
354
355
  "@undefineds.co/extension-sdk": "file:./node_modules/@undefineds.co/extension-sdk",
355
356
  "@undefineds.co/pod-collections": "file:./node_modules/@undefineds.co/pod-collections",
356
357
  "@undefineds.co/shared-ui": "file:./node_modules/@undefineds.co/shared-ui",
@@ -383,7 +384,7 @@
383
384
  }
384
385
  },
385
386
  "optionalDependencies": {
386
- "@undefineds.co/xpod-darwin-arm64": "0.4.12"
387
+ "@undefineds.co/xpod-darwin-arm64": "0.4.13"
387
388
  },
388
389
  "resolutions": {
389
390
  "@inrupt/solid-client-authn-browser": "^3.1.1",
@@ -408,6 +409,7 @@
408
409
  "@undefineds.co/drizzle-solid",
409
410
  "@undefineds.co/extensions",
410
411
  "@undefineds.co/ai-connections",
412
+ "@undefineds.co/ai-connections-core",
411
413
  "@undefineds.co/extension-sdk",
412
414
  "@undefineds.co/pod-collections",
413
415
  "@undefineds.co/shared-ui",