@undefineds.co/xpod 0.4.14 → 0.4.15

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 (202) hide show
  1. package/config/cloud.json +0 -3
  2. package/config/local.json +0 -3
  3. package/config/xpod.base.json +0 -24
  4. package/dist/api/ai-config/AiConfigStore.d.ts +2 -2
  5. package/dist/api/ai-config/AiConfigStore.js +4 -1
  6. package/dist/api/ai-gateway/auth/CallerPodAccess.d.ts +2 -5
  7. package/dist/api/ai-gateway/auth/CallerPodAccess.js +3 -42
  8. package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.d.ts +2 -1
  9. package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.js +1 -1
  10. package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.d.ts +3 -8
  11. package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.js +9 -32
  12. package/dist/api/ai-gateway/connect/index.d.ts +3 -3
  13. package/dist/api/ai-gateway/connect/index.js +9 -38
  14. package/dist/api/ai-gateway/errors.js +2 -1
  15. package/dist/api/ai-gateway/models/PodModelSelectionRepository.d.ts +3 -3
  16. package/dist/api/ai-gateway/models/PodModelSelectionRepository.js +7 -11
  17. package/dist/api/ai-gateway/pod/HostedPodRoute.d.ts +27 -0
  18. package/dist/api/ai-gateway/pod/HostedPodRoute.js +47 -0
  19. package/dist/api/ai-gateway/pod/OwnerPodAccess.d.ts +79 -0
  20. package/dist/api/ai-gateway/pod/OwnerPodAccess.js +192 -0
  21. package/dist/api/ai-gateway/pod/PodInterfaceKeyStore.d.ts +52 -0
  22. package/dist/api/ai-gateway/pod/PodInterfaceKeyStore.js +61 -0
  23. package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.d.ts +3 -3
  24. package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.js +7 -32
  25. package/dist/api/auth/ClientCredentialsAuthenticator.js +5 -28
  26. package/dist/api/auth/TokenEndpointRoute.d.ts +18 -0
  27. package/dist/api/auth/TokenEndpointRoute.js +36 -0
  28. package/dist/api/chatkit/pod-store.d.ts +4 -4
  29. package/dist/api/chatkit/pod-store.js +24 -95
  30. package/dist/api/container/common.js +36 -23
  31. package/dist/api/container/local.js +62 -29
  32. package/dist/api/container/routes.js +39 -7
  33. package/dist/api/container/types.d.ts +2 -2
  34. package/dist/api/handlers/AiGatewayManagementHandler.d.ts +6 -0
  35. package/dist/api/handlers/AiGatewayManagementHandler.js +17 -4
  36. package/dist/api/handlers/NetworkSettingsHandler.d.ts +7 -0
  37. package/dist/api/handlers/NetworkSettingsHandler.js +7 -0
  38. package/dist/api/handlers/PodSettingsHandler.d.ts +3 -3
  39. package/dist/api/handlers/PodSettingsHandler.js +3 -3
  40. package/dist/api/handlers/ProvisionHandler.d.ts +29 -0
  41. package/dist/api/handlers/ProvisionHandler.js +46 -0
  42. package/dist/api/handlers/ReachabilityHandler.js +3 -1
  43. package/dist/api/runtime.d.ts +9 -0
  44. package/dist/api/runtime.js +16 -3
  45. package/dist/cli/commands/start.d.ts +9 -2
  46. package/dist/cli/commands/start.js +15 -17
  47. package/dist/components/components.jsonld +1 -1
  48. package/dist/components/context.jsonld +5 -42
  49. package/dist/edge/EdgeNodeAgent.d.ts +10 -0
  50. package/dist/edge/EdgeNodeAgent.js +55 -0
  51. package/dist/edge/EdgeNodeAgent.jsonld +8 -0
  52. package/dist/edge/reachability/ReachabilitySessionService.js +4 -1
  53. package/dist/edge/reachability/RouteSetBuilder.d.ts +18 -1
  54. package/dist/edge/reachability/RouteSetBuilder.js +47 -0
  55. package/dist/edge/reachability/RouteSetBuilder.jsonld +29 -0
  56. package/dist/edge/reachability/types.d.ts +8 -2
  57. package/dist/http/SubgraphSparqlHttpHandler.d.ts +1 -25
  58. package/dist/http/SubgraphSparqlHttpHandler.js +0 -100
  59. package/dist/http/SubgraphSparqlHttpHandler.jsonld +0 -8
  60. package/dist/identity/drizzle/PodInterfaceKeyRepository.d.ts +33 -0
  61. package/dist/identity/drizzle/PodInterfaceKeyRepository.js +78 -0
  62. package/dist/identity/drizzle/db.d.ts +7 -0
  63. package/dist/identity/drizzle/db.js +30 -0
  64. package/dist/identity/drizzle/schema.pg.d.ts +9 -0
  65. package/dist/identity/drizzle/schema.pg.js +16 -1
  66. package/dist/identity/drizzle/schema.sqlite.d.ts +106 -0
  67. package/dist/identity/drizzle/schema.sqlite.js +16 -1
  68. package/dist/index.d.ts +1 -2
  69. package/dist/index.js +3 -5
  70. package/dist/runtime/GatewayAdminProxyAuth.d.ts +1 -16
  71. package/dist/runtime/GatewayAdminProxyAuth.js +2 -71
  72. package/dist/runtime/Proxy.d.ts +10 -1
  73. package/dist/runtime/Proxy.js +95 -28
  74. package/dist/runtime/bootstrap.d.ts +10 -0
  75. package/dist/runtime/bootstrap.js +24 -0
  76. package/dist/runtime/host/node/NodeRuntimeHost.js +5 -3
  77. package/dist/runtime/index.d.ts +1 -1
  78. package/dist/runtime/index.js +2 -3
  79. package/dist/runtime/js-runtime.js +10 -3
  80. package/dist/runtime/lifecycle.js +5 -4
  81. package/dist/runtime/port-finder.d.ts +9 -13
  82. package/dist/runtime/port-finder.js +18 -37
  83. package/dist/tunnel/AutoTunnelProvider.d.ts +56 -0
  84. package/dist/tunnel/AutoTunnelProvider.js +181 -0
  85. package/dist/tunnel/index.d.ts +1 -0
  86. package/dist/tunnel/index.js +3 -1
  87. package/node_modules/@undefineds.co/ai-connections/dist/error-wording.js +7 -2
  88. package/node_modules/@undefineds.co/solid-sdk/dist/access-route.cjs +230 -0
  89. package/node_modules/@undefineds.co/solid-sdk/dist/access-route.d.ts +76 -0
  90. package/node_modules/@undefineds.co/solid-sdk/dist/access-route.js +115 -0
  91. package/node_modules/@undefineds.co/solid-sdk/dist/index.cjs +89 -0
  92. package/node_modules/@undefineds.co/solid-sdk/dist/index.d.ts +1 -0
  93. package/node_modules/@undefineds.co/solid-sdk/dist/index.js +1 -0
  94. package/node_modules/@undefineds.co/solid-sdk/package.json +6 -1
  95. package/package.json +2 -2
  96. package/static/app/assets/inrupt-smoke.js +23 -23
  97. package/static/auth-callback/assets/{AiConfigContext-DCXpjzpj.js → AiConfigContext-Bx0HCAW5.js} +1 -1
  98. package/static/auth-callback/assets/{AiConfigPage-fe-xMIXa.js → AiConfigPage-ChQImMbm.js} +1 -1
  99. package/static/auth-callback/assets/{DocumentProcessingPanel-BGnkfMuU.js → DocumentProcessingPanel-D830H4SH.js} +1 -1
  100. package/static/auth-callback/assets/{IndexLifecyclePanel-42Jups0j.js → IndexLifecyclePanel-CnlkjMF8.js} +1 -1
  101. package/static/auth-callback/assets/{IndexSubjectPanel-CYyLOlQU.js → IndexSubjectPanel-CdEfg_CO.js} +1 -1
  102. package/static/auth-callback/assets/{ModelAssignmentsPanel-BOvUH4yr.js → ModelAssignmentsPanel-D-8A8dZx.js} +1 -1
  103. package/static/auth-callback/assets/{ModelsPage-DwyITxt7.js → ModelsPage-Cim7cubp.js} +3 -3
  104. package/static/auth-callback/assets/{NetworkPage-CG9RelJA.js → NetworkPage-CfK3x-pb.js} +2 -2
  105. package/static/auth-callback/assets/{PaneListHeader-yvd5ohs6.js → PaneListHeader-Bf_kEd4U.js} +1 -1
  106. package/static/auth-callback/assets/{SearchIndexingPanel-2_a6ezzj.js → SearchIndexingPanel-4kD4RBEQ.js} +1 -1
  107. package/static/auth-callback/assets/{StatusSubjectPanel-8qtVxnzC.js → StatusSubjectPanel-Bw9AiTSf.js} +1 -1
  108. package/static/auth-callback/assets/{StatusWorkspace-CBdRahCF.js → StatusWorkspace-C-301H-0.js} +1 -1
  109. package/static/auth-callback/assets/{SystemSettingsPage-BZJ6vWkg.js → SystemSettingsPage-BbWn-eG6.js} +1 -1
  110. package/static/auth-callback/assets/{SystemSettingsSubjectPanel-xm08UhXP.js → SystemSettingsSubjectPanel-DA4wvNSm.js} +1 -1
  111. package/static/auth-callback/assets/{XpodAiConnectionsPodStore-V6vgGfuw.js → XpodAiConnectionsPodStore-CohdyLoX.js} +1 -1
  112. package/static/auth-callback/assets/{activity-CeM7xly8.js → activity-CCsb9Oam.js} +1 -1
  113. package/static/auth-callback/assets/ai-connections-DexTPyfC.js +1 -0
  114. package/static/auth-callback/assets/{auth-callback-DTG8cSj7.js → auth-callback-Ds-c62W3.js} +5 -5
  115. package/static/auth-callback/assets/{badge-qJo2Zr4d.js → badge-CQm5OyzR.js} +1 -1
  116. package/static/auth-callback/assets/{collection-runtime-Bztsz31a.js → collection-runtime-DlAuU5TW.js} +1 -1
  117. package/static/auth-callback/assets/{dialog-D-h6x5x0.js → dialog-CnGzg5Ff.js} +1 -1
  118. package/static/auth-callback/assets/{download-C2ir4lmR.js → download-DwMONJvm.js} +1 -1
  119. package/static/auth-callback/assets/{external-link-THLDL4On.js → external-link-Bu5AGqCO.js} +1 -1
  120. package/static/auth-callback/assets/{index-BlVZb9A7.js → index-B0T-1YO8.js} +1 -1
  121. package/static/auth-callback/assets/{index-BRpv4yO3.js → index-C8QZf_4W.js} +1 -1
  122. package/static/auth-callback/assets/{index-D983R1FV.js → index-DwIlrIDG.js} +1 -1
  123. package/static/auth-callback/assets/{index-browser-3FvR0aaf.js → index-browser-lRsMcP_7.js} +1 -1
  124. package/static/auth-callback/assets/{key-round-C9U5j1Ly.js → key-round-BDMtU57P.js} +1 -1
  125. package/static/auth-callback/assets/{rotate-ccw-DP45cD4o.js → rotate-ccw-CoKIGCsQ.js} +1 -1
  126. package/static/auth-callback/assets/{skeleton-Dn4EiSCS.js → skeleton-CPoSWHDr.js} +1 -1
  127. package/static/auth-callback/assets/{waypoints-uqFQ3uEG.js → waypoints-BeYHxqHv.js} +1 -1
  128. package/static/auth-callback/assets/{workspace-layout-DLYK0Wwu.js → workspace-layout-xA5YxiK3.js} +1 -1
  129. package/static/auth-callback/auth-callback.html +1 -1
  130. package/static/dashboard/assets/{AiConfigContext-DJcMECNw.js → AiConfigContext-rWx4TyiH.js} +1 -1
  131. package/static/dashboard/assets/{AiConfigPage-BvE7dOTy.js → AiConfigPage-StVJpDFT.js} +1 -1
  132. package/static/dashboard/assets/{DocumentProcessingPanel-D9780krf.js → DocumentProcessingPanel-DJ5yul2O.js} +1 -1
  133. package/static/dashboard/assets/{IndexLifecyclePanel-SjsUcnbM.js → IndexLifecyclePanel-CpjtgezK.js} +1 -1
  134. package/static/dashboard/assets/{IndexSubjectPanel-C-ym2Tqi.js → IndexSubjectPanel-BVKcot1_.js} +1 -1
  135. package/static/dashboard/assets/{ModelAssignmentsPanel-BRjZ-arB.js → ModelAssignmentsPanel-BxVgWZPc.js} +1 -1
  136. package/static/dashboard/assets/{ModelsPage-BtTU6du3.js → ModelsPage-CECBwmeO.js} +3 -3
  137. package/static/dashboard/assets/{NetworkPage-CV9qpkDg.js → NetworkPage-zQgFscEW.js} +2 -2
  138. package/static/dashboard/assets/{PaneListHeader-KyPTTBsv.js → PaneListHeader-DIPe8pS6.js} +1 -1
  139. package/static/dashboard/assets/{SearchIndexingPanel-DolHGawg.js → SearchIndexingPanel-lalFJ3c8.js} +1 -1
  140. package/static/dashboard/assets/{StatusSubjectPanel-_YZvKiYi.js → StatusSubjectPanel-CpY_KU-G.js} +1 -1
  141. package/static/dashboard/assets/{StatusWorkspace-Dlbh_G40.js → StatusWorkspace-BwWCii3A.js} +1 -1
  142. package/static/dashboard/assets/{SystemSettingsPage-Be7QSIoz.js → SystemSettingsPage-BKZxX-_n.js} +1 -1
  143. package/static/dashboard/assets/{SystemSettingsSubjectPanel-DBp0gja7.js → SystemSettingsSubjectPanel-BZrqb2C5.js} +1 -1
  144. package/static/dashboard/assets/{XpodAiConnectionsPodStore-ClpSjzpP.js → XpodAiConnectionsPodStore-Bbpx9dTN.js} +1 -1
  145. package/static/dashboard/assets/{activity-lsNbTXJu.js → activity-BJ15TLVP.js} +1 -1
  146. package/static/dashboard/assets/ai-connections-GG6qkTJt.js +1 -0
  147. package/static/dashboard/assets/{badge-CVatKjaG.js → badge-BBX5FlaB.js} +1 -1
  148. package/static/dashboard/assets/{collection-runtime-Ec4UnY28.js → collection-runtime-UBbHBzdf.js} +1 -1
  149. package/static/dashboard/assets/{dashboard-BEzsRsvF.js → dashboard-7Y6BHyV9.js} +62 -62
  150. package/static/dashboard/assets/{dialog-BuyelQ4V.js → dialog-QrOJ-hB0.js} +1 -1
  151. package/static/dashboard/assets/{download-B4Nf678F.js → download-DK9x-VOP.js} +1 -1
  152. package/static/dashboard/assets/{external-link-PYv9CvKL.js → external-link-Cnkn87mJ.js} +1 -1
  153. package/static/dashboard/assets/{index-C9XPE-mI.js → index-B1z84it5.js} +1 -1
  154. package/static/dashboard/assets/{index-awr7ulur.js → index-DzjauX3N.js} +1 -1
  155. package/static/dashboard/assets/{index-Cx69bTNh.js → index-cIa8_efI.js} +1 -1
  156. package/static/dashboard/assets/{key-round-VsY80U1Z.js → key-round-BoS6UqKz.js} +1 -1
  157. package/static/dashboard/assets/{rotate-ccw-Cz1K4vE9.js → rotate-ccw-BeWV76i0.js} +1 -1
  158. package/static/dashboard/assets/{skeleton-BhNv_8tO.js → skeleton-CypcJL07.js} +1 -1
  159. package/static/dashboard/assets/{waypoints-DYS9XFYV.js → waypoints-zHOOqfhi.js} +1 -1
  160. package/static/dashboard/assets/{workspace-layout-OZJAFx5V.js → workspace-layout-DZ9JuxnM.js} +1 -1
  161. package/static/dashboard/dashboard.html +1 -1
  162. package/static/settings/assets/{AiConfigContext-B8JS3MXF.js → AiConfigContext-D3b1l_Kw.js} +1 -1
  163. package/static/settings/assets/{AiConfigPage-C3Zl8LUl.js → AiConfigPage-DYKw-atP.js} +1 -1
  164. package/static/settings/assets/{DocumentProcessingPanel-DpDZAQvf.js → DocumentProcessingPanel-DguRfsIV.js} +1 -1
  165. package/static/settings/assets/{IndexLifecyclePanel-Ec1XF88t.js → IndexLifecyclePanel-B85qJJA4.js} +1 -1
  166. package/static/settings/assets/{IndexSubjectPanel-BulT9BmO.js → IndexSubjectPanel-CsN7IxaV.js} +1 -1
  167. package/static/settings/assets/{ModelAssignmentsPanel-BcGSmYjb.js → ModelAssignmentsPanel-DEp9byI6.js} +1 -1
  168. package/static/settings/assets/{ModelsPage-CvTCKy1T.js → ModelsPage-CzTnPs_G.js} +3 -3
  169. package/static/settings/assets/{NetworkPage-DQF5u9Bn.js → NetworkPage-BDVnmUU0.js} +2 -2
  170. package/static/settings/assets/{PaneListHeader-D40hqcVl.js → PaneListHeader-Cpe39N76.js} +1 -1
  171. package/static/settings/assets/{SearchIndexingPanel-iCUPOx_0.js → SearchIndexingPanel-DA9w8lLL.js} +1 -1
  172. package/static/settings/assets/{StatusSubjectPanel-E--ZHSql.js → StatusSubjectPanel-BU0Aq0CS.js} +1 -1
  173. package/static/settings/assets/{StatusWorkspace-YjDAx1II.js → StatusWorkspace-D1AC1i5N.js} +1 -1
  174. package/static/settings/assets/{SystemSettingsPage-CDdV3mC9.js → SystemSettingsPage-ChKvOioO.js} +1 -1
  175. package/static/settings/assets/{SystemSettingsSubjectPanel-Br8WazDq.js → SystemSettingsSubjectPanel-DyTpOnD2.js} +1 -1
  176. package/static/settings/assets/{XpodAiConnectionsPodStore-CLr38P_Z.js → XpodAiConnectionsPodStore-VU5Bsz1a.js} +1 -1
  177. package/static/settings/assets/{activity-C5DAHHTE.js → activity-DGpLfsQB.js} +1 -1
  178. package/static/settings/assets/ai-connections-DexTPyfC.js +1 -0
  179. package/static/settings/assets/{badge-D8eIyxKt.js → badge-_hCrrWRP.js} +1 -1
  180. package/static/settings/assets/{collection-runtime-DLc9zil8.js → collection-runtime-E40TZ8Cl.js} +1 -1
  181. package/static/settings/assets/{dialog-CyuR7Va4.js → dialog-DTr2JkHn.js} +1 -1
  182. package/static/settings/assets/{download-c0oxZrCz.js → download-B_D21DDX.js} +1 -1
  183. package/static/settings/assets/{external-link-D3Z34fP_.js → external-link-BATYaM13.js} +1 -1
  184. package/static/settings/assets/{index-CSr3-2Cj.js → index-BAlAVi-J.js} +1 -1
  185. package/static/settings/assets/{index-ComidxAm.js → index-Ckh4h9jj.js} +1 -1
  186. package/static/settings/assets/{index-CKGbRFlc.js → index-DOiwLF4B.js} +1 -1
  187. package/static/settings/assets/{index-browser-CAscEbae.js → index-browser-DFFWN3Kr.js} +1 -1
  188. package/static/settings/assets/{key-round-DyjLmXuB.js → key-round-ZTVU_1O1.js} +1 -1
  189. package/static/settings/assets/{rotate-ccw-679HF_ec.js → rotate-ccw-DDdw8PTU.js} +1 -1
  190. package/static/settings/assets/{settings-DKknqu4C.js → settings-CyLnISOv.js} +62 -62
  191. package/static/settings/assets/{skeleton-CkopNkPB.js → skeleton-DEzA3hc2.js} +1 -1
  192. package/static/settings/assets/{waypoints-CrqfAftE.js → waypoints-BSdfNvEb.js} +1 -1
  193. package/static/settings/assets/{workspace-layout-UN6c4qTG.js → workspace-layout-BOQnl_3d.js} +1 -1
  194. package/static/settings/settings.html +1 -1
  195. package/dist/api/ai-gateway/pod/HostedPodDataAccess.d.ts +0 -31
  196. package/dist/api/ai-gateway/pod/HostedPodDataAccess.js +0 -330
  197. package/dist/http/InternalPodDataHttpHandler.d.ts +0 -57
  198. package/dist/http/InternalPodDataHttpHandler.js +0 -551
  199. package/dist/http/InternalPodDataHttpHandler.jsonld +0 -243
  200. package/static/auth-callback/assets/ai-connections-C6yaE6WQ.js +0 -1
  201. package/static/dashboard/assets/ai-connections-CXp5gd1J.js +0 -1
  202. package/static/settings/assets/ai-connections-C6yaE6WQ.js +0 -1
