@bigduu/lotus-next 2026.9.13 → 2026.9.16

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 (24) hide show
  1. package/README.md +36 -7
  2. package/dist/asset-manifest.json +39 -39
  3. package/dist/assets/{CodeBlock-dYUQ9iue.js → CodeBlock-BD0dxoK1.js} +1 -1
  4. package/dist/assets/{Markdown-DBG0vWxL.js → Markdown-DBgPZQmh.js} +2 -2
  5. package/dist/assets/{MermaidChart-U1Z5JCRh.js → MermaidChart-DQmhZUGR.js} +1 -1
  6. package/dist/assets/Root-BEo2vkPq.js +7 -0
  7. package/dist/assets/{Settings-BcsRaEDP.js → Settings-B5mbtM74.js} +1 -1
  8. package/dist/assets/{StreamdownMarkdown-CiLy0KJD.js → StreamdownMarkdown-CNZkpiH5.js} +2 -2
  9. package/dist/assets/{StreamdownMermaid-J7jSRtO6.js → StreamdownMermaid-I-FMxv6d.js} +1 -1
  10. package/dist/assets/html2canvas-0VX6Q4F2.js +1 -0
  11. package/dist/assets/{index-CjY6eMv8.js → index-CetaXSQl.js} +2 -2
  12. package/dist/assets/{renderPdf-DbvJnEQL.js → renderPdf-BHOiVXVS.js} +3 -3
  13. package/dist/assets/{select-DYBAIyVx.js → select-BQoctDKH.js} +21 -21
  14. package/dist/assets/{strictConfig-Bf8nyKvx.js → strictConfig-DWxLgSCr.js} +1 -1
  15. package/dist/assets/{vendor-highlighter-ClvlgmIK.js → vendor-highlighter-BcgzBkPn.js} +1 -1
  16. package/dist/assets/{vendor-mermaid-Da_wWrs4.js → vendor-mermaid-CLYBA7Ke.js} +1 -1
  17. package/dist/assets/{vendor-streamdown-BIRX7zKm.js → vendor-streamdown-BLuMYZXO.js} +1 -1
  18. package/dist/assets/{vendor-streamdown-code-B6SuuZwa.js → vendor-streamdown-code-DslGaU_r.js} +1 -1
  19. package/dist/bundle-ownership.json +16 -16
  20. package/dist/index.html +1 -1
  21. package/dist/lotus-next-manifest.json +40 -40
  22. package/package.json +2 -1
  23. package/dist/assets/Root-dWsRRTlH.js +0 -7
  24. package/dist/assets/html2canvas-ChX2ETZ3.js +0 -1
@@ -1,4 +1,4 @@
1
- import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,t as n}from"./vendor-react-CCIEwYL0.js";import{n as r}from"./index-CjY6eMv8.js";import{f as i,i as a,l as o,r as s}from"./ErrorBoundary-DLCRl4Er.js";import{$t as c,A as l,Bt as u,Ct as d,D as f,Dt as p,E as m,Et as h,F as g,Gt as _,Ht as v,I as y,Jt as b,Kt as x,Lt as S,M as C,Mt as w,N as T,O as E,Ot as D,P as O,Q as k,Qt as A,Rt as j,S as M,T as N,Tt as P,Ut as F,Vt as ee,Wt as I,Xt as L,Yt as te,Zt as R,_t as ne,a as z,b as re,c as ie,dt as ae,et as oe,ft as se,gt as ce,h as le,ht as ue,i as de,j as fe,k as pe,kt as me,l as he,mt as ge,n as _e,nt as ve,o as ye,pt as B,qt as be,r as V,rt as xe,s as H,st as Se,t as Ce,v as we,w as Te,wt as U,x as Ee,y as De,yt as W,zt as Oe}from"./select-DYBAIyVx.js";var ke=i(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Ae=i(`history`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}],[`path`,{d:`M12 7v5l4 2`,key:`1fdv2h`}]]),je=i(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]),Me=i(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),Ne=i(`rotate-cw`,[[`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`}]]),Pe=i(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]),G=e(t(),1),Fe=`lotus_experience_mode_v1`,Ie=new Set([`skills`,`env`,`masking`,`clusters`,`metrics`,`jiandu`]);function Le(){try{let e=localStorage.getItem(Fe);if(e===`simple`||e===`advanced`)return e}catch{}return`advanced`}var K=Oe(e=>({mode:Le(),isAdvanced:Le()===`advanced`,setMode:t=>{try{localStorage.setItem(Fe,t)}catch{}e({mode:t,isAdvanced:t===`advanced`})},toggleMode:()=>e(e=>{let t=e.mode===`simple`?`advanced`:`simple`;try{localStorage.setItem(Fe,t)}catch{}return{mode:t,isAdvanced:t===`advanced`}})})),Re=e=>{let t=new URLSearchParams;Object.entries(e).forEach(([e,n])=>{n===void 0||n===``||t.set(e,String(n))});let n=t.toString();return n?`?${n}`:``},ze=new class{async getSummary(e={}){let t=Re({start_date:e.startDate,end_date:e.endDate});return w.get(`metrics/summary${t}`)}async getByModel(e={}){let t=Re({start_date:e.startDate,end_date:e.endDate});return w.get(`metrics/by-model${t}`)}async getSessions(e={}){let t=Re({start_date:e.startDate,end_date:e.endDate,model:e.model,limit:e.limit});return w.get(`metrics/sessions${t}`)}async getSessionDetail(e){try{return await w.get(`metrics/sessions/${encodeURIComponent(e)}`)}catch(e){if(e instanceof Error&&e.message.includes(`not found`))return null;throw e}}async getUsageBreakdown(e={}){let t=Re({start_date:e.startDate,end_date:e.endDate,model:e.model});return w.get(`metrics/usage-breakdown${t}`)}async getDaily(e={}){let t=Re({days:e.days,end_date:e.endDate,granularity:e.granularity});return w.get(`metrics/daily${t}`)}async getForwardSummary(e={}){let t=Re({start_date:e.startDate,end_date:e.endDate,endpoint:e.endpoint,model:e.model,limit:e.limit});return w.get(`metrics/forward/summary${t}`)}async getForwardByEndpoint(e={}){let t=Re({start_date:e.startDate,end_date:e.endDate,endpoint:e.endpoint,model:e.model,limit:e.limit});return w.get(`metrics/forward/by-endpoint${t}`)}async getForwardRequests(e={}){let t=Re({start_date:e.startDate,end_date:e.endDate,endpoint:e.endpoint,model:e.model,limit:e.limit});return w.get(`metrics/forward/requests${t}`)}async getMemorySummary(e={}){let t=Re({scope:e.scope,project_key:e.projectKey});return w.get(`metrics/memory/summary${t}`)}async getMemoryTimeline(e={}){let t=Re({scope:e.scope,project_key:e.projectKey,days:e.days,end_date:e.endDate,granularity:e.granularity});return w.get(`metrics/memory/timeline${t}`)}async getUnifiedSummary(e={}){let t=Re({start_date:e.startDate,end_date:e.endDate});return w.get(`metrics/v2/summary${t}`)}async getUnifiedTimeline(e={}){let t=Re({days:e.days,end_date:e.endDate,granularity:e.granularity});return w.get(`metrics/v2/timeline${t}`)}},q=n(),Be=`Switch`,[Ve,He]=ve(Be),[Ue,We]=Ve(Be);function Ge(e){let{__scopeSwitch:t,checked:n,children:r,defaultChecked:i,disabled:a,form:o,name:s,onCheckedChange:c,required:l,value:u=`on`,internal_do_not_use_render:d}=e,[f,p]=oe({prop:n,defaultProp:i??!1,onChange:c,caller:Be}),[m,h]=G.useState(null),[g,_]=G.useState(null),v={checked:f,setChecked:p,disabled:a,control:m,setControl:h,name:s,form:o,value:u,hasConsumerStoppedPropagationRef:G.useRef(!1),required:l,defaultChecked:i,isFormControl:m?!!o||!!m.closest(`form`):!0,bubbleInput:g,setBubbleInput:_};return(0,q.jsx)(Ue,{scope:t,...v,children:$e(d)?d(v):r})}var Ke=`SwitchTrigger`,qe=G.forwardRef(({__scopeSwitch:e,onClick:t,...n},r)=>{let{value:i,disabled:a,checked:s,required:c,setControl:l,setChecked:u,hasConsumerStoppedPropagationRef:d,isFormControl:f,bubbleInput:p}=We(Ke,e),m=o(r,l);return(0,q.jsx)(k.button,{type:`button`,role:`switch`,"aria-checked":s,"aria-required":c,"data-state":et(s),"data-disabled":a?``:void 0,disabled:a,value:i,...n,ref:m,onClick:xe(t,e=>{u(e=>!e),p&&f&&(d.current=e.isPropagationStopped(),d.current||e.stopPropagation())})})});qe.displayName=Ke;var Je=G.forwardRef((e,t)=>{let{__scopeSwitch:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:c,onCheckedChange:l,form:u,...d}=e;return(0,q.jsx)(Ge,{__scopeSwitch:n,checked:i,defaultChecked:a,disabled:s,required:o,onCheckedChange:l,name:r,form:u,value:c,internal_do_not_use_render:({isFormControl:e})=>(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(qe,{...d,ref:t,__scopeSwitch:n}),e&&(0,q.jsx)(Qe,{__scopeSwitch:n})]})})});Je.displayName=Be;var Ye=`SwitchThumb`,Xe=G.forwardRef((e,t)=>{let{__scopeSwitch:n,...r}=e,i=We(Ye,n);return(0,q.jsx)(k.span,{"data-state":et(i.checked),"data-disabled":i.disabled?``:void 0,...r,ref:t})});Xe.displayName=Ye;var Ze=`SwitchBubbleInput`,Qe=G.forwardRef(({__scopeSwitch:e,...t},n)=>{let{control:r,hasConsumerStoppedPropagationRef:i,checked:a,defaultChecked:s,required:c,disabled:l,name:u,value:d,form:f,bubbleInput:p,setBubbleInput:m}=We(Ze,e),h=o(n,m),g=ye(a),_=le(r);G.useEffect(()=>{let e=p;if(!e)return;let t=window.HTMLInputElement.prototype,n=Object.getOwnPropertyDescriptor(t,`checked`).set,r=!i.current;if(g!==a&&n){let t=new Event(`click`,{bubbles:r});n.call(e,a),e.dispatchEvent(t)}},[p,g,a,i]);let v=G.useRef(a);return(0,q.jsx)(k.input,{type:`checkbox`,"aria-hidden":!0,defaultChecked:s??v.current,required:c,disabled:l,name:u,value:d,form:f,...t,tabIndex:-1,ref:h,style:{...t.style,..._,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0,transform:`translateX(-100%)`}})});Qe.displayName=Ze;function $e(e){return typeof e==`function`}function et(e){return e?`checked`:`unchecked`}function J({className:e,...t}){return(0,q.jsx)(Je,{"data-slot":`switch`,className:a(`peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50`,e),...t,children:(0,q.jsx)(Xe,{"data-slot":`switch-thumb`,className:a(`bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0`)})})}var tt=e=>typeof e==`string`&&e.trim().length>0&&[...e.trim()].every(e=>e===`*`||e===`.`),nt=[{id:`deepseek`,label:`DeepSeek`,provider_type:`openai`,base_url:`https://api.deepseek.com/v1`,suggested_models:[`deepseek-chat`,`deepseek-reasoner`]},{id:`deepseek-anthropic`,label:`DeepSeek (Anthropic 协议)`,provider_type:`anthropic`,base_url:`https://api.deepseek.com/anthropic`,suggested_models:[`deepseek-chat`,`deepseek-reasoner`]},{id:`zhipu`,label:`智谱 GLM (bigmodel.cn)`,provider_type:`openai`,base_url:`https://open.bigmodel.cn/api/paas/v4`,suggested_models:[`glm-5.2`],note:`Coding Plan 套餐需改用 https://open.bigmodel.cn/api/coding/paas/v4`},{id:`zhipu-anthropic`,label:`智谱 GLM (Anthropic 协议)`,provider_type:`anthropic`,base_url:`https://open.bigmodel.cn/api/anthropic`,suggested_models:[`glm-5.2`]},{id:`zai`,label:`Z.ai (国际版)`,provider_type:`openai`,base_url:`https://api.z.ai/api/paas/v4`,suggested_models:[`glm-5.2`],note:`Coding Plan 套餐需改用 https://api.z.ai/api/coding/paas/v4`},{id:`minimax`,label:`MiniMax (国际版)`,provider_type:`openai`,base_url:`https://api.minimax.io/v1`,suggested_models:[`MiniMax-M3`]},{id:`minimax-cn`,label:`MiniMax (国内版)`,provider_type:`openai`,base_url:`https://api.minimaxi.com/v1`,suggested_models:[`MiniMax-M3`]},{id:`qwen`,label:`通义千问 (DashScope)`,provider_type:`openai`,base_url:`https://dashscope.aliyuncs.com/compatible-mode/v1`,suggested_models:[`qwen-plus`],note:`阿里云推荐迁移至业务空间专属域名,旧公共域名当前仍可用`},{id:`kimi`,label:`Kimi (Moonshot)`,provider_type:`openai`,base_url:`https://api.moonshot.cn/v1`,suggested_models:[`kimi-k2.6`,`kimi-k2.7-code`]}];function rt(e){let t=Math.floor(e/60),n=e%60;return`${t}:${String(n).padStart(2,`0`)}`}function it(){let[e,t]=(0,G.useState)(`unknown`),[n,r]=(0,G.useState)(!1),[i,a]=(0,G.useState)(null),[o,c]=(0,G.useState)(0),[l,u]=(0,G.useState)(!1),[d,f]=(0,G.useState)(!1),[p,m]=(0,G.useState)(null),h=(0,G.useCallback)(async()=>{r(!0);try{t((await D.getCopilotAuthStatus()).authenticated?`authenticated`:`not_authenticated`),m(null)}catch(e){t(`unknown`),m(S(e))}finally{r(!1)}},[]);(0,G.useEffect)(()=>{h()},[h]),(0,G.useEffect)(()=>{if(!i)return;c(i.expires_in);let e=setInterval(()=>c(e=>e>0?e-1:0),1e3);return()=>clearInterval(e)},[i]);let g=async()=>{u(!0),m(null);try{let e=await D.startCopilotAuth();a(e);try{window.open(e.verification_uri,`_blank`,`noopener`)}catch{}await D.completeCopilotAuth({device_code:e.device_code,interval:e.interval??5,expires_in:e.expires_in}),t(`authenticated`)}catch(e){m(S(e)),h()}finally{a(null),u(!1)}},_=async()=>{m(null);try{await D.logoutCopilot(),t(`not_authenticated`)}catch(e){m(S(e))}},v=async()=>{if(i)try{await navigator.clipboard.writeText(i.user_code),f(!0),setTimeout(()=>f(!1),2e3)}catch{m(`复制失败,请手动选择代码复制`)}};return(0,q.jsxs)(`div`,{className:`space-y-2 rounded-md border bg-muted/30 p-2.5`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,q.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground`,children:`Copilot 授权`}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[e===`authenticated`?(0,q.jsx)(H,{className:`bg-emerald-500/15 text-emerald-600 dark:text-emerald-400`,variant:`secondary`,children:`已登录`}):e===`not_authenticated`?(0,q.jsx)(H,{variant:`secondary`,children:`未登录`}):(0,q.jsx)(H,{variant:`outline`,children:`未知`}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>void h(),"aria-label":`刷新状态`,className:`rounded p-1 text-muted-foreground hover:text-foreground`,disabled:n,children:(0,q.jsx)(Me,{className:n?`size-3.5 animate-spin`:`size-3.5`})})]})]}),i?(0,q.jsxs)(`div`,{className:`space-y-1.5 text-sm`,children:[(0,q.jsxs)(`p`,{children:[`打开`,` `,(0,q.jsx)(`a`,{href:i.verification_uri,target:`_blank`,rel:`noopener noreferrer`,className:`text-primary underline`,children:i.verification_uri}),` `,`并输入代码:`]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(`span`,{className:`font-mono text-base font-semibold tracking-wider`,children:i.user_code}),(0,q.jsxs)(s,{size:`sm`,variant:`secondary`,className:`h-7 px-2`,onClick:()=>void v(),children:[d?(0,q.jsx)(R,{className:`size-3.5 text-emerald-500`}):(0,q.jsx)(b,{className:`size-3.5`}),d?`已复制`:`复制`]})]}),(0,q.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[o>0?`代码有效期剩余 ${rt(o)}`:`代码已过期,请重新登录`,o>0?` · 授权后这里会自动完成…`:``]})]}):e===`authenticated`?(0,q.jsxs)(`div`,{className:`flex items-center justify-between text-sm`,children:[(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`GitHub Copilot 账号已连接`}),(0,q.jsx)(s,{size:`sm`,variant:`secondary`,onClick:()=>void _(),children:`退出`})]}):(0,q.jsx)(s,{size:`sm`,onClick:()=>void g(),disabled:l,children:l?`登录中…`:`登录 GitHub Copilot`}),p?(0,q.jsx)(`p`,{className:`text-xs text-destructive`,children:p}):null]})}function at({label:e,value:t,onChange:n,models:r=[],placeholder:i,disabled:o=!1,hideLabel:s=!1}){let c=(0,G.useRef)(null),l=(0,G.useId)(),u=(0,G.useId)(),[d,f]=(0,G.useState)(!1),[p,m]=(0,G.useState)(-1),h=(0,G.useMemo)(()=>{let e=new Map;for(let t of r){let n=t.reference.model.trim();n&&!e.has(n)&&e.set(n,t)}return[...e.values()]},[r]),g=(0,G.useMemo)(()=>{let e=t.trim().toLocaleLowerCase();if(!e)return h;let n=h.filter(t=>{let n=t.reference.model.toLocaleLowerCase(),r=t.display_name.toLocaleLowerCase();return n.includes(e)||r.includes(e)});return n.length>0?n:h},[h,t]),_=d&&g.length>0;(0,G.useEffect)(()=>{!_||p<0||document.getElementById(`${l}-option-${p}`)?.scrollIntoView?.({block:`nearest`})},[p,l,_]);let v=e=>{n(e),f(!1),m(-1),c.current?.focus()},y=e=>{g.length!==0&&(f(!0),m(t=>t<0?e===1?0:g.length-1:(t+e+g.length)%g.length))};return(0,q.jsxs)(`div`,{className:`relative`,onBlur:e=>{e.currentTarget.contains(e.relatedTarget)||(f(!1),m(-1))},children:[(0,q.jsx)(`span`,{id:u,className:a(s?`sr-only`:`mb-1 block text-xs text-muted-foreground`),children:e}),(0,q.jsxs)(`div`,{className:`relative`,children:[(0,q.jsx)(C,{ref:c,role:`combobox`,"aria-labelledby":u,"aria-autocomplete":`list`,"aria-controls":l,"aria-expanded":_,"aria-activedescendant":_&&p>=0?`${l}-option-${p}`:void 0,autoComplete:`off`,value:t,placeholder:i,disabled:o,className:a(h.length>0&&`pr-9`),onFocus:()=>f(h.length>0),onChange:e=>{n(e.target.value),f(h.length>0),m(-1)},onKeyDown:e=>{if(e.key===`ArrowDown`)e.preventDefault(),y(1);else if(e.key===`ArrowUp`)e.preventDefault(),y(-1);else if(e.key===`Enter`&&_&&p>=0){e.preventDefault();let t=g[p];t&&v(t.reference.model)}else e.key===`Escape`&&d&&(e.preventDefault(),e.stopPropagation(),f(!1),m(-1))}}),h.length>0?(0,q.jsx)(`button`,{type:`button`,"aria-label":`展开${e}选项`,tabIndex:-1,disabled:o,className:`absolute inset-y-0 right-0 flex w-9 items-center justify-center text-muted-foreground disabled:opacity-50`,onMouseDown:e=>e.preventDefault(),onClick:()=>{f(e=>!e),m(-1),c.current?.focus()},children:(0,q.jsx)(L,{className:`size-4`})}):null]}),_?(0,q.jsx)(`div`,{id:l,role:`listbox`,"aria-labelledby":u,className:`absolute inset-x-0 top-full z-[140] mt-1 max-h-52 overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md`,children:g.map((e,n)=>{let r=e.reference.model,i=r===t;return(0,q.jsxs)(`button`,{id:`${l}-option-${n}`,type:`button`,role:`option`,"aria-selected":i,className:a(`flex w-full items-start gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none`,n===p&&`bg-accent text-accent-foreground`),onMouseDown:e=>e.preventDefault(),onMouseEnter:()=>m(n),onClick:()=>v(r),children:[(0,q.jsx)(R,{className:a(`mt-0.5 size-3.5 shrink-0`,i?`opacity-100`:`opacity-0`)}),(0,q.jsxs)(`span`,{className:`min-w-0`,children:[(0,q.jsx)(`span`,{className:`block truncate`,children:r}),e.display_name&&e.display_name!==r?(0,q.jsx)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:e.display_name}):null]})]},r)})}):null]})}var ot=[`anthropic`,`openai`,`gemini`,`copilot`,`bodhi`],st=[`low`,`medium`,`high`,`xhigh`,`max`],ct=`__unset__`,lt={anthropic:`sk-ant-…`,openai:`sk-…`,gemini:`AIza…`,copilot:``,bodhi:`bhi_sk_…`},ut=e=>typeof e==`string`?e:e==null?``:String(e);function dt(e){let t=e?.config??{};return{type:e?.type??`anthropic`,label:e?.label??``,enabled:e?.enabled??!0,apiKey:tt(t.api_key)?``:ut(t.api_key),baseUrl:ut(t.base_url),model:ut(t.model),reasoningEffort:ut(t.reasoning_effort),responsesOnlyModels:Array.isArray(t.responses_only_models)?t.responses_only_models.map(ut).filter(Boolean).join(`
1
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,t as n}from"./vendor-react-CCIEwYL0.js";import{n as r}from"./index-CetaXSQl.js";import{f as i,i as a,l as o,r as s}from"./ErrorBoundary-DLCRl4Er.js";import{$t as c,A as l,Bt as u,Ct as d,D as f,Dt as p,E as m,Et as h,F as g,Gt as _,Ht as v,I as y,Jt as b,Kt as x,Lt as S,M as C,Mt as w,N as T,O as E,Ot as D,P as O,Q as k,Qt as A,Rt as j,S as M,T as N,Tt as P,Ut as F,Vt as ee,Wt as I,Xt as L,Yt as te,Zt as R,_t as ne,a as z,b as re,c as ie,dt as ae,et as oe,ft as se,gt as ce,h as le,ht as ue,i as de,j as fe,k as pe,kt as me,l as he,mt as ge,n as _e,nt as ve,o as ye,pt as B,qt as be,r as V,rt as xe,s as H,st as Se,t as Ce,v as we,w as Te,wt as U,x as Ee,y as De,yt as W,zt as Oe}from"./select-BQoctDKH.js";var ke=i(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Ae=i(`history`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}],[`path`,{d:`M12 7v5l4 2`,key:`1fdv2h`}]]),je=i(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]),Me=i(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),Ne=i(`rotate-cw`,[[`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`}]]),Pe=i(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]),G=e(t(),1),Fe=`lotus_experience_mode_v1`,Ie=new Set([`skills`,`env`,`masking`,`clusters`,`metrics`,`jiandu`]);function Le(){try{let e=localStorage.getItem(Fe);if(e===`simple`||e===`advanced`)return e}catch{}return`advanced`}var K=Oe(e=>({mode:Le(),isAdvanced:Le()===`advanced`,setMode:t=>{try{localStorage.setItem(Fe,t)}catch{}e({mode:t,isAdvanced:t===`advanced`})},toggleMode:()=>e(e=>{let t=e.mode===`simple`?`advanced`:`simple`;try{localStorage.setItem(Fe,t)}catch{}return{mode:t,isAdvanced:t===`advanced`}})})),Re=e=>{let t=new URLSearchParams;Object.entries(e).forEach(([e,n])=>{n===void 0||n===``||t.set(e,String(n))});let n=t.toString();return n?`?${n}`:``},ze=new class{async getSummary(e={}){let t=Re({start_date:e.startDate,end_date:e.endDate});return w.get(`metrics/summary${t}`)}async getByModel(e={}){let t=Re({start_date:e.startDate,end_date:e.endDate});return w.get(`metrics/by-model${t}`)}async getSessions(e={}){let t=Re({start_date:e.startDate,end_date:e.endDate,model:e.model,limit:e.limit});return w.get(`metrics/sessions${t}`)}async getSessionDetail(e){try{return await w.get(`metrics/sessions/${encodeURIComponent(e)}`)}catch(e){if(e instanceof Error&&e.message.includes(`not found`))return null;throw e}}async getUsageBreakdown(e={}){let t=Re({start_date:e.startDate,end_date:e.endDate,model:e.model});return w.get(`metrics/usage-breakdown${t}`)}async getDaily(e={}){let t=Re({days:e.days,end_date:e.endDate,granularity:e.granularity});return w.get(`metrics/daily${t}`)}async getForwardSummary(e={}){let t=Re({start_date:e.startDate,end_date:e.endDate,endpoint:e.endpoint,model:e.model,limit:e.limit});return w.get(`metrics/forward/summary${t}`)}async getForwardByEndpoint(e={}){let t=Re({start_date:e.startDate,end_date:e.endDate,endpoint:e.endpoint,model:e.model,limit:e.limit});return w.get(`metrics/forward/by-endpoint${t}`)}async getForwardRequests(e={}){let t=Re({start_date:e.startDate,end_date:e.endDate,endpoint:e.endpoint,model:e.model,limit:e.limit});return w.get(`metrics/forward/requests${t}`)}async getMemorySummary(e={}){let t=Re({scope:e.scope,project_key:e.projectKey});return w.get(`metrics/memory/summary${t}`)}async getMemoryTimeline(e={}){let t=Re({scope:e.scope,project_key:e.projectKey,days:e.days,end_date:e.endDate,granularity:e.granularity});return w.get(`metrics/memory/timeline${t}`)}async getUnifiedSummary(e={}){let t=Re({start_date:e.startDate,end_date:e.endDate});return w.get(`metrics/v2/summary${t}`)}async getUnifiedTimeline(e={}){let t=Re({days:e.days,end_date:e.endDate,granularity:e.granularity});return w.get(`metrics/v2/timeline${t}`)}},q=n(),Be=`Switch`,[Ve,He]=ve(Be),[Ue,We]=Ve(Be);function Ge(e){let{__scopeSwitch:t,checked:n,children:r,defaultChecked:i,disabled:a,form:o,name:s,onCheckedChange:c,required:l,value:u=`on`,internal_do_not_use_render:d}=e,[f,p]=oe({prop:n,defaultProp:i??!1,onChange:c,caller:Be}),[m,h]=G.useState(null),[g,_]=G.useState(null),v={checked:f,setChecked:p,disabled:a,control:m,setControl:h,name:s,form:o,value:u,hasConsumerStoppedPropagationRef:G.useRef(!1),required:l,defaultChecked:i,isFormControl:m?!!o||!!m.closest(`form`):!0,bubbleInput:g,setBubbleInput:_};return(0,q.jsx)(Ue,{scope:t,...v,children:$e(d)?d(v):r})}var Ke=`SwitchTrigger`,qe=G.forwardRef(({__scopeSwitch:e,onClick:t,...n},r)=>{let{value:i,disabled:a,checked:s,required:c,setControl:l,setChecked:u,hasConsumerStoppedPropagationRef:d,isFormControl:f,bubbleInput:p}=We(Ke,e),m=o(r,l);return(0,q.jsx)(k.button,{type:`button`,role:`switch`,"aria-checked":s,"aria-required":c,"data-state":et(s),"data-disabled":a?``:void 0,disabled:a,value:i,...n,ref:m,onClick:xe(t,e=>{u(e=>!e),p&&f&&(d.current=e.isPropagationStopped(),d.current||e.stopPropagation())})})});qe.displayName=Ke;var Je=G.forwardRef((e,t)=>{let{__scopeSwitch:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:c,onCheckedChange:l,form:u,...d}=e;return(0,q.jsx)(Ge,{__scopeSwitch:n,checked:i,defaultChecked:a,disabled:s,required:o,onCheckedChange:l,name:r,form:u,value:c,internal_do_not_use_render:({isFormControl:e})=>(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(qe,{...d,ref:t,__scopeSwitch:n}),e&&(0,q.jsx)(Qe,{__scopeSwitch:n})]})})});Je.displayName=Be;var Ye=`SwitchThumb`,Xe=G.forwardRef((e,t)=>{let{__scopeSwitch:n,...r}=e,i=We(Ye,n);return(0,q.jsx)(k.span,{"data-state":et(i.checked),"data-disabled":i.disabled?``:void 0,...r,ref:t})});Xe.displayName=Ye;var Ze=`SwitchBubbleInput`,Qe=G.forwardRef(({__scopeSwitch:e,...t},n)=>{let{control:r,hasConsumerStoppedPropagationRef:i,checked:a,defaultChecked:s,required:c,disabled:l,name:u,value:d,form:f,bubbleInput:p,setBubbleInput:m}=We(Ze,e),h=o(n,m),g=ye(a),_=le(r);G.useEffect(()=>{let e=p;if(!e)return;let t=window.HTMLInputElement.prototype,n=Object.getOwnPropertyDescriptor(t,`checked`).set,r=!i.current;if(g!==a&&n){let t=new Event(`click`,{bubbles:r});n.call(e,a),e.dispatchEvent(t)}},[p,g,a,i]);let v=G.useRef(a);return(0,q.jsx)(k.input,{type:`checkbox`,"aria-hidden":!0,defaultChecked:s??v.current,required:c,disabled:l,name:u,value:d,form:f,...t,tabIndex:-1,ref:h,style:{...t.style,..._,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0,transform:`translateX(-100%)`}})});Qe.displayName=Ze;function $e(e){return typeof e==`function`}function et(e){return e?`checked`:`unchecked`}function J({className:e,...t}){return(0,q.jsx)(Je,{"data-slot":`switch`,className:a(`peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50`,e),...t,children:(0,q.jsx)(Xe,{"data-slot":`switch-thumb`,className:a(`bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0`)})})}var tt=e=>typeof e==`string`&&e.trim().length>0&&[...e.trim()].every(e=>e===`*`||e===`.`),nt=[{id:`deepseek`,label:`DeepSeek`,provider_type:`openai`,base_url:`https://api.deepseek.com/v1`,suggested_models:[`deepseek-chat`,`deepseek-reasoner`]},{id:`deepseek-anthropic`,label:`DeepSeek (Anthropic 协议)`,provider_type:`anthropic`,base_url:`https://api.deepseek.com/anthropic`,suggested_models:[`deepseek-chat`,`deepseek-reasoner`]},{id:`zhipu`,label:`智谱 GLM (bigmodel.cn)`,provider_type:`openai`,base_url:`https://open.bigmodel.cn/api/paas/v4`,suggested_models:[`glm-5.2`],note:`Coding Plan 套餐需改用 https://open.bigmodel.cn/api/coding/paas/v4`},{id:`zhipu-anthropic`,label:`智谱 GLM (Anthropic 协议)`,provider_type:`anthropic`,base_url:`https://open.bigmodel.cn/api/anthropic`,suggested_models:[`glm-5.2`]},{id:`zai`,label:`Z.ai (国际版)`,provider_type:`openai`,base_url:`https://api.z.ai/api/paas/v4`,suggested_models:[`glm-5.2`],note:`Coding Plan 套餐需改用 https://api.z.ai/api/coding/paas/v4`},{id:`minimax`,label:`MiniMax (国际版)`,provider_type:`openai`,base_url:`https://api.minimax.io/v1`,suggested_models:[`MiniMax-M3`]},{id:`minimax-cn`,label:`MiniMax (国内版)`,provider_type:`openai`,base_url:`https://api.minimaxi.com/v1`,suggested_models:[`MiniMax-M3`]},{id:`qwen`,label:`通义千问 (DashScope)`,provider_type:`openai`,base_url:`https://dashscope.aliyuncs.com/compatible-mode/v1`,suggested_models:[`qwen-plus`],note:`阿里云推荐迁移至业务空间专属域名,旧公共域名当前仍可用`},{id:`kimi`,label:`Kimi (Moonshot)`,provider_type:`openai`,base_url:`https://api.moonshot.cn/v1`,suggested_models:[`kimi-k2.6`,`kimi-k2.7-code`]}];function rt(e){let t=Math.floor(e/60),n=e%60;return`${t}:${String(n).padStart(2,`0`)}`}function it(){let[e,t]=(0,G.useState)(`unknown`),[n,r]=(0,G.useState)(!1),[i,a]=(0,G.useState)(null),[o,c]=(0,G.useState)(0),[l,u]=(0,G.useState)(!1),[d,f]=(0,G.useState)(!1),[p,m]=(0,G.useState)(null),h=(0,G.useCallback)(async()=>{r(!0);try{t((await D.getCopilotAuthStatus()).authenticated?`authenticated`:`not_authenticated`),m(null)}catch(e){t(`unknown`),m(S(e))}finally{r(!1)}},[]);(0,G.useEffect)(()=>{h()},[h]),(0,G.useEffect)(()=>{if(!i)return;c(i.expires_in);let e=setInterval(()=>c(e=>e>0?e-1:0),1e3);return()=>clearInterval(e)},[i]);let g=async()=>{u(!0),m(null);try{let e=await D.startCopilotAuth();a(e);try{window.open(e.verification_uri,`_blank`,`noopener`)}catch{}await D.completeCopilotAuth({device_code:e.device_code,interval:e.interval??5,expires_in:e.expires_in}),t(`authenticated`)}catch(e){m(S(e)),h()}finally{a(null),u(!1)}},_=async()=>{m(null);try{await D.logoutCopilot(),t(`not_authenticated`)}catch(e){m(S(e))}},v=async()=>{if(i)try{await navigator.clipboard.writeText(i.user_code),f(!0),setTimeout(()=>f(!1),2e3)}catch{m(`复制失败,请手动选择代码复制`)}};return(0,q.jsxs)(`div`,{className:`space-y-2 rounded-md border bg-muted/30 p-2.5`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,q.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground`,children:`Copilot 授权`}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[e===`authenticated`?(0,q.jsx)(H,{className:`bg-emerald-500/15 text-emerald-600 dark:text-emerald-400`,variant:`secondary`,children:`已登录`}):e===`not_authenticated`?(0,q.jsx)(H,{variant:`secondary`,children:`未登录`}):(0,q.jsx)(H,{variant:`outline`,children:`未知`}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>void h(),"aria-label":`刷新状态`,className:`rounded p-1 text-muted-foreground hover:text-foreground`,disabled:n,children:(0,q.jsx)(Me,{className:n?`size-3.5 animate-spin`:`size-3.5`})})]})]}),i?(0,q.jsxs)(`div`,{className:`space-y-1.5 text-sm`,children:[(0,q.jsxs)(`p`,{children:[`打开`,` `,(0,q.jsx)(`a`,{href:i.verification_uri,target:`_blank`,rel:`noopener noreferrer`,className:`text-primary underline`,children:i.verification_uri}),` `,`并输入代码:`]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(`span`,{className:`font-mono text-base font-semibold tracking-wider`,children:i.user_code}),(0,q.jsxs)(s,{size:`sm`,variant:`secondary`,className:`h-7 px-2`,onClick:()=>void v(),children:[d?(0,q.jsx)(R,{className:`size-3.5 text-emerald-500`}):(0,q.jsx)(b,{className:`size-3.5`}),d?`已复制`:`复制`]})]}),(0,q.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[o>0?`代码有效期剩余 ${rt(o)}`:`代码已过期,请重新登录`,o>0?` · 授权后这里会自动完成…`:``]})]}):e===`authenticated`?(0,q.jsxs)(`div`,{className:`flex items-center justify-between text-sm`,children:[(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:`GitHub Copilot 账号已连接`}),(0,q.jsx)(s,{size:`sm`,variant:`secondary`,onClick:()=>void _(),children:`退出`})]}):(0,q.jsx)(s,{size:`sm`,onClick:()=>void g(),disabled:l,children:l?`登录中…`:`登录 GitHub Copilot`}),p?(0,q.jsx)(`p`,{className:`text-xs text-destructive`,children:p}):null]})}function at({label:e,value:t,onChange:n,models:r=[],placeholder:i,disabled:o=!1,hideLabel:s=!1}){let c=(0,G.useRef)(null),l=(0,G.useId)(),u=(0,G.useId)(),[d,f]=(0,G.useState)(!1),[p,m]=(0,G.useState)(-1),h=(0,G.useMemo)(()=>{let e=new Map;for(let t of r){let n=t.reference.model.trim();n&&!e.has(n)&&e.set(n,t)}return[...e.values()]},[r]),g=(0,G.useMemo)(()=>{let e=t.trim().toLocaleLowerCase();if(!e)return h;let n=h.filter(t=>{let n=t.reference.model.toLocaleLowerCase(),r=t.display_name.toLocaleLowerCase();return n.includes(e)||r.includes(e)});return n.length>0?n:h},[h,t]),_=d&&g.length>0;(0,G.useEffect)(()=>{!_||p<0||document.getElementById(`${l}-option-${p}`)?.scrollIntoView?.({block:`nearest`})},[p,l,_]);let v=e=>{n(e),f(!1),m(-1),c.current?.focus()},y=e=>{g.length!==0&&(f(!0),m(t=>t<0?e===1?0:g.length-1:(t+e+g.length)%g.length))};return(0,q.jsxs)(`div`,{className:`relative`,onBlur:e=>{e.currentTarget.contains(e.relatedTarget)||(f(!1),m(-1))},children:[(0,q.jsx)(`span`,{id:u,className:a(s?`sr-only`:`mb-1 block text-xs text-muted-foreground`),children:e}),(0,q.jsxs)(`div`,{className:`relative`,children:[(0,q.jsx)(C,{ref:c,role:`combobox`,"aria-labelledby":u,"aria-autocomplete":`list`,"aria-controls":l,"aria-expanded":_,"aria-activedescendant":_&&p>=0?`${l}-option-${p}`:void 0,autoComplete:`off`,value:t,placeholder:i,disabled:o,className:a(h.length>0&&`pr-9`),onFocus:()=>f(h.length>0),onChange:e=>{n(e.target.value),f(h.length>0),m(-1)},onKeyDown:e=>{if(e.key===`ArrowDown`)e.preventDefault(),y(1);else if(e.key===`ArrowUp`)e.preventDefault(),y(-1);else if(e.key===`Enter`&&_&&p>=0){e.preventDefault();let t=g[p];t&&v(t.reference.model)}else e.key===`Escape`&&d&&(e.preventDefault(),e.stopPropagation(),f(!1),m(-1))}}),h.length>0?(0,q.jsx)(`button`,{type:`button`,"aria-label":`展开${e}选项`,tabIndex:-1,disabled:o,className:`absolute inset-y-0 right-0 flex w-9 items-center justify-center text-muted-foreground disabled:opacity-50`,onMouseDown:e=>e.preventDefault(),onClick:()=>{f(e=>!e),m(-1),c.current?.focus()},children:(0,q.jsx)(L,{className:`size-4`})}):null]}),_?(0,q.jsx)(`div`,{id:l,role:`listbox`,"aria-labelledby":u,className:`absolute inset-x-0 top-full z-[140] mt-1 max-h-52 overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md`,children:g.map((e,n)=>{let r=e.reference.model,i=r===t;return(0,q.jsxs)(`button`,{id:`${l}-option-${n}`,type:`button`,role:`option`,"aria-selected":i,className:a(`flex w-full items-start gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none`,n===p&&`bg-accent text-accent-foreground`),onMouseDown:e=>e.preventDefault(),onMouseEnter:()=>m(n),onClick:()=>v(r),children:[(0,q.jsx)(R,{className:a(`mt-0.5 size-3.5 shrink-0`,i?`opacity-100`:`opacity-0`)}),(0,q.jsxs)(`span`,{className:`min-w-0`,children:[(0,q.jsx)(`span`,{className:`block truncate`,children:r}),e.display_name&&e.display_name!==r?(0,q.jsx)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:e.display_name}):null]})]},r)})}):null]})}var ot=[`anthropic`,`openai`,`gemini`,`copilot`,`bodhi`],st=[`low`,`medium`,`high`,`xhigh`,`max`],ct=`__unset__`,lt={anthropic:`sk-ant-…`,openai:`sk-…`,gemini:`AIza…`,copilot:``,bodhi:`bhi_sk_…`},ut=e=>typeof e==`string`?e:e==null?``:String(e);function dt(e){let t=e?.config??{};return{type:e?.type??`anthropic`,label:e?.label??``,enabled:e?.enabled??!0,apiKey:tt(t.api_key)?``:ut(t.api_key),baseUrl:ut(t.base_url),model:ut(t.model),reasoningEffort:ut(t.reasoning_effort),responsesOnlyModels:Array.isArray(t.responses_only_models)?t.responses_only_models.map(ut).filter(Boolean).join(`
2
2
  `):``,headlessAuth:t.headless_auth===!0,targetProvider:ut(t.target_provider),requestOverridesJson:t.request_overrides==null?``:JSON.stringify(t.request_overrides,null,2)}}function ft(e,t,n){let r=e.type,i={},a=(e,n,r)=>{r?i[e]=n:t&&(i[e]=null)};if(r!==`copilot`){let r=e.apiKey.trim();if(r&&tt(r)){if(!(t&&n))return{error:`API Key 不能使用掩码`}}else if(r)i.api_key=r;else if(!(t&&n))return{error:`API Key 不能为空`};a(`base_url`,e.baseUrl.trim(),e.baseUrl.trim()!==``)}if(a(`model`,e.model.trim(),e.model.trim()!==``),a(`reasoning_effort`,e.reasoningEffort,e.reasoningEffort!==``),r===`openai`||r===`copilot`){let n=e.responsesOnlyModels.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean);(n.length>0||t)&&(i.responses_only_models=n)}r===`copilot`&&(i.headless_auth=e.headlessAuth),r===`bodhi`&&a(`target_provider`,e.targetProvider,e.targetProvider!==``);let o=e.requestOverridesJson.trim();if(o)try{i.request_overrides=JSON.parse(o)}catch(e){return{error:`request_overrides JSON 解析失败:${e.message}`}}else t&&(i.request_overrides=null);return{payload:{type:r,label:e.label.trim()||h[r]||r,enabled:e.enabled,config:i}}}var pt=(e,t)=>{let n=S(e);for(let e of t)typeof e!=`string`||e.trim()===``||(n=n.replaceAll(e,`[REDACTED]`));return n.replace(/[*.]{4,}/g,`[REDACTED]`)};function mt({label:e,value:t,onChange:n,type:r=`text`,placeholder:i}){return(0,q.jsxs)(`label`,{className:`block`,children:[(0,q.jsx)(`span`,{className:`mb-1 block text-xs text-muted-foreground`,children:e}),(0,q.jsx)(C,{type:r,value:t,placeholder:i,onChange:e=>n(e.target.value)})]})}function ht({instance:e,onSave:t,onCancel:n,modelOptions:r=[]}){let i=e!=null,a=tt((e?.config??{}).api_key),[o,c]=(0,G.useState)(()=>dt(e)),[l,u]=(0,G.useState)(()=>{let t=dt(e);return t.requestOverridesJson!==``||t.responsesOnlyModels!==``}),[d,f]=(0,G.useState)(!1),[p,m]=(0,G.useState)(null),[g,_]=(0,G.useState)(``),v=e=>c(t=>({...t,...e})),y=o.type,b=nt.find(e=>e.id===g)??null,x=e=>{if(e===ct){_(``);return}let t=nt.find(t=>t.id===e);t&&(_(e),c(e=>({...e,type:t.provider_type,baseUrl:t.base_url,label:e.label.trim()===``?t.label:e.label})))},S=async()=>{let n=ft(o,i,a);if(`error`in n){m(n.error);return}f(!0),m(null);try{await t(n.payload)}catch(t){let n=(e?.config??{}).api_key;m(pt(t,[o.apiKey.trim(),n])),f(!1)}};return(0,q.jsxs)(`div`,{className:`space-y-2.5 rounded-lg border bg-muted/30 p-3`,children:[(0,q.jsxs)(`label`,{className:`block`,children:[(0,q.jsx)(`span`,{className:`mb-1 block text-xs text-muted-foreground`,children:`厂商预设(可选,仅快速填充表单,不会保存)`}),(0,q.jsxs)(Ce,{value:g||ct,onValueChange:x,children:[(0,q.jsx)(de,{className:`w-full`,"aria-label":`厂商预设`,children:(0,q.jsx)(z,{})}),(0,q.jsxs)(_e,{children:[(0,q.jsx)(V,{value:ct,children:`不使用预设`}),nt.map(e=>(0,q.jsx)(V,{value:e.id,disabled:i&&e.provider_type!==y,children:e.label},e.id))]})]}),b?.note?(0,q.jsx)(`span`,{className:`mt-1 block text-xs text-muted-foreground`,children:b.note}):null]}),(0,q.jsxs)(`label`,{className:`block`,children:[(0,q.jsxs)(`span`,{className:`mb-1 block text-xs text-muted-foreground`,children:[`类型`,i?`(创建后不可修改)`:``]}),(0,q.jsxs)(Ce,{value:y,onValueChange:e=>{_(``),v({type:e})},disabled:i,children:[(0,q.jsx)(de,{className:`w-full`,"aria-label":`提供方类型`,children:(0,q.jsx)(z,{})}),(0,q.jsx)(_e,{children:ot.map(e=>(0,q.jsx)(V,{value:e,children:h[e]??e},e))})]})]}),(0,q.jsx)(mt,{label:`名称`,value:o.label,onChange:e=>v({label:e}),placeholder:`如 我的 ${h[y]}`}),(0,q.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border bg-background px-2.5 py-2`,children:[(0,q.jsx)(`span`,{className:`text-sm`,children:`启用该实例`}),(0,q.jsx)(J,{checked:o.enabled,onCheckedChange:e=>v({enabled:e})})]}),y===`copilot`?(0,q.jsx)(it,{}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(mt,{label:`API Key`,value:o.apiKey,onChange:e=>v({apiKey:e}),type:`password`,placeholder:a?`已配置,留空保持不变`:lt[y]}),(0,q.jsx)(mt,{label:`Base URL(可选)`,value:o.baseUrl,onChange:e=>v({baseUrl:e}),placeholder:y===`anthropic`?`https://api.anthropic.com`:y===`openai`?`https://api.openai.com/v1`:y===`gemini`?`https://generativelanguage.googleapis.com/v1beta`:`http://localhost:8080`})]}),y===`bodhi`?(0,q.jsxs)(`label`,{className:`block`,children:[(0,q.jsx)(`span`,{className:`mb-1 block text-xs text-muted-foreground`,children:`目标上游(可选)`}),(0,q.jsxs)(Ce,{value:o.targetProvider||ct,onValueChange:e=>v({targetProvider:e===ct?``:e}),children:[(0,q.jsx)(de,{className:`w-full`,children:(0,q.jsx)(z,{})}),(0,q.jsxs)(_e,{children:[(0,q.jsx)(V,{value:ct,children:`未设置`}),(0,q.jsx)(V,{value:`openai`,children:`OpenAI`}),(0,q.jsx)(V,{value:`anthropic`,children:`Anthropic`}),(0,q.jsx)(V,{value:`gemini`,children:`Gemini`})]})]})]}):null,y===`copilot`?(0,q.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border bg-background px-2.5 py-2`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`div`,{className:`text-sm`,children:`Headless 授权`}),(0,q.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`在控制台打印登录链接,不自动打开浏览器`})]}),(0,q.jsx)(J,{checked:o.headlessAuth,onCheckedChange:e=>v({headlessAuth:e})})]}):null,(0,q.jsx)(at,{label:`默认模型(可选)`,value:o.model,onChange:e=>v({model:e}),models:r,placeholder:b?b.suggested_models.join(`, `):`glm-5.2`}),(0,q.jsx)(`div`,{children:(0,q.jsxs)(`label`,{className:`block`,children:[(0,q.jsx)(`span`,{className:`mb-1 block text-xs text-muted-foreground`,children:`推理强度(可选)`}),(0,q.jsxs)(Ce,{value:o.reasoningEffort||ct,onValueChange:e=>v({reasoningEffort:e===ct?``:e}),children:[(0,q.jsx)(de,{className:`w-full`,children:(0,q.jsx)(z,{})}),(0,q.jsxs)(_e,{children:[(0,q.jsx)(V,{value:ct,children:`默认(不指定)`}),st.map(e=>(0,q.jsx)(V,{value:e,children:e},e))]})]})]})}),(0,q.jsxs)(`button`,{type:`button`,onClick:()=>u(e=>!e),className:`flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground`,children:[l?(0,q.jsx)(L,{className:`size-3.5`}):(0,q.jsx)(te,{className:`size-3.5`}),`高级设置`]}),l?(0,q.jsxs)(`div`,{className:`space-y-2.5`,children:[y===`openai`||y===`copilot`?(0,q.jsxs)(`label`,{className:`block`,children:[(0,q.jsx)(`span`,{className:`mb-1 block text-xs text-muted-foreground`,children:`Responses-only 模型(可选,空格/逗号/换行分隔,支持尾部通配 gpt-5*)`}),(0,q.jsx)(he,{className:`min-h-14 resize-y font-mono text-xs`,value:o.responsesOnlyModels,placeholder:`gpt-5.3-codex
3
3
  gpt-5*`,onChange:e=>v({responsesOnlyModels:e.target.value})})]}):null,(0,q.jsxs)(`label`,{className:`block`,children:[(0,q.jsx)(`span`,{className:`mb-1 block text-xs text-muted-foreground`,children:`请求覆写 request_overrides(可选,JSON)`}),(0,q.jsx)(he,{className:`min-h-20 resize-y font-mono text-xs`,value:o.requestOverridesJson,placeholder:`{"common":{"headers":{"X-Custom":"value"}}}`,onChange:e=>v({requestOverridesJson:e.target.value})})]})]}):null,p?(0,q.jsx)(`p`,{className:`text-xs text-destructive`,children:p}):null,(0,q.jsxs)(`div`,{className:`flex justify-end gap-2 pt-1`,children:[(0,q.jsx)(s,{size:`sm`,variant:`secondary`,onClick:n,disabled:d,children:`取消`}),(0,q.jsx)(s,{size:`sm`,onClick:()=>void S(),disabled:d,children:d?`保存中…`:`保存`})]})]})}var gt=`__unset__`,_t=[{key:`chat`,label:`对话(必填)`,required:!0},{key:`fast`,label:`快速`,required:!1},{key:`task_summary`,label:`任务摘要`,required:!1},{key:`vision`,label:`视觉`,required:!1},{key:`memory_background`,label:`记忆后台`,required:!1},{key:`planning`,label:`规划`,required:!1},{key:`search`,label:`搜索`,required:!1},{key:`code_review`,label:`代码审查`,required:!1},{key:`sub_agent`,label:`子代理`,required:!1}],vt=()=>({provider:``,model:``}),yt=e=>({provider:e?.provider??``,model:e?.model??``});function bt(e){return{roles:Object.fromEntries(P.map(t=>[t,yt(e?.[t])])),subagentModels:Object.fromEntries(Object.entries(e?.subagent_models??{}).map(([e,t])=>[e,yt(t)]))}}var xt=e=>JSON.stringify(e),St=e=>e.some(e=>e.kind===`default_provider_instance`),Ct=(e,t)=>e.some(e=>e.kind===`default_model_ref`&&e.role===t),wt=(e,t)=>e.some(e=>e.kind===`subagent_model_ref`&&e.subagent===t);function Tt(){let e=U(e=>e.providerSnapshot),t=U(e=>e.providerRepairSnapshot),n=U(e=>e.providerRepairIssues),r=U(e=>e.providerStatus),i=U(e=>e.providerError),o=U(e=>e.loadProviderInstances),c=U(e=>e.getModelsForProvider),l=U(e=>e.catalog),u=e??t,d=u?.instances??[],f=u?.defaults,m=r===`ready`||r===`degraded`,h=bt(f),[g,_]=(0,G.useState)(()=>h),[v,y]=(0,G.useState)(()=>xt(h)),[b,x]=(0,G.useState)(!1),[C,T]=(0,G.useState)(null),[E,D]=(0,G.useState)(!1),O=(0,G.useMemo)(()=>xt(g)!==v,[g,v]),k=(f?.chat.provider??``)!==``&&f?.chat.provider!==(u?.default_provider_instance_id??``),A=(0,G.useRef)(O),j=(0,G.useRef)(!1);A.current=O,(0,G.useEffect)(()=>{if(A.current||j.current)return;let e=bt(f);_(e),y(xt(e))},[f]);let M=(e,t)=>_(n=>({...n,roles:{...n.roles,[e]:{...n.roles[e],...t}}})),N=(e,t)=>_(n=>({...n,subagentModels:{...n.subagentModels,[e]:{...n.subagentModels[e]??vt(),...t}}})),P=async()=>{let e=new Map(d.map(e=>[e.id,e]));for(let t of _t){let r=g.roles[t.key];if(!r.provider&&!r.model.trim()){if(t.required){T(`对话(chat)默认模型必须选择提供方并填写模型`);return}if(Ct(n,t.key)){T(`「${t.label}」的失效引用必须显式替换为现有实例和模型`);return}continue}if(!r.provider||!r.model.trim()){T(`「${t.label}」必须同时选择提供方并填写模型`);return}let i=e.get(r.provider);if(!i){T(`「${t.label}」引用的提供方已失效,请选择现有实例`);return}if(!i.enabled){T(`「${t.label}」引用的提供方已停用,请先启用该实例或选择其他已启用实例`);return}}for(let[t,n]of Object.entries(g.subagentModels)){let r=e.get(n.provider);if(!n.provider||!n.model.trim()||!r){T(`子代理「${t}」的失效引用必须显式替换为现有实例和模型`);return}if(!r.enabled){T(`子代理「${t}」引用的提供方已停用,请先启用该实例或选择其他已启用实例`);return}}j.current=!0,x(!0),T(null),D(!1);try{let e={};for(let t of _t){let n=g.roles[t.key],r=n.provider!==``&&n.model.trim()!==``;e[t.key]=r?{provider:n.provider,model:n.model.trim()}:null}e.subagent_models=Object.fromEntries(Object.entries(g.subagentModels).map(([e,t])=>[e,{provider:t.provider,model:t.model.trim()}]));let t=await w.get(`/bamboo/config`);await w.post(`/bamboo/config`,{defaults:e,default_provider_instance:g.roles.chat.provider,...t?.model_limits===void 0?{}:{model_limits:t.model_limits}});let n=await o(),r=bt(n.defaults);_(r),y(xt(r)),A.current=!1;let i=p(n);i.length>0?T(`偏好已保存,但仍有 ${i.length} 处失效引用;请完成其余替换后再使用聊天。`):(D(!0),setTimeout(()=>D(!1),2500))}catch(e){T(S(e))}finally{j.current=!1,x(!1)}},F=e=>{let t=d.some(t=>t.id===e);return(0,q.jsxs)(q.Fragment,{children:[e&&!t?(0,q.jsxs)(V,{value:e,disabled:!0,children:[e,`(已失效,请替换)`]}):null,d.map(e=>(0,q.jsxs)(V,{value:e.id,disabled:!e.enabled,children:[e.label||e.type,e.enabled?``:`(已停用)`]},e.id))]})};return m?(0,q.jsxs)(`section`,{className:`rounded-lg border p-3`,children:[(0,q.jsx)(`div`,{className:`mb-2 text-xs font-medium text-muted-foreground`,children:`默认模型偏好`}),(0,q.jsx)(`p`,{className:`mb-2 text-xs text-muted-foreground`,children:`按用途指定模型;未设置的用途回落到「对话」模型。模型 ID 可从发现结果选择,也可手动输入。`}),St(n)||k?(0,q.jsx)(`p`,{role:`alert`,className:`mb-2 rounded-md border border-amber-500/50 p-2 text-xs text-amber-700 dark:text-amber-300`,children:`当前提供方路由尚未与「对话」模型偏好同步。确认「对话」提供方和模型后保存偏好,Lotus Next 会自动完成同步。`}):null,(0,q.jsx)(`div`,{className:`space-y-2`,children:_t.map(e=>{let t=g.roles[e.key],r=t.provider&&l?c(t.provider):[],i=Ct(n,e.key);return(0,q.jsxs)(`div`,{className:a(`grid grid-cols-[5.5rem_1fr_1fr] items-center gap-2 rounded-md`,i&&`border border-amber-500/50 bg-amber-500/5 p-1`),children:[(0,q.jsx)(`span`,{className:`truncate text-xs text-muted-foreground`,children:e.label}),(0,q.jsxs)(Ce,{value:t.provider||gt,onValueChange:n=>{if(n===gt){M(e.key,vt());return}M(e.key,{provider:n,model:n===t.provider?t.model:``})},children:[(0,q.jsx)(de,{className:`w-full`,"aria-label":`${e.label}提供方`,children:(0,q.jsx)(z,{placeholder:`提供方`})}),(0,q.jsxs)(_e,{children:[!e.required&&!i?(0,q.jsx)(V,{value:gt,children:`未设置`}):null,F(t.provider)]})]}),(0,q.jsx)(at,{label:`${e.label}模型`,hideLabel:!0,value:t.model,models:r,placeholder:`模型 ID`,disabled:!t.provider,onChange:t=>M(e.key,{model:t})})]},e.key)})}),Object.keys(g.subagentModels).length>0?(0,q.jsxs)(`div`,{className:`mt-3 space-y-2`,children:[(0,q.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:`子代理模型映射`}),Object.entries(g.subagentModels).map(([e,t])=>{let r=t.provider&&l?c(t.provider):[];return(0,q.jsxs)(`div`,{className:a(`grid grid-cols-[5.5rem_1fr_1fr] items-center gap-2 rounded-md`,wt(n,e)&&`border border-amber-500/50 bg-amber-500/5 p-1`),children:[(0,q.jsx)(`span`,{className:`truncate text-xs text-muted-foreground`,title:e,children:e}),(0,q.jsxs)(Ce,{value:t.provider,onValueChange:n=>N(e,{provider:n,model:n===t.provider?t.model:``}),children:[(0,q.jsx)(de,{className:`w-full`,"aria-label":`子代理 ${e} 提供方`,children:(0,q.jsx)(z,{placeholder:`提供方`})}),(0,q.jsx)(_e,{children:F(t.provider)})]}),(0,q.jsx)(at,{label:`子代理 ${e} 模型`,hideLabel:!0,value:t.model,models:r,placeholder:`模型 ID`,disabled:!t.provider,onChange:t=>N(e,{model:t})})]},e)})]}):null,C?(0,q.jsx)(`p`,{className:`mt-2 text-xs text-destructive`,children:C}):null,(0,q.jsxs)(`div`,{className:`mt-2.5 flex items-center justify-end gap-2`,children:[E?(0,q.jsx)(`span`,{className:`text-xs text-emerald-500`,children:`已保存`}):null,(0,q.jsx)(s,{size:`sm`,onClick:()=>void P(),disabled:b||!O&&!k,children:b?`保存中…`:`保存偏好`})]})]}):(0,q.jsx)(`section`,{className:`rounded-lg border p-3`,children:(0,q.jsxs)(`p`,{role:r===`unavailable`||r===`incompatible`?`alert`:void 0,className:`text-xs text-muted-foreground`,children:[r===`incompatible`?`当前 Bamboo 的提供方配置格式与 Lotus Next 不兼容。`:r===`unavailable`?`提供方设置当前不可用。`:`正在加载提供方设置…`,i?` ${i}`:``]})})}function Et(){let e=U(e=>e.providerSnapshot),t=U(e=>e.providerRepairSnapshot),n=U(e=>e.providerRepairIssues),r=U(e=>e.providerStatus),i=U(e=>e.providerError),o=U(e=>e.loadProviderInstances),c=U(e=>e.createProviderInstance),l=U(e=>e.updateProviderInstance),u=U(e=>e.deleteProviderInstance),d=U(e=>e.loadCatalog),f=U(e=>e.fetchCatalogModels),p=U(e=>e.catalog),m=e??t,b=m?.instances??[],C=m?.defaults?.chat.provider??null,w=m?.default_provider_instance_id??null,E=r===`ready`||r===`degraded`,[D,k]=(0,G.useState)(null),[A,j]=(0,G.useState)(!1),[M,N]=(0,G.useState)(null),[P,F]=(0,G.useState)(null),[ee,I]=(0,G.useState)(!1),[L,te]=(0,G.useState)(null),[R,ne]=(0,G.useState)(null),[z,re]=(0,G.useState)(null),[ie,ae]=(0,G.useState)(null),[oe,se]=(0,G.useState)(null),ce=(0,G.useRef)(!1);(0,G.useEffect)(()=>{o().catch(()=>void 0)},[o]),(0,G.useEffect)(()=>{!E||p!==null||ce.current||(ce.current=!0,d())},[E,p,d]);let le=async e=>{let t=await c({type:e.type,label:e.label,enabled:e.enabled,config:e.config});if(j(!1),!t.responseValid||!t.instance){se(null),ae(t.authorityRefreshed?`实例已保存且列表已重新加载,但创建响应缺少有效实例 ID。请从列表中选择实例继续,勿重复创建。`:`实例已保存,但创建响应和实例列表均无法安全确认。请重新加载列表后继续,勿重复创建。`);return}let n=t.instance;t.instanceConfirmed?(k(n.id),se(null),ae(null)):(se(n.id),ae(t.authorityRefreshed?`「${n.label}」实例已保存,但重新加载的列表尚未确认该实例。模型发现仍会继续;请重新加载后编辑,勿重复创建。`:`「${n.label}」实例已保存,但实例列表重新加载失败。模型发现仍会继续;请重新加载后编辑,勿重复创建。`)),ne(n.id),re(t.instanceConfirmed?{id:n.id,text:`实例已保存,正在获取模型…`,tone:`loading`}:null);try{await f(n.id);let e=U.getState().getModelsForProvider(n.id).length,r=e>0?`实例已保存,并发现 ${e} 个模型。请选择模型后再次保存。`:`实例已保存,但未发现模型。可手动输入自定义模型 ID 后再次保存。`;t.instanceConfirmed?re({id:n.id,text:r,tone:e>0?`success`:`warning`}):ae(`${r} 实例列表重新加载失败,请重新加载后继续,勿重复创建。`)}catch{let e=`实例已保存,但模型发现失败。可手动输入自定义模型 ID 后再次保存。`;t.instanceConfirmed?re({id:n.id,text:e,tone:`warning`}):ae(`${e} 实例列表重新加载失败,请重新加载后继续,勿重复创建。`)}finally{ne(null)}},ue=e=>e===C?`请先将「对话」模型偏好切换到其他已启用提供方并保存,再停用此实例。`:e===w?`请先在「默认模型偏好」中确认并保存「对话」提供方,再停用此实例。`:null,de=async(e,t)=>{if(!t.enabled){let t=ue(e);if(t)throw Error(t)}await l(e,{label:t.label,enabled:t.enabled,config:t.config}),re(t=>t?.id===e?null:t),k(null)},fe=async(e,t)=>{if(N(null),!t){let t=ue(e.id);if(t){N(t);return}}try{await l(e.id,{enabled:t})}catch(n){N(`「${e.label||e.type}」${t?`启用`:`停用`}失败:${S(n)}`)}},pe=async e=>{ne(e.id),re(null);try{await f(e.id);let t=U.getState().getModelsForProvider(e.id).length;re({id:e.id,text:t>0?`已刷新 ${t} 个模型`:`未发现模型,可在编辑器中手动输入自定义模型 ID。`,tone:t>0?`success`:`warning`})}catch{re({id:e.id,text:`模型发现失败,请检查实例配置后重试。`,tone:`error`})}finally{ne(null)}},me=async()=>{N(null);try{let e=await o(),t=oe;t&&e.instances.some(e=>e.id===t)?(ae(null),se(null),k(t)):ae(t?`实例已保存,但重新加载的列表仍未确认该实例。请稍后重试并勿重复创建。`:`列表已重新加载,但创建响应缺少有效实例 ID。请从列表中选择刚保存的实例继续,勿重复创建。`)}catch{N(`实例已保存,但提供方列表仍无法重新加载。请稍后重试,勿重复创建。`)}},he=e=>p?.models.filter(t=>t.reference.provider===e)??[],ge=async()=>{if(P){I(!0),te(null);try{await u(P.id),F(null)}catch(e){te(S(e))}finally{I(!1)}}};return(0,q.jsxs)(`div`,{className:`space-y-3`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`配置 LLM 提供方、API Key 与可用模型。`}),!A&&E&&!ie?(0,q.jsxs)(s,{size:`sm`,variant:`secondary`,onClick:()=>{j(!0)},children:[(0,q.jsx)(_,{className:`size-4`}),` 新增`]}):null]}),r===`idle`||r===`loading`?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`正在加载提供方设置…`}):null,r===`unavailable`?(0,q.jsxs)(`div`,{role:`alert`,className:`rounded-lg border border-destructive/40 p-3 text-xs text-destructive`,children:[`提供方设置当前不可用。`,i?` ${i}`:``]}):null,r===`incompatible`?(0,q.jsxs)(`div`,{role:`alert`,className:`rounded-lg border border-destructive/40 p-3 text-xs text-destructive`,children:[`当前 Bamboo 的提供方配置格式与 Lotus Next 不兼容。`,i?` ${i}`:``]}):null,r===`degraded`?(0,q.jsxs)(`div`,{role:`alert`,className:`rounded-lg border border-amber-500/50 bg-amber-500/5 p-3 text-xs text-amber-700 dark:text-amber-300`,children:[`提供方或模型偏好中有失效引用(`,n.length,` 处)。有效实例仍可管理,但聊天与运行时暂不会使用这些偏好;请在下方选择现有实例和模型并保存偏好完成修复。`]}):null,ie?(0,q.jsxs)(`div`,{role:`status`,className:`flex items-start justify-between gap-3 rounded-lg border border-amber-500/50 bg-amber-500/5 p-3 text-xs text-amber-700 dark:text-amber-300`,children:[(0,q.jsx)(`span`,{children:ie}),(0,q.jsx)(s,{size:`sm`,variant:`secondary`,onClick:()=>void me(),children:`重新加载`})]}):null,M?(0,q.jsx)(`p`,{className:`text-xs text-destructive`,children:M}):null,A&&E?(0,q.jsx)(ht,{instance:null,onCancel:()=>j(!1),onSave:le}):null,E?(0,q.jsx)(`ul`,{className:`space-y-2`,children:b.map(e=>(0,q.jsxs)(`li`,{className:`rounded-lg border p-3`,children:[D===e.id?(0,q.jsx)(ht,{instance:e,modelOptions:he(e.id),onCancel:()=>k(null),onSave:t=>de(e.id,t)}):(0,q.jsx)(q.Fragment,{children:(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,q.jsx)(`span`,{className:`truncate text-sm font-medium`,children:e.label||e.type}),e.enabled?null:(0,q.jsx)(H,{variant:`secondary`,className:`shrink-0 px-1.5 text-[10px]`,children:`已停用`})]}),(0,q.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,children:h[e.type]??e.type})]}),(0,q.jsx)(J,{checked:e.enabled,onCheckedChange:t=>void fe(e,t),"aria-label":e.enabled?`停用`:`启用`,className:`shrink-0`}),(0,q.jsx)(`button`,{onClick:()=>void pe(e),"aria-label":`拉取模型列表`,title:`拉取模型列表`,disabled:R===e.id,className:`shrink-0 rounded p-1 text-muted-foreground hover:text-foreground disabled:opacity-50`,children:(0,q.jsx)(Me,{className:a(`size-3.5`,R===e.id&&`animate-spin`)})}),(0,q.jsx)(`button`,{onClick:()=>{k(e.id),ie&&oe===null&&ae(null)},"aria-label":`编辑`,className:`shrink-0 rounded p-1 text-muted-foreground hover:text-foreground`,children:(0,q.jsx)(x,{className:`size-3.5`})}),(0,q.jsx)(`button`,{onClick:()=>{te(null),F(e)},"aria-label":`删除`,className:`shrink-0 rounded p-1 text-muted-foreground hover:text-destructive`,children:(0,q.jsx)(v,{className:`size-3.5`})})]})}),z&&z.id===e.id?(0,q.jsx)(`p`,{role:`status`,className:a(`mt-1.5 text-xs`,z.tone===`success`&&`text-emerald-500`,z.tone===`loading`&&`text-muted-foreground`,z.tone===`warning`&&`text-amber-600 dark:text-amber-300`,z.tone===`error`&&`text-destructive`),children:z.text}):null]},e.id))}):null,E&&b.length===0&&!A?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`暂无提供方实例,点击「新增」创建。`}):null,(0,q.jsx)(`div`,{hidden:!E,children:(0,q.jsx)(Tt,{})}),(0,q.jsx)(T,{open:P!=null,onOpenChange:e=>e?null:F(null),children:(0,q.jsxs)(O,{className:`gap-3 p-4`,children:[(0,q.jsx)(y,{children:`删除提供方实例`}),(0,q.jsxs)(g,{children:[`确定删除「`,P?.label||P?.type,`」?引用它的默认模型偏好将失效。`]}),L?(0,q.jsxs)(`p`,{className:`text-xs text-destructive`,children:[`删除失败:`,L]}):null,(0,q.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,q.jsx)(s,{size:`sm`,variant:`secondary`,onClick:()=>F(null),disabled:ee,children:`取消`}),(0,q.jsx)(s,{size:`sm`,variant:`destructive`,onClick:()=>void ge(),disabled:ee,children:ee?`删除中…`:`删除`})]})]})})]})}var Dt=function(e){return e.Connecting=`connecting`,e.Ready=`ready`,e.Degraded=`degraded`,e.Stopped=`stopped`,e.Error=`error`,e}({}),Ot=/^[a-zA-Z0-9_-]+$/,kt=6e4,At=3e4,jt=2e4,Mt=1e4,Nt=e=>({id:e,enabled:!0,transport:{type:`stdio`,command:``,args:[],env:{},startup_timeout_ms:jt},request_timeout_ms:kt,healthcheck_interval_ms:At,allowed_tools:[],denied_tools:[]}),Pt=()=>({status:`stopped`,tool_count:0,restart_count:0}),Ft=500,It=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Lt=(e,t)=>Object.hasOwn(e,t),Rt=(e,t)=>Object.keys(e).every(e=>t.includes(e)),zt=e=>typeof e==`string`,Bt=e=>typeof e==`boolean`,Vt=e=>Array.isArray(e)&&e.every(zt),Ht=e=>It(e)&&Object.values(e).every(zt),Ut=e=>typeof e==`number`&&Number.isSafeInteger(e)&&e>=0,Y=(e,t,n,r=!1)=>!Lt(e,t)||r&&e[t]===null||n(e[t]),Wt=[`id`,`name`,`enabled`,`request_timeout_ms`,`healthcheck_interval_ms`,`reconnect`,`allowed_tools`,`denied_tools`],Gt=[`command`,`args`,`cwd`,`env`,`env_encrypted`,`env_credential_refs`,`startup_timeout_ms`],Kt=[`url`,`headers`,`connect_timeout_ms`],qt=[...Wt,...Gt,...Kt,`disabled`,`transport_kind`,`headers_encrypted`,`header_credential_refs`];function Jt(e,t){return t&&(e===null||Ht(e))?!0:Array.isArray(e)&&e.every(e=>It(e)&&Rt(e,[`name`,`value`,`value_encrypted`,`credential_ref`])&&typeof e.name==`string`&&!!e.name.trim()&&Y(e,`value`,zt)&&Y(e,`value_encrypted`,zt,!0)&&Y(e,`credential_ref`,zt,!0))}function Yt(e,t){if(!Y(e,`name`,zt,!0)||!Y(e,`enabled`,Bt,t)||!Y(e,`allowed_tools`,Vt)||!Y(e,`denied_tools`,Vt)||!Y(e,`request_timeout_ms`,Ut,t)||!Y(e,`healthcheck_interval_ms`,Ut,t))return!1;if(!Lt(e,`reconnect`)||t&&e.reconnect===null)return!0;let n=e.reconnect;return It(n)&&Rt(n,[`enabled`,`initial_backoff_ms`,`max_backoff_ms`,`max_attempts`])&&Y(n,`enabled`,Bt)&&Y(n,`initial_backoff_ms`,Ut)&&Y(n,`max_backoff_ms`,Ut)&&Y(n,`max_attempts`,e=>Ut(e)&&e<=4294967295)}function Xt(e){let t=e=>({ok:!1,error:e});if(!e.trim())return t(`请提供包含 mcpServers 对象的完整 JSON 配置。`);if(e.length>1048576||new TextEncoder().encode(e).length>1048576)return t(`JSON 配置不能超过 1 MiB。`);let n;try{n=JSON.parse(e)}catch{return t(`JSON 格式无效。请检查引号、逗号和括号;错误详情不会显示配置内容。`)}if(!It(n)||!Rt(n,[`mcpServers`])||!It(n.mcpServers))return t(`仅支持完整的 {"mcpServers": {"服务器 ID": {...}}} 对象。`);let r=Object.entries(n.mcpServers);if(!r.length)return t(`mcpServers 不能为空;导入不能用于清空全部服务器。`);if(r.length>Ft)return t(`一次最多导入 500 个服务器。`);if(Lt(n.mcpServers,`servers`))return t(`不支持 legacy servers 列表,且 servers 是保留的服务器 ID。`);let i=[];for(let[e,[n,a]]of r.entries()){let r=n=>t(`第 ${e+1} 项:${n}`);if(n!==n.trim()||!Ot.test(n))return r(`服务器 ID 只能包含字母、数字、- 和 _,不能包含空白。`);if(!It(a))return r(`服务器配置必须是对象。`);let o=Lt(a,`transport`);if(o&&Lt(a,`disabled`))return r(`内部 transport 配置请使用 enabled;disabled 会被后端忽略。`);if(!Rt(a,o?[...Wt,`transport`]:qt))return r(`包含不支持或混合的字段;HTTP 请使用 transport_kind: "streamable_http",不能使用 type: "http"。`);if(!Yt(a,!o)||!Y(a,`disabled`,Bt))return r(`启用状态、工具列表或超时配置类型无效。`);let s=o?a.transport:a;if(!It(s))return r(`transport 必须是对象。`);let c;if(o){if(s.type!==`stdio`&&s.type!==`sse`&&s.type!==`streamable_http`)return r(`不支持此 transport 类型。`);if(c=s.type,!Rt(s,[`type`,...c===`stdio`?Gt:Kt]))return r(`transport 包含不支持的字段。`)}else{let e=a.command!==void 0&&a.command!==null;if(e===(a.url!==void 0&&a.url!==null))return r(`必须提供 command 或 url,且不能同时提供两者。`);if(a.transport_kind!==void 0&&a.transport_kind!==null&&(e||a.transport_kind!==`sse`&&a.transport_kind!==`streamable_http`))return r(`transport_kind 仅支持远程 sse 或 streamable_http。`);if(c=e?`stdio`:a.transport_kind===`streamable_http`?`streamable_http`:`sse`,!Rt(a,[...Wt,`disabled`,...c===`stdio`?Gt:[...Kt,`transport_kind`,`headers_encrypted`,`header_credential_refs`]]))return r(`不能混合不同传输方式的配置字段。`)}if(c===`stdio`){if(typeof s.command!=`string`||!s.command.trim()||!Y(s,`args`,Vt)||!Y(s,`cwd`,zt,!0)||!Y(s,`startup_timeout_ms`,Ut,!o))return r(`stdio 命令、参数、工作目录或启动超时无效。`);for(let e of[`env`,`env_encrypted`,`env_credential_refs`])if(!Y(s,e,Ht))return r(`环境变量及凭据引用必须是字符串映射。`)}else{try{if(typeof s.url!=`string`||![`http:`,`https:`].includes(new URL(s.url).protocol))return r(`远程 URL 必须使用 HTTP 或 HTTPS。`)}catch{return r(`远程 URL 格式无效。`)}if(!Y(s,`headers`,e=>Jt(e,!o))||!Y(s,`connect_timeout_ms`,Ut,!o)||!Y(a,`headers_encrypted`,Ht)||!Y(a,`header_credential_refs`,Ht))return r(`请求头或连接超时无效;请求头值必须是字符串。`)}i.push({id:n,transport:c,enabled:typeof a.enabled==`boolean`?a.enabled:o||!a.disabled})}return{ok:!0,value:{mcpServers:n.mcpServers,servers:i}}}var Zt=e=>JSON.stringify([...e].sort());function Qt(e,t,n){let r=new Set(e),i=new Set(t);return{added:e.filter(e=>!i.has(e)),updated:e.filter(e=>i.has(e)),removed:n===`replace`?t.filter(e=>!r.has(e)).sort():[]}}var $t=class extends Error{kind;constructor(e){super({busy:`已有导入正在进行。请等待完成后刷新列表;没有再次发送导入请求。`,rejected:`服务器拒绝了导入,未提交配置。请检查配置后重新操作;错误详情已隐藏。`,uncertain:`导入结果尚未确认,配置可能已更新。请刷新实际列表核对;没有自动重发请求。`,list_changed:`当前服务器列表已变化。请重新查看预览并确认;尚未发送导入请求。`,list_unavailable:`无法确认当前服务器列表。请刷新后重新预览;尚未发送导入请求。`}[e]),this.kind=e,this.name=`McpImportFailure`}};function en(e,t){let n=Object.keys(t.mcpServers);if(!It(e)||e.mode!==t.mode||!Ut(e.added)||!Ut(e.updated)||!Ut(e.removed)||e.added+e.updated!==n.length||t.mode===`merge`&&e.removed!==0||!Vt(e.server_ids)||Zt(e.server_ids)!==Zt(n)||e.start_errors!==void 0&&(!Array.isArray(e.start_errors)||e.start_errors.length>0))throw new $t(`uncertain`);return{mode:t.mode,added:e.added,updated:e.updated,removed:e.removed,server_ids:n.sort()}}var tn=e=>{switch(typeof e==`string`?e.trim().toLowerCase():``){case Dt.Connecting:return Dt.Connecting;case Dt.Ready:return Dt.Ready;case Dt.Degraded:return Dt.Degraded;case Dt.Error:return Dt.Error;case Dt.Stopped:default:return Dt.Stopped}},nn=(e,t)=>{if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`string`){let t=Number(e);if(Number.isFinite(t))return t}return t},rn=(e,t)=>{if(!e||typeof e!=`object`)return t;let n=e;if(n.type===`sse`||n.type===`streamablehttp`||n.type===`streamable_http`){let e=Array.isArray(n.headers)?n.headers.map(e=>{if(!e||typeof e!=`object`)return null;let t=e;return typeof t.name!=`string`||typeof t.value!=`string`?null:{name:t.name,value:t.value}}).filter(e=>!!e):[];return{type:n.type===`sse`?`sse`:`streamable_http`,url:typeof n.url==`string`?n.url:``,headers:e,connect_timeout_ms:nn(n.connect_timeout_ms,Mt)}}let r=Array.isArray(n.args)?n.args.filter(e=>typeof e==`string`):[],i=n.env&&typeof n.env==`object`?Object.entries(n.env):[];return{type:`stdio`,command:typeof n.command==`string`?n.command:``,args:r,cwd:typeof n.cwd==`string`?n.cwd:void 0,env:i.reduce((e,[t,n])=>(typeof n==`string`&&(e[t]=n),e),{}),startup_timeout_ms:nn(n.startup_timeout_ms,jt)}},an=(e,t)=>{let n=Nt(e.id),r=t??{};return{...n,...r,id:e.id,name:typeof r.name==`string`?r.name:typeof e.name==`string`?e.name:void 0,enabled:typeof e.enabled==`boolean`?e.enabled:typeof r.enabled==`boolean`?r.enabled:!0,request_timeout_ms:nn(r.request_timeout_ms,kt),healthcheck_interval_ms:nn(r.healthcheck_interval_ms,At),allowed_tools:Array.isArray(r.allowed_tools)?r.allowed_tools.filter(e=>typeof e==`string`):[],denied_tools:Array.isArray(r.denied_tools)?r.denied_tools.filter(e=>typeof e==`string`):[],reconnect:r.reconnect&&typeof r.reconnect==`object`?{enabled:typeof r.reconnect.enabled==`boolean`?r.reconnect.enabled:!0,initial_backoff_ms:nn(r.reconnect.initial_backoff_ms,1e3),max_backoff_ms:nn(r.reconnect.max_backoff_ms,3e4),max_attempts:nn(r.reconnect.max_attempts,0)}:void 0,transport:rn(r.transport,n.transport)}},on=e=>{let t=Pt(),n=e.runtime??{};return{status:tn(n.status??e.status),last_error:typeof n.last_error==`string`?n.last_error:typeof e.last_error==`string`?e.last_error:void 0,connected_at:typeof n.connected_at==`string`?n.connected_at:void 0,disconnected_at:typeof n.disconnected_at==`string`?n.disconnected_at:void 0,tool_count:nn(n.tool_count??e.tool_count,t.tool_count),restart_count:nn(n.restart_count??e.restart_count,t.restart_count),last_ping_at:typeof n.last_ping_at==`string`?n.last_ping_at:void 0}},sn=e=>{let t=an(e,e.config);return{id:e.id,name:typeof e.name==`string`?e.name:typeof t.name==`string`?t.name:e.id,enabled:typeof e.enabled==`boolean`?e.enabled:t.enabled,config:t,runtime:on(e)}},cn=(e,t)=>`mcp__${e}__${t}`,ln=e=>{if(!e.startsWith(`mcp__`))return null;let t=e.slice(5),n=t.indexOf(`__`);if(n<=0)return null;let r=t.slice(0,n),i=t.slice(n+2);return!r||!i?null:{server_id:r,original_name:i}},un=(e,t,n=0)=>{if(!e||typeof e!=`object`)return null;let r=e,i=typeof r.alias==`string`?r.alias:typeof r.name==`string`&&r.name.startsWith(`mcp__`)?r.name:void 0,a=i&&typeof i==`string`?ln(i):null,o=(typeof r.server_id==`string`?r.server_id:void 0)??(typeof r.serverId==`string`?r.serverId:void 0)??a?.server_id??t??``,s=(typeof r.original_name==`string`?r.original_name:void 0)??(typeof r.originalName==`string`?r.originalName:void 0)??a?.original_name??(typeof r.name==`string`?r.name:void 0)??``,c=i??(o&&s?cn(o,s):``),l=typeof r.description==`string`?r.description:``,u=r,d=`parameters`in u?u.parameters:`inputSchema`in u?u.inputSchema:`input_schema`in u?u.input_schema:void 0,f=c||s||`mcp_tool_${n}`;return{alias:f,server_id:o||`unknown`,original_name:s||f,description:l,parameters:d}},dn=new class{importInFlight=!1;async getServers(){let e=await w.get(`mcp/servers`),t=new Set;if(!It(e)||!Array.isArray(e.servers)||!e.servers.every(e=>{if(!It(e)||typeof e.id!=`string`||!e.id.trim()||t.has(e.id)||typeof e.enabled!=`boolean`||!It(e.config)||!It(e.config.transport))return!1;let n=e.config.transport;if(e.config.id!==void 0&&e.config.id!==e.id)return!1;if(n.type===`stdio`){if(typeof n.command!=`string`||n.args!==void 0&&(!Array.isArray(n.args)||!n.args.every(e=>typeof e==`string`))||n.env!==void 0&&(!It(n.env)||!Object.values(n.env).every(e=>typeof e==`string`)))return!1}else if([`sse`,`streamablehttp`,`streamable_http`].includes(n.type)){if(typeof n.url!=`string`||n.headers!==void 0&&(!Array.isArray(n.headers)||!n.headers.every(e=>It(e)&&typeof e.name==`string`&&typeof e.value==`string`)))return!1}else return!1;return t.add(e.id),!0}))throw Error(`MCP server list could not be verified.`);return e.servers.map(sn)}async addServer(e){return w.post(`mcp/servers`,e)}async updateServer(e,t){let n={...t,id:e};return w.put(`mcp/servers/${e}`,n)}async deleteServer(e){return w.delete(`mcp/servers/${e}`)}async connectServer(e){return w.post(`mcp/servers/${e}/connect`)}async disconnectServer(e){return w.post(`mcp/servers/${e}/disconnect`)}async refreshTools(e){return w.post(`mcp/servers/${e}/refresh`)}async getTools(e){let t=e?`mcp/servers/${e}/tools`:`mcp/tools`,n=await w.get(t);return(Array.isArray(n.tools)?n.tools:[]).map((t,n)=>un(t,e,n)).filter(e=>!!e)}async importServers(e){if(this.importInFlight)throw new $t(`busy`);this.importInFlight=!0;try{return en(await w.post(`mcp/servers/import`,e),e)}catch(e){throw e instanceof $t?e:new $t(j(e)&&e.status>=400&&e.status<500?`rejected`:`uncertain`)}finally{this.importInFlight=!1}}};function fn({label:e,children:t}){return(0,q.jsxs)(`label`,{className:`block`,children:[(0,q.jsx)(`span`,{className:`mb-1 block text-xs text-muted-foreground`,children:e}),t]})}function pn({title:e,addLabel:t,keyPlaceholder:n,valuePlaceholder:r,entries:i,onChange:a}){return(0,q.jsxs)(`div`,{children:[(0,q.jsxs)(`div`,{className:`mb-1.5 flex items-center justify-between`,children:[(0,q.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground`,children:e}),(0,q.jsxs)(s,{type:`button`,size:`sm`,variant:`secondary`,className:`h-7 px-2 text-xs`,onClick:()=>a([...i,{k:``,v:``}]),children:[(0,q.jsx)(_,{className:`size-3.5`}),` `,t]})]}),i.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground/70`,children:`无`}):(0,q.jsx)(`div`,{className:`space-y-1.5`,children:i.map((e,t)=>(0,q.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,q.jsx)(C,{className:`h-8 flex-1 font-mono text-xs`,placeholder:n,value:e.k,onChange:e=>a(i.map((n,r)=>r===t?{...n,k:e.target.value}:n))}),(0,q.jsx)(C,{className:`h-8 flex-1 font-mono text-xs`,placeholder:r,value:e.v,onChange:e=>a(i.map((n,r)=>r===t?{...n,v:e.target.value}:n))}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>a(i.filter((e,n)=>n!==t)),"aria-label":`移除`,className:`shrink-0 rounded p-1 text-muted-foreground hover:text-destructive`,children:(0,q.jsx)(ee,{className:`size-3.5`})})]},t))})]})}function mn({open:e,mode:t,initial:n,existingIds:r,onCancel:i,onSubmit:a}){let[o,c]=(0,G.useState)(``),[l,u]=(0,G.useState)(``),[d,f]=(0,G.useState)(!0),[p,m]=(0,G.useState)(`stdio`),[h,g]=(0,G.useState)(``),[_,v]=(0,G.useState)(``),[b,x]=(0,G.useState)(``),[w,E]=(0,G.useState)([]),[D,k]=(0,G.useState)(``),[A,j]=(0,G.useState)([]),[M,N]=(0,G.useState)(null),[P,F]=(0,G.useState)(!1);(0,G.useEffect)(()=>{if(!e)return;let r=t===`edit`&&n?n:null;c(r?.id??``),u(r?.name??``),f(r?.enabled??!0);let i=r?.transport;m(i?.type??`stdio`),g(i?.type===`stdio`?i.command:``),v(i?.type===`stdio`?i.args.join(`
4
4
  `):``),x(i?.type===`stdio`?i.cwd??``:``),E(i?.type===`stdio`?Object.entries(i.env??{}).map(([e,t])=>({k:e,v:t})):[]),k(i&&i.type!==`stdio`?i.url:``),j(i&&i.type!==`stdio`?i.headers.map(e=>({k:e.name,v:e.value})):[]),N(null),F(!1)},[e,t,n]);let ee=()=>{if(t===`create`){if(!o.trim())return`服务器 ID 不能为空`;if(!Ot.test(o.trim()))return`服务器 ID 只能包含字母、数字、- 和 _`;if(r.includes(o.trim()))return`该服务器 ID 已存在`}if(p===`stdio`){if(!h.trim())return`命令不能为空`}else{if(!D.trim())return`URL 不能为空`;try{new URL(D.trim())}catch{return`URL 格式无效`}}return null},I=()=>{let e=t===`edit`&&n?n.id:o.trim(),r=t===`edit`&&n?n:Nt(e),i=p===`stdio`?{type:`stdio`,command:h.trim(),args:_.split(`
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./vendor-streamdown-code-B6SuuZwa.js","./rolldown-runtime-QTnfLwEv.js","./index-CjY6eMv8.js","./vendor-react-CCIEwYL0.js","./index-xUf4TnkE.css","./vendor-markdown-CfSBref-.js","./lib-CFLxRXs3.js","./StreamdownMermaid-J7jSRtO6.js","./vendor-mermaid-Da_wWrs4.js","./strictConfig-Bf8nyKvx.js"])))=>i.map(i=>d[i]);
2
- import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,t as n}from"./vendor-react-CCIEwYL0.js";import{t as r}from"./index-CjY6eMv8.js";import{d as i}from"./vendor-markdown-CfSBref-.js";import{n as a,r as o,t as s}from"./vendor-streamdown-BIRX7zKm.js";import{i as c}from"./ErrorBoundary-DLCRl4Er.js";var l=e(t(),1),u=[`github-light`,`github-dark`],d;function f(){return d??=r(()=>import(`./vendor-streamdown-code-B6SuuZwa.js`).then(e=>e.t).then(e=>e.code),__vite__mapDeps([0,1,2,3,4,5,6]),import.meta.url),d}var p={name:`shiki`,type:`code-highlighter`,getSupportedLanguages:()=>[],getThemes:()=>u,supportsLanguage:()=>!0,highlight(e,t){return f().then(n=>{let r=n.highlight(e,t);r&&t?.(r)}),null}},m=/^[A-Za-z][A-Za-z\d+.-]*:/,h=new Set([`http:`,`https:`,`mailto:`]),g=new Set([`http:`,`https:`]);function _(e){return Array.from(e).some(e=>{let t=e.codePointAt(0);return t!==void 0&&(t<=31||t===127)})}var v=(e,t)=>{let n=e.trim();if(!n||n!==e||_(n)||t!==`href`&&t!==`src`)return null;if(!m.test(n))return n.includes(`\\`)||n.startsWith(`//`)?null:n;try{let e=new URL(n).protocol.toLowerCase();return(t===`src`?g:h).has(e)?n:null}catch{return null}},y=n(),b={animation:`fadeIn`,duration:120,maxBacklogMs:240,sep:`word`,stagger:24},x=(0,l.lazy)(()=>r(()=>import(`./StreamdownMermaid-J7jSRtO6.js`),__vite__mapDeps([7,1,3,8,2,4,9]),import.meta.url));function S({code:e,isIncomplete:t,language:n}){return t?(0,y.jsxs)(`div`,{"aria-label":`Mermaid 图表仍在接收内容`,className:`my-4 min-w-0 rounded-xl border bg-sidebar p-2`,"data-mermaid-state":`incomplete`,role:`status`,children:[(0,y.jsx)(`div`,{className:`px-1 pb-2 font-mono text-xs text-muted-foreground`,children:n}),(0,y.jsx)(`pre`,{className:`overflow-x-auto whitespace-pre-wrap rounded-md bg-background p-3 font-mono text-xs [overflow-wrap:anywhere]`,children:e})]}):(0,y.jsx)(l.Suspense,{fallback:(0,y.jsx)(`div`,{"aria-label":`正在加载 Mermaid 图表`,className:`my-4 min-h-24 animate-pulse rounded-xl border bg-sidebar`,"data-mermaid-state":`loading`,role:`status`}),children:(0,y.jsx)(x,{code:e})})}var C={cjk:s,code:p,renderers:[{component:S,language:`mermaid`}]},w=[i,a.harden],T={enabled:!0},E={katex:!1,linkMode:`text-only`};function D({children:e,className:t,isStreaming:n}){return(0,y.jsx)(o,{animated:n?b:!1,caret:n?`block`:void 0,className:c(`assistant-streamdown prose prose-sm dark:prose-invert max-w-none min-w-0 space-y-0`,`[overflow-wrap:anywhere] prose-p:my-2 prose-headings:mt-3 prose-headings:mb-1.5`,`prose-a:text-primary prose-li:my-0.5`,t),codeBlockMaxHeight:1/0,controls:!1,dir:`auto`,isAnimating:n,lineNumbers:!1,linkSafety:T,mode:n?`streaming`:`static`,parseIncompleteMarkdown:n,plugins:C,rehypePlugins:w,remend:E,shikiTheme:u,tableMaxHeight:1/0,urlTransform:v,children:e})}export{D as StreamdownMarkdown};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./vendor-streamdown-code-DslGaU_r.js","./rolldown-runtime-QTnfLwEv.js","./index-CetaXSQl.js","./vendor-react-CCIEwYL0.js","./index-xUf4TnkE.css","./vendor-markdown-CfSBref-.js","./lib-CFLxRXs3.js","./StreamdownMermaid-I-FMxv6d.js","./vendor-mermaid-CLYBA7Ke.js","./strictConfig-DWxLgSCr.js"])))=>i.map(i=>d[i]);
2
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,t as n}from"./vendor-react-CCIEwYL0.js";import{t as r}from"./index-CetaXSQl.js";import{d as i}from"./vendor-markdown-CfSBref-.js";import{n as a,r as o,t as s}from"./vendor-streamdown-BLuMYZXO.js";import{i as c}from"./ErrorBoundary-DLCRl4Er.js";var l=e(t(),1),u=[`github-light`,`github-dark`],d;function f(){return d??=r(()=>import(`./vendor-streamdown-code-DslGaU_r.js`).then(e=>e.t).then(e=>e.code),__vite__mapDeps([0,1,2,3,4,5,6]),import.meta.url),d}var p={name:`shiki`,type:`code-highlighter`,getSupportedLanguages:()=>[],getThemes:()=>u,supportsLanguage:()=>!0,highlight(e,t){return f().then(n=>{let r=n.highlight(e,t);r&&t?.(r)}),null}},m=/^[A-Za-z][A-Za-z\d+.-]*:/,h=new Set([`http:`,`https:`,`mailto:`]),g=new Set([`http:`,`https:`]);function _(e){return Array.from(e).some(e=>{let t=e.codePointAt(0);return t!==void 0&&(t<=31||t===127)})}var v=(e,t)=>{let n=e.trim();if(!n||n!==e||_(n)||t!==`href`&&t!==`src`)return null;if(!m.test(n))return n.includes(`\\`)||n.startsWith(`//`)?null:n;try{let e=new URL(n).protocol.toLowerCase();return(t===`src`?g:h).has(e)?n:null}catch{return null}},y=n(),b={animation:`fadeIn`,duration:120,maxBacklogMs:240,sep:`word`,stagger:24},x=(0,l.lazy)(()=>r(()=>import(`./StreamdownMermaid-I-FMxv6d.js`),__vite__mapDeps([7,1,3,8,2,4,9]),import.meta.url));function S({code:e,isIncomplete:t,language:n}){return t?(0,y.jsxs)(`div`,{"aria-label":`Mermaid 图表仍在接收内容`,className:`my-4 min-w-0 rounded-xl border bg-sidebar p-2`,"data-mermaid-state":`incomplete`,role:`status`,children:[(0,y.jsx)(`div`,{className:`px-1 pb-2 font-mono text-xs text-muted-foreground`,children:n}),(0,y.jsx)(`pre`,{className:`overflow-x-auto whitespace-pre-wrap rounded-md bg-background p-3 font-mono text-xs [overflow-wrap:anywhere]`,children:e})]}):(0,y.jsx)(l.Suspense,{fallback:(0,y.jsx)(`div`,{"aria-label":`正在加载 Mermaid 图表`,className:`my-4 min-h-24 animate-pulse rounded-xl border bg-sidebar`,"data-mermaid-state":`loading`,role:`status`}),children:(0,y.jsx)(x,{code:e})})}var C={cjk:s,code:p,renderers:[{component:S,language:`mermaid`}]},w=[i,a.harden],T={enabled:!0},E={katex:!1,linkMode:`text-only`};function D({children:e,className:t,isStreaming:n}){return(0,y.jsx)(o,{animated:n?b:!1,caret:n?`block`:void 0,className:c(`assistant-streamdown prose prose-sm dark:prose-invert max-w-none min-w-0 space-y-0`,`[overflow-wrap:anywhere] prose-p:my-2 prose-headings:mt-3 prose-headings:mb-1.5`,`prose-a:text-primary prose-li:my-0.5`,t),codeBlockMaxHeight:1/0,controls:!1,dir:`auto`,isAnimating:n,lineNumbers:!1,linkSafety:T,mode:n?`streaming`:`static`,parseIncompleteMarkdown:n,plugins:C,rehypePlugins:w,remend:E,shikiTheme:u,tableMaxHeight:1/0,urlTransform:v,children:e})}export{D as StreamdownMarkdown};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,t as n}from"./vendor-react-CCIEwYL0.js";import{t as r}from"./vendor-mermaid-Da_wWrs4.js";import{t as i}from"./strictConfig-Bf8nyKvx.js";var a=e(t(),1),o=n(),s=i(`app`),c=r({config:s}),l=0;function u({code:e}){let[t,n]=(0,a.useState)({kind:`loading`});return(0,a.useEffect)(()=>{let t=!1;n({kind:`loading`});let r=c.getMermaid(s),i=`streamdown-mermaid-${l++}`;return r.render(i,e).then(({svg:r})=>{t||n({kind:`ready`,source:e,svg:r})}).catch(r=>{t||n({kind:`error`,message:r instanceof Error?r.message:String(r),source:e})}),()=>{t=!0}},[e]),t.kind===`loading`||t.source!==e?(0,o.jsx)(`div`,{"aria-label":`正在渲染 Mermaid 图表`,className:`my-4 min-h-24 animate-pulse rounded-xl border bg-sidebar`,"data-mermaid-state":`loading`,role:`status`}):t.kind===`error`?(0,o.jsxs)(`figure`,{"aria-label":`Mermaid 图表无法渲染`,"aria-live":`polite`,className:`my-4 min-w-0 rounded-xl border border-destructive/40 bg-destructive/5 p-3`,"data-mermaid-state":`error`,role:`alert`,children:[(0,o.jsx)(`figcaption`,{className:`mb-2 text-xs font-medium text-destructive`,children:`Mermaid 图表无法渲染`}),(0,o.jsx)(`pre`,{className:`overflow-x-auto whitespace-pre-wrap font-mono text-xs text-muted-foreground [overflow-wrap:anywhere]`,children:e}),(0,o.jsx)(`span`,{className:`sr-only`,children:t.message})]}):(0,o.jsx)(`div`,{"aria-label":`Mermaid 图表`,className:`my-4 flex min-w-0 justify-center overflow-x-auto rounded-xl border bg-background p-2 [&_svg]:h-auto [&_svg]:max-w-full`,"data-mermaid-state":`ready`,dangerouslySetInnerHTML:{__html:t.svg},role:`img`})}export{u as default};
1
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,t as n}from"./vendor-react-CCIEwYL0.js";import{t as r}from"./vendor-mermaid-CLYBA7Ke.js";import{t as i}from"./strictConfig-DWxLgSCr.js";var a=e(t(),1),o=n(),s=i(`app`),c=r({config:s}),l=0;function u({code:e}){let[t,n]=(0,a.useState)({kind:`loading`});return(0,a.useEffect)(()=>{let t=!1;n({kind:`loading`});let r=c.getMermaid(s),i=`streamdown-mermaid-${l++}`;return r.render(i,e).then(({svg:r})=>{t||n({kind:`ready`,source:e,svg:r})}).catch(r=>{t||n({kind:`error`,message:r instanceof Error?r.message:String(r),source:e})}),()=>{t=!0}},[e]),t.kind===`loading`||t.source!==e?(0,o.jsx)(`div`,{"aria-label":`正在渲染 Mermaid 图表`,className:`my-4 min-h-24 animate-pulse rounded-xl border bg-sidebar`,"data-mermaid-state":`loading`,role:`status`}):t.kind===`error`?(0,o.jsxs)(`figure`,{"aria-label":`Mermaid 图表无法渲染`,"aria-live":`polite`,className:`my-4 min-w-0 rounded-xl border border-destructive/40 bg-destructive/5 p-3`,"data-mermaid-state":`error`,role:`alert`,children:[(0,o.jsx)(`figcaption`,{className:`mb-2 text-xs font-medium text-destructive`,children:`Mermaid 图表无法渲染`}),(0,o.jsx)(`pre`,{className:`overflow-x-auto whitespace-pre-wrap font-mono text-xs text-muted-foreground [overflow-wrap:anywhere]`,children:e}),(0,o.jsx)(`span`,{className:`sr-only`,children:t.message})]}):(0,o.jsx)(`div`,{"aria-label":`Mermaid 图表`,className:`my-4 flex min-w-0 justify-center overflow-x-auto rounded-xl border bg-background p-2 [&_svg]:h-auto [&_svg]:max-w-full`,"data-mermaid-state":`ready`,dangerouslySetInnerHTML:{__html:t.svg},role:`img`})}export{u as default};
@@ -0,0 +1 @@
1
+ import{t as e}from"./renderPdf-BHOiVXVS.js";export default e();
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Root-dWsRRTlH.js","./rolldown-runtime-QTnfLwEv.js","./vendor-react-CCIEwYL0.js","./ErrorBoundary-DLCRl4Er.js","./bundle-mjs-B_AA55HL.js","./select-DYBAIyVx.js"])))=>i.map(i=>d[i]);
2
- import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,n,t as r}from"./vendor-react-CCIEwYL0.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var i=e(t(),1),a=n(),o=class extends Error{constructor(e){super(e),this.name=`RuntimeConfigurationError`}},s=e=>e?.trim()||null,c=e=>Array.from(e).some(e=>{let t=e.charCodeAt(0);return t<=31||t===127}),l=e=>{if(c(e))throw new o(`Backend endpoint must not contain control characters.`);let t=e.trim(),n;try{n=new URL(t)}catch{throw new o(`Backend endpoint must be an absolute HTTP(S) URL.`)}if(n.protocol!==`http:`&&n.protocol!==`https:`)throw new o(`Backend endpoint must use HTTP or HTTPS.`);if(t.includes(`\\`))throw new o(`Backend endpoint path must be empty or /api/v1.`);if(t.includes(`?`)||t.includes(`#`))throw new o(`Backend endpoint must not contain a query or fragment.`);if(n.username||n.password)throw new o(`Backend endpoint must not contain credentials.`);let r=/^(?:https?):\/\/([^/]+)(\/.*)?$/i.exec(t);if(!r)throw new o(`Backend endpoint must be an absolute HTTP(S) URL.`);if(r[1].includes(`@`))throw new o(`Backend endpoint must not contain credentials.`);let i=r[2]??``,a=i===``||i===`/`,s=/^\/api\/v1\/*$/.test(i);if(!a&&!s)throw new o(`Backend endpoint path must be empty or /api/v1.`);let l=n.origin,u=n.protocol===`https:`?`wss:`:`ws:`;return{origin:l,nativeApi:`${l}/api/v1`,v2Stream:`${u}//${n.host}/v2/stream`}},u=e=>{if(e&&typeof e==`object`&&!Object.isFrozen(e)){for(let t of Object.values(e))u(t);Object.freeze(e)}return e},d=e=>u({schemaVersion:1,host:{kind:e.host.kind,capabilities:{...e.host.capabilities}},endpointSource:e.endpointSource,endpoints:l(e.backendBaseUrl),publicMetadata:{mode:s(e.mode)??`production`,development:e.development===!0},artifact:{packageName:`@bigduu/lotus-next`,version:s(e.version)??`0.0.0`,revision:s(e.revision)},auth:{source:`http-cookie`,requestCredentials:`include`}}),f=null,p=e=>JSON.stringify(e),m=e=>{if(f){if(p(f)!==p(e))throw new o(`A different Lotus Next runtime is already installed; reload the complete artifact instead.`);return f}return f=u(e),f},h=()=>{if(!f)throw new o(`Lotus Next runtime is not installed. The composition root must install it before loading application services.`);return f},g=`lotus_next_backend_endpoint_v1`,_=`copilot_backend_base_url`,v=`Backend override migration could not be verified; the legacy override was preserved.`,y=`Canonical backend override is active, but legacy override preservation could not be verified.`,b=e=>Array.from(e).some(e=>{let t=e.charCodeAt(0);return t<=31||t===127}),x=e=>{let t=e.split(`.`);if(t.length!==4)return null;let n=t.map(e=>/^\d{1,3}$/.test(e)?Number(e):NaN);return n.every(e=>Number.isInteger(e)&&e>=0&&e<=255)?n:null},S=e=>{if(!e.includes(`:`))return null;let t=e.split(`::`);if(t.length>2)return null;let n=e=>{if(!e)return[];let t=e.split(`:`);return t.some(e=>!/^[\da-f]{1,4}$/.test(e))?null:t.map(e=>Number.parseInt(e,16))},r=n(t[0]??``),i=n(t[1]??``);if(!r||!i)return null;if(t.length===1)return r.length===8?r:null;let a=8-r.length-i.length;return a<1?null:[...r,...Array(a).fill(0),...i]},C=e=>{let t=e.trim().toLowerCase(),n=t.startsWith(`[`)&&t.endsWith(`]`)?t.slice(1,-1):t,r=x(n);if(r)return{kind:`ipv4`,octets:r};let i=S(n);return i?{kind:`ipv6`,hextets:i}:{kind:`dns`,labels:n.replace(/\.+$/,``).split(`.`)}},w=e=>{let t=C(e);if(t.kind===`dns`)return t.labels.at(-1)===`localhost`;if(t.kind===`ipv4`)return t.octets[0]===127;let n=t.hextets.slice(0,7).every(e=>e===0)&&t.hextets[7]===1,r=t.hextets.slice(0,5).every(e=>e===0)&&t.hextets[5]===65535,i=(t.hextets[6]??0)>>>8;return n||r&&i===127},T=e=>{if(!e?.href)return null;try{return new URL(e.href)}catch{throw new o(`The page location is not a valid URL.`)}},E=()=>{try{return globalThis.localStorage===void 0?null:globalThis.localStorage}catch{return null}},D=(e,t)=>{let n=!0,r=(t,r)=>{try{r===null?e.removeItem(t):e.setItem(t,r)}catch{n=!1}};r(g,t.versioned),r(_,t.legacy);try{n=e.getItem(`lotus_next_backend_endpoint_v1`)===t.versioned&&n}catch{n=!1}try{n=e.getItem(`copilot_backend_base_url`)===t.legacy&&n}catch{n=!1}return n},O=(e,t)=>{let n=l(e),r=new URL(n.nativeApi);if(t?.protocol===`https:`&&r.protocol!==`https:`)throw new o(`An HTTPS Lotus Next page cannot use an insecure HTTP backend endpoint.`);if(t&&(t.protocol===`http:`||t.protocol===`https:`)&&!w(t.hostname)&&w(r.hostname))throw new o(`A remotely served Lotus Next page cannot target a loopback backend.`);return n.nativeApi},k=e=>{if(b(e))return e;let t=e.trim();if(t.includes(`\\`)||t.includes(`?`)||t.includes(`#`))return e;let n=/^([A-Za-z][A-Za-z\d+.-]*:\/\/[^/]+)(\/.*)?$/.exec(t);return n&&/^\/v1\/*$/.test(n[2]??``)?`${n[1]}/api/v1`:e},A=(e,t,n,r)=>{let i=!1;try{e.removeItem(t),i=e.getItem(t)===null}catch{}let a=n instanceof o?n.message:`Backend override validation failed.`;r(`${i?`Removed`:`Ignored`} unsafe backend override: ${a}`)},j=(e,t,n)=>{if(!e)return null;let r;try{r=e.getItem(g)}catch{return null}if(r!==null)try{return O(r,t)}catch(t){return A(e,g,t,n),null}let i;try{i=e.getItem(_)}catch{return null}if(i===null)return null;let a;try{a=O(k(i),t)}catch(t){return A(e,_,t,n),null}let o=!1;try{e.setItem(g,a),o=e.getItem(g)===a}catch{}if(!o)return D(e,{versioned:null,legacy:i}),n(v),a;let s=!1;try{e.removeItem(_),s=e.getItem(_)===null}catch{}if(!s){let t=!1;try{e.setItem(_,i)}catch{}try{t=e.getItem(_)===i}catch{}n(t?v:y)}return a},M=e=>typeof e==`object`&&!!e&&typeof e.invoke==`function`,N=e=>!!(e&&(e.protocol===`http:`||e.protocol===`https:`)&&!w(e.hostname)),P=(e,t)=>{let n=M(e.tauriInternals)&&!N(t);return{kind:n?`bodhi-desktop`:e.embedded?`bamboo-embedded`:`browser`,capabilities:{nativeFileSystem:n,nativeNotifications:n,externalShell:n,sidecarBackend:n}}},F=(e,t)=>{if(!M(e.tauriInternals)||e.sidecarPort===void 0||e.sidecarPort===null)return null;if(N(t))throw new o(`A remotely served Lotus Next page cannot accept a loopback Bodhi sidecar injection.`);if(typeof e.sidecarPort!=`number`||!Number.isInteger(e.sidecarPort)||e.sidecarPort<1||e.sidecarPort>65535)throw new o(`The Bodhi sidecar port must be an integer from 1 to 65535.`);if(t?.protocol===`https:`)throw new o(`An HTTPS Lotus Next page cannot connect to an HTTP Bodhi sidecar.`);return`http://127.0.0.1:${e.sidecarPort}`},I=e=>{if(!e||e.protocol!==`http:`&&e.protocol!==`https:`)throw new o(`No supported backend endpoint was provided. Serve Lotus Next over HTTP(S) or inject a trusted Bodhi sidecar port.`);return e.origin},L=(e={})=>{let t=e.location===void 0?typeof globalThis.location?.href==`string`?{href:globalThis.location.href}:null:e.location,n=e.storage===void 0?E():e.storage,r=e.tauriInternals===void 0?typeof window>`u`?void 0:window.__TAURI_INTERNALS__:e.tauriInternals,i=e.sidecarPort===void 0?typeof window>`u`?void 0:window.__BAMBOO_BACKEND_PORT__:e.sidecarPort,a=e.embedded??(typeof window<`u`&&window.parent!==window),o={...e,tauriInternals:r,sidecarPort:i,embedded:a},s=T(t),c=e.warn??(e=>console.warn(`[runtime] ${e}`)),l=F(o,s),u=l?null:j(n,s,c),f=null;!l&&!u&&e.build?.backendBaseUrl?.trim()&&(f=O(e.build.backendBaseUrl,s));let p,m;return l?(p=`tauri-sidecar`,m=l):u?(p=`stored-override`,m=u):f?(p=`public-build-default`,m=f):(p=`page-origin`,m=I(s)),d({host:P(o,s),endpointSource:p,backendBaseUrl:m,mode:e.build?.mode,development:e.build?.development,version:e.build?.version,revision:e.build?.revision})},R=()=>L({build:{backendBaseUrl:void 0,version:void 0,revision:void 0,mode:`production`,development:!1}}),z=/(?:^|\/)Settings-[A-Za-z0-9_-]+\.js(?:[?#]|$)/,B=e=>{let t=e instanceof Error?`${e.message}\n${e.stack??``}`:typeof e==`string`?e:``;return z.test(t)},V=r(),H=`modulepreload`,U=function(e,t){return new URL(e,t).href},W={},G=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,new URL(`../../../src/node/plugins/importAnalysisBuild.ts`,import.meta.url)).href}r=o(t.map(t=>{if(t=U(t,n),t=s(t),t in W)return;W[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:H,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},K=!1;window.addEventListener(`vite:preloadError`,e=>{if(B(e.payload))return;let t=`bodhi_preload_reload_at`,n=Date.now(),r=0;try{r=Number(window.sessionStorage.getItem(t)??0)}catch{r=K?n:0}if(!(n-r<1e4)){e.preventDefault(),K=!0;try{window.sessionStorage.setItem(t,String(n))}catch{}window.location.reload()}});var q=document.getElementById(`root`);if(!q)throw Error(`Lotus Next root element is missing.`);(async()=>{m(R());let[{default:e},{default:t}]=await Promise.all([G(()=>import(`./Root-dWsRRTlH.js`),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url),G(()=>import(`./ErrorBoundary-DLCRl4Er.js`).then(e=>e.n),__vite__mapDeps([3,1,2,4]),import.meta.url)]);(0,a.createRoot)(q).render((0,V.jsx)(i.StrictMode,{children:(0,V.jsx)(t,{name:`Root`,children:(0,V.jsx)(e,{})})}))})().catch(e=>{let t=e instanceof Error?e.message:String(e);console.error(`[runtime] Lotus Next bootstrap failed:`,e);let n=document.createElement(`main`);n.className=`flex min-h-screen items-center justify-center bg-background p-6 text-foreground`;let r=document.createElement(`section`);r.className=`w-full max-w-xl rounded-2xl border bg-card p-6 shadow-lg`;let i=document.createElement(`h1`);i.className=`text-xl font-semibold`,i.textContent=`Lotus Next 无法启动`;let a=document.createElement(`p`);a.className=`mt-3 text-sm leading-relaxed text-muted-foreground`,a.textContent=`当前宿主提供了不受支持或不安全的运行时配置。请升级匹配的完整前端与宿主制品,或修正公开后端地址后重新加载。`;let o=document.createElement(`pre`);o.className=`mt-4 overflow-auto rounded-lg bg-muted p-3 text-xs`,o.textContent=t,r.append(i,a,o),n.append(r),q.replaceChildren(n)});export{h as n,G as t};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Root-BEo2vkPq.js","./rolldown-runtime-QTnfLwEv.js","./vendor-react-CCIEwYL0.js","./ErrorBoundary-DLCRl4Er.js","./bundle-mjs-B_AA55HL.js","./select-BQoctDKH.js"])))=>i.map(i=>d[i]);
2
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,n,t as r}from"./vendor-react-CCIEwYL0.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var i=e(t(),1),a=n(),o=class extends Error{constructor(e){super(e),this.name=`RuntimeConfigurationError`}},s=e=>e?.trim()||null,c=e=>Array.from(e).some(e=>{let t=e.charCodeAt(0);return t<=31||t===127}),l=e=>{if(c(e))throw new o(`Backend endpoint must not contain control characters.`);let t=e.trim(),n;try{n=new URL(t)}catch{throw new o(`Backend endpoint must be an absolute HTTP(S) URL.`)}if(n.protocol!==`http:`&&n.protocol!==`https:`)throw new o(`Backend endpoint must use HTTP or HTTPS.`);if(t.includes(`\\`))throw new o(`Backend endpoint path must be empty or /api/v1.`);if(t.includes(`?`)||t.includes(`#`))throw new o(`Backend endpoint must not contain a query or fragment.`);if(n.username||n.password)throw new o(`Backend endpoint must not contain credentials.`);let r=/^(?:https?):\/\/([^/]+)(\/.*)?$/i.exec(t);if(!r)throw new o(`Backend endpoint must be an absolute HTTP(S) URL.`);if(r[1].includes(`@`))throw new o(`Backend endpoint must not contain credentials.`);let i=r[2]??``,a=i===``||i===`/`,s=/^\/api\/v1\/*$/.test(i);if(!a&&!s)throw new o(`Backend endpoint path must be empty or /api/v1.`);let l=n.origin,u=n.protocol===`https:`?`wss:`:`ws:`;return{origin:l,nativeApi:`${l}/api/v1`,v2Stream:`${u}//${n.host}/v2/stream`}},u=e=>{if(e&&typeof e==`object`&&!Object.isFrozen(e)){for(let t of Object.values(e))u(t);Object.freeze(e)}return e},d=e=>u({schemaVersion:1,host:{kind:e.host.kind,capabilities:{...e.host.capabilities}},endpointSource:e.endpointSource,endpoints:l(e.backendBaseUrl),publicMetadata:{mode:s(e.mode)??`production`,development:e.development===!0},artifact:{packageName:`@bigduu/lotus-next`,version:s(e.version)??`0.0.0`,revision:s(e.revision)},auth:{source:`http-cookie`,requestCredentials:`include`}}),f=null,p=e=>JSON.stringify(e),m=e=>{if(f){if(p(f)!==p(e))throw new o(`A different Lotus Next runtime is already installed; reload the complete artifact instead.`);return f}return f=u(e),f},h=()=>{if(!f)throw new o(`Lotus Next runtime is not installed. The composition root must install it before loading application services.`);return f},g=`lotus_next_backend_endpoint_v1`,_=`copilot_backend_base_url`,v=`Backend override migration could not be verified; the legacy override was preserved.`,y=`Canonical backend override is active, but legacy override preservation could not be verified.`,b=e=>Array.from(e).some(e=>{let t=e.charCodeAt(0);return t<=31||t===127}),x=e=>{let t=e.split(`.`);if(t.length!==4)return null;let n=t.map(e=>/^\d{1,3}$/.test(e)?Number(e):NaN);return n.every(e=>Number.isInteger(e)&&e>=0&&e<=255)?n:null},S=e=>{if(!e.includes(`:`))return null;let t=e.split(`::`);if(t.length>2)return null;let n=e=>{if(!e)return[];let t=e.split(`:`);return t.some(e=>!/^[\da-f]{1,4}$/.test(e))?null:t.map(e=>Number.parseInt(e,16))},r=n(t[0]??``),i=n(t[1]??``);if(!r||!i)return null;if(t.length===1)return r.length===8?r:null;let a=8-r.length-i.length;return a<1?null:[...r,...Array(a).fill(0),...i]},C=e=>{let t=e.trim().toLowerCase(),n=t.startsWith(`[`)&&t.endsWith(`]`)?t.slice(1,-1):t,r=x(n);if(r)return{kind:`ipv4`,octets:r};let i=S(n);return i?{kind:`ipv6`,hextets:i}:{kind:`dns`,labels:n.replace(/\.+$/,``).split(`.`)}},w=e=>{let t=C(e);if(t.kind===`dns`)return t.labels.at(-1)===`localhost`;if(t.kind===`ipv4`)return t.octets[0]===127;let n=t.hextets.slice(0,7).every(e=>e===0)&&t.hextets[7]===1,r=t.hextets.slice(0,5).every(e=>e===0)&&t.hextets[5]===65535,i=(t.hextets[6]??0)>>>8;return n||r&&i===127},T=e=>{if(!e?.href)return null;try{return new URL(e.href)}catch{throw new o(`The page location is not a valid URL.`)}},E=()=>{try{return globalThis.localStorage===void 0?null:globalThis.localStorage}catch{return null}},D=(e,t)=>{let n=!0,r=(t,r)=>{try{r===null?e.removeItem(t):e.setItem(t,r)}catch{n=!1}};r(g,t.versioned),r(_,t.legacy);try{n=e.getItem(`lotus_next_backend_endpoint_v1`)===t.versioned&&n}catch{n=!1}try{n=e.getItem(`copilot_backend_base_url`)===t.legacy&&n}catch{n=!1}return n},O=(e,t)=>{let n=l(e),r=new URL(n.nativeApi);if(t?.protocol===`https:`&&r.protocol!==`https:`)throw new o(`An HTTPS Lotus Next page cannot use an insecure HTTP backend endpoint.`);if(t&&(t.protocol===`http:`||t.protocol===`https:`)&&!w(t.hostname)&&w(r.hostname))throw new o(`A remotely served Lotus Next page cannot target a loopback backend.`);return n.nativeApi},k=e=>{if(b(e))return e;let t=e.trim();if(t.includes(`\\`)||t.includes(`?`)||t.includes(`#`))return e;let n=/^([A-Za-z][A-Za-z\d+.-]*:\/\/[^/]+)(\/.*)?$/.exec(t);return n&&/^\/v1\/*$/.test(n[2]??``)?`${n[1]}/api/v1`:e},A=(e,t,n,r)=>{let i=!1;try{e.removeItem(t),i=e.getItem(t)===null}catch{}let a=n instanceof o?n.message:`Backend override validation failed.`;r(`${i?`Removed`:`Ignored`} unsafe backend override: ${a}`)},j=(e,t,n)=>{if(!e)return null;let r;try{r=e.getItem(g)}catch{return null}if(r!==null)try{return O(r,t)}catch(t){return A(e,g,t,n),null}let i;try{i=e.getItem(_)}catch{return null}if(i===null)return null;let a;try{a=O(k(i),t)}catch(t){return A(e,_,t,n),null}let o=!1;try{e.setItem(g,a),o=e.getItem(g)===a}catch{}if(!o)return D(e,{versioned:null,legacy:i}),n(v),a;let s=!1;try{e.removeItem(_),s=e.getItem(_)===null}catch{}if(!s){let t=!1;try{e.setItem(_,i)}catch{}try{t=e.getItem(_)===i}catch{}n(t?v:y)}return a},M=e=>typeof e==`object`&&!!e&&typeof e.invoke==`function`,N=e=>!!(e&&(e.protocol===`http:`||e.protocol===`https:`)&&!w(e.hostname)),P=(e,t)=>{let n=M(e.tauriInternals)&&!N(t);return{kind:n?`bodhi-desktop`:e.embedded?`bamboo-embedded`:`browser`,capabilities:{nativeFileSystem:n,nativeNotifications:n,externalShell:n,sidecarBackend:n}}},F=(e,t)=>{if(!M(e.tauriInternals)||e.sidecarPort===void 0||e.sidecarPort===null)return null;if(N(t))throw new o(`A remotely served Lotus Next page cannot accept a loopback Bodhi sidecar injection.`);if(typeof e.sidecarPort!=`number`||!Number.isInteger(e.sidecarPort)||e.sidecarPort<1||e.sidecarPort>65535)throw new o(`The Bodhi sidecar port must be an integer from 1 to 65535.`);if(t?.protocol===`https:`)throw new o(`An HTTPS Lotus Next page cannot connect to an HTTP Bodhi sidecar.`);return`http://127.0.0.1:${e.sidecarPort}`},I=e=>{if(!e||e.protocol!==`http:`&&e.protocol!==`https:`)throw new o(`No supported backend endpoint was provided. Serve Lotus Next over HTTP(S) or inject a trusted Bodhi sidecar port.`);return e.origin},L=(e={})=>{let t=e.location===void 0?typeof globalThis.location?.href==`string`?{href:globalThis.location.href}:null:e.location,n=e.storage===void 0?E():e.storage,r=e.tauriInternals===void 0?typeof window>`u`?void 0:window.__TAURI_INTERNALS__:e.tauriInternals,i=e.sidecarPort===void 0?typeof window>`u`?void 0:window.__BAMBOO_BACKEND_PORT__:e.sidecarPort,a=e.embedded??(typeof window<`u`&&window.parent!==window),o={...e,tauriInternals:r,sidecarPort:i,embedded:a},s=T(t),c=e.warn??(e=>console.warn(`[runtime] ${e}`)),l=F(o,s),u=l?null:j(n,s,c),f=null;!l&&!u&&e.build?.backendBaseUrl?.trim()&&(f=O(e.build.backendBaseUrl,s));let p,m;return l?(p=`tauri-sidecar`,m=l):u?(p=`stored-override`,m=u):f?(p=`public-build-default`,m=f):(p=`page-origin`,m=I(s)),d({host:P(o,s),endpointSource:p,backendBaseUrl:m,mode:e.build?.mode,development:e.build?.development,version:e.build?.version,revision:e.build?.revision})},R=()=>L({build:{backendBaseUrl:void 0,version:void 0,revision:void 0,mode:`production`,development:!1}}),z=/(?:^|\/)Settings-[A-Za-z0-9_-]+\.js(?:[?#]|$)/,B=e=>{let t=e instanceof Error?`${e.message}\n${e.stack??``}`:typeof e==`string`?e:``;return z.test(t)},V=r(),H=`modulepreload`,U=function(e,t){return new URL(e,t).href},W={},G=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,new URL(`../../../src/node/plugins/importAnalysisBuild.ts`,import.meta.url)).href}r=o(t.map(t=>{if(t=U(t,n),t=s(t),t in W)return;W[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:H,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},K=!1;window.addEventListener(`vite:preloadError`,e=>{if(B(e.payload))return;let t=`bodhi_preload_reload_at`,n=Date.now(),r=0;try{r=Number(window.sessionStorage.getItem(t)??0)}catch{r=K?n:0}if(!(n-r<1e4)){e.preventDefault(),K=!0;try{window.sessionStorage.setItem(t,String(n))}catch{}window.location.reload()}});var q=document.getElementById(`root`);if(!q)throw Error(`Lotus Next root element is missing.`);(async()=>{m(R());let[{default:e},{default:t}]=await Promise.all([G(()=>import(`./Root-BEo2vkPq.js`),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url),G(()=>import(`./ErrorBoundary-DLCRl4Er.js`).then(e=>e.n),__vite__mapDeps([3,1,2,4]),import.meta.url)]);(0,a.createRoot)(q).render((0,V.jsx)(i.StrictMode,{children:(0,V.jsx)(t,{name:`Root`,children:(0,V.jsx)(e,{})})}))})().catch(e=>{let t=e instanceof Error?e.message:String(e);console.error(`[runtime] Lotus Next bootstrap failed:`,e);let n=document.createElement(`main`);n.className=`flex min-h-screen items-center justify-center bg-background p-6 text-foreground`;let r=document.createElement(`section`);r.className=`w-full max-w-xl rounded-2xl border bg-card p-6 shadow-lg`;let i=document.createElement(`h1`);i.className=`text-xl font-semibold`,i.textContent=`Lotus Next 无法启动`;let a=document.createElement(`p`);a.className=`mt-3 text-sm leading-relaxed text-muted-foreground`,a.textContent=`当前宿主提供了不受支持或不安全的运行时配置。请升级匹配的完整前端与宿主制品,或修正公开后端地址后重新加载。`;let o=document.createElement(`pre`);o.className=`mt-4 overflow-auto rounded-lg bg-muted p-3 text-xs`,o.textContent=t,r.append(i,a,o),n.append(r),q.replaceChildren(n)});export{h as n,G as t};