@nextclaw/ui 0.13.12 → 0.13.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 (147) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/assets/{api-DmxQnm30.js → api-D0hARyyl.js} +1 -1
  3. package/dist/assets/app-presenter-provider-C7EsUuEJ.js +3 -0
  4. package/dist/assets/arrow-left-CzSkR5L6.js +1 -0
  5. package/dist/assets/book-open-DmeQPqkd.js +1 -0
  6. package/dist/assets/{channels-list-page-D-WYFmcG.js → channels-list-page-B0yiiH01.js} +2 -2
  7. package/dist/assets/chat-page-ChPjx_X9.js +105 -0
  8. package/dist/assets/{config-split-page-CdJEkWxv.js → config-split-page-BzfZSyAr.js} +1 -1
  9. package/dist/assets/{confirm-dialog-BWRNsRgb.js → confirm-dialog-CTcaBp-8.js} +1 -1
  10. package/dist/assets/desktop-update-config-CExpdkqD.js +1 -0
  11. package/dist/assets/{dist-CyWdaJvr.js → dist-C59BKqbX.js} +1 -1
  12. package/dist/assets/{dist-DzM2ZEVN.js → dist-Di6EHp2x.js} +1 -1
  13. package/dist/assets/{doc-browser-DewXa6oX.js → doc-browser-EZbnEcdk.js} +1 -1
  14. package/dist/assets/doc-browser-XIwe1Tg-.js +1 -0
  15. package/dist/assets/{doc-browser-context-CpL2m4Sp.js → doc-browser-context-BzEA1lm1.js} +1 -1
  16. package/dist/assets/{ellipsis-BDgTYNDX.js → ellipsis-hXUNwi63.js} +1 -1
  17. package/dist/assets/{es2015-WqekV0OK.js → es2015-CJlVSTh-.js} +1 -1
  18. package/dist/assets/{external-link-BLjo8z2a.js → external-link-J0fCK-vu.js} +1 -1
  19. package/dist/assets/host-capabilities-DjiRQ0Q9.js +1 -0
  20. package/dist/assets/index-DfZTO6Pi.js +101 -0
  21. package/dist/assets/index-mIb_YMrc.css +1 -0
  22. package/dist/assets/{key-round-Du8x3sWa.js → key-round-BzYZ0Nno.js} +1 -1
  23. package/dist/assets/loader-circle-BbdIlBbQ.js +1 -0
  24. package/dist/assets/mcp-marketplace-page-L22aCzHX.js +40 -0
  25. package/dist/assets/mcp-marketplace-page-f80Jmv37.js +1 -0
  26. package/dist/assets/model-config-DkD7vSQT.js +1 -0
  27. package/dist/assets/{notice-card-3a7FmAz-.js → notice-card-CD9Ok62G.js} +1 -1
  28. package/dist/assets/play-DHuSeKs8.js +1 -0
  29. package/dist/assets/plus-DrV685KC.js +1 -0
  30. package/dist/assets/{popover-BlJLguiZ.js → popover-CoBu3mbV.js} +1 -1
  31. package/dist/assets/{provider-scoped-model-input-IMD4W0jD.js → provider-scoped-model-input-DZlmTCJU.js} +1 -1
  32. package/dist/assets/providers-list-CVkWiqIy.js +1 -0
  33. package/dist/assets/{react-BVjl1ZaK.js → react-C7HsxuKH.js} +1 -1
  34. package/dist/assets/{refresh-cw-DFR87zei.js → refresh-cw-CVo4nWpq.js} +1 -1
  35. package/dist/assets/remote-Bznw9iji.js +1 -0
  36. package/dist/assets/rotate-cw-CXDpRO6D.js +1 -0
  37. package/dist/assets/{runtime-config-page-DzbTVebD.js → runtime-config-page-5IycbIxs.js} +1 -1
  38. package/dist/assets/{save-BDmIlHvN.js → save-Z1QTovIt.js} +1 -1
  39. package/dist/assets/search-8nY6PGm0.js +1 -0
  40. package/dist/assets/{search-config-CJ6OPxAf.js → search-config-DEH80WkC.js} +1 -1
  41. package/dist/assets/{secrets-config-CYOHWL7P.js → secrets-config-Gzo5nDJG.js} +1 -1
  42. package/dist/assets/{status-dot-SVPjIyG5.js → status-dot-C1-FKgvv.js} +1 -1
  43. package/dist/assets/{tabs-Czd2mj6z.js → tabs-BqkKwx1R.js} +1 -1
  44. package/dist/assets/{tabs-custom-Ix4nkp2h.js → tabs-custom-DOkaJZmt.js} +1 -1
  45. package/dist/assets/{tag-chip-Cdwb3JSH.js → tag-chip-3kpiMTST.js} +1 -1
  46. package/dist/assets/{tooltip-CKGxLGnG.js → tooltip-Bw-mXQAM.js} +1 -1
  47. package/dist/assets/{trash-2-yLA8BEcE.js → trash-2-CmIwAJIT.js} +1 -1
  48. package/dist/assets/x-CSRTOZnM.js +1 -0
  49. package/dist/index.html +27 -25
  50. package/package.json +8 -8
  51. package/src/features/account/components/account-panel.tsx +2 -2
  52. package/src/features/account/managers/account.manager.ts +6 -5
  53. package/src/features/chat/components/chat-session-workspace-panel-nav.tsx +45 -13
  54. package/src/features/chat/components/chat-session-workspace-panel.tsx +17 -8
  55. package/src/features/chat/components/conversation/chat-conversation-panel.test.tsx +69 -0
  56. package/src/features/chat/components/conversation/chat-conversation-panel.tsx +3 -0
  57. package/src/features/chat/components/providers/chat-presenter.provider.tsx +2 -0
  58. package/src/features/chat/managers/chat-session-list.manager.test.ts +4 -0
  59. package/src/features/chat/managers/chat-session-list.manager.ts +2 -0
  60. package/src/features/chat/managers/ncp-chat-thread.manager.test.ts +153 -25
  61. package/src/features/chat/managers/ncp-chat-thread.manager.ts +153 -7
  62. package/src/features/chat/stores/chat-thread.store.test.ts +148 -0
  63. package/src/features/chat/stores/chat-thread.store.ts +287 -9
  64. package/src/features/marketplace/components/marketplace-catalog-grid.tsx +19 -1
  65. package/src/features/marketplace/components/marketplace-external-skill-source-action.tsx +14 -0
  66. package/src/features/marketplace/components/marketplace-page-parts.tsx +10 -2
  67. package/src/features/marketplace/components/marketplace-page.test.tsx +37 -1
  68. package/src/features/marketplace/components/marketplace-page.tsx +38 -16
  69. package/src/features/marketplace/components/mcp/mcp-marketplace-page.tsx +1 -0
  70. package/src/features/marketplace/hooks/use-marketplace.test.tsx +109 -0
  71. package/src/features/marketplace/hooks/use-marketplace.ts +3 -5
  72. package/src/features/side-dock/components/side-dock.test.tsx +25 -0
  73. package/src/features/side-dock/components/side-dock.tsx +13 -0
  74. package/src/features/system-status/components/desktop-update-config.tsx +2 -1
  75. package/src/platforms/desktop/types/desktop-update.types.ts +9 -0
  76. package/src/shared/components/config/provider-form.tsx +2 -2
  77. package/src/shared/components/doc-browser/managers/doc-browser.manager.ts +39 -32
  78. package/src/shared/components/ui/action-link.tsx +23 -1
  79. package/src/shared/lib/host-capabilities/host-capability.manager.test.ts +50 -0
  80. package/src/shared/lib/host-capabilities/host-capability.manager.ts +62 -0
  81. package/src/shared/lib/host-capabilities/index.ts +1 -0
  82. package/src/shared/lib/i18n/README.md +16 -3
  83. package/src/shared/lib/i18n/index.ts +93 -426
  84. package/src/shared/lib/i18n/locales/en-US/agents.json +49 -0
  85. package/src/shared/lib/i18n/locales/en-US/channel-auth.json +51 -0
  86. package/src/shared/lib/i18n/locales/en-US/channels.json +50 -0
  87. package/src/shared/lib/i18n/locales/en-US/chat.json +181 -0
  88. package/src/shared/lib/i18n/locales/en-US/core.json +310 -0
  89. package/src/shared/lib/i18n/locales/en-US/cron.json +32 -0
  90. package/src/shared/lib/i18n/locales/en-US/desktop-update.json +90 -0
  91. package/src/shared/lib/i18n/locales/en-US/doc-browser.json +87 -0
  92. package/src/shared/lib/i18n/locales/en-US/marketplace.json +72 -0
  93. package/src/shared/lib/i18n/locales/en-US/path-picker.json +12 -0
  94. package/src/shared/lib/i18n/locales/en-US/pwa.json +26 -0
  95. package/src/shared/lib/i18n/locales/en-US/remote.json +168 -0
  96. package/src/shared/lib/i18n/locales/en-US/runtime-control.json +105 -0
  97. package/src/shared/lib/i18n/locales/en-US/search.json +28 -0
  98. package/src/shared/lib/i18n/locales/zh-CN/agents.json +49 -0
  99. package/src/shared/lib/i18n/locales/zh-CN/channel-auth.json +51 -0
  100. package/src/shared/lib/i18n/locales/zh-CN/channels.json +50 -0
  101. package/src/shared/lib/i18n/locales/zh-CN/chat.json +181 -0
  102. package/src/shared/lib/i18n/locales/zh-CN/core.json +310 -0
  103. package/src/shared/lib/i18n/locales/zh-CN/cron.json +32 -0
  104. package/src/shared/lib/i18n/locales/zh-CN/desktop-update.json +90 -0
  105. package/src/shared/lib/i18n/locales/zh-CN/doc-browser.json +87 -0
  106. package/src/shared/lib/i18n/locales/zh-CN/marketplace.json +72 -0
  107. package/src/shared/lib/i18n/locales/zh-CN/path-picker.json +12 -0
  108. package/src/shared/lib/i18n/locales/zh-CN/pwa.json +26 -0
  109. package/src/shared/lib/i18n/locales/zh-CN/remote.json +168 -0
  110. package/src/shared/lib/i18n/locales/zh-CN/runtime-control.json +105 -0
  111. package/src/shared/lib/i18n/locales/zh-CN/search.json +28 -0
  112. package/src/shared/lib/navigation-history/index.ts +1 -0
  113. package/src/shared/lib/navigation-history/navigation-history.utils.test.ts +60 -0
  114. package/src/shared/lib/navigation-history/navigation-history.utils.ts +105 -0
  115. package/dist/assets/app-presenter-provider-CDSjiqfE.js +0 -3
  116. package/dist/assets/arrow-left-Dd45Mvr1.js +0 -1
  117. package/dist/assets/chat-page-D1X8YNTC.js +0 -105
  118. package/dist/assets/desktop-update-config-DOi5R1fX.js +0 -1
  119. package/dist/assets/doc-browser-D5FJcAyz.js +0 -1
  120. package/dist/assets/index-Q891JiF_.css +0 -1
  121. package/dist/assets/index-ZDJP_uJc.js +0 -101
  122. package/dist/assets/loader-circle-Dz4FssYC.js +0 -1
  123. package/dist/assets/mcp-marketplace-page-LmMhKH5a.js +0 -1
  124. package/dist/assets/mcp-marketplace-page-RqISBSqO.js +0 -40
  125. package/dist/assets/model-config-JUsW1Khb.js +0 -1
  126. package/dist/assets/play-BziM-Y34.js +0 -1
  127. package/dist/assets/plus-DrpyArC8.js +0 -1
  128. package/dist/assets/providers-list-BsDpxNzy.js +0 -1
  129. package/dist/assets/remote-DjhVMpVd.js +0 -1
  130. package/dist/assets/rotate-cw-DMBnsYKm.js +0 -1
  131. package/dist/assets/search-CjHGYvTI.js +0 -1
  132. package/dist/assets/x-dpDISboO.js +0 -1
  133. package/src/shared/lib/i18n/agents.ts +0 -85
  134. package/src/shared/lib/i18n/channel-auth.constants.ts +0 -87
  135. package/src/shared/lib/i18n/channels.ts +0 -53
  136. package/src/shared/lib/i18n/chat-labels.utils.ts +0 -206
  137. package/src/shared/lib/i18n/cron-labels.utils.ts +0 -32
  138. package/src/shared/lib/i18n/desktop-update-labels.utils.ts +0 -165
  139. package/src/shared/lib/i18n/marketplace-labels.utils.ts +0 -78
  140. package/src/shared/lib/i18n/pwa.ts +0 -62
  141. package/src/shared/lib/i18n/remote.ts +0 -273
  142. package/src/shared/lib/i18n/runtime/doc-browser-labels.utils.ts +0 -120
  143. package/src/shared/lib/i18n/runtime/i18n.path-picker.ts +0 -12
  144. package/src/shared/lib/i18n/runtime-control-labels.utils.ts +0 -180
  145. package/src/shared/lib/i18n/search.ts +0 -37
  146. /package/dist/assets/{config-hints-Ceiol9x4.js → config-hints-fGnUjDe9.js} +0 -0
  147. /package/dist/assets/{provider-models-C_yOh6DE.js → provider-models-C9VRroK3.js} +0 -0
@@ -1 +0,0 @@
1
- import{c as e}from"./dist-CyWdaJvr.js";var t=e(`BookOpen`,[[`path`,{d:`M12 7v14`,key:`1akyts`}],[`path`,{d:`M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z`,key:`ruj8y`}]]),n=e(`LoaderCircle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]);export{t as n,n as t};
@@ -1 +0,0 @@
1
- import{t as e}from"./mcp-marketplace-page-RqISBSqO.js";export{e as McpMarketplacePage};
@@ -1,40 +0,0 @@
1
- import{d as e,g as t,i as n,m as r,y as i}from"./react-BVjl1ZaK.js";import{$t as a,Bt as o,C as s,Ft as c,Ht as l,Mt as u,Pt as d,Qt as f,S as p,T as m,Vt as h,b as ee,en as g,mt as _,nn as v,tn as y,w as b,x as te,zt as x}from"./api-DmxQnm30.js";import{c as S}from"./dist-CyWdaJvr.js";import{a as C,i as w,n as T,o as E,r as D,s as O}from"./confirm-dialog-BWRNsRgb.js";import{t as k}from"./notice-card-3a7FmAz-.js";import{n as ne}from"./doc-browser-context-CpL2m4Sp.js";import{Et as re,J as A,K as j,X as M,Y as N,h as ie,q as P,u as F,wt as ae}from"./index-ZDJP_uJc.js";import{t as I}from"./tag-chip-Cdwb3JSH.js";var oe=class extends v{constructor(e,t){super(e,t)}bindMethods(){super.bindMethods(),this.fetchNextPage=this.fetchNextPage.bind(this),this.fetchPreviousPage=this.fetchPreviousPage.bind(this)}setOptions(e){super.setOptions({...e,behavior:y()})}getOptimisticResult(e){return e.behavior=y(),super.getOptimisticResult(e)}fetchNextPage(e){return this.fetch({...e,meta:{fetchMore:{direction:`forward`}}})}fetchPreviousPage(e){return this.fetch({...e,meta:{fetchMore:{direction:`backward`}}})}createResult(e,t){let{state:n}=e,r=super.createResult(e,t),{isFetching:i,isRefetching:o,isError:s,isRefetchError:c}=r,l=n.fetchMeta?.fetchMore?.direction,u=s&&l===`forward`,d=i&&l===`forward`,f=s&&l===`backward`,p=i&&l===`backward`;return{...r,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:a(t,n.data),hasPreviousPage:g(t,n.data),isFetchNextPageError:u,isFetchingNextPage:d,isFetchPreviousPageError:f,isFetchingPreviousPage:p,isRefetchError:c&&!u&&!f,isRefetching:o&&!d&&!p}}};function L(e,t){return l(e,oe,t)}var se=S(`PackageCheck`,[[`path`,{d:`m16 16 2 2 4-4`,key:`gfu2re`}],[`path`,{d:`M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14`,key:`e7tb2h`}],[`path`,{d:`m7.5 4.27 9 5.15`,key:`1c824w`}],[`polyline`,{points:`3.29 7 12 12 20.71 7`,key:`ousv84`}],[`line`,{x1:`12`,x2:`12`,y1:`22`,y2:`12`,key:`a4e8g8`}]]),ce=S(`PackageSearch`,[[`path`,{d:`M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14`,key:`e7tb2h`}],[`path`,{d:`m7.5 4.27 9 5.15`,key:`1c824w`}],[`polyline`,{points:`3.29 7 12 12 20.71 7`,key:`ousv84`}],[`line`,{x1:`12`,x2:`12`,y1:`22`,y2:`12`,key:`a4e8g8`}],[`circle`,{cx:`18.5`,cy:`15.5`,r:`2.5`,key:`b5zd12`}],[`path`,{d:`M20.27 17.27 22 19`,key:`1l4muz`}]]);function R(e){if(!e||e.pages.length===0)return;let t=e.pages.flatMap(e=>e.items);return{...e.pages[e.pages.length-1],items:t,pages:e.pages,loadedItems:t.length,loadedPages:e.pages.length}}var z=r();function B({scope:e,searchText:t,searchPlaceholder:r,sort:i,onSearchTextChange:a,onSortChange:o}){return(0,z.jsx)(`div`,{className:`mb-4`,children:(0,z.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,z.jsxs)(`div`,{className:`relative min-w-0 flex-1`,children:[(0,z.jsx)(ce,{className:`absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-gray-400`}),(0,z.jsx)(`input`,{value:t,onChange:e=>a(e.target.value),placeholder:r,className:`h-9 w-full rounded-xl border border-gray-200/80 pl-9 pr-3 text-sm focus:outline-none focus:ring-1 focus:ring-primary/40`})]}),e===`all`&&(0,z.jsxs)(j,{value:i,onValueChange:e=>o(e),children:[(0,z.jsx)(N,{className:`h-9 w-[150px] shrink-0 rounded-lg`,children:(0,z.jsx)(M,{})}),(0,z.jsxs)(P,{children:[(0,z.jsx)(A,{value:`relevance`,children:n(`marketplaceSortRelevance`)}),(0,z.jsx)(A,{value:`updated`,children:n(`marketplaceSortUpdated`)})]})]})]})})}function V({count:e}){return(0,z.jsx)(z.Fragment,{children:Array.from({length:e},(e,t)=>(0,z.jsx)(`article`,{className:`h-full rounded-2xl border border-gray-200/40 bg-white px-5 py-4 shadow-sm`,children:(0,z.jsxs)(`div`,{className:`flex items-start justify-between gap-3.5`,children:[(0,z.jsxs)(`div`,{className:`flex min-w-0 flex-1 gap-3`,children:[(0,z.jsx)(F,{className:`h-10 w-10 shrink-0 rounded-xl`}),(0,z.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-2 pt-0.5`,children:[(0,z.jsx)(F,{className:`h-4 w-32 max-w-[70%]`}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(F,{className:`h-3 w-12`}),(0,z.jsx)(F,{className:`h-3 w-24`})]}),(0,z.jsx)(F,{className:`h-3 w-full`})]})]}),(0,z.jsx)(F,{className:`h-8 w-20 shrink-0 rounded-xl`})]})},`marketplace-skeleton-${t}`))})}function H({hasMore:e,loading:t,sentinelRef:r}){return!e&&!t?null:(0,z.jsxs)(`div`,{className:`py-4`,children:[e&&(0,z.jsx)(`div`,{ref:r,className:`h-1 w-full`,"aria-hidden":`true`}),t&&(0,z.jsx)(`div`,{"data-testid":`marketplace-loading-more`,className:`pt-3 text-center text-xs text-gray-500`,children:n(`loading`)})]})}function U(e){let t=e.trim().toLowerCase().replace(/_/g,`-`),n=[t,t.split(`-`)[0],`en`];return Array.from(new Set(n.filter(Boolean)))}function W(e){return e.trim().toLowerCase().replace(/_/g,`-`)}function G(e,t,n){if(e){let t=Object.entries(e).map(([e,t])=>({locale:W(e),text:typeof t==`string`?t.trim():``})).filter(e=>e.text.length>0);if(t.length>0){let e=new Map(t.map(e=>[e.locale,e.text]));for(let t of n){let n=W(t),r=e.get(n);if(r)return r}for(let e of n){let n=W(e).split(`-`)[0];if(!n)continue;let r=t.find(e=>e.locale===n||e.locale.startsWith(`${n}-`));if(r)return r.text}return t[0]?.text??``}}return t?.trim()??``}function le(e,t){if(!e)return``;for(let n of t)if(W(n).split(`-`)[0]===`zh`&&e.descriptionZh?.trim())return e.descriptionZh.trim();return e.description?.trim()?e.description.trim():e.descriptionZh?.trim()?e.descriptionZh.trim():``}var K=i(t(),1),ue=160;function q(e){let t=(0,K.useRef)(null),n=(0,K.useRef)(null),r=(0,K.useRef)(e.onLoadMore),i=(0,K.useRef)(!1);return(0,K.useEffect)(()=>{r.current=e.onLoadMore},[e.onLoadMore]),(0,K.useEffect)(()=>{e.disabled&&(i.current=!1)},[e.disabled]),(0,K.useEffect)(()=>{let a=t.current,o=n.current,s=e.thresholdPx??ue;if(e.disabled||!a||!o)return;let c=()=>{i.current||e.disabled||(i.current=!0,Promise.resolve(r.current()).finally(()=>{i.current=!1}))},l=()=>{o.getBoundingClientRect().top-a.getBoundingClientRect().bottom<=s&&c()};if(typeof IntersectionObserver==`function`){let e=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&c()},{root:a,rootMargin:`0px 0px ${s}px 0px`});return e.observe(o),l(),()=>{e.disconnect()}}return a.addEventListener(`scroll`,l,{passive:!0}),l(),()=>{a.removeEventListener(`scroll`,l)}},[e.disabled,e.thresholdPx,e.watchValue]),{containerRef:t,sentinelRef:n}}function J(e){return(e??``).trim().toLowerCase()}function de(e){let t=new Map;for(let n of e){let e=[n.catalogSlug,n.spec,n.id,n.label];for(let r of e){let e=J(r);!e||t.has(e)||t.set(e,n)}}return t}function fe(e,t){let n=[e.slug,e.install.spec,e.id,e.name];for(let e of n){let n=J(e);if(!n)continue;let r=t.get(n);if(r)return r}}function Y(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function X(e,t,n,r,i){let a=`<!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1" />
6
- <title>${Y(e)}</title>
7
- <style>
8
- body { margin: 0; background: #f8fafc; color: #0f172a; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; }
9
- .wrap { max-width: 980px; margin: 0 auto; padding: 28px 20px 40px; }
10
- .hero { border: 1px solid #dbeafe; border-radius: 16px; background: linear-gradient(180deg, #eff6ff, #ffffff); padding: 20px; }
11
- .hero h1 { margin: 0; font-size: 26px; }
12
- .grid { display: grid; grid-template-columns: 280px 1fr; gap: 14px; margin-top: 16px; }
13
- .card { border: 1px solid #e2e8f0; background: #fff; border-radius: 14px; overflow: hidden; }
14
- .card h2 { margin: 0; padding: 12px 14px; font-size: 13px; font-weight: 700; color: #1d4ed8; border-bottom: 1px solid #e2e8f0; background: #f8fafc; }
15
- .body { padding: 12px 14px; }
16
- pre { margin: 0; white-space: pre-wrap; line-height: 1.7; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; }
17
- a { color: #2563eb; text-decoration: none; }
18
- @media (max-width: 860px) { .grid { grid-template-columns: 1fr; } }
19
- </style>
20
- </head>
21
- <body>
22
- <main class="wrap">
23
- <section class="hero">
24
- <h1>${Y(e)}</h1>
25
- ${i?`<p>${Y(i)}</p>`:``}
26
- ${r?`<p><a href="${Y(r)}" target="_blank" rel="noopener noreferrer">${Y(r)}</a></p>`:``}
27
- </section>
28
- <section class="grid">
29
- <article class="card">
30
- <h2>Metadata</h2>
31
- <div class="body"><pre>${Y(t)}</pre></div>
32
- </article>
33
- <article class="card">
34
- <h2>Content</h2>
35
- <div class="body"><pre>${Y(n)}</pre></div>
36
- </article>
37
- </section>
38
- </main>
39
- </body>
40
- </html>`;return`data:text/html;charset=utf-8,${encodeURIComponent(a)}`}function Z(e,t,r){return G(t?.summaryI18n,t?.summary,e)||le(r,e)||n(`marketplaceInstalledLocalSummary`)}function pe(e,t){return t?.transport?t.transport.toUpperCase():(e?.install?.transportTypes??[]).map(e=>e.toUpperCase()).join(` / `)||`MCP`}function Q(e){let{item:t,record:r,localeFallbacks:i,onOpen:a,onInstall:o,onToggle:s,onDoctor:l,onRemove:u}=e,d=r,f=t?.name??r?.label??r?.id??`MCP`,p=Z(i,t,r),m=pe(t,r),h=d?d.enabled===!1?n(`marketplaceDisable`):n(`statusReady`):null;return(0,z.jsx)(`article`,{onClick:a,className:`cursor-pointer rounded-2xl border border-gray-200/70 bg-white p-4 shadow-sm transition hover:border-blue-300 hover:shadow-md`,children:(0,z.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,z.jsxs)(`div`,{className:`min-w-0`,children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold text-gray-900`,children:f}),(0,z.jsx)(`div`,{className:`mt-1 text-xs text-gray-500`,children:m}),(0,z.jsx)(`div`,{className:`mt-2 line-clamp-2 text-sm text-gray-600`,children:p}),(0,z.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:[(t?.tags??[]).map(e=>(0,z.jsx)(I,{children:e},e)),h?(0,z.jsx)(I,{tone:`success`,children:h}):null]})]}),(0,z.jsxs)(`div`,{className:`flex shrink-0 flex-col gap-2`,children:[!d&&t&&o?(0,z.jsx)(c,{type:`button`,size:`sm`,variant:`primary`,className:`rounded-xl`,onClick:e=>{e.stopPropagation(),o()},children:n(`marketplaceInstall`)}):null,d?(0,z.jsxs)(z.Fragment,{children:[s?(0,z.jsx)(c,{type:`button`,size:`sm`,variant:`outline`,className:`rounded-xl border-gray-200 text-gray-700`,onClick:e=>{e.stopPropagation(),s()},children:d.enabled===!1?n(`marketplaceEnable`):n(`marketplaceDisable`)}):null,l?(0,z.jsx)(c,{type:`button`,size:`sm`,variant:`outline`,className:`rounded-xl border-blue-200 text-blue-700 hover:border-blue-300 hover:bg-blue-50 hover:text-blue-700`,onClick:e=>{e.stopPropagation(),l()},children:n(`marketplaceMcpDoctor`)}):null,u?(0,z.jsx)(c,{type:`button`,size:`sm`,variant:`outline`,className:`rounded-xl border-rose-200 text-rose-600 hover:border-rose-300 hover:bg-rose-50 hover:text-rose-600`,onClick:e=>{e.stopPropagation(),u()},children:n(`marketplaceMcpRemove`)}):null]}):null]})]})})}function me(e){let{item:t,open:n,pending:r,onOpenChange:i,onSubmit:a}=e;return(0,z.jsx)(T,{open:n,onOpenChange:i,children:t?(0,z.jsx)(he,{item:t,pending:r,onOpenChange:i,onSubmit:a},`${t.slug}:${n?`open`:`closed`}`):null})}function he(e){let{item:t,pending:r,onOpenChange:i,onSubmit:a}=e,o=t.install,[s,l]=(0,K.useState)(o?.defaultName??``),[u,f]=(0,K.useState)(!0),[p,m]=(0,K.useState)(Object.fromEntries((o?.inputs??[]).map(e=>[e.id,e.defaultValue??``])));return(0,z.jsxs)(D,{children:[(0,z.jsxs)(E,{children:[(0,z.jsx)(O,{children:n(`marketplaceMcpInstallDialogTitle`)}),(0,z.jsx)(w,{children:t.name})]}),(0,z.jsxs)(`div`,{className:`space-y-4`,children:[(0,z.jsxs)(`div`,{className:`space-y-2`,children:[(0,z.jsx)(`div`,{className:`text-sm font-medium text-gray-800`,children:n(`marketplaceMcpServerName`)}),(0,z.jsx)(d,{value:s,onChange:e=>l(e.target.value),placeholder:o?.defaultName??`mcp-server`})]}),(0,z.jsxs)(`div`,{className:`flex items-center justify-between rounded-xl border border-gray-200 px-3 py-3`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`text-sm font-medium text-gray-900`,children:n(`marketplaceMcpAllAgents`)}),(0,z.jsx)(`div`,{className:`text-xs text-gray-500`,children:n(`marketplaceMcpAllAgentsDescription`)})]}),(0,z.jsx)(_,{checked:u,onCheckedChange:f})]}),(o?.inputs??[]).map(e=>(0,z.jsxs)(`div`,{className:`space-y-2`,children:[(0,z.jsx)(`div`,{className:`text-sm font-medium text-gray-800`,children:e.label}),e.description?(0,z.jsx)(`div`,{className:`text-xs text-gray-500`,children:e.description}):null,(0,z.jsx)(d,{type:e.secret?`password`:`text`,value:p[e.id]??``,onChange:t=>m(n=>({...n,[e.id]:t.target.value})),placeholder:e.defaultValue??``})]},e.id))]}),(0,z.jsxs)(C,{children:[(0,z.jsx)(c,{variant:`outline`,onClick:()=>i(!1),disabled:r,children:n(`cancel`)}),(0,z.jsx)(c,{onClick:()=>void a({name:s,allAgents:u,inputs:p}),disabled:r||!s.trim(),children:n(r?`marketplaceInstalling`:`marketplaceInstall`)})]})]})}function ge(e){let{result:t,targetName:r,open:i,pending:a,onOpenChange:o}=e;return(0,z.jsx)(T,{open:i,onOpenChange:o,children:(0,z.jsxs)(D,{children:[(0,z.jsxs)(E,{children:[(0,z.jsx)(O,{children:n(`marketplaceMcpDoctorTitle`)}),(0,z.jsx)(w,{children:r??`-`})]}),a?(0,z.jsx)(`div`,{className:`text-sm text-gray-500`,children:n(`loading`)}):null,!a&&t?(0,z.jsxs)(`div`,{className:`space-y-3 text-sm text-gray-700`,children:[(0,z.jsxs)(`div`,{children:[n(`marketplaceMcpDoctorAccessible`),`:`,` `,t.accessible?n(`statusReady`):n(`marketplaceOperationFailed`)]}),(0,z.jsxs)(`div`,{children:[n(`marketplaceMcpDoctorTransport`),`:`,` `,t.transport.toUpperCase()]}),(0,z.jsxs)(`div`,{children:[n(`marketplaceMcpDoctorTools`),`: `,t.toolCount]}),t.error?(0,z.jsx)(k,{tone:`danger`,description:t.error,className:`rounded-lg`}):null]}):null]})})}function _e(e){let t=L({queryKey:[`marketplace-mcp-items`,e],initialPageParam:1,queryFn:({pageParam:t})=>s({...e,page:t}),getNextPageParam:e=>e.page<e.totalPages?e.page+1:void 0,staleTime:15e3}),n=(0,K.useMemo)(()=>R(t.data),[t.data]);return{...t,data:n}}function ve(){return h({queryKey:[`marketplace-mcp-installed`],queryFn:()=>p(),staleTime:1e4})}function ye(){let e=f();return o({mutationFn:b,onSuccess:t=>{e.invalidateQueries({queryKey:[`marketplace-mcp-installed`]}),e.invalidateQueries({queryKey:[`marketplace-mcp-items`]}),e.invalidateQueries({queryKey:[`marketplace-mcp-doctor`]}),x.success(t.message||n(`marketplaceInstallSuccessMcp`))},onError:e=>{x.error(e.message||n(`marketplaceInstallFailed`))}})}function be(){let e=f();return o({mutationFn:m,onSuccess:t=>{e.invalidateQueries({queryKey:[`marketplace-mcp-installed`]}),e.invalidateQueries({queryKey:[`marketplace-mcp-items`]}),e.invalidateQueries({queryKey:[`marketplace-mcp-doctor`]}),x.success(t.message||n(`marketplaceMcpManageSuccess`))},onError:e=>{x.error(e.message||n(`marketplaceOperationFailed`))}})}var $=12;function xe(){let[t,r]=(0,K.useState)(`catalog`),[i,a]=(0,K.useState)(``),[s,c]=(0,K.useState)(``),[l,d]=(0,K.useState)(`relevance`),[f,p]=(0,K.useState)(null),[m,h]=(0,K.useState)(null),[g,_]=(0,K.useState)(null),{language:v}=ae(),y=ne(),{confirm:b,ConfirmDialog:x}=ie(),S=(0,K.useMemo)(()=>U(v),[v]);(0,K.useEffect)(()=>{let e=window.setTimeout(()=>{c(i.trim())},250);return()=>window.clearTimeout(e)},[i]);let C=_e({q:s||void 0,sort:l,pageSize:$}),w=ve(),{containerRef:T,sentinelRef:E}=q({disabled:t!==`catalog`||C.isError||!C.hasNextPage||C.isFetchingNextPage,onLoadMore:()=>C.fetchNextPage(),watchValue:`${t}:${s}:${l}:${C.data?.loadedItems??0}:${C.data?.loadedPages??0}`});(0,K.useEffect)(()=>{let e=T.current;e&&typeof e.scrollTo==`function`&&e.scrollTo({top:0})},[T,s,t,l]);let D=ye(),O=be(),A=o({mutationFn:ee,onSuccess:(e,t)=>{h(t),_(e)}}),j=(0,K.useMemo)(()=>de(w.data?.records??[]),[w.data?.records]),M=(0,K.useMemo)(()=>(w.data?.records??[]).filter(e=>{let t=[e.id??``,e.label??``,e.catalogSlug??``,e.description??``,e.descriptionZh??``].join(` `).toLowerCase();return s?t.includes(s.toLowerCase()):!0}),[w.data?.records,s]),N=async(e,t)=>{let r=e?.name??t?.label??t?.id??`MCP`,i={title:r,kind:`content`,dedupeKey:e?`marketplace:mcp:${e.slug}`:`marketplace:mcp:${t?.id??t?.spec??r}`},a=Z(S,e,t);if(!e){let e=X(r,JSON.stringify(t??{},null,2),n(`marketplaceInstalledLocalSummary`),t?.docsUrl,a);y.open(e,i);return}try{let t=await te(e.slug),n=X(r,t.metadataRaw||JSON.stringify(e,null,2),t.bodyRaw||t.raw,t.sourceUrl,a);y.open(n,i)}catch(e){let t=X(r,JSON.stringify({error:e instanceof Error?e.message:String(e)},null,2),a,void 0,a);y.open(t,i)}},P=async e=>{f&&(await D.mutateAsync({spec:f.slug,name:e.name.trim(),allAgents:e.allAgents,inputs:e.inputs}),p(null))},F=async(e,t)=>{let r=t.id||t.spec;r&&(e===`remove`&&!await b({title:`${n(`marketplaceMcpRemoveTitle`)} ${r}?`,description:n(`marketplaceMcpRemoveDescription`),confirmLabel:n(`marketplaceMcpRemove`),variant:`destructive`})||await O.mutateAsync({action:e,id:r,spec:t.spec}))},I=[{id:`catalog`,label:n(`marketplaceMcpTabCatalog`),icon:re},{id:`installed`,label:n(`marketplaceMcpTabInstalled`),icon:se,count:w.data?.total??0}];return(0,z.jsxs)(u,{className:`flex h-full min-h-0 flex-col pb-0 px-0`,children:[(0,z.jsxs)(`div`,{className:`flex flex-col gap-6 w-full max-w-[1400px] h-full min-h-0 mx-auto`,children:[(0,z.jsxs)(`div`,{className:`relative overflow-hidden rounded-[32px] bg-gradient-to-br from-[#0F172A] via-[#1E1B4B] to-[#312E81] px-10 py-14 text-white shadow-xl isolate`,children:[(0,z.jsx)(`div`,{className:`absolute top-0 right-0 -m-32 opacity-30 pointer-events-none mix-blend-screen scale-150 transform-gpu`,children:(0,z.jsx)(`div`,{className:`w-[500px] h-[500px] rounded-full bg-gradient-to-tl from-fuchsia-500/40 via-purple-500/30 to-indigo-500/20 blur-[80px]`})}),(0,z.jsx)(`div`,{className:`absolute bottom-0 left-0 -m-32 opacity-20 pointer-events-none mix-blend-screen transform-gpu`,children:(0,z.jsx)(`div`,{className:`w-[400px] h-[400px] rounded-full bg-gradient-to-tr from-blue-500/40 to-cyan-500/20 blur-[80px]`})}),(0,z.jsxs)(`div`,{className:`relative z-10 flex flex-col gap-3`,children:[(0,z.jsx)(`h1`,{className:`text-[38px] font-extrabold tracking-[-0.02em] leading-tight drop-shadow-sm text-transparent bg-clip-text bg-gradient-to-r from-white via-white to-white/70`,children:n(`marketplaceMcpPageTitle`)}),(0,z.jsx)(`p`,{className:`text-[17px] font-medium text-purple-100/70 max-w-2xl leading-relaxed tracking-wide`,children:n(`marketplaceMcpPageDescription`)})]})]}),(0,z.jsxs)(`div`,{className:`flex flex-col md:flex-row md:items-center justify-between gap-4 mt-2`,children:[(0,z.jsx)(`div`,{className:`flex items-center gap-1.5 p-1 bg-gray-100/60 backdrop-blur-sm rounded-2xl w-fit border border-gray-200/50 shadow-inner`,children:I.map(n=>{let i=t===n.id,a=n.icon;return(0,z.jsxs)(`button`,{onClick:()=>r(n.id),className:e(`relative flex items-center gap-2 px-5 py-2.5 rounded-xl font-semibold text-[14px] transition-all duration-300`,i?`text-gray-900 bg-white shadow-[0_2px_10px_rgb(0,0,0,0.06)]`:`text-gray-500 hover:text-gray-700 hover:bg-gray-200/40`),children:[(0,z.jsx)(a,{className:e(`w-4 h-4`,i?`text-primary`:`text-gray-400`)}),n.label,n.id===`installed`&&typeof n.count==`number`&&(0,z.jsx)(`span`,{className:e(`ml-1 flex items-center justify-center h-5 px-1.5 min-w-5 rounded-full text-[11px] font-bold transition-colors`,i?`bg-primary/10 text-primary`:`bg-gray-200 text-gray-500`),children:n.count})]},n.id)})}),(0,z.jsx)(`div`,{className:`flex-1 w-full md:max-w-md`,children:(0,z.jsx)(B,{scope:t===`catalog`?`all`:`installed`,searchText:i,searchPlaceholder:n(`marketplaceMcpSearchPlaceholder`),sort:l,onSearchTextChange:a,onSortChange:d})})]}),(0,z.jsxs)(`section`,{className:`flex min-h-0 flex-1 flex-col mt-2`,children:[(0,z.jsx)(`div`,{className:`flex items-center justify-between mb-4 px-1`,children:(0,z.jsxs)(`h3`,{className:`text-[18px] font-bold tracking-tight text-gray-900 flex items-center gap-2`,children:[n(t===`catalog`?`marketplaceMcpSectionCatalog`:`marketplaceMcpSectionInstalled`),(0,z.jsx)(`span`,{className:`flex items-center justify-center h-6 px-2 rounded-lg bg-gray-100 text-[12px] font-semibold text-gray-500`,children:t===`catalog`?C.data?.total??0:w.data?.total??0})]})}),(0,z.jsxs)(`div`,{ref:T,className:`min-h-0 flex-1 overflow-y-auto pr-3 pb-8 -mx-1 px-1 custom-scrollbar`,"aria-busy":C.isLoading||C.isFetchingNextPage,children:[(0,z.jsxs)(`div`,{className:`grid grid-cols-1 gap-[22px] md:grid-cols-2 lg:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-4 items-stretch`,children:[t===`catalog`&&C.isLoading&&(0,z.jsx)(V,{count:$}),t===`catalog`&&!C.isLoading&&(C.data?.items??[]).map(e=>{let t=fe(e,j);return(0,z.jsx)(Q,{item:e,record:t,localeFallbacks:S,onOpen:()=>void N(e,t),onInstall:()=>p(e),onToggle:t?()=>void F(t.enabled===!1?`enable`:`disable`,t):void 0,onDoctor:t?()=>{h(t.id??null),_(null),A.mutateAsync(t.id??``)}:void 0,onRemove:t?()=>void F(`remove`,t):void 0},e.id)}),t===`installed`&&M.map(e=>(0,z.jsx)(Q,{record:e,localeFallbacks:S,onOpen:()=>void N(void 0,e),onToggle:()=>void F(e.enabled===!1?`enable`:`disable`,e),onDoctor:()=>{h(e.id??null),_(null),A.mutateAsync(e.id??``)},onRemove:()=>void F(`remove`,e)},e.id??e.spec))]}),t===`catalog`&&C.isError&&(0,z.jsx)(k,{tone:`danger`,title:n(`marketplaceMcpSectionCatalog`),description:C.error.message}),t===`installed`&&w.isError&&(0,z.jsx)(k,{tone:`danger`,title:n(`marketplaceMcpSectionInstalled`),description:w.error.message}),t===`catalog`&&!C.isLoading&&!C.isError&&(C.data?.items?.length??0)===0&&(0,z.jsx)(`div`,{className:`flex flex-col items-center justify-center py-20 bg-gray-50/50 rounded-3xl border border-dashed border-gray-200 mt-4`,children:(0,z.jsx)(`p`,{className:`text-[15px] font-medium text-gray-500`,children:n(`marketplaceNoMcp`)})}),t===`installed`&&!w.isError&&M.length===0&&(0,z.jsx)(`div`,{className:`flex flex-col items-center justify-center py-20 bg-gray-50/50 rounded-3xl border border-dashed border-gray-200 mt-4`,children:(0,z.jsx)(`p`,{className:`text-[15px] font-medium text-gray-500`,children:n(`marketplaceNoInstalledMcp`)})}),t===`catalog`&&!C.isError&&(0,z.jsx)(H,{hasMore:!!C.hasNextPage,loading:C.isFetchingNextPage,sentinelRef:E})]})]})]}),(0,z.jsx)(me,{item:f,open:!!f,pending:D.isPending,onOpenChange:e=>!e&&p(null),onSubmit:P}),(0,z.jsx)(ge,{open:!!m,targetName:m,result:g,pending:A.isPending,onOpenChange:e=>!e&&h(null)}),(0,z.jsx)(x,{})]})}export{B as a,R as c,G as i,L as l,q as n,H as o,U as r,V as s,xe as t};
@@ -1 +0,0 @@
1
- import{g as e,i as t,m as n,y as r}from"./react-BVjl1ZaK.js";import{Et as i,Ft as a,Mt as o,Nt as s,Pt as c,jt as l}from"./api-DmxQnm30.js";import{n as u,t as d}from"./loader-circle-Dz4FssYC.js";import{t as f}from"./provider-scoped-model-input-IMD4W0jD.js";import{l as p}from"./doc-browser-context-CpL2m4Sp.js";import{$ as m,Et as h,Nt as g,Z as _,gt as v,lt as y,u as b,ut as x}from"./index-ZDJP_uJc.js";import{t as S}from"./config-hints-Ceiol9x4.js";import{n as C}from"./provider-models-C_yOh6DE.js";var w=r(e(),1),T=n(),E=`provider/model`;function D(e){let{initialModel:n,initialWorkspace:r,isPending:i,modelHelpText:o,modelLabel:l,modelPlaceholder:m,onSubmit:_,providerCatalog:v,workspaceLabel:y,workspacePlaceholder:b}=e,[x,S]=(0,w.useState)(n),[C,E]=(0,w.useState)(r);return(0,T.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),_({model:x,workspace:C})},className:`space-y-8`,children:[(0,T.jsxs)(`div`,{className:`grid grid-cols-1 gap-8 md:grid-cols-2`,children:[(0,T.jsxs)(`div`,{className:`rounded-2xl border border-gray-200 bg-white p-8 shadow-card`,children:[(0,T.jsxs)(`div`,{className:`mb-8 flex items-center gap-4`,children:[(0,T.jsx)(`div`,{className:`flex h-10 w-10 items-center justify-center rounded-xl bg-primary text-white`,children:(0,T.jsx)(h,{className:`h-5 w-5`})}),(0,T.jsx)(`h3`,{className:`text-lg font-bold text-gray-900`,children:t(`defaultModel`)})]}),(0,T.jsxs)(`div`,{className:`space-y-2`,children:[(0,T.jsx)(s,{htmlFor:`model`,className:`text-xs font-semibold uppercase tracking-wider text-gray-500`,children:l}),(0,T.jsx)(f,{id:`model`,value:x,onChange:S,providerCatalog:v,modelPlaceholder:m}),(0,T.jsx)(`p`,{className:`text-xs text-gray-400`,children:o}),(0,T.jsxs)(`a`,{href:`${p}/guide/model-selection`,className:`inline-flex items-center gap-1.5 text-xs text-primary transition-colors hover:text-primary-hover`,children:[(0,T.jsx)(u,{className:`h-3.5 w-3.5`}),t(`channelsGuideTitle`)]})]})]}),(0,T.jsxs)(`div`,{className:`rounded-2xl border border-gray-200 bg-white p-8 shadow-card`,children:[(0,T.jsxs)(`div`,{className:`mb-8 flex items-center gap-4`,children:[(0,T.jsx)(`div`,{className:`flex h-10 w-10 items-center justify-center rounded-xl bg-primary text-white`,children:(0,T.jsx)(g,{className:`h-5 w-5`})}),(0,T.jsx)(`h3`,{className:`text-lg font-bold text-gray-900`,children:t(`workspace`)})]}),(0,T.jsxs)(`div`,{className:`space-y-2`,children:[(0,T.jsx)(s,{htmlFor:`workspace`,className:`text-xs font-semibold uppercase tracking-wider text-gray-500`,children:y}),(0,T.jsx)(c,{id:`workspace`,value:C,onChange:e=>E(e.target.value),placeholder:b,className:`rounded-xl`})]})]})]}),(0,T.jsx)(`div`,{className:`flex justify-end pt-4`,children:(0,T.jsx)(a,{type:`submit`,disabled:i,size:`lg`,children:i?(0,T.jsx)(d,{className:`h-5 w-5 animate-spin`}):t(`saveChanges`)})})]})}function O(){let{data:e,isLoading:n}=_(),{data:r}=x(),{data:a}=y(),{data:s}=m(),c=v(),u=s?.uiHints,d=S(`agents.defaults.model`,u),f=S(`agents.defaults.workspace`,u),p=(0,w.useMemo)(()=>C({providersView:r,templatesView:a,config:e,onlyConfigured:!0}),[e,r,a]),h=t(`modelIdentifierHelp`)||d?.help||``,g=(e?.agents?.defaults?.model||``).trim(),O=e?.agents?.defaults?.workspace||``;return n?(0,T.jsxs)(`div`,{className:`max-w-2xl space-y-6`,children:[(0,T.jsxs)(`div`,{className:`space-y-2`,children:[(0,T.jsx)(b,{className:`h-8 w-32`}),(0,T.jsx)(b,{className:`h-4 w-48`})]}),(0,T.jsxs)(i,{className:`rounded-2xl border-gray-200 p-6`,children:[(0,T.jsxs)(`div`,{className:`mb-6 flex items-center gap-4`,children:[(0,T.jsx)(b,{className:`h-12 w-12 rounded-xl`}),(0,T.jsxs)(`div`,{className:`space-y-2`,children:[(0,T.jsx)(b,{className:`h-5 w-24`}),(0,T.jsx)(b,{className:`h-3 w-32`})]})]}),(0,T.jsx)(b,{className:`mb-2 h-4 w-20`}),(0,T.jsx)(b,{className:`h-10 w-full rounded-xl`})]}),(0,T.jsxs)(i,{className:`rounded-2xl border-gray-200 p-6`,children:[(0,T.jsx)(b,{className:`mb-2 h-5 w-24`}),(0,T.jsx)(b,{className:`h-10 w-full rounded-xl`})]})]}):(0,T.jsxs)(o,{children:[(0,T.jsx)(l,{title:t(`modelPageTitle`),description:t(`modelPageDescription`)}),(0,T.jsx)(D,{initialModel:g,initialWorkspace:O,isPending:c.isPending,modelHelpText:h,modelLabel:d?.label??`Model Name`,modelPlaceholder:d?.placeholder??E,onSubmit:({model:e,workspace:t})=>c.mutate({model:e,workspace:t}),providerCatalog:p,workspaceLabel:f?.label??`Default Path`,workspacePlaceholder:f?.placeholder??`/path/to/workspace`},`${g}::${O}`)]})}export{O as ModelConfig};
@@ -1 +0,0 @@
1
- import{c as e}from"./dist-CyWdaJvr.js";var t=e(`Play`,[[`polygon`,{points:`6 3 20 12 6 21 6 3`,key:`1oa8hb`}]]);export{t};
@@ -1 +0,0 @@
1
- import{c as e}from"./dist-CyWdaJvr.js";var t=e(`Plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]);export{t};
@@ -1 +0,0 @@
1
- import{d as e,g as t,i as n,m as r,o as i,y as a}from"./react-BVjl1ZaK.js";import{Ft as o,Mt as s,Nt as c,Pt as l,Qt as u,jt as d,mt as f,zt as p}from"./api-DmxQnm30.js";import{c as m}from"./dist-CyWdaJvr.js";import{t as h}from"./confirm-dialog-BWRNsRgb.js";import{t as g}from"./ellipsis-BDgTYNDX.js";import{t as _}from"./key-round-Du8x3sWa.js";import{t as ee}from"./plus-DrpyArC8.js";import{t as v}from"./search-CjHGYvTI.js";import{t as te}from"./trash-2-yLA8BEcE.js";import{t as y}from"./x-dpDISboO.js";import{t as b}from"./status-dot-SVPjIyG5.js";import{n as x,r as S,t as C}from"./popover-BlJLguiZ.js";import{$ as ne,Ct as w,J as T,K as E,Lt as D,U as O,X as k,Y as A,_t as re,at as ie,ct as ae,et as j,ft as oe,lt as se,pt as ce,q as M,rt as le,ut as ue}from"./index-ZDJP_uJc.js";import{t as N}from"./config-hints-Ceiol9x4.js";import{a as de,c as fe,i as pe,n as P,o as me,r as he,s as ge}from"./config-split-page-CdJEkWxv.js";import{a as _e,o as ve,s as ye,t as be}from"./provider-models-C_yOh6DE.js";var xe=m(`CircleDotDashed`,[[`path`,{d:`M10.1 2.18a9.93 9.93 0 0 1 3.8 0`,key:`1qdqn0`}],[`path`,{d:`M17.6 3.71a9.95 9.95 0 0 1 2.69 2.7`,key:`1bq7p6`}],[`path`,{d:`M21.82 10.1a9.93 9.93 0 0 1 0 3.8`,key:`1rlaqf`}],[`path`,{d:`M20.29 17.6a9.95 9.95 0 0 1-2.7 2.69`,key:`1xk03u`}],[`path`,{d:`M13.9 21.82a9.94 9.94 0 0 1-3.8 0`,key:`l7re25`}],[`path`,{d:`M6.4 20.29a9.95 9.95 0 0 1-2.69-2.7`,key:`1v18p6`}],[`path`,{d:`M2.18 13.9a9.93 9.93 0 0 1 0-3.8`,key:`xdo6bj`}],[`path`,{d:`M3.71 6.4a9.95 9.95 0 0 1 2.7-2.69`,key:`1jjmaz`}],[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}]]),Se=m(`EyeOff`,[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),F=m(`Eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),Ce=m(`Settings2`,[[`path`,{d:`M20 7h-9`,key:`3s1dr2`}],[`path`,{d:`M14 17H5`,key:`gfn3mx`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}],[`circle`,{cx:`7`,cy:`7`,r:`3`,key:`dfmy0x`}]]),I=a(t(),1),L=r();function we({isSet:t,className:n,value:r,onChange:i,placeholder:a,...s}){let[c,u]=(0,I.useState)(!1),[d,f]=(0,I.useState)(!1),p=typeof r==`string`&&r.length>0;return(0,L.jsxs)(`div`,{className:`relative`,children:[t&&!p&&!d?(0,L.jsx)(`div`,{onClick:()=>f(!0),className:e(`flex h-9 w-full rounded-xl border border-gray-200/80 bg-white px-3.5 py-2 text-sm text-gray-500 cursor-text items-center pr-12`,n),children:`••••••••••••`}):(0,L.jsx)(l,{type:c?`text`:`password`,className:e(`pr-12`,n),value:r,onChange:i,onBlur:()=>{p||f(!1)},placeholder:a,autoFocus:d,...s}),(0,L.jsx)(`div`,{className:`absolute right-2 top-1/2 -translate-y-1/2 flex gap-1`,children:(t||p)&&(0,L.jsx)(o,{type:`button`,variant:`ghost`,size:`icon`,className:`h-7 w-7`,onClick:()=>u(!c),children:c?(0,L.jsx)(Se,{className:`h-4 w-4`}):(0,L.jsx)(F,{className:`h-4 w-4`})})})]})}function R({value:t,onChange:r,className:i}){let a=t?Object.entries(t):[],s=(e,t,n)=>{let i=[...a];i[e]=[t,n],r(Object.fromEntries(i))},c=()=>{r({...t,"":``})},u=e=>{let t=a.filter((t,n)=>n!==e);r(Object.fromEntries(t))};return(0,L.jsxs)(`div`,{className:e(`space-y-2`,i),children:[a.map(([e,t],r)=>(0,L.jsxs)(`div`,{className:`flex gap-2`,children:[(0,L.jsx)(l,{type:`text`,value:e,onChange:e=>s(r,e.target.value,t),placeholder:n(`headerName`),className:`flex-1`}),(0,L.jsx)(l,{type:`text`,value:t,onChange:t=>s(r,e,t.target.value),placeholder:n(`headerValue`),className:`flex-1`}),(0,L.jsx)(o,{type:`button`,variant:`ghost`,size:`icon`,onClick:()=>u(r),children:(0,L.jsx)(te,{className:`h-4 w-4 text-red-500`})})]},r)),(0,L.jsxs)(o,{type:`button`,variant:`outline`,size:`sm`,onClick:c,children:[(0,L.jsx)(ee,{className:`h-4 w-4 mr-2`}),n(`add`)]})]})}function Te(e){let{value:t,onChange:n,options:r}=e;return(0,L.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:r.map(e=>{let r=e.value===t;return(0,L.jsx)(`button`,{type:`button`,onClick:()=>n(e.value),"aria-pressed":r,className:`rounded-full border px-3 py-1.5 text-xs font-medium transition-colors ${r?`border-primary bg-primary text-white shadow-sm`:`border-gray-200 bg-white text-gray-700 hover:border-primary/40 hover:text-primary`}`,children:e.label},e.value)})})}function Ee(e){let{showAdvanced:t,onShowAdvancedChange:r,supportsWireApi:i,wireApiLabel:a,wireApi:o,onWireApiChange:s,shouldUseWireApiPills:l,wireApiSelectOptions:u,extraHeadersLabel:d,extraHeaders:f,onExtraHeadersChange:p}=e;return(0,L.jsxs)(`div`,{className:`border-t border-gray-100 pt-4`,children:[(0,L.jsxs)(`button`,{type:`button`,onClick:()=>r(!t),className:`flex w-full items-center justify-between text-sm text-gray-600 transition-colors hover:text-gray-900`,children:[(0,L.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,L.jsx)(Ce,{className:`h-3.5 w-3.5`}),n(`providerAdvancedSettings`)]}),(0,L.jsx)(D,{className:`h-4 w-4 transition-transform ${t?`rotate-180`:``}`})]}),t?(0,L.jsxs)(`div`,{className:`mt-4 space-y-5`,children:[i?(0,L.jsxs)(`div`,{className:`space-y-2`,children:[(0,L.jsx)(c,{htmlFor:`wireApi`,className:`text-sm font-medium text-gray-900`,children:a}),l?(0,L.jsx)(Te,{value:o,onChange:e=>s(e),options:u}):(0,L.jsxs)(E,{value:o,onValueChange:e=>s(e),children:[(0,L.jsx)(A,{className:`rounded-xl`,children:(0,L.jsx)(k,{})}),(0,L.jsx)(M,{children:u.map(e=>(0,L.jsx)(T,{value:e.value,children:e.label},e.value))})]})]}):null,(0,L.jsxs)(`div`,{className:`space-y-2`,children:[(0,L.jsx)(c,{className:`text-sm font-medium text-gray-900`,children:d}),(0,L.jsx)(R,{value:f,onChange:p}),(0,L.jsx)(`p`,{className:`text-xs text-gray-500`,children:n(`providerExtraHeadersHelpShort`)})]})]}):null]})}function De(e){let{providerAuth:t,providerAuthNote:r,providerAuthMethodOptions:i,providerAuthMethodsCount:a,selectedAuthMethodHint:s,shouldUseAuthMethodPills:l,resolvedAuthMethodId:u,onAuthMethodChange:d,onStartProviderAuth:f,onImportProviderAuthFromCli:p,startPending:m,importPending:h,authSessionId:g,authStatusMessage:_}=e;return t?.kind===`device_code`?(0,L.jsxs)(`div`,{className:`space-y-2 rounded-xl border border-primary/20 bg-primary-50/50 p-3`,children:[(0,L.jsx)(c,{className:`text-sm font-medium text-gray-900`,children:t.displayName||n(`providerAuthSectionTitle`)}),r?(0,L.jsx)(`p`,{className:`text-xs text-gray-600`,children:r}):null,a>1?(0,L.jsxs)(`div`,{className:`space-y-2`,children:[(0,L.jsx)(c,{className:`text-xs font-medium text-gray-700`,children:n(`providerAuthMethodLabel`)}),l?(0,L.jsx)(Te,{value:u,onChange:d,options:i}):(0,L.jsxs)(E,{value:u,onValueChange:d,children:[(0,L.jsx)(A,{className:`h-8 rounded-lg bg-white`,children:(0,L.jsx)(k,{placeholder:n(`providerAuthMethodPlaceholder`)})}),(0,L.jsx)(M,{children:i.map(e=>(0,L.jsx)(T,{value:e.value,children:e.label},e.value))})]}),s?(0,L.jsx)(`p`,{className:`text-xs text-gray-500`,children:s}):null]}):null,(0,L.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,L.jsx)(o,{type:`button`,variant:`outline`,size:`sm`,onClick:f,disabled:m||!!g,children:n(m?`providerAuthStarting`:g?`providerAuthAuthorizing`:`providerAuthAuthorizeInBrowser`)}),t.supportsCliImport?(0,L.jsx)(o,{type:`button`,variant:`outline`,size:`sm`,onClick:p,disabled:h,children:n(h?`providerAuthImporting`:`providerAuthImportFromCli`)}):null,g?(0,L.jsxs)(`span`,{className:`text-xs text-gray-500`,children:[n(`providerAuthSessionLabel`),`: `,g.slice(0,8),`…`]}):null]}),_?(0,L.jsx)(`p`,{className:`text-xs text-gray-600`,children:_}):null]}):null}var Oe={providerId:``,providerType:null,isBuiltInType:!1,isCustom:!0,enabled:!0,displayName:``,apiKeySet:!1,apiKeyMasked:void 0,apiBase:null,extraHeaders:null,wireApi:null,models:[],modelConfig:{}};function z(e){if(!e)return null;let t=Object.entries(e).map(([e,t])=>[e.trim(),t]).filter(([e])=>e.length>0);return t.length===0?null:Object.fromEntries(t)}function ke(e,t){let n=z(e),r=z(t);if(n===null&&r===null)return!0;if(!n||!r)return!1;let i=Object.entries(n).sort(([e],[t])=>e.localeCompare(t)),a=Object.entries(r).sort(([e],[t])=>e.localeCompare(t));return i.length===a.length?i.every(([e,t],n)=>e===a[n][0]&&t===a[n][1]):!1}function B(e){if(!e||e.length===0)return[];let t=new Set;for(let n of e){let e=n.trim();e&&t.add(e)}return[...t]}function Ae(e,t){let n=e.trim();if(!n||!t.trim())return n;let r=`${t.trim()}/`;return n.startsWith(r)?n.slice(r.length):n}function je(e,t){let n=e.trim();if(!n)return``;for(let e of t){let t=e.trim();t&&(n=Ae(n,t))}return n.trim()}function Me(e,t){return e.length===t.length?e.every((e,n)=>e===t[n]):!1}function Ne(e,t){return B(t)}function Pe(e,t){return B(e).map(e=>{let n=e.trim();return!n||n.startsWith(`${t}/`)?n:`${t}/${n}`})}function Fe(e,t){let n=new Set(t.map(e=>e.trim()).filter(Boolean)),r={};for(let[t,i]of Object.entries(e)){if(!n.has(t))continue;let e={},a=ve(i.thinking?.supported);if(a.length>0){let t=ye(i.thinking?.default);e.thinking=t&&a.includes(t)?{supported:a,default:t}:{supported:a}}i.vision===!0&&(e.vision=!0),(e.thinking||e.vision===!0)&&(r[t]=e)}return r}function Ie(e,t,n){return{..._e(e,n),..._e(t,n)}}function Le(e,t){let n=Object.keys(e).sort(),r=Object.keys(t).sort();if(n.length!==r.length)return!1;for(let i=0;i<n.length;i+=1){let a=n[i];if(a!==r[i])return!1;let o=e[a],s=t[a];if(!o||!s||!Me([...o.thinking?.supported??[]].sort(),[...s.thinking?.supported??[]].sort())||(o.thinking?.default??null)!==(s.thinking?.default??null)||(o.vision??!1)!==(s.vision??!1))return!1}return!0}function Re(e){return n(e===`off`?`chatThinkingLevelOff`:e===`minimal`?`chatThinkingLevelMinimal`:e===`low`?`chatThinkingLevelLow`:e===`medium`?`chatThinkingLevelMedium`:e===`high`?`chatThinkingLevelHigh`:e===`adaptive`?`chatThinkingLevelAdaptive`:`chatThinkingLevelXhigh`)}function ze(e){let{providerName:t,methods:n,defaultMethodId:r,language:i}=e;if(n.length===0)return``;let a=new Map;for(let e of n){let t=e.id.trim();t&&a.set(t.toLowerCase(),t)}let o=(...e)=>{for(let t of e){let e=a.get(t.toLowerCase());if(e)return e}},s=r?.trim();if(t===`minimax-portal`){if(i===`zh`)return o(`cn`,`china-mainland`)??o(s??``)??n[0]?.id??``;if(i===`en`)return o(`global`,`intl`,`international`)??o(s??``)??n[0]?.id??``}if(s){let e=o(s);if(e)return e}return i===`zh`?o(`cn`)??n[0]?.id??``:i===`en`?o(`global`)??n[0]?.id??``:n[0]?.id??``}function Be(e){let{required:t,hasDefault:n,optionCount:r}=e;return t&&n&&r>1&&r<=3}function Ve(e){let{models:t,modelConfig:r,modelDraft:i,showModelInput:a,onModelDraftChange:s,onShowModelInputChange:u,onAddModel:d,onRemoveModel:p,onToggleModelThinkingLevel:m,onSetModelThinkingDefault:h,onSetModelVision:g,thinkingLevels:_,formatThinkingLevelLabel:v}=e;return(0,L.jsxs)(`div`,{className:`space-y-2`,children:[(0,L.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,L.jsx)(c,{className:`text-sm font-medium text-gray-900`,children:n(`providerModelsTitle`)}),a?null:(0,L.jsxs)(`button`,{type:`button`,onClick:()=>u(!0),className:`flex items-center gap-1 text-xs font-medium text-primary hover:text-primary/80`,children:[(0,L.jsx)(ee,{className:`h-3 w-3`}),n(`providerAddModel`)]})]}),a?(0,L.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,L.jsx)(l,{value:i,onChange:e=>s(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),d()),e.key===`Escape`&&(u(!1),s(``))},placeholder:n(`providerModelInputPlaceholder`),className:`flex-1 rounded-xl`,autoFocus:!0}),(0,L.jsx)(o,{type:`button`,size:`sm`,onClick:d,disabled:i.trim().length===0,children:n(`add`)}),(0,L.jsx)(o,{type:`button`,size:`sm`,variant:`ghost`,onClick:()=>{u(!1),s(``)},children:(0,L.jsx)(y,{className:`h-4 w-4`})})]}):null,t.length===0?(0,L.jsxs)(`div`,{className:`rounded-xl border border-dashed border-gray-200 bg-gray-50 px-4 py-6 text-center`,children:[(0,L.jsx)(`p`,{className:`text-sm text-gray-500`,children:n(`providerModelsEmptyShort`)}),a?null:(0,L.jsx)(`button`,{type:`button`,onClick:()=>u(!0),className:`mt-2 text-sm font-medium text-primary hover:text-primary/80`,children:n(`providerAddFirstModel`)})]}):(0,L.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:t.map(e=>{let t=r[e],i=t?.thinking,a=i?.supported??[],o=i?.default??null,s=t?.vision===!0;return(0,L.jsxs)(`div`,{className:`group inline-flex max-w-full items-center gap-1 rounded-full border border-gray-200 bg-white px-3 py-1.5`,children:[(0,L.jsx)(`span`,{className:`max-w-[140px] truncate text-sm text-gray-800 sm:max-w-[220px]`,children:e}),(0,L.jsxs)(C,{children:[(0,L.jsx)(S,{asChild:!0,children:(0,L.jsx)(`button`,{type:`button`,className:`inline-flex h-5 w-5 items-center justify-center rounded-full text-gray-400 opacity-100 transition-opacity hover:bg-gray-100 hover:text-gray-600 md:opacity-0 md:group-hover:opacity-100 md:group-focus-within:opacity-100`,"aria-label":n(`providerModelThinkingTitle`),title:n(`providerModelThinkingTitle`),children:(0,L.jsx)(Ce,{className:`h-3 w-3`})})}),(0,L.jsxs)(x,{className:`w-80 space-y-3`,children:[(0,L.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-lg border border-gray-100 bg-gray-50 px-3 py-2`,children:[(0,L.jsxs)(`div`,{className:`min-w-0`,children:[(0,L.jsx)(`p`,{className:`text-xs font-semibold text-gray-800`,children:n(`providerModelVisionTitle`)}),(0,L.jsx)(`p`,{className:`text-xs text-gray-500`,children:n(`providerModelVisionHint`)})]}),(0,L.jsx)(f,{checked:s,onCheckedChange:t=>g(e,t)})]}),(0,L.jsxs)(`div`,{className:`space-y-1`,children:[(0,L.jsx)(`p`,{className:`text-xs font-semibold text-gray-800`,children:n(`providerModelThinkingTitle`)}),(0,L.jsx)(`p`,{className:`text-xs text-gray-500`,children:n(`providerModelThinkingHint`)})]}),(0,L.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:_.map(t=>(0,L.jsx)(`button`,{type:`button`,onClick:()=>m(e,t),className:`rounded-full border px-2.5 py-1 text-xs font-medium transition-colors ${a.includes(t)?`border-primary bg-primary text-white`:`border-gray-200 bg-white text-gray-600 hover:border-primary/40 hover:text-primary`}`,children:v(t)},t))}),(0,L.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,L.jsx)(c,{className:`text-xs font-medium text-gray-700`,children:n(`providerModelThinkingDefault`)}),(0,L.jsxs)(E,{value:o??`__none__`,onValueChange:t=>h(e,t===`__none__`?null:t),disabled:a.length===0,children:[(0,L.jsx)(A,{className:`h-8 rounded-lg bg-white text-xs`,children:(0,L.jsx)(k,{})}),(0,L.jsxs)(M,{children:[(0,L.jsx)(T,{value:`__none__`,children:n(`providerModelThinkingDefaultNone`)}),a.map(e=>(0,L.jsx)(T,{value:e,children:v(e)},e))]})]}),a.length===0?(0,L.jsx)(`p`,{className:`text-xs text-gray-500`,children:n(`providerModelThinkingNoSupported`)}):null]})]})]}),(0,L.jsx)(`button`,{type:`button`,onClick:()=>p(e),className:`inline-flex h-5 w-5 items-center justify-center rounded-full text-gray-400 opacity-100 transition-opacity hover:bg-gray-100 hover:text-gray-600 md:opacity-0 md:group-hover:opacity-100 md:group-focus-within:opacity-100`,"aria-label":n(`remove`),children:(0,L.jsx)(y,{className:`h-3 w-3`})})]},e)})})]})}function He(e){return e.enabled?(0,L.jsx)(b,{status:e.apiKeySet?`ready`:`setup`,label:e.apiKeySet?n(`statusReady`):n(`statusSetup`),className:e.className}):(0,L.jsx)(b,{status:`inactive`,label:n(`disabled`),className:e.className})}function V({providerName:e,onProviderDeleted:t}){let r=u(),{data:a}=ue(),{data:s}=se(),{data:d}=ne(),f=re(),m=le(),h=ce(),g=oe(),_=ae(),ee=ie(),[v,y]=(0,I.useState)(``),[b,x]=(0,I.useState)(``),[S,C]=(0,I.useState)(null),[w,T]=(0,I.useState)(`auto`),[E,D]=(0,I.useState)([]),[O,k]=(0,I.useState)({}),[A,j]=(0,I.useState)(``),[M,pe]=(0,I.useState)(``),[he,_e]=(0,I.useState)(!1),[ve,ye]=(0,I.useState)(!1),[Se,F]=(0,I.useState)(null),[Ce,R]=(0,I.useState)(``),[Te,Ae]=(0,I.useState)(``),V=(0,I.useRef)(null),H=e?a?.providers[e]:null,U=s?.providerTemplates.find(e=>e.providerType===H?.providerType),W=H??Oe,Ue=d?.uiHints,We=!!H?.isCustom,Ge=e?N(`providers.${e}.apiKey`,Ue):void 0,Ke=e?N(`providers.${e}.apiBase`,Ue):void 0,qe=e?N(`providers.${e}.extraHeaders`,Ue):void 0,Je=e?N(`providers.${e}.wireApi`,Ue):void 0,Ye=U?.displayName||H?.displayName||e||``,G=(W.displayName||``).trim()||Ye,Xe=W.enabled!==!1,Ze=M.trim()||G||e||n(`providersSelectPlaceholder`),K=(0,I.useMemo)(()=>B([U?.modelPrefix||U?.providerType||``,e||``]),[e,U?.modelPrefix,U?.providerType]),Qe=U?.defaultApiBase||``,q=W.apiBase||Qe,$e=z(W.extraHeaders||null),et=W.wireApi||U?.defaultWireApi||`auto`,tt=(0,I.useMemo)(()=>B((U?.defaultModels??[]).map(e=>je(e,K))),[U?.defaultModels,K]),nt=(0,I.useMemo)(()=>B((W.models??[]).map(e=>je(e,K))),[W.models,K]),J=(0,I.useMemo)(()=>Ne(tt,nt),[tt,nt]),rt=(0,I.useMemo)(()=>Fe(Ie(U?.modelConfig,W.modelConfig,K),J),[J,K,U?.modelConfig,W.modelConfig]),Y=i(),it=U?.apiBaseHelp?.[Y]||U?.apiBaseHelp?.en||Ke?.help||n(`providerApiBaseHelp`),X=U?.auth,Z=(0,I.useMemo)(()=>X?.methods??[],[X?.methods]),Q=!!U?.supportsWireApi||We,at=(0,I.useMemo)(()=>Z.map(e=>({value:e.id,label:e.label?.[Y]||e.label?.en||e.id})),[Z,Y]),ot=(0,I.useMemo)(()=>ze({providerName:U?.providerType??e,methods:Z,defaultMethodId:X?.defaultMethodId,language:Y}),[e,X?.defaultMethodId,Z,Y,U?.providerType]),st=(0,I.useMemo)(()=>{if(!Z.length)return``;let e=Te.trim();return e&&Z.some(t=>t.id===e)?e:ot||Z[0]?.id||``},[Te,ot,Z]),ct=(0,I.useMemo)(()=>Z.find(e=>e.id===st),[Z,st]),lt=Be({required:X?.kind===`device_code`,hasDefault:!!X?.defaultMethodId?.trim(),optionCount:Z.length}),ut=(U?.wireApiOptions||[`auto`,`chat`,`responses`]).map(e=>({value:e,label:n(e===`chat`?`wireApiChat`:e===`responses`?`wireApiResponses`:`wireApiAuto`)})),dt=Be({required:Q,hasDefault:typeof U?.defaultWireApi==`string`&&U.defaultWireApi.length>0,optionCount:ut.length}),$=(0,I.useCallback)(()=>{V.current!==null&&(window.clearTimeout(V.current),V.current=null)},[]),ft=(0,I.useCallback)((t,i)=>{$(),V.current=window.setTimeout(()=>{(async()=>{if(e)try{let a=await _.mutateAsync({provider:e,data:{sessionId:t}});if(a.status===`pending`){R(n(`providerAuthWaitingBrowser`)),ft(t,a.nextPollMs??i);return}if(a.status===`authorized`){F(null),$(),R(n(`providerAuthCompleted`)),p.success(n(`providerAuthCompleted`)),r.invalidateQueries({queryKey:[`config`]}),r.invalidateQueries({queryKey:[`providers`]});return}F(null),$(),R(a.message||`Authorization ${a.status}.`),p.error(a.message||`Authorization ${a.status}.`)}catch(e){F(null),$();let t=e instanceof Error?e.message:String(e);R(t),p.error(`Authorization failed: ${t}`)}})()},Math.max(1e3,i))},[$,_,e,r]);(0,I.useEffect)(()=>{if(!e){y(``),x(``),C(null),T(`auto`),D([]),k({}),j(``),pe(``),F(null),R(``),Ae(``),$();return}y(``),x(q),C(W.extraHeaders||null),T(et),D(J),k(rt),j(``),pe(G),F(null),R(``),Ae(ot),$()},[e,q,W.extraHeaders,et,J,rt,G,ot,$]),(0,I.useEffect)(()=>()=>$(),[$]),(0,I.useEffect)(()=>k(e=>Fe(e,E)),[E]);let pt=(0,I.useMemo)(()=>e?v.trim().length>0||b.trim()!==q.trim()||!ke(S,$e)||Q&&w!==et||!Me(E,J)||!Le(O,rt)||M.trim()!==G:!1,[e,v,b,q,S,$e,Q,w,et,E,J,O,rt,M,G]);return!e||!H?(0,L.jsx)(P,{children:(0,L.jsxs)(`div`,{children:[(0,L.jsx)(`h3`,{className:`text-base font-semibold text-gray-900`,children:n(`providersSelectTitle`)}),(0,L.jsx)(`p`,{className:`mt-2 text-sm text-gray-500`,children:n(`providersSelectDescription`)})]})}):(0,L.jsxs)(de,{children:[(0,L.jsx)(fe,{className:`px-6 py-4`,children:(0,L.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,L.jsx)(`h3`,{className:`truncate text-lg font-semibold text-gray-900`,children:Ze}),(0,L.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,L.jsx)(`button`,{type:`button`,onClick:async()=>{if(e&&window.confirm(n(`providerDeleteConfirm`)))try{await m.mutateAsync({provider:e}),t?.(e)}catch{}},disabled:m.isPending,className:`text-gray-400 transition-colors hover:text-red-500`,title:n(`providerDelete`),children:(0,L.jsx)(te,{className:`h-4 w-4`})}),(0,L.jsx)(He,{enabled:Xe,apiKeySet:W.apiKeySet})]})]})}),(0,L.jsxs)(`form`,{onSubmit:t=>{if(t.preventDefault(),!e)return;let n={},r=v.trim(),i=b.trim(),a=z(S),o=M.trim();o!==G&&(n.displayName=o.length>0?o:null),r.length>0&&(n.apiKey=r),i!==q.trim()&&(n.apiBase=i.length>0&&i!==Qe?i:null),ke(a,$e)||(n.extraHeaders=a),Q&&w!==et&&(n.wireApi=w),Me(E,J)||(n.models=Pe(E,e)),Le(O,rt)||(n.modelConfig=Fe(O,E)),f.mutate({provider:e,data:n})},className:`flex min-h-0 flex-1 flex-col`,children:[(0,L.jsxs)(me,{className:`space-y-5 px-6 py-5`,children:[(0,L.jsxs)(`div`,{className:`space-y-2`,children:[(0,L.jsx)(c,{htmlFor:`providerDisplayName`,className:`text-sm font-medium text-gray-900`,children:n(`providerDisplayName`)}),(0,L.jsx)(l,{id:`providerDisplayName`,type:`text`,value:M,onChange:e=>pe(e.target.value),placeholder:Ye||n(`providerDisplayNamePlaceholder`),className:`rounded-xl`}),(0,L.jsx)(`p`,{className:`text-xs text-gray-500`,children:n(`providerDisplayNameHelpShort`)})]}),(0,L.jsxs)(`div`,{className:`space-y-2`,children:[(0,L.jsx)(c,{htmlFor:`apiKey`,className:`text-sm font-medium text-gray-900`,children:Ge?.label??n(`apiKey`)}),(0,L.jsx)(we,{id:`apiKey`,value:v,isSet:W.apiKeySet,onChange:e=>y(e.target.value),placeholder:Ge?.placeholder??n(`enterApiKey`),className:`rounded-xl`}),(0,L.jsx)(`p`,{className:`text-xs text-gray-500`,children:n(`leaveBlankToKeepUnchanged`)})]}),(0,L.jsx)(De,{providerAuth:X,providerAuthNote:X?.note?.[Y]||X?.note?.en||X?.displayName||``,providerAuthMethodOptions:at,providerAuthMethodsCount:Z.length,selectedAuthMethodHint:ct?.hint?.[Y]||ct?.hint?.en||``,shouldUseAuthMethodPills:lt,resolvedAuthMethodId:st,onAuthMethodChange:Ae,onStartProviderAuth:async()=>{if(!(!e||X?.kind!==`device_code`))try{R(``);let t=await g.mutateAsync({provider:e,data:st?{methodId:st}:{}});if(!t.sessionId||!t.verificationUri)throw Error(n(`providerAuthStartFailed`));F(t.sessionId),R(`${n(`providerAuthOpenPrompt`)}${t.userCode}${n(`providerAuthOpenPromptSuffix`)}`),window.open(t.verificationUri,`_blank`,`noopener,noreferrer`),ft(t.sessionId,t.intervalMs)}catch(e){let t=e instanceof Error?e.message:String(e);F(null),$(),R(t),p.error(`${n(`providerAuthStartFailed`)}: ${t}`)}},onImportProviderAuthFromCli:async()=>{if(!(!e||X?.kind!==`device_code`))try{$(),F(null);let t=await ee.mutateAsync({provider:e});R(`${n(`providerAuthImportStatusPrefix`)}${t.expiresAt?` (expires: ${t.expiresAt})`:``}`),p.success(n(`providerAuthImportSuccess`)),r.invalidateQueries({queryKey:[`config`]}),r.invalidateQueries({queryKey:[`providers`]})}catch(e){let t=e instanceof Error?e.message:String(e);R(t),p.error(`${n(`providerAuthImportFailed`)}: ${t}`)}},startPending:g.isPending,importPending:ee.isPending,authSessionId:Se,authStatusMessage:Ce}),(0,L.jsxs)(`div`,{className:`space-y-2`,children:[(0,L.jsx)(c,{htmlFor:`apiBase`,className:`text-sm font-medium text-gray-900`,children:Ke?.label??n(`apiBase`)}),(0,L.jsx)(l,{id:`apiBase`,type:`text`,value:b,onChange:e=>x(e.target.value),placeholder:Qe||Ke?.placeholder||`https://api.example.com`,className:`rounded-xl`}),(0,L.jsx)(`p`,{className:`text-xs text-gray-500`,children:it})]}),(0,L.jsx)(Ve,{models:E,modelConfig:O,modelDraft:A,showModelInput:ve,onModelDraftChange:j,onShowModelInputChange:ye,onAddModel:()=>{let e=je(A,K);if(e){if(e.includes(`/`)){p.error(n(`providerModelInvalidProviderPrefix`));return}if(E.includes(e)){j(``);return}D(t=>[...t,e]),j(``)}},onRemoveModel:e=>{D(t=>t.filter(t=>t!==e)),k(t=>{let n={...t};return delete n[e],n})},onToggleModelThinkingLevel:(e,t)=>{k(n=>{let r=n[e],i=r?.thinking?.supported??[],a=i.includes(t)?i.filter(e=>e!==t):be.filter(e=>e===t||i.includes(e)),o=r?.thinking?.default&&a.includes(r.thinking.default)?r.thinking.default:void 0,s={...r,thinking:a.length>0?o?{supported:a,default:o}:{supported:a}:void 0},c={...n};return s.thinking||s.vision===!0?c[e]=s:delete c[e],c})},onSetModelThinkingDefault:(e,t)=>{k(n=>{let r=n[e],i=r?.thinking;return!i||i.supported.length===0||t&&!i.supported.includes(t)?n:{...n,[e]:{...r,thinking:t?{supported:i.supported,default:t}:{supported:i.supported}}}})},onSetModelVision:(e,t)=>{k(n=>{let r={...n[e],vision:t?!0:void 0},i={...n};return r.thinking||r.vision===!0?i[e]=r:delete i[e],i})},thinkingLevels:be,formatThinkingLevelLabel:Re}),(0,L.jsx)(Ee,{showAdvanced:he,onShowAdvancedChange:_e,supportsWireApi:Q,wireApiLabel:Je?.label??n(`wireApi`),wireApi:w,onWireApiChange:T,shouldUseWireApiPills:dt,wireApiSelectOptions:ut,extraHeadersLabel:qe?.label??n(`extraHeaders`),extraHeaders:S,onExtraHeadersChange:C})]}),(0,L.jsxs)(ge,{className:`flex items-center justify-between px-6 py-4`,children:[(0,L.jsxs)(o,{type:`button`,variant:`outline`,size:`sm`,onClick:async()=>{if(!e)return;let t=je(E.find(e=>e.trim().length>0)??``,K),r={apiBase:b.trim(),extraHeaders:z(S),model:t||null};v.trim().length>0&&(r.apiKey=v.trim()),Q&&(r.wireApi=w);try{let t=await h.mutateAsync({provider:e,data:r});if(t.success){p.success(`${n(`providerTestConnectionSuccess`)} (${t.latencyMs}ms)`);return}let i=[`provider=${t.provider}`,`latency=${t.latencyMs}ms`];t.model&&i.push(`model=${t.model}`),p.error(`${n(`providerTestConnectionFailed`)}: ${t.message} | ${i.join(` | `)}`)}catch(e){let t=e instanceof Error?e.message:String(e);p.error(`${n(`providerTestConnectionFailed`)}: ${t}`)}},disabled:h.isPending,children:[(0,L.jsx)(xe,{className:`mr-1.5 h-4 w-4`}),h.isPending?n(`providerTestingConnection`):n(`providerTestConnection`)]}),(0,L.jsx)(o,{type:`submit`,disabled:f.isPending||!pt,children:f.isPending?n(`saving`):n(pt?`save`:`unchanged`)})]})]})]})}function H(e){if(!e)return null;try{let t=new URL(e);return`${t.host}${t.pathname&&t.pathname!==`/`?t.pathname:``}`}catch{return e.replace(/^https?:\/\//,``)}}function U(e,t=[]){let n=new Map(t.map((e,t)=>[e,t]));return e.map((e,t)=>({provider:e,index:t})).sort((e,t)=>{let r=n.get(e.provider.providerId),i=n.get(t.provider.providerId);if(r!==void 0||i!==void 0)return(r??2**53-1)-(i??2**53-1);let a=e.provider.providerType===`nextclaw`?1:0,o=t.provider.providerType===`nextclaw`?1:0;return a===o?e.index-t.index:a-o}).map(({provider:e})=>e)}function W(e){let t=e.findIndex(e=>e.providerType===`zhipu`),n=e.findIndex(e=>e.providerType===`dashscope-coding-plan`);return e.map((e,t)=>({template:e,index:t})).sort((e,r)=>{let i=({template:e,index:r})=>e.providerType===`nextclaw`?2**53-1:e.providerType===`deepseek`&&n>=0?n-.5:e.providerType===`mimo`&&t>=0?t+.5:r;return i(e)-i(r)}).map(({template:e})=>e)}function Ue(){let{isMobile:t}=w(),{data:r}=ue(),{data:i}=se(),a=j(),c=le(),u=re(),[p,m]=(0,I.useState)(null),[y,ne]=(0,I.useState)(null),[T,E]=(0,I.useState)(!1),[D,k]=(0,I.useState)([]),[A,ie]=(0,I.useState)(``),ae=(0,I.useMemo)(()=>U(Object.values(r?.providers??{}),D),[r?.providers,D]),oe=(0,I.useMemo)(()=>i?.providerTemplates??[],[i?.providerTemplates]),ce=(0,I.useMemo)(()=>W(oe),[oe]),M=(0,I.useMemo)(()=>new Map(oe.map(e=>[e.providerType,e])),[oe]),N=(0,I.useMemo)(()=>{let e=A.trim().toLowerCase();return ae.filter(t=>{if(!e)return!0;let n=t.providerType?M.get(t.providerType):null;return(t.displayName?.trim()||n?.displayName||t.providerId).toLowerCase().includes(e)||t.providerId.toLowerCase().includes(e)})},[ae,A,M]),P=(0,I.useMemo)(()=>p&&N.some(e=>e.providerId===p)?p:t?null:N[0]?.providerId??null,[N,t,p]);return!r||!i?(0,L.jsx)(`div`,{className:`p-8`,children:n(`providersLoading`)}):(0,L.jsxs)(s,{className:`pb-0 xl:flex xl:h-full xl:min-h-0 xl:flex-col`,children:[(0,L.jsx)(d,{title:n(`providersPageTitle`),description:n(`providersPageDescription`)}),(0,L.jsxs)(pe,{className:`xl:min-h-0`,mobileView:t?P?`detail`:`list`:void 0,onMobileBack:()=>m(null),mobileListLabel:n(`providersPageTitle`),children:[(0,L.jsxs)(de,{children:[(0,L.jsx)(fe,{className:`space-y-3 px-4 pb-3 pt-4`,children:(0,L.jsxs)(C,{open:T,onOpenChange:E,children:[(0,L.jsx)(S,{asChild:!0,children:(0,L.jsxs)(o,{type:`button`,variant:`outline`,className:`w-full justify-center`,disabled:a.isPending,children:[(0,L.jsx)(ee,{className:`mr-2 h-4 w-4`}),a.isPending?n(`saving`):n(`providerAdd`)]})}),(0,L.jsxs)(x,{className:`w-[42rem] max-w-[calc(100vw-2rem)] p-3`,align:`start`,children:[(0,L.jsx)(`div`,{className:`mb-2 px-1 text-xs font-semibold text-gray-500`,children:n(`providerTemplatePickerTitle`)}),(0,L.jsxs)(`div`,{className:`grid max-h-[24rem] grid-cols-2 gap-2 overflow-y-auto sm:grid-cols-3`,children:[(0,L.jsxs)(`button`,{type:`button`,className:`flex min-h-20 w-full flex-col items-start gap-2 rounded-lg border border-dashed border-gray-300 bg-white px-3 py-2 text-left hover:border-primary/40 hover:bg-gray-50`,onClick:async()=>{try{let e=await a.mutateAsync({data:{providerType:null}});ie(``),m(e.providerId),k(t=>[e.providerId,...t.filter(t=>t!==e.providerId)]),E(!1)}catch{}},children:[(0,L.jsx)(O,{name:`custom`,className:`h-8 w-8 rounded-lg border border-gray-200 bg-white`}),(0,L.jsx)(`span`,{className:`line-clamp-2 min-w-0 text-xs font-semibold leading-4 text-gray-800`,children:n(`providerAddCustom`)})]}),ce.map(e=>(0,L.jsxs)(`button`,{type:`button`,className:`flex min-h-20 w-full flex-col items-start gap-2 rounded-lg border border-gray-200 bg-white px-3 py-2 text-left hover:border-primary/40 hover:bg-gray-50`,onClick:async()=>{try{let t=await a.mutateAsync({data:{providerType:e.providerType}});ie(``),m(t.providerId),k(e=>[t.providerId,...e.filter(e=>e!==t.providerId)]),E(!1)}catch{}},children:[(0,L.jsx)(O,{name:e.providerType,src:e.logo?`/logos/${e.logo}`:null,className:`h-8 w-8 rounded-lg border border-gray-200 bg-white`,imgClassName:`h-4 w-4 object-contain`}),(0,L.jsx)(`span`,{className:`line-clamp-2 min-w-0 text-xs font-semibold leading-4 text-gray-800`,children:e.displayName||e.providerType})]},e.providerType))]})]})]})}),(0,L.jsx)(`div`,{className:`border-b border-gray-100 px-4 py-3`,children:(0,L.jsxs)(`div`,{className:`relative`,children:[(0,L.jsx)(v,{className:`pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-gray-400`}),(0,L.jsx)(l,{value:A,onChange:e=>ie(e.target.value),placeholder:n(`providersFilterPlaceholder`),className:`h-10 rounded-xl pl-9`})]})}),(0,L.jsxs)(me,{className:`space-y-2 p-3`,children:[N.map(t=>{let r=t.providerType?M.get(t.providerType):null,i=t.enabled!==!1,a=!!(i&&t.apiKeySet),o=t.displayName?.trim()||r?.displayName||t.providerId,s=H(t.apiBase||r?.defaultApiBase||``)||n(`providersDefaultDescription`);return(0,L.jsx)(`div`,{onClick:()=>m(t.providerId),onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),m(t.providerId))},role:`button`,tabIndex:0,className:e(`w-full rounded-xl border p-2.5 text-left transition-all`,P===t.providerId?`border-primary/30 bg-primary-50/40 shadow-sm`:`border-gray-200/70 bg-white hover:border-gray-300 hover:bg-gray-50/70`),children:(0,L.jsxs)(`div`,{className:`relative min-h-10`,children:[(0,L.jsxs)(`div`,{className:`flex min-w-0 items-center gap-3 pr-20`,children:[(0,L.jsx)(O,{name:t.providerType??t.providerId,src:r?.logo?`/logos/${r.logo}`:null,className:e(`h-10 w-10 rounded-lg border`,a?`border-primary/30 bg-white`:`border-gray-200/70 bg-white`),imgClassName:`h-5 w-5 object-contain`,fallback:(0,L.jsx)(`span`,{className:`text-sm font-semibold uppercase text-gray-500`,children:t.providerId[0]})}),(0,L.jsxs)(`div`,{className:`min-w-0`,children:[(0,L.jsx)(`p`,{className:`truncate text-sm font-semibold text-gray-900`,children:o}),(0,L.jsx)(`p`,{className:`truncate font-mono text-[10px] text-gray-400`,children:t.providerId}),(0,L.jsxs)(`p`,{className:`line-clamp-1 text-[11px] text-gray-500`,children:[s,` · `,t.models?.length??0]})]})]}),(0,L.jsxs)(`div`,{className:`absolute right-0 top-0 flex items-center gap-1.5`,children:[(0,L.jsx)(`div`,{onClick:e=>e.stopPropagation(),children:(0,L.jsx)(f,{checked:i,disabled:u.isPending,title:n(i?`disabled`:`enabled`),className:`h-[18px] w-8`,thumbClassName:`h-4 w-4 data-[state=checked]:translate-x-4`,onCheckedChange:e=>{u.mutateAsync({provider:t.providerId,data:{enabled:e},silentSuccess:!0})}})}),(0,L.jsxs)(C,{children:[(0,L.jsx)(S,{asChild:!0,children:(0,L.jsx)(`button`,{type:`button`,className:`inline-flex h-7 w-7 items-center justify-center rounded-lg text-gray-400 hover:bg-gray-100 hover:text-gray-700`,onClick:e=>e.stopPropagation(),title:n(`more`),children:(0,L.jsx)(g,{className:`h-4 w-4`})})}),(0,L.jsx)(x,{className:`w-40 p-1`,align:`end`,onClick:e=>e.stopPropagation(),children:(0,L.jsxs)(`button`,{type:`button`,className:`flex w-full items-center gap-2 rounded-md px-2 py-2 text-sm text-red-600 hover:bg-red-50`,onClick:()=>ne(t.providerId),children:[(0,L.jsx)(te,{className:`h-4 w-4`}),n(`providerDelete`)]})})]})]}),(0,L.jsx)(b,{status:i?a?`ready`:`setup`:`inactive`,label:n(i?a?`statusReady`:`statusSetup`:`disabled`),className:`absolute bottom-0 right-0 justify-end`})]})},t.providerId)}),N.length===0?(0,L.jsx)(he,{icon:_,title:n(`providersNoMatch`)}):null]})]}),(0,L.jsx)(V,{providerName:P??void 0,onProviderDeleted:e=>{k(t=>t.filter(t=>t!==e)),e===P&&m(null)}})]}),(0,L.jsx)(h,{open:!!y,onOpenChange:e=>{e||ne(null)},title:n(`providerDelete`),description:y??void 0,confirmLabel:n(`delete`),variant:`destructive`,onCancel:()=>ne(null),onConfirm:()=>{y&&c.mutateAsync({provider:y}).then(()=>{k(e=>e.filter(e=>e!==y)),y===P&&m(null),ne(null)})}})]})}export{Ue as ProvidersList};
@@ -1 +0,0 @@
1
- import{b as e}from"./app-presenter-provider-CDSjiqfE.js";export{e as RemoteAccessPage};
@@ -1 +0,0 @@
1
- import{c as e}from"./dist-CyWdaJvr.js";var t=e(`RotateCw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]);export{t};
@@ -1 +0,0 @@
1
- import{c as e}from"./dist-CyWdaJvr.js";var t=e(`Search`,[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`path`,{d:`m21 21-4.3-4.3`,key:`1qie3q`}]]);export{t};
@@ -1 +0,0 @@
1
- import{c as e}from"./dist-CyWdaJvr.js";var t=e(`X`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]);export{t};
@@ -1,85 +0,0 @@
1
- export const AGENT_LABELS: Record<string, { zh: string; en: string }> = {
2
- agentsPageTitle: { zh: 'Agent 管理', en: 'Agents' },
3
- agentsPageDescription: {
4
- zh: '管理可对话的 Agent 身份。每个 Agent 都有自己的主目录、设定、记忆与技能。',
5
- en: 'Manage conversational agent identities. Each agent owns its home directory, setup, memory, and skills.'
6
- },
7
- agentsHeroEyebrow: { zh: 'Agent 管理台', en: 'Agent Gallery' },
8
- agentsHeroTitle: {
9
- zh: '让每个 Agent 都像真正的协作者一样存在',
10
- en: 'Give every agent the presence of a real collaborator'
11
- },
12
- agentsHeroDescription: {
13
- zh: '在这里浏览、创建并切换不同的 Agent 身份。每个 Agent 都有自己的头像、名称、主目录,以及独立的记忆与技能空间。',
14
- en: 'Browse, create, and choose distinct agent identities. Every agent carries its own avatar, name, home directory, memory, and skills space.'
15
- },
16
- agentsCreateButton: { zh: '新增 Agent', en: 'New Agent' },
17
- agentsCreateDialogTitle: { zh: '创建新的 Agent 身份', en: 'Create a new agent identity' },
18
- agentsCreateDialogDescription: {
19
- zh: '默认逻辑保持简单。只填必要信息,其余能力继续走统一配置与主目录模板。',
20
- en: 'Keep the flow simple. Provide only the essentials and let shared defaults plus the home directory template do the rest.'
21
- },
22
- agentsCreateDialogHint: {
23
- zh: '如果你希望让 AI 自动完成全部自定义,也可以继续使用 `nextclaw agents new`。',
24
- en: 'If you want AI to automate the full setup, you can still use `nextclaw agents new`.'
25
- },
26
- agentsCreateTitle: { zh: '创建 Agent', en: 'Create Agent' },
27
- agentsCreateDescription: {
28
- zh: '这里提供轻量入口。完整自动化创建链路也可通过 `nextclaw agents new` 使用。',
29
- en: 'This is the lightweight UI entry. The full automation path is also available through `nextclaw agents new`.'
30
- },
31
- agentsFormIdPlaceholder: { zh: 'Agent ID,例如 engineer', en: 'Agent ID, for example engineer' },
32
- agentsFormNamePlaceholder: { zh: '显示名称,可选', en: 'Display name, optional' },
33
- agentsFormDescriptionPlaceholder: { zh: '角色描述,可选', en: 'Role description, optional' },
34
- agentsFormAvatarPlaceholder: { zh: '头像 URL 或本地路径,可选', en: 'Avatar URL or local path, optional' },
35
- agentsFormHomePlaceholder: { zh: '主目录,可选', en: 'Home Directory, optional' },
36
- agentsFormRuntimePlaceholder: { zh: 'Runtime(如 native 或 codex,可选)', en: 'Runtime (e.g. native or codex, optional)' },
37
- agentsRuntimeSelectPlaceholder: { zh: '选择 Runtime', en: 'Select runtime' },
38
- agentsRuntimeUnavailableHelp: {
39
- zh: '当前 Runtime 已不在可用列表中;建议改选一个已安装且可用的 Runtime。',
40
- en: 'This runtime is no longer available in the current list. Switch to an installed and available runtime.'
41
- },
42
- agentsCreateAction: { zh: '创建 Agent', en: 'Create Agent' },
43
- agentsEditAction: { zh: '编辑', en: 'Edit' },
44
- agentsEditDialogTitle: { zh: '编辑 Agent 身份', en: 'Edit agent identity' },
45
- agentsEditDialogDescription: {
46
- zh: '更新名称、角色描述与头像。Agent ID 与主目录保持稳定,避免影响既有记忆、技能与会话。',
47
- en: 'Update the name, role description, and avatar. The agent ID and home directory stay stable to protect existing memory, skills, and sessions.'
48
- },
49
- agentsEditHomeReadonly: { zh: '主目录保持不变', en: 'Home directory stays unchanged' },
50
- agentsEditHomeReadonlyHint: {
51
- zh: '如需迁移主目录,请走独立配置迁移流程,避免意外丢失 Agent 上下文。',
52
- en: 'Use a dedicated config migration flow to move the home directory and avoid losing agent context unexpectedly.'
53
- },
54
- agentsEditSaveAction: { zh: '保存编辑', en: 'Save edits' },
55
- agentsRemoveAction: { zh: '移除', en: 'Remove' },
56
- agentsNewChat: { zh: '新建会话', en: 'New Chat' },
57
- agentsLoading: { zh: '正在加载 Agent...', en: 'Loading agents...' },
58
- agentsEmpty: { zh: '当前还没有附加 Agent', en: 'No extra agents yet' },
59
- agentsEmptyDescription: {
60
- zh: '先创建第一个专职 Agent,让它拥有自己的名字、头像与主目录。',
61
- en: 'Create the first specialist agent with its own name, avatar, and home directory.'
62
- },
63
- agentsBuiltIn: { zh: '内建', en: 'Built-in' },
64
- agentsCustom: { zh: '自定义', en: 'Custom' },
65
- agentsOverviewTotal: { zh: '全部 Agent', en: 'Conversational agents' },
66
- agentsOverviewBuiltIn: { zh: '系统主 Agent', en: 'System main agents' },
67
- agentsOverviewCustom: { zh: '专职 Agent', en: 'Specialist agents' },
68
- agentsCardBuiltInSummary: {
69
- zh: '系统主 Agent,适合作为默认入口与总控协作者。',
70
- en: 'The built-in main agent, ideal as the default entry and coordinating collaborator.'
71
- },
72
- agentsCardCustomSummary: {
73
- zh: '专属 Agent 身份,可沉淀自己的记忆、技能与角色风格。',
74
- en: 'A dedicated identity with its own memory, skills, and role style.'
75
- },
76
- agentsCardRuntimeLabel: { zh: 'Runtime', en: 'Runtime' },
77
- agentsCardHomeLabel: { zh: '主目录', en: 'Home Directory' },
78
- agentsCardAvatarLabel: { zh: 'Avatar', en: 'Avatar' },
79
- agentsCardStartChat: { zh: '开始对话', en: 'Start Chat' },
80
- agentsCardBuiltInTag: { zh: '系统主', en: 'Main Agent' },
81
- agentsCardCustomTag: { zh: '专职', en: 'Specialist' },
82
- chatDraftAgentTitle: { zh: '本次会话 Agent', en: 'Draft agent' },
83
- chatDraftAgentDescription: { zh: '创建后不可切换', en: 'Locked after creation' },
84
- chatDraftAgentCurrent: { zh: '当前 Agent', en: 'Current Agent' }
85
- };
@@ -1,87 +0,0 @@
1
- export const CHANNEL_AUTH_LABELS: Record<string, { zh: string; en: string }> = {
2
- weixinAuthTitle: { zh: '扫码连接微信', en: 'Connect Weixin by QR' },
3
- weixinAuthDescription: { zh: '微信渠道现在以扫码连接为主流程。', en: 'Weixin now uses QR login as the primary setup flow.' },
4
- weixinAuthHint: {
5
- zh: '通常只需要点击按钮并扫码确认,连接成功后会自动写入配置。',
6
- en: 'In most cases you only need to start the flow, scan the QR code, and confirm on your phone. The config will be saved automatically.'
7
- },
8
- weixinAuthCapabilityHint: {
9
- zh: '连接成功后,Agent 可以通过微信渠道向已知微信用户主动发消息。',
10
- en: 'After connecting, the agent can proactively message known Weixin users through this channel.'
11
- },
12
- weixinAuthPrimaryAccount: { zh: '当前默认账号', en: 'Current default account' },
13
- weixinAuthConnectedAccounts: { zh: '已连接账号', en: 'Connected accounts' },
14
- weixinAuthBaseUrl: { zh: '当前接口地址', en: 'Current API base URL' },
15
- weixinAuthConnect: { zh: '扫码连接微信', en: 'Scan QR to connect Weixin' },
16
- weixinAuthReconnect: { zh: '重新扫码连接', en: 'Reconnect with QR' },
17
- weixinAuthStarting: { zh: '正在生成二维码...', en: 'Generating QR code...' },
18
- weixinAuthWaiting: { zh: '等待扫码确认', en: 'Waiting for scan confirmation' },
19
- weixinAuthScanned: { zh: '已扫码,等待确认', en: 'Scanned, waiting for confirmation' },
20
- weixinAuthAuthorized: { zh: '已连接', en: 'Connected' },
21
- weixinAuthConnectedDisabled: { zh: '已连接,但渠道未启用', en: 'Connected, but channel inactive' },
22
- weixinAuthNotConnected: { zh: '未连接', en: 'Not connected' },
23
- weixinAuthDisabledHint: {
24
- zh: '当前账号已完成扫码连接,但渠道处于未启用状态。打开 Enabled 后才会开始收发消息。',
25
- en: 'This account is connected, but the channel is inactive. Turn on Enabled before it can send or receive messages.'
26
- },
27
- weixinAuthRetryRequired: { zh: '二维码已失效,请重新扫码。', en: 'QR session expired. Please start again.' },
28
- weixinAuthQrAlt: { zh: '微信登录二维码', en: 'Weixin login QR code' },
29
- weixinAuthScanPrompt: { zh: '请用微信扫码,并在手机上确认登录。', en: 'Scan with Weixin and confirm the login on your phone.' },
30
- weixinAuthExpiresAt: { zh: '二维码过期时间', en: 'QR expires at' },
31
- weixinAuthOpenQr: { zh: '新窗口打开二维码', en: 'Open QR code in new tab' },
32
- weixinAuthReadyTitle: { zh: '准备连接微信', en: 'Ready to connect Weixin' },
33
- weixinAuthReadyDescription: {
34
- zh: '点击左侧按钮后,这里会显示二维码。整个首配流程默认不需要手动填写底层参数。',
35
- en: 'After you start the flow, the QR code will appear here. Most first-time setups do not require filling low-level fields manually.'
36
- },
37
- weixinAuthAdvancedTitle: { zh: '高级设置', en: 'Advanced settings' },
38
- weixinAuthAdvancedDescription: {
39
- zh: '仅在你需要自定义接口地址、账号映射或白名单时再展开这些字段。',
40
- en: 'Expand these fields only when you need to customize the API base URL, account mapping, or allowlist.'
41
- },
42
- feishuAuthTitle: { zh: '扫码连接飞书', en: 'Connect Feishu by QR' },
43
- feishuAuthCreateNew: { zh: '创建新智能体', en: 'Create new agent' },
44
- feishuAuthConnectExisting: { zh: '连接已有智能体', en: 'Connect existing agent' },
45
- feishuAuthDescription: { zh: '飞书渠道使用扫码创建新的智能体,不再要求手动复制应用凭证。', en: 'Feishu can create a new agent by QR, so you no longer need to copy app credentials manually.' },
46
- feishuAuthHint: {
47
- zh: '点击按钮后用飞书扫码确认,连接成功后会自动保存新智能体凭证并启用 WebSocket 收发。',
48
- en: 'Start the flow, scan with Feishu, and the new agent credentials will be saved automatically for WebSocket messaging.'
49
- },
50
- feishuAuthCapabilityHint: {
51
- zh: '连接成功后,Agent 可以通过飞书自建应用收发私聊和群聊消息。',
52
- en: 'After connecting, the agent can send and receive Feishu direct and group messages through the registered app.'
53
- },
54
- feishuAuthDisabledHint: {
55
- zh: '当前飞书应用已完成扫码连接,但渠道处于未启用状态。打开 Enabled 后才会开始收发消息。',
56
- en: 'This Feishu app is connected, but the channel is inactive. Turn on Enabled before it can send or receive messages.'
57
- },
58
- feishuAuthConnect: { zh: '扫码连接飞书', en: 'Scan QR to connect Feishu' },
59
- feishuAuthQrAlt: { zh: '飞书智能体创建二维码', en: 'Feishu agent creation QR code' },
60
- feishuAuthScanPrompt: { zh: '请用飞书扫码,并按页面提示完成智能体创建授权。', en: 'Scan with Feishu and follow the prompts to finish agent creation.' },
61
- feishuAuthReadyTitle: { zh: '准备连接飞书', en: 'Ready to connect Feishu' },
62
- feishuAuthReadyDescription: {
63
- zh: '点击左侧按钮后,这里会显示智能体创建二维码。已有智能体请切换到连接入口。',
64
- en: 'After you start the flow, the agent creation QR code will appear here. Use the existing-agent tab when you already have one.'
65
- },
66
- feishuAuthAdvancedTitle: { zh: '高级设置', en: 'Advanced settings' },
67
- feishuAuthAdvancedDescription: {
68
- zh: '仅在你需要切换 Feishu/Lark 域名、指定默认账号、白名单或群聊策略时再展开这些字段。',
69
- en: 'Expand these fields only when you need to switch Feishu/Lark domains, choose a default account, or adjust allowlist and group policies.'
70
- },
71
- feishuAuthDomain: {
72
- zh: '飞书平台',
73
- en: 'Feishu platform'
74
- },
75
- feishuPlatform: { zh: '平台', en: 'Platform' },
76
- feishuExistingAgentTitle: { zh: '连接已有飞书智能体', en: 'Connect an existing Feishu agent' },
77
- feishuExistingAgentDescription: { zh: '填入已有智能体的 App ID 和 App Secret。', en: 'Enter the App ID and App Secret for an existing agent.' },
78
- feishuExistingAgentHint: {
79
- zh: '在飞书开放平台选择已有智能体,进入基础信息里的凭证与基础信息,然后复制凭证回来验证。',
80
- en: 'Open the developer console, choose an existing agent, then copy the credentials from its basic information page.'
81
- },
82
- feishuExistingAgentOpenFeishuList: { zh: '打开飞书智能体列表', en: 'Open Feishu agent list' },
83
- feishuExistingAgentOpenLarkList: { zh: '打开 Lark 智能体列表', en: 'Open Lark agent list' },
84
- feishuExistingAgentConnect: { zh: '验证并连接', en: 'Verify and connect' },
85
- feishuExistingAgentConnecting: { zh: '正在验证', en: 'Verifying' },
86
- feishuExistingAgentConnectSuccess: { zh: '飞书智能体已连接', en: 'Feishu agent connected' }
87
- };
@@ -1,53 +0,0 @@
1
- export const CHANNEL_LABELS: Record<string, { zh: string; en: string }> = {
2
- channelsPageTitle: { zh: '消息渠道', en: 'Message Channels' },
3
- channelsPageDescription: {
4
- zh: '在一个页面中连续筛选、切换并配置各个消息渠道。',
5
- en: 'Filter, switch, and configure messaging channels in one continuous workspace.'
6
- },
7
- channelsLoading: { zh: '加载渠道中...', en: 'Loading channels...' },
8
- channelsTabEnabled: { zh: '已启用', en: 'Enabled' },
9
- channelsTabAll: { zh: '全部渠道', en: 'All Channels' },
10
- channelsFilterPlaceholder: { zh: '搜索渠道', en: 'Search channels' },
11
- channelsNoMatch: { zh: '没有匹配的渠道', en: 'No matching channels' },
12
- channelsSelectTitle: { zh: '选择左侧渠道开始配置', en: 'Select a channel from the left to configure' },
13
- channelsSelectDescription: { zh: '你可以连续切换多个渠道并逐个保存配置。', en: 'Switch between channels continuously and save each configuration.' },
14
- channelsFormDescription: { zh: '配置消息渠道参数', en: 'Configure message channel parameters' },
15
- channelsEmptyTitle: { zh: '暂无启用渠道', en: 'No channels enabled' },
16
- channelsEmptyDescription: { zh: '启用一个消息渠道以开始接收消息。', en: 'Enable a messaging channel to start receiving messages.' },
17
- channelDescriptionDefault: { zh: '配置该通信渠道', en: 'Configure this communication channel' },
18
- channelDescTelegram: { zh: '连接 Telegram 机器人以进行即时消息收发', en: 'Connect with Telegram bots for instant messaging' },
19
- channelDescSlack: { zh: '接入 Slack 工作区进行团队协作消息处理', en: 'Integrate with Slack workspaces for team collaboration' },
20
- channelDescEmail: { zh: '通过邮件协议收发消息', en: 'Send and receive messages via email protocols' },
21
- channelDescWebhook: { zh: '接收 HTTP Webhook 以支持自定义集成', en: 'Receive HTTP webhooks for custom integrations' },
22
- channelDescDiscord: { zh: '将 Discord 机器人连接到你的社区服务器', en: 'Connect Discord bots to your community servers' },
23
- channelDescFeishu: { zh: '企业消息与协作平台接入', en: 'Enterprise messaging and collaboration platform' },
24
- channelDescWeixin: { zh: '通过微信扫码登录并使用长轮询收发个人微信消息', en: 'Use QR login and long-poll updates for personal Weixin messaging' },
25
- configureMessageChannelParameters: { zh: '配置消息渠道参数', en: 'Configure message channel parameters' },
26
- channelsGuideTitle: { zh: '查看指南', en: 'View Guide' },
27
- allowFrom: { zh: '允许来源', en: 'Allow From' },
28
- token: { zh: 'Token', en: 'Token' },
29
- botToken: { zh: 'Bot Token', en: 'Bot Token' },
30
- appToken: { zh: 'App Token', en: 'App Token' },
31
- appId: { zh: 'App ID', en: 'App ID' },
32
- domain: { zh: '域名', en: 'Domain' },
33
- corpId: { zh: '企业 ID', en: 'Corp ID' },
34
- agentId: { zh: '应用 Agent ID', en: 'Agent ID' },
35
- appSecret: { zh: 'App Secret', en: 'App Secret' },
36
- markdownSupport: { zh: 'Markdown 支持', en: 'Markdown Support' },
37
- clientId: { zh: 'Client ID', en: 'Client ID' },
38
- clientSecret: { zh: 'Client Secret', en: 'Client Secret' },
39
- encryptKey: { zh: '加密密钥', en: 'Encrypt Key' },
40
- verificationToken: { zh: '验证令牌', en: 'Verification Token' },
41
- bridgeUrl: { zh: '桥接 URL', en: 'Bridge URL' },
42
- gatewayUrl: { zh: '网关 URL', en: 'Gateway URL' },
43
- proxy: { zh: '代理', en: 'Proxy' },
44
- intents: { zh: 'Intents', en: 'Intents' },
45
- mode: { zh: '模式', en: 'Mode' },
46
- webhookPath: { zh: 'Webhook 路径', en: 'Webhook Path' },
47
- callbackPort: { zh: '回调端口', en: 'Callback Port' },
48
- callbackPath: { zh: '回调路径', en: 'Callback Path' },
49
- defaultAccountId: { zh: '默认账号 ID', en: 'Default Account ID' },
50
- pollTimeoutMs: { zh: '长轮询超时(毫秒)', en: 'Long Poll Timeout (ms)' },
51
- accountsJson: { zh: '账号配置 JSON', en: 'Accounts JSON' },
52
- groupPolicy: { zh: '群组策略', en: 'Group Policy' }
53
- };