@@ -1 +1 @@
1
- import{j as e,u as U,r as b}from"./dashboard-BEzsRsvF.js";import{m as z,u as L,t as q}from"./AiConfigContext-DJcMECNw.js";import{D as X,a as J,b as V,c as G,d as H,e as K}from"./dialog-BuyelQ4V.js";function Q(t,s){return N(t)!==N(s)}function N(t){return Array.isArray(t)?`[${t.map(N).join(",")}]`:t&&typeof t=="object"?`{${Object.entries(t).filter(([,s])=>s!==void 0).sort(([s],[n])=>s.localeCompare(n)).map(([s,n])=>`${JSON.stringify(s)}:${N(n)}`).join(",")}}`:JSON.stringify(t)}const k=[{label:"General / Chat",name:"chatModel",description:"Used for assistant conversations and general text tasks."},{label:"OCR",name:"ocrModel",description:"Reads text from images and scanned pages."},{label:"Document Reader",name:"readerModel",description:"Extracts structure and content from documents."},{label:"Embedding",name:"embeddingModel",description:"Creates vectors for semantic search."},{label:"Indexer / Summarizer",name:"indexerModel",description:"Prepares and summarizes content for indexes."},{label:"Reranker",name:"rerankerModel",description:"Reorders search results by relevance."}];function W(){const{config:t,capabilities:s,lifecycle:n,models:o,save:l,saveAndRebuild:c,saving:i,rebuilding:a}=L(),g=U(),[f,j]=b.useState({}),[u,v]=b.useState(),[y,w]=b.useState({}),[S,x]=b.useState(),[C,d]=b.useState();b.useEffect(()=>{let r=!1;return queueMicrotask(()=>{r||j(t?.models??{})}),()=>{r=!0}},[t]);const _=Q(f,t?.models??{}),M=T(f,t),h=R(n,a),A=()=>Object.fromEntries(k.map(({name:r})=>[r,f[r]||null])),F=async r=>{if(r.preventDefault(),M){if(h)return;x({models:A(),switch:M});return}await l({models:A()})},B=async()=>{const r=Object.fromEntries(k.map(({name:p})=>[p,null])),m=T(r,t);if(!m){await l({models:r});return}h||x({models:r,switch:m})},I=async()=>{const r=S;if(x(void 0),!r)return;const m=D(s);if(!m){await l({models:r.models}),d("模型已保存;此运行时不支持重建索引,请稍后手动重建。");return}await c({models:r.models},m),d(void 0)};return e.jsxs(e.Fragment,{children:[e.jsxs(P,{title:"Model Assignments",description:"Choose a connected model for each Xpod capability. Unassigned capabilities use the system default.",onSubmit:F,onRestore:()=>{B()},saving:i||a,dirty:_,children:[e.jsx("div",{className:"divide-y divide-border rounded-xl border border-border",children:k.map(r=>e.jsx(O,{...r,models:o,value:f[r.name],testing:u===r.name,testResult:y[r.name],disabled:r.name==="embeddingModel"&&h,notice:r.name!=="embeddingModel"?void 0:h?"索引重建进行中,完成后才能再次切换向量模型。":M?"切换向量模型会重建索引:保存前需要二次确认,确认后立即排队重建。":void 0,onChange:m=>j(p=>({...p,[r.name]:m})),onTest:async m=>{v(r.name);try{await q(g.fetch,m),w(p=>({...p,[r.name]:"ready"}))}catch{w(p=>({...p,[r.name]:"failed"}))}finally{v(void 0)}}},r.name))}),e.jsx(E,{lifecycle:n,fallbackNotice:C})]}),e.jsx(Z,{request:S?.switch,models:o,saving:i||a||h,onCancel:()=>x(void 0),onConfirm:()=>{I()}})]})}function T(t,s){const n=t.embeddingModel;if(n===void 0)return;const o=s?.models?.embeddingModel??"";return(n??"")===o?void 0:{from:o||void 0,to:n||void 0}}function R(t,s=!1){if(s)return!0;const n=$(t)?.phase;return n==="queued"||n==="running"}function D(t){const s=t?.rebuildTargets??[];if(s.includes("vector"))return"vector";if(s.includes("all"))return"all"}function $(t){if(!t)return;const s=t.recent[0];if(!s)return t.pending>0?{phase:"queued",pending:t.pending}:void 0;if(!(s.status==="queued"&&t.pending<=0))return{phase:s.status,pending:t.pending,target:s.target,...s.progress!==void 0?{progress:s.progress}:{},...s.error?{error:s.error}:{}}}const Y={queued:"索引重建已排队",running:"索引重建进行中",succeeded:"索引重建完成",failed:"索引重建失败"};function E({lifecycle:t,fallbackNotice:s}){const n=$(t);if(!n)return s?e.jsx("p",{role:"status",className:"text-xs text-amber-600",children:s}):null;const o=[n.progress!==void 0?`${n.progress}%`:void 0,n.pending>0?`队列 ${n.pending}`:void 0,n.error].filter(Boolean).join(" · ");return e.jsxs("p",{role:"status",className:`text-xs ${n.phase==="failed"?"text-destructive":"text-muted-foreground"}`,children:[Y[n.phase],o?` · ${o}`:""]})}function Z({request:t,models:s,saving:n,onCancel:o,onConfirm:l}){const c=i=>{if(!i)return"系统默认";const a=s.find(g=>g.ref===i);return a?`${a.displayName??a.id} · ${a.owner}`:i};return e.jsx(X,{open:!!t,onOpenChange:i=>{i||o()},children:e.jsxs(J,{"data-testid":"embedding-switch-dialog",children:[e.jsxs(V,{children:[e.jsx(G,{children:"切换向量模型并重建索引?"}),e.jsx(H,{children:"已建立的向量由原模型生成,切换后需要用新模型重建索引才能参与检索。重建期间检索只会返回文本命中。"})]}),t&&e.jsxs("dl",{className:"grid gap-2 text-sm",children:[e.jsxs("div",{className:"flex justify-between gap-4",children:[e.jsx("dt",{className:"text-muted-foreground",children:"当前"}),e.jsx("dd",{className:"min-w-0 break-all text-right",children:c(t.from)})]}),e.jsxs("div",{className:"flex justify-between gap-4",children:[e.jsx("dt",{className:"text-muted-foreground",children:"切换为"}),e.jsx("dd",{className:"min-w-0 break-all text-right",children:c(t.to)})]})]}),e.jsxs(K,{children:[e.jsx("button",{type:"button",onClick:o,className:"h-9 rounded-md border border-input bg-background px-3 text-sm font-medium hover:bg-accent",children:"取消"}),e.jsx("button",{type:"button",disabled:n,onClick:l,className:"h-9 rounded-md bg-primary px-3 text-sm font-medium text-primary-foreground disabled:opacity-50",children:n?"提交中…":"确认切换并重建"})]})]})})}function O({label:t,name:s,description:n,models:o,value:l,testing:c,testResult:i,notice:a,disabled:g=!1,onChange:f,onTest:j}){const u=o.find(d=>d.ref===l),v=z(o,s),y=u?.capabilities.some(d=>["chat","embedding"].includes(d.toLowerCase()))===!0,x=[u?`Connected · credential ready · ${u.owner}`:l?"Selected model is no longer credential-ready":void 0,i==="ready"?"Probe succeeded":i==="failed"?"Probe failed; review AI Connection health":void 0].filter(Boolean).join(" · "),C=!!(l&&!u)||i==="failed";return e.jsxs("div",{"data-testid":"model-assignment-row",className:"grid gap-3 p-4 lg:grid-cols-[minmax(220px,1fr)_minmax(320px,440px)] lg:items-start",children:[e.jsxs("div",{className:"min-w-0 pt-1",children:[e.jsx("span",{className:"block text-sm font-medium text-foreground",children:t}),e.jsx("span",{className:"mt-0.5 block text-xs leading-5 text-muted-foreground",children:n})]}),e.jsxs("div",{"data-testid":"model-assignment-controls",className:"grid min-w-0 gap-2 sm:grid-cols-[minmax(0,1fr)_4.5rem] sm:items-start",children:[e.jsxs("label",{className:"min-w-0",children:[e.jsxs("span",{className:"sr-only",children:[t," model"]}),e.jsxs("select",{name:s,value:l??"",disabled:g,onChange:d=>f(d.target.value),className:"h-10 w-full rounded-md border border-input bg-background px-3 text-sm text-foreground disabled:opacity-50",children:[e.jsx("option",{value:"",children:"System default"}),v.map(d=>e.jsxs("option",{value:d.ref,children:[d.displayName??d.id," · ",d.owner]},`${d.owner}:${d.id}`))]})]}),e.jsx("button",{type:"button","aria-label":`Test ${t} model`,disabled:g||!y||c,title:u?y?"Send a bounded readiness probe":"This model has no bounded probe endpoint":"Select a connected model first",onClick:()=>u&&void j(u),className:"h-10 w-full self-start rounded-md border border-input bg-background px-3 text-sm font-medium text-foreground hover:bg-accent disabled:opacity-50",children:c?"Testing…":"Test"}),x&&e.jsx("span",{role:"status",className:`text-xs sm:col-span-2 ${C?"text-destructive":"text-muted-foreground"}`,children:x}),a&&e.jsx("span",{"data-testid":"model-assignment-notice",className:"text-xs text-amber-600 sm:col-span-2",children:a})]})]})}function P({title:t,description:s,children:n,onSubmit:o,onRestore:l,footerActions:c,saving:i=!1,dirty:a=!0}){return e.jsxs("form",{onSubmit:o,className:"mx-auto flex w-full max-w-4xl flex-col gap-6 p-6",children:[e.jsxs("header",{children:[e.jsx("h1",{className:"text-2xl font-semibold tracking-tight text-foreground",children:t}),e.jsx("p",{className:"mt-2 max-w-2xl text-sm text-muted-foreground",children:s})]}),n,e.jsxs("div",{className:"flex justify-end gap-2 border-t border-border pt-4",children:[e.jsx("span",{role:"status",className:"mr-auto self-center text-xs text-muted-foreground",children:a?"Unsaved changes":"Applied"}),c,e.jsx("button",{type:"button",onClick:l,disabled:i||!l,className:"h-9 rounded-md border border-input bg-background px-3 text-sm font-medium hover:bg-accent disabled:opacity-50",children:"Restore defaults"}),e.jsx("button",{type:"submit",disabled:i||!o||!a,className:"h-9 rounded-md bg-primary px-3 text-sm font-medium text-primary-foreground disabled:opacity-50",children:i?"Saving…":"Save configuration"})]})]})}const ne=Object.freeze(Object.defineProperty({__proto__:null,AiConfigForm:P,ModelAssignmentRow:O,ModelAssignmentsPanel:W,RebuildStatusLine:E,embeddingModelSwitch:T,rebuildInFlight:R,rebuildStatusFrom:$,rebuildTargetForCapabilities:D},Symbol.toStringTag,{value:"Module"}));export{P as A,ne as M,Q as i};
1
+ import{j as e,u as U,r as b}from"./dashboard-7Y6BHyV9.js";import{m as z,u as L,t as q}from"./AiConfigContext-rWx4TyiH.js";import{D as X,a as J,b as V,c as G,d as H,e as K}from"./dialog-QrOJ-hB0.js";function Q(t,s){return N(t)!==N(s)}function N(t){return Array.isArray(t)?`[${t.map(N).join(",")}]`:t&&typeof t=="object"?`{${Object.entries(t).filter(([,s])=>s!==void 0).sort(([s],[n])=>s.localeCompare(n)).map(([s,n])=>`${JSON.stringify(s)}:${N(n)}`).join(",")}}`:JSON.stringify(t)}const k=[{label:"General / Chat",name:"chatModel",description:"Used for assistant conversations and general text tasks."},{label:"OCR",name:"ocrModel",description:"Reads text from images and scanned pages."},{label:"Document Reader",name:"readerModel",description:"Extracts structure and content from documents."},{label:"Embedding",name:"embeddingModel",description:"Creates vectors for semantic search."},{label:"Indexer / Summarizer",name:"indexerModel",description:"Prepares and summarizes content for indexes."},{label:"Reranker",name:"rerankerModel",description:"Reorders search results by relevance."}];function W(){const{config:t,capabilities:s,lifecycle:n,models:o,save:l,saveAndRebuild:c,saving:i,rebuilding:a}=L(),g=U(),[f,j]=b.useState({}),[u,v]=b.useState(),[y,w]=b.useState({}),[S,x]=b.useState(),[C,d]=b.useState();b.useEffect(()=>{let r=!1;return queueMicrotask(()=>{r||j(t?.models??{})}),()=>{r=!0}},[t]);const _=Q(f,t?.models??{}),M=T(f,t),h=R(n,a),A=()=>Object.fromEntries(k.map(({name:r})=>[r,f[r]||null])),F=async r=>{if(r.preventDefault(),M){if(h)return;x({models:A(),switch:M});return}await l({models:A()})},B=async()=>{const r=Object.fromEntries(k.map(({name:p})=>[p,null])),m=T(r,t);if(!m){await l({models:r});return}h||x({models:r,switch:m})},I=async()=>{const r=S;if(x(void 0),!r)return;const m=D(s);if(!m){await l({models:r.models}),d("模型已保存;此运行时不支持重建索引,请稍后手动重建。");return}await c({models:r.models},m),d(void 0)};return e.jsxs(e.Fragment,{children:[e.jsxs(P,{title:"Model Assignments",description:"Choose a connected model for each Xpod capability. Unassigned capabilities use the system default.",onSubmit:F,onRestore:()=>{B()},saving:i||a,dirty:_,children:[e.jsx("div",{className:"divide-y divide-border rounded-xl border border-border",children:k.map(r=>e.jsx(O,{...r,models:o,value:f[r.name],testing:u===r.name,testResult:y[r.name],disabled:r.name==="embeddingModel"&&h,notice:r.name!=="embeddingModel"?void 0:h?"索引重建进行中,完成后才能再次切换向量模型。":M?"切换向量模型会重建索引:保存前需要二次确认,确认后立即排队重建。":void 0,onChange:m=>j(p=>({...p,[r.name]:m})),onTest:async m=>{v(r.name);try{await q(g.fetch,m),w(p=>({...p,[r.name]:"ready"}))}catch{w(p=>({...p,[r.name]:"failed"}))}finally{v(void 0)}}},r.name))}),e.jsx(E,{lifecycle:n,fallbackNotice:C})]}),e.jsx(Z,{request:S?.switch,models:o,saving:i||a||h,onCancel:()=>x(void 0),onConfirm:()=>{I()}})]})}function T(t,s){const n=t.embeddingModel;if(n===void 0)return;const o=s?.models?.embeddingModel??"";return(n??"")===o?void 0:{from:o||void 0,to:n||void 0}}function R(t,s=!1){if(s)return!0;const n=$(t)?.phase;return n==="queued"||n==="running"}function D(t){const s=t?.rebuildTargets??[];if(s.includes("vector"))return"vector";if(s.includes("all"))return"all"}function $(t){if(!t)return;const s=t.recent[0];if(!s)return t.pending>0?{phase:"queued",pending:t.pending}:void 0;if(!(s.status==="queued"&&t.pending<=0))return{phase:s.status,pending:t.pending,target:s.target,...s.progress!==void 0?{progress:s.progress}:{},...s.error?{error:s.error}:{}}}const Y={queued:"索引重建已排队",running:"索引重建进行中",succeeded:"索引重建完成",failed:"索引重建失败"};function E({lifecycle:t,fallbackNotice:s}){const n=$(t);if(!n)return s?e.jsx("p",{role:"status",className:"text-xs text-amber-600",children:s}):null;const o=[n.progress!==void 0?`${n.progress}%`:void 0,n.pending>0?`队列 ${n.pending}`:void 0,n.error].filter(Boolean).join(" · ");return e.jsxs("p",{role:"status",className:`text-xs ${n.phase==="failed"?"text-destructive":"text-muted-foreground"}`,children:[Y[n.phase],o?` · ${o}`:""]})}function Z({request:t,models:s,saving:n,onCancel:o,onConfirm:l}){const c=i=>{if(!i)return"系统默认";const a=s.find(g=>g.ref===i);return a?`${a.displayName??a.id} · ${a.owner}`:i};return e.jsx(X,{open:!!t,onOpenChange:i=>{i||o()},children:e.jsxs(J,{"data-testid":"embedding-switch-dialog",children:[e.jsxs(V,{children:[e.jsx(G,{children:"切换向量模型并重建索引?"}),e.jsx(H,{children:"已建立的向量由原模型生成,切换后需要用新模型重建索引才能参与检索。重建期间检索只会返回文本命中。"})]}),t&&e.jsxs("dl",{className:"grid gap-2 text-sm",children:[e.jsxs("div",{className:"flex justify-between gap-4",children:[e.jsx("dt",{className:"text-muted-foreground",children:"当前"}),e.jsx("dd",{className:"min-w-0 break-all text-right",children:c(t.from)})]}),e.jsxs("div",{className:"flex justify-between gap-4",children:[e.jsx("dt",{className:"text-muted-foreground",children:"切换为"}),e.jsx("dd",{className:"min-w-0 break-all text-right",children:c(t.to)})]})]}),e.jsxs(K,{children:[e.jsx("button",{type:"button",onClick:o,className:"h-9 rounded-md border border-input bg-background px-3 text-sm font-medium hover:bg-accent",children:"取消"}),e.jsx("button",{type:"button",disabled:n,onClick:l,className:"h-9 rounded-md bg-primary px-3 text-sm font-medium text-primary-foreground disabled:opacity-50",children:n?"提交中…":"确认切换并重建"})]})]})})}function O({label:t,name:s,description:n,models:o,value:l,testing:c,testResult:i,notice:a,disabled:g=!1,onChange:f,onTest:j}){const u=o.find(d=>d.ref===l),v=z(o,s),y=u?.capabilities.some(d=>["chat","embedding"].includes(d.toLowerCase()))===!0,x=[u?`Connected · credential ready · ${u.owner}`:l?"Selected model is no longer credential-ready":void 0,i==="ready"?"Probe succeeded":i==="failed"?"Probe failed; review AI Connection health":void 0].filter(Boolean).join(" · "),C=!!(l&&!u)||i==="failed";return e.jsxs("div",{"data-testid":"model-assignment-row",className:"grid gap-3 p-4 lg:grid-cols-[minmax(220px,1fr)_minmax(320px,440px)] lg:items-start",children:[e.jsxs("div",{className:"min-w-0 pt-1",children:[e.jsx("span",{className:"block text-sm font-medium text-foreground",children:t}),e.jsx("span",{className:"mt-0.5 block text-xs leading-5 text-muted-foreground",children:n})]}),e.jsxs("div",{"data-testid":"model-assignment-controls",className:"grid min-w-0 gap-2 sm:grid-cols-[minmax(0,1fr)_4.5rem] sm:items-start",children:[e.jsxs("label",{className:"min-w-0",children:[e.jsxs("span",{className:"sr-only",children:[t," model"]}),e.jsxs("select",{name:s,value:l??"",disabled:g,onChange:d=>f(d.target.value),className:"h-10 w-full rounded-md border border-input bg-background px-3 text-sm text-foreground disabled:opacity-50",children:[e.jsx("option",{value:"",children:"System default"}),v.map(d=>e.jsxs("option",{value:d.ref,children:[d.displayName??d.id," · ",d.owner]},`${d.owner}:${d.id}`))]})]}),e.jsx("button",{type:"button","aria-label":`Test ${t} model`,disabled:g||!y||c,title:u?y?"Send a bounded readiness probe":"This model has no bounded probe endpoint":"Select a connected model first",onClick:()=>u&&void j(u),className:"h-10 w-full self-start rounded-md border border-input bg-background px-3 text-sm font-medium text-foreground hover:bg-accent disabled:opacity-50",children:c?"Testing…":"Test"}),x&&e.jsx("span",{role:"status",className:`text-xs sm:col-span-2 ${C?"text-destructive":"text-muted-foreground"}`,children:x}),a&&e.jsx("span",{"data-testid":"model-assignment-notice",className:"text-xs text-amber-600 sm:col-span-2",children:a})]})]})}function P({title:t,description:s,children:n,onSubmit:o,onRestore:l,footerActions:c,saving:i=!1,dirty:a=!0}){return e.jsxs("form",{onSubmit:o,className:"mx-auto flex w-full max-w-4xl flex-col gap-6 p-6",children:[e.jsxs("header",{children:[e.jsx("h1",{className:"text-2xl font-semibold tracking-tight text-foreground",children:t}),e.jsx("p",{className:"mt-2 max-w-2xl text-sm text-muted-foreground",children:s})]}),n,e.jsxs("div",{className:"flex justify-end gap-2 border-t border-border pt-4",children:[e.jsx("span",{role:"status",className:"mr-auto self-center text-xs text-muted-foreground",children:a?"Unsaved changes":"Applied"}),c,e.jsx("button",{type:"button",onClick:l,disabled:i||!l,className:"h-9 rounded-md border border-input bg-background px-3 text-sm font-medium hover:bg-accent disabled:opacity-50",children:"Restore defaults"}),e.jsx("button",{type:"submit",disabled:i||!o||!a,className:"h-9 rounded-md bg-primary px-3 text-sm font-medium text-primary-foreground disabled:opacity-50",children:i?"Saving…":"Save configuration"})]})]})}const ne=Object.freeze(Object.defineProperty({__proto__:null,AiConfigForm:P,ModelAssignmentRow:O,ModelAssignmentsPanel:W,RebuildStatusLine:E,embeddingModelSwitch:T,rebuildInFlight:R,rebuildStatusFrom:$,rebuildTargetForCapabilities:D},Symbol.toStringTag,{value:"Module"}));export{P as A,ne as M,Q as i};