@markus-global/cli 0.9.7 → 0.9.8

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 (66) hide show
  1. package/dist/markus.mjs +8 -5
  2. package/dist/web-ui/assets/{CommentInput-JPZATTdP.js → CommentInput-CcU4x-2w.js} +1 -1
  3. package/dist/web-ui/assets/{ContentRenderer-gaxBn1N9.js → ContentRenderer-C28LBAOD.js} +2 -2
  4. package/dist/web-ui/assets/DeliverableShareModal-DAR6-GIg.js +1 -0
  5. package/dist/web-ui/assets/Deliverables-BuFmzt8Q.js +3 -0
  6. package/dist/web-ui/assets/{Notifications-W-Mx_v6q.js → Notifications-DfEPEYXi.js} +1 -1
  7. package/dist/web-ui/assets/{Search-Cxtd9r1S.js → Search-DVngYDXA.js} +1 -1
  8. package/dist/web-ui/assets/{Settings-Q87nTBy5.js → Settings-DL8i8fbx.js} +1 -1
  9. package/dist/web-ui/assets/{Store-BK54Nx60.js → Store-C5bIowl-.js} +1 -1
  10. package/dist/web-ui/assets/{Team-CWRLD5sM.js → Team-BPirIx0q.js} +30 -30
  11. package/dist/web-ui/assets/{Work-xejZ7HCT.js → Work-CjgHtG8z.js} +5 -5
  12. package/dist/web-ui/assets/{arc-BqhlYS08.js → arc-BT_F7CX9.js} +1 -1
  13. package/dist/web-ui/assets/{architectureDiagram-3BPJPVTR-C8fUeKGJ.js → architectureDiagram-3BPJPVTR-BgRvj0-5.js} +1 -1
  14. package/dist/web-ui/assets/{blockDiagram-GPEHLZMM-eILAtQzQ.js → blockDiagram-GPEHLZMM-BHGe_N_M.js} +1 -1
  15. package/dist/web-ui/assets/{c4Diagram-AAUBKEIU-DdV7TyX_.js → c4Diagram-AAUBKEIU-Bf3z_oHk.js} +1 -1
  16. package/dist/web-ui/assets/channel-BDoV60FN.js +1 -0
  17. package/dist/web-ui/assets/{chunk-2J33WTMH-BwuewEg2.js → chunk-2J33WTMH-DUOJv34F.js} +1 -1
  18. package/dist/web-ui/assets/{chunk-4BX2VUAB-Bv26FANh.js → chunk-4BX2VUAB-BnGMN5aR.js} +1 -1
  19. package/dist/web-ui/assets/{chunk-55IACEB6-DFTeZroI.js → chunk-55IACEB6-cUvrWf3P.js} +1 -1
  20. package/dist/web-ui/assets/{chunk-727SXJPM-i7IiTNSf.js → chunk-727SXJPM-DAIeVGil.js} +1 -1
  21. package/dist/web-ui/assets/{chunk-AQP2D5EJ-BoPcIU1Z.js → chunk-AQP2D5EJ-CvHiJGw_.js} +1 -1
  22. package/dist/web-ui/assets/{chunk-FMBD7UC4-DTXl3WfT.js → chunk-FMBD7UC4-CuFNK3C8.js} +1 -1
  23. package/dist/web-ui/assets/{chunk-ND2GUHAM-DdzR-Jnl.js → chunk-ND2GUHAM-DvQAnLZh.js} +1 -1
  24. package/dist/web-ui/assets/{chunk-QZHKN3VN-DqSW43I1.js → chunk-QZHKN3VN-Aoa5sIU7.js} +1 -1
  25. package/dist/web-ui/assets/classDiagram-4FO5ZUOK-CsLOGMTv.js +1 -0
  26. package/dist/web-ui/assets/classDiagram-v2-Q7XG4LA2-CsLOGMTv.js +1 -0
  27. package/dist/web-ui/assets/{cose-bilkent-S5V4N54A-C-UFRPSb.js → cose-bilkent-S5V4N54A-Uuy7nGWb.js} +1 -1
  28. package/dist/web-ui/assets/{dagre-BM42HDAG-92ucBloh.js → dagre-BM42HDAG-CF97s255.js} +1 -1
  29. package/dist/web-ui/assets/{diagram-2AECGRRQ-B8zRoWWP.js → diagram-2AECGRRQ-Cf3bRRU7.js} +1 -1
  30. package/dist/web-ui/assets/{diagram-5GNKFQAL-CM3pWtYN.js → diagram-5GNKFQAL-DeWiUo-B.js} +1 -1
  31. package/dist/web-ui/assets/{diagram-KO2AKTUF-V7UmwGTe.js → diagram-KO2AKTUF-g2SF4uuK.js} +1 -1
  32. package/dist/web-ui/assets/{diagram-LMA3HP47-DG1RtUeD.js → diagram-LMA3HP47-jfceMN5q.js} +1 -1
  33. package/dist/web-ui/assets/{diagram-OG6HWLK6-BTwLdZJw.js → diagram-OG6HWLK6-CRN8tK4z.js} +1 -1
  34. package/dist/web-ui/assets/{erDiagram-TEJ5UH35-BNXeXKHH.js → erDiagram-TEJ5UH35-DUTClqO1.js} +1 -1
  35. package/dist/web-ui/assets/{flowDiagram-I6XJVG4X-VP_sRWgd.js → flowDiagram-I6XJVG4X-miwyCuKa.js} +1 -1
  36. package/dist/web-ui/assets/{ganttDiagram-6RSMTGT7-CvnpoufX.js → ganttDiagram-6RSMTGT7-Co8Oe3L4.js} +1 -1
  37. package/dist/web-ui/assets/{gitGraphDiagram-PVQCEYII-zO7DNQqQ.js → gitGraphDiagram-PVQCEYII-VmIpxXAL.js} +1 -1
  38. package/dist/web-ui/assets/index-DegyOQC4.css +1 -0
  39. package/dist/web-ui/assets/{index-B1VN5yM1.js → index-sjnbPgLJ.js} +67 -67
  40. package/dist/web-ui/assets/{infoDiagram-5YYISTIA-BSGbaVLq.js → infoDiagram-5YYISTIA-C4omrfgp.js} +1 -1
  41. package/dist/web-ui/assets/{ishikawaDiagram-YF4QCWOH-BatvAQOH.js → ishikawaDiagram-YF4QCWOH-Ty2P769k.js} +1 -1
  42. package/dist/web-ui/assets/{journeyDiagram-JHISSGLW-Cajy4fZr.js → journeyDiagram-JHISSGLW-BKjERdBC.js} +1 -1
  43. package/dist/web-ui/assets/{kanban-definition-UN3LZRKU-DLpKR4E5.js → kanban-definition-UN3LZRKU-CKepooo8.js} +1 -1
  44. package/dist/web-ui/assets/{mermaid.core-B4fv65oQ.js → mermaid.core-86q0lHkP.js} +5 -5
  45. package/dist/web-ui/assets/{mindmap-definition-RKZ34NQL-C2HVqxfu.js → mindmap-definition-RKZ34NQL-DHWtWZRN.js} +1 -1
  46. package/dist/web-ui/assets/{pieDiagram-4H26LBE5-Bswg7SQl.js → pieDiagram-4H26LBE5-DkU1SDIf.js} +1 -1
  47. package/dist/web-ui/assets/{quadrantDiagram-W4KKPZXB-CyYiDqNE.js → quadrantDiagram-W4KKPZXB-DJHQgFEW.js} +1 -1
  48. package/dist/web-ui/assets/{requirementDiagram-4Y6WPE33-BWZmKUo8.js → requirementDiagram-4Y6WPE33-D0PXuzjM.js} +1 -1
  49. package/dist/web-ui/assets/{sankeyDiagram-5OEKKPKP-C3imZVxk.js → sankeyDiagram-5OEKKPKP-D8ZU245D.js} +1 -1
  50. package/dist/web-ui/assets/{sequenceDiagram-3UESZ5HK-BrySebCt.js → sequenceDiagram-3UESZ5HK-BKUzkb7M.js} +1 -1
  51. package/dist/web-ui/assets/{stateDiagram-AJRCARHV-0Lp5CycE.js → stateDiagram-AJRCARHV-hRMrLG3O.js} +1 -1
  52. package/dist/web-ui/assets/stateDiagram-v2-BHNVJYJU-CS0Tx8JL.js +1 -0
  53. package/dist/web-ui/assets/{timeline-definition-PNZ67QCA-BIGJbkoS.js → timeline-definition-PNZ67QCA-CDok_Xbq.js} +1 -1
  54. package/dist/web-ui/assets/{vennDiagram-CIIHVFJN-CS9GEvPk.js → vennDiagram-CIIHVFJN-BYWGyJ9q.js} +1 -1
  55. package/dist/web-ui/assets/{wardley-L42UT6IY-BSNtMxtd.js → wardley-L42UT6IY-DnhUtsUo.js} +1 -1
  56. package/dist/web-ui/assets/{wardleyDiagram-YWT4CUSO-CaEGOjwH.js → wardleyDiagram-YWT4CUSO-B--QBlgZ.js} +1 -1
  57. package/dist/web-ui/assets/{xychartDiagram-2RQKCTM6-Cr_pwOHb.js → xychartDiagram-2RQKCTM6-CgFIWd7_.js} +1 -1
  58. package/dist/web-ui/index.html +2 -2
  59. package/package.json +1 -1
  60. package/dist/web-ui/assets/DeliverableShareModal-B6qqZgFc.js +0 -1
  61. package/dist/web-ui/assets/Deliverables-BUi9KGwf.js +0 -3
  62. package/dist/web-ui/assets/channel-C-TW97LX.js +0 -1
  63. package/dist/web-ui/assets/classDiagram-4FO5ZUOK-C92nY4nN.js +0 -1
  64. package/dist/web-ui/assets/classDiagram-v2-Q7XG4LA2-C92nY4nN.js +0 -1
  65. package/dist/web-ui/assets/index-BbQpGkiM.css +0 -1
  66. package/dist/web-ui/assets/stateDiagram-v2-BHNVJYJU-QVZbqffU.js +0 -1
@@ -1,4 +1,4 @@
1
- import{u as pe,r as i,j as e,D as Pn,v as xa,l as V,a as ma,b as ga,c as fa,W as Lr,n as ns,X as pa,Y as Rr,P as Br,h as Ve,i as ha,Z as An,w as ba,o as as,t as Os,_ as ya}from"./index-B1VN5yM1.js";function va(s,r){for(var o=0;o<r.length;o++){const n=r[o];if(typeof n!="string"&&!Array.isArray(n)){for(const a in n)if(a!=="default"&&!(a in s)){const t=Object.getOwnPropertyDescriptor(n,a);t&&Object.defineProperty(s,a,t.get?t:{enumerable:!0,get:()=>n[a]})}}}return Object.freeze(Object.defineProperty(s,Symbol.toStringTag,{value:"Module"}))}function ja(s){return s>=1e6?`${(s/1e6).toFixed(s%1e6===0?0:1)}M`:s>=1e3?`${(s/1e3).toFixed((s%1e3===0,0))}K`:String(s)}function Na(s){return s.maxInputTokens>0||s.inputCostPer1MTokens>0||s.outputCostPer1MTokens>0}function os(s){if(s.tier)return s.tier;const r=s.id.toLowerCase(),o=/opus|5\.4|o3-(?!mini)|o1-(?!mini)|gemini.*ultra|sonnet-4-20/,n=/haiku|flash|nano|lite|small|fast|free|8b|7b|1b|3b/;return/o4-mini|o3-mini|o1-mini|gpt-4o-mini/.test(r)?"pro":o.test(r)?"max":n.test(r)?"base":"pro"}const Or={max:"bg-purple-500/20 text-purple-400 border-purple-500/30",pro:"bg-blue-500/20 text-blue-400 border-blue-500/30",base:"bg-gray-500/20 text-gray-400 border-gray-500/30"};function Mn({models:s,selectedModel:r,onSelect:o,loading:n,compact:a,maxVisible:t,showTiers:d}){const{t:u}=pe("settings"),[x,f]=i.useState(""),[v,T]=i.useState(!1),[m,C]=i.useState(""),w=i.useMemo(()=>{let g=s;if(x){const j=x.toLowerCase();g=g.filter(S=>S.id.toLowerCase().includes(j))}return m&&(g=g.filter(j=>os(j)===m)),g},[s,x,m]),h=i.useMemo(()=>{const g={max:0,pro:0,base:0};for(const j of s)g[os(j)]++;return g},[s]),U=t??(a?5:10),y=v?w:w.slice(0,U),A=w.length>U;return n?e.jsxs("div",{className:"flex items-center gap-2 py-4 text-sm text-fg-tertiary",children:[e.jsx("div",{className:"w-4 h-4 border-2 border-brand-500 border-t-transparent rounded-full animate-spin"}),u("modelPicker.loading")]}):s.length===0?e.jsx("div",{className:"py-3 text-sm text-fg-tertiary",children:u("modelPicker.empty")}):e.jsxs("div",{className:"space-y-2",children:[d&&s.length>3&&e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("button",{onClick:()=>C(""),className:`px-2 py-0.5 rounded text-[10px] transition-colors ${m?"bg-surface-overlay text-fg-tertiary hover:text-fg-secondary":"bg-brand-500/20 text-brand-500"}`,children:u("modelPicker.allCount",{count:s.length})}),["max","pro","base"].filter(g=>h[g]>0).map(g=>e.jsx("button",{onClick:()=>C(m===g?"":g),className:`px-2 py-0.5 rounded text-[10px] font-medium uppercase transition-colors border ${m===g?Or[g]:"border-transparent bg-surface-overlay text-fg-tertiary hover:text-fg-secondary"}`,children:u("modelPicker.tierCount",{tier:u(`modelRouting.tier.${g}`),count:h[g]})},g))]}),s.length>5&&e.jsx("input",{type:"text",value:x,onChange:g=>{f(g.target.value),T(!1)},placeholder:u("modelPicker.filterPlaceholder"),className:"w-full px-3 py-1.5 bg-surface-overlay border border-border-default rounded-lg text-xs text-fg-primary placeholder:text-fg-tertiary focus:outline-none focus:border-brand-500"}),e.jsx("div",{className:`space-y-1 ${a?"max-h-[280px] overflow-y-auto":""}`,children:y.map(g=>{const j=g.id===r,S=os(g);return e.jsxs("button",{type:"button",onClick:()=>o(g.id),className:`w-full text-left px-3 py-2 rounded-lg transition-colors ${j?"bg-brand-500/10 border border-brand-500/30":"hover:bg-surface-overlay border border-transparent"}`,children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:`w-3 h-3 rounded-full border-2 flex items-center justify-center ${j?"border-brand-500":"border-border-default"}`,children:j&&e.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-brand-500"})}),e.jsx("span",{className:`text-xs font-medium ${j?"text-brand-500":"text-fg-primary"}`,children:g.id}),d&&e.jsx("span",{className:`px-1.5 py-0.5 rounded text-[9px] font-semibold uppercase border ${Or[S]}`,children:u(`modelRouting.tier.${S}`)})]}),e.jsx("div",{className:"flex items-center gap-2",children:j&&e.jsx("span",{className:"text-[10px] text-brand-500 font-medium",children:u("modelPicker.active")})})]}),Na(g)&&g.maxInputTokens>0&&e.jsx("div",{className:"ml-5 mt-0.5 flex items-center gap-2 text-[10px] text-fg-tertiary flex-wrap",children:e.jsxs("span",{children:[ja(g.maxInputTokens)," ",u("modelPicker.ctx")]})}),!a&&e.jsxs("div",{className:"ml-5 mt-1 flex items-center gap-1.5 flex-wrap",children:[g.capabilities.functionCalling&&e.jsx(lt,{label:u("modelPicker.capabilities.tools")}),g.capabilities.vision&&e.jsx(lt,{label:u("modelPicker.capabilities.vision")}),g.capabilities.reasoning&&e.jsx(lt,{label:u("modelPicker.capabilities.reasoning")}),g.capabilities.promptCaching&&e.jsx(lt,{label:u("modelPicker.capabilities.caching")}),g.capabilities.webSearch&&e.jsx(lt,{label:u("modelPicker.capabilities.search")})]})]},g.id)})}),A&&!v&&e.jsx("button",{type:"button",onClick:()=>T(!0),className:"text-xs text-brand-500 hover:text-brand-400 px-3",children:u("modelPicker.showAll",{count:w.length})}),v&&A&&e.jsx("button",{type:"button",onClick:()=>T(!1),className:"text-xs text-fg-tertiary hover:text-fg-secondary px-3",children:u("modelPicker.showLess")})]})}function lt({label:s}){return e.jsx("span",{className:"px-1.5 py-0.5 rounded text-[9px] bg-surface-overlay text-fg-tertiary border border-border-default",children:s})}function _s({value:s,options:r,placeholder:o,onChange:n}){const{t:a}=pe("settings"),[t,d]=i.useState(!1),[u,x]=i.useState(""),f=i.useRef(null),v=i.useRef(null),T=i.useRef(null),[m,C]=i.useState(-1);i.useEffect(()=>{function g(j){f.current&&!f.current.contains(j.target)&&d(!1)}return document.addEventListener("mousedown",g),()=>document.removeEventListener("mousedown",g)},[]),i.useEffect(()=>{t&&v.current&&v.current.focus()},[t]);const w=i.useMemo(()=>{if(!u.trim())return r;const g=u.toLowerCase();return r.filter(j=>j.modelId.toLowerCase().includes(g)||j.modelName.toLowerCase().includes(g)||j.provider.toLowerCase().includes(g)||j.providerLabel.toLowerCase().includes(g)||j.tier&&j.tier.toLowerCase().includes(g))},[r,u]),h=i.useMemo(()=>{const g=new Map;for(const S of w){const R=S.providerLabel;g.has(R)||g.set(R,[]),g.get(R).push(S)}const j={max:0,pro:1,base:2};for(const S of g.values())S.sort((R,E)=>(j[R.tier??"base"]??9)-(j[E.tier??"base"]??9));return g},[w]),U=i.useMemo(()=>{const g=[];for(const j of h.values())g.push(...j);return g},[h]),y=i.useMemo(()=>{if(!s)return o??a("modelRouting.auto");const g=r.find(j=>`${j.provider}/${j.modelId}`===s);return g?`${g.providerLabel}/${g.modelName}`:s},[s,r,o,a]);function A(g){if(!t){(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),d(!0));return}switch(g.key){case"ArrowDown":g.preventDefault(),C(j=>Math.min(j+1,U.length-1));break;case"ArrowUp":g.preventDefault(),C(j=>Math.max(j-1,-1));break;case"Enter":g.preventDefault(),m===-1?n(""):U[m]&&n(`${U[m].provider}/${U[m].modelId}`),d(!1),x("");break;case"Escape":d(!1),x("");break}}return i.useEffect(()=>{T.current&&m>=0&&T.current.querySelector(`[data-focus-index="${m}"]`)?.scrollIntoView({block:"nearest"})},[m]),e.jsxs("div",{ref:f,className:"relative",onKeyDown:A,children:[e.jsx("button",{type:"button",onClick:()=>{d(!t),x(""),C(-1)},className:"w-full px-2 py-1 bg-surface-overlay border border-border-default rounded text-xs text-fg-primary text-left truncate focus:outline-none focus:border-brand-500",children:y}),t&&e.jsxs("div",{className:"absolute z-50 mt-1 w-full min-w-[240px] max-h-[280px] bg-surface-elevated border border-border-default rounded-lg shadow-xl overflow-hidden flex flex-col",children:[e.jsx("div",{className:"p-1.5 border-b border-border-default",children:e.jsx("input",{ref:v,type:"text",value:u,onChange:g=>{x(g.target.value),C(-1)},placeholder:a("modelPicker.searchPlaceholder")||"Search models...",className:"w-full px-2 py-1 bg-surface-overlay border border-border-default rounded text-xs text-fg-primary focus:outline-none focus:border-brand-500"})}),e.jsxs("div",{ref:T,className:"overflow-y-auto flex-1",children:[e.jsx("div",{className:`px-3 py-1.5 text-xs cursor-pointer ${m===-1?"bg-brand-500/20 text-brand-500":"text-fg-secondary hover:bg-surface-overlay"}`,onClick:()=>{n(""),d(!1),x("")},children:o??a("modelRouting.auto")}),[...h.entries()].map(([g,j])=>e.jsxs("div",{children:[e.jsx("div",{className:"px-3 py-1 text-[10px] font-semibold text-fg-tertiary uppercase tracking-wider bg-surface-overlay/50 sticky top-0",children:g}),j.map(S=>{const R=U.indexOf(S),E=`${S.provider}/${S.modelId}`===s;return e.jsxs("div",{"data-focus-index":R,className:`px-3 py-1.5 text-xs cursor-pointer flex items-center gap-2 ${R===m?"bg-brand-500/20":E?"bg-surface-overlay":"hover:bg-surface-overlay/50"}`,onClick:()=>{n(`${S.provider}/${S.modelId}`),d(!1),x("")},children:[e.jsx("span",{className:"flex-1 truncate text-fg-primary",children:S.modelName}),S.tier&&e.jsx(wa,{tier:S.tier}),S.costTier&&e.jsx("span",{className:"text-[9px] text-fg-tertiary",children:S.costTier})]},`${S.provider}/${S.modelId}`)})]},g)),U.length===0&&e.jsx("div",{className:"px-3 py-3 text-xs text-fg-tertiary text-center",children:a("modelPicker.empty")})]})]})]})}function wa({tier:s}){const r={max:"bg-purple-500/20 text-purple-400",pro:"bg-blue-500/20 text-blue-400",base:"bg-gray-500/20 text-gray-400"};return e.jsx("span",{className:`px-1 py-0.5 rounded text-[8px] font-bold uppercase ${r[s]??r.base}`,children:s})}const ka=500,_r=[{groupKey:"image",capabilities:["image_recognition","image_generation"]},{groupKey:"audio",capabilities:["audio_tts","audio_stt"]},{groupKey:"video",capabilities:["video_generation"]}];function Ca({onSave:s,configuredProviders:r}){const{t:o}=pe(["settings","common"]),[n,a]=i.useState({}),[t,d]=i.useState(null),[u,x]=i.useState(!1),[f,v]=i.useState(null),[T,m]=i.useState(!0),[C,w]=i.useState("idle"),[h,U]=i.useState(null),[y,A]=i.useState({}),[g,j]=i.useState(!1),[S,R]=i.useState("idle"),[E,B]=i.useState(null),[K,_]=i.useState(!1),O=i.useRef(null),F=i.useRef(null),b=i.useMemo(()=>r.map(c=>c.name).sort().join(","),[r]);i.useEffect(()=>{fetch("/api/settings/llm/routing",{credentials:"include"}).then(c=>{if(!c.ok)throw new Error(`HTTP ${c.status}`);return c.json()}).then(c=>{a(c.capabilityRouting?.assignments??{}),d(c.routingDefaultModel??null),x(!0)}).catch(c=>{v(String(c)),x(!0)})},[b]),i.useEffect(()=>{let c=!1;return m(!0),fetch("/api/models/routing-candidates",{credentials:"include"}).then(k=>{if(!k.ok)throw new Error(`HTTP ${k.status}`);return k.json()}).then(k=>{if(c)return;const D=[];for(const $ of k.providers)for(const W of $.models)D.push({provider:$.provider,providerLabel:$.displayName,modelId:W.id,modelName:W.name,mode:W.mode,tier:W.tier,costTier:W.costTier,capabilities:W.capabilities});U(D)}).catch(()=>{c||U(null)}).finally(()=>{c||m(!1)}),()=>{c=!0}},[b]),i.useEffect(()=>{fetch("/api/models/suggested-assignments",{credentials:"include"}).then(c=>{if(!c.ok)throw new Error(`HTTP ${c.status}`);return c.json()}).then(c=>{A(c.suggestions),j(!0)}).catch(()=>j(!0))},[b]);const P=i.useCallback(c=>{w("saving"),s(c).then(()=>{w("saved"),setTimeout(()=>w(k=>k==="saved"?"idle":k),2e3)}).catch(()=>{w("error"),setTimeout(()=>w(k=>k==="error"?"idle":k),3e3)})},[s]),M=i.useCallback((c,k)=>{F.current={capabilityRouting:c!==void 0?{assignments:c}:F.current?.capabilityRouting,routingDefaultModel:k!==void 0?k:F.current?.routingDefaultModel},O.current&&clearTimeout(O.current),O.current=setTimeout(()=>{const D=F.current;F.current=null,D&&P(D)},ka)},[P]),q=i.useMemo(()=>r.flatMap(c=>(c.models??[{id:c.model,name:c.model}]).map(k=>({provider:c.name,providerLabel:c.displayName??c.name,modelId:k.id,modelName:k.name}))),[r]),Q=h??q,re=i.useMemo(()=>Object.entries(n).map(([c,k])=>`${c}:${k?.provider??""}/${k?.model??""}`).sort().join("|"),[n]);i.useEffect(()=>{!u||!h||h.length===0||h.some(c=>!!c.modelId)&&(a(c=>{let k=!1;const D={...c};for(const $ of _r)for(const W of $.capabilities){const Z=D[W];if(!Z?.model)continue;const X=Tn(h,W);if(X.length===0)continue;X.some(ce=>ce.provider===Z.provider&&ce.modelId===Z.model)||(delete D[W],k=!0)}return k?(M(D),D):c}),d(c=>{if(!c?.model||h.some(W=>W.provider===c.provider&&W.modelId===c.model))return c;const D=h.find(W=>W.provider==="markus"),$=D?{provider:D.provider,model:D.modelId}:{provider:h[0].provider,model:h[0].modelId};return s({routingDefaultModel:$}),$}))},[u,h,b,M,re]);const oe=i.useCallback(()=>{fetch("/api/settings/llm/routing",{credentials:"include"}).then(c=>{if(!c.ok)throw new Error(`HTTP ${c.status}`);return c.json()}).then(c=>{a(c.capabilityRouting?.assignments??{}),d(c.routingDefaultModel??null)}).catch(()=>{}),m(!0),fetch("/api/models/routing-candidates",{credentials:"include"}).then(c=>{if(!c.ok)throw new Error(`HTTP ${c.status}`);return c.json()}).then(c=>{const k=[];for(const D of c.providers)for(const $ of D.models)k.push({provider:D.provider,providerLabel:D.displayName,modelId:$.id,modelName:$.name,mode:$.mode,tier:$.tier,costTier:$.costTier,capabilities:$.capabilities});U(k)}).catch(()=>{}).finally(()=>m(!1))},[]),xe=i.useCallback(async()=>{if(S!=="working"){R("working"),B(null);try{const c=await fetch("/api/settings/llm/restore-recommended",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"}}),k=await c.json().catch(()=>({}));if(!c.ok||!k.ok)throw new Error(k.error??`HTTP ${c.status}`);k.capabilityRouting&&a(k.capabilityRouting.assignments??{}),k.routingDefaultModel!==void 0&&d(k.routingDefaultModel),oe(),R("idle"),w("saved"),setTimeout(()=>w(D=>D==="saved"?"idle":D),2e3)}catch(c){R("error"),B(c instanceof Error?c.message:String(c)),setTimeout(()=>R("idle"),4e3)}}},[S,oe]),ee=Q.length>0;return u?f?e.jsx("div",{className:"bg-red-500/10 border border-red-500/30 rounded-xl p-4 text-xs text-red-400",children:o("modelRouting.loadError",{error:f})}):T&&!ee?e.jsx("div",{className:"space-y-4",children:e.jsx("div",{className:"bg-surface-elevated rounded-xl p-5",children:e.jsxs("div",{className:"flex items-center gap-2 text-xs text-fg-secondary",children:[e.jsxs("svg",{className:"w-4 h-4 animate-spin text-brand-500",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z"})]}),e.jsx("span",{children:o("modelRouting.loadingModels")})]})})}):e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx(Aa,{status:C,t:o}),e.jsxs("div",{className:"flex flex-col items-end gap-1",children:[e.jsx("button",{type:"button",onClick:()=>_(!0),disabled:S==="working",className:"text-xs px-3 py-1.5 rounded-lg border border-border-default text-fg-secondary hover:text-fg-primary hover:border-brand-500/40 disabled:opacity-50 transition-colors",children:o(S==="working"?"modelRouting.restoreWorking":"modelRouting.restoreRecommended")}),E&&e.jsx("span",{className:"text-[10px] text-red-400 max-w-xs text-right",children:E})]})]}),e.jsxs("div",{className:"bg-surface-elevated rounded-xl p-5 space-y-3",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-semibold text-fg-primary",children:o("modelRouting.defaultModelTitle")}),e.jsx("p",{className:"text-xs text-fg-tertiary mt-1",children:o("modelRouting.defaultModelDesc")})]}),e.jsx("div",{className:"max-w-md",children:e.jsx(_s,{value:t?`${t.provider}/${t.model}`:"",options:Q,placeholder:o("modelRouting.defaultModelPlaceholder"),onChange:c=>{if(!c)d(null),M(void 0,null);else{const[k,...D]=c.split("/"),$={provider:k,model:D.join("/")};if(d($),n.text){const W={...n};delete W.text,a(W),M(W,$)}else M(void 0,$)}}})})]}),e.jsxs("div",{className:"bg-surface-elevated rounded-xl p-5 space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-semibold text-fg-primary",children:o("modelRouting.capabilityAssignTitle")}),e.jsx("p",{className:"text-xs text-fg-tertiary mt-1",children:o("modelRouting.capabilityAssignDesc")})]}),r.length===0&&e.jsx("div",{className:"p-3 bg-yellow-500/10 border border-yellow-500/30 rounded-lg text-xs text-yellow-400",children:o("modelRouting.noProvidersHint")}),r.length>0&&e.jsx("div",{className:"space-y-4",children:_r.map(c=>e.jsx(Sa,{groupKey:c.groupKey,capabilities:c.capabilities,assignments:n,suggestions:y,allModels:Q,configuredProviderNames:new Set(r.map(k=>k.name)),t:o,onAssign:(k,D)=>{const $={...n};D?$[k]=D:delete $[k],a($),M($)}},c.groupKey))})]}),K&&e.jsx(Pn,{variant:"primary",title:o("modelRouting.restoreRecommended"),message:o("modelRouting.restoreConfirm"),confirmLabel:o("common:confirm"),onConfirm:()=>{_(!1),xe()},onCancel:()=>_(!1)})]}):e.jsx("div",{className:"space-y-4",children:e.jsxs("div",{className:"bg-surface-elevated rounded-xl p-5 animate-pulse",children:[e.jsx("div",{className:"h-4 bg-surface-overlay rounded w-1/3 mb-3"}),e.jsx("div",{className:"h-3 bg-surface-overlay rounded w-2/3 mb-4"}),e.jsx("div",{className:"space-y-2",children:[1,2,3,4,5].map(c=>e.jsx("div",{className:"h-10 bg-surface-overlay rounded-lg"},c))})]})})}function Sa({groupKey:s,capabilities:r,assignments:o,suggestions:n,allModels:a,configuredProviderNames:t,t:d,onAssign:u}){return e.jsxs("div",{children:[e.jsx("div",{className:"text-[10px] font-semibold text-fg-tertiary uppercase tracking-wider mb-2 px-1",children:d(`modelRouting.capabilityGroups.${s}`)}),e.jsx("div",{className:"space-y-1",children:r.map(x=>{const f=o[x],v=n[x],T=f?`${f.provider}/${f.model}`:"",m=Tn(a,x),C=v?m.find(A=>A.provider===v.provider&&A.modelId===v.model)?.modelName??v.model:void 0,w=m.length>0,h=f?Pa(a,f.provider,f.model):void 0,U=f&&!t.has(f.provider),y=!!(f&&w&&x!=="text"&&!m.some(A=>A.provider===f.provider&&A.modelId===f.model));return e.jsxs("div",{className:`flex items-center gap-3 px-3 py-2 rounded-lg ${y?"bg-red-500/10 border border-red-500/30":U?"bg-yellow-500/10 border border-yellow-500/30":!w&&!f?"bg-amber-500/5 border border-amber-500/20":"bg-surface-overlay/40"}`,children:[e.jsx("div",{className:"w-28 shrink-0",children:e.jsx("span",{className:"text-xs text-fg-primary",children:d(`modelRouting.capabilities.${x}`)})}),e.jsx("div",{className:"flex-1 min-w-0",children:y?e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsxs("span",{className:"text-xs text-red-400",children:["⚠ ",f.model]}),e.jsx("span",{className:"text-[10px] text-red-400/70",children:d("modelRouting.mismatchHint")})]}),e.jsx(_s,{value:"",options:m,placeholder:d("modelRouting.selectModel"),onChange:A=>{if(!A)u(x,null);else{const[g,...j]=A.split("/");u(x,{provider:g,model:j.join("/")})}}})]}):w?e.jsx(_s,{value:T,options:m,placeholder:C?`${C} (${d("modelRouting.suggested")})`:d("modelRouting.selectModel"),onChange:A=>{if(!A)u(x,null);else{const[g,...j]=A.split("/");u(x,{provider:g,model:j.join("/")})}}}):e.jsxs("span",{className:"text-xs text-amber-400",children:[d("modelRouting.noModelAvailable"),e.jsxs("span",{className:"text-fg-tertiary ml-1",children:["— ",d("modelRouting.addProviderHint")]})]})}),e.jsxs("div",{className:"w-14 shrink-0 flex justify-end",children:[y&&e.jsx("span",{className:"text-[10px] text-red-400 font-medium",title:d("modelRouting.mismatchHint"),children:"⚠"}),!y&&U&&e.jsx("span",{className:"text-[10px] text-yellow-400 font-medium",title:d("modelRouting.staleProvider"),children:"⚠"}),!y&&!U&&h&&e.jsx(Dr,{tier:h}),!y&&!U&&!h&&f&&e.jsx(Dr,{tier:"unknown"})]}),e.jsx("div",{className:"w-8 shrink-0 flex justify-end",children:f&&e.jsx("button",{onClick:()=>u(x,null),className:"text-fg-tertiary hover:text-red-400 transition-colors",title:d("modelRouting.clear"),children:e.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})})]},x)})})]})}function Pa(s,r,o){return s.find(a=>a.provider===r&&a.modelId===o)?.tier}function Aa({status:s,t:r}){if(s==="idle")return null;const o={idle:"",saving:"text-fg-tertiary",saved:"text-green-400",error:"text-red-400"},n={idle:"",saving:r("modelRouting.saving"),saved:r("modelRouting.saved"),error:r("modelRouting.saveError")};return e.jsx("div",{className:`text-xs font-medium transition-opacity ${o[s]}`,children:n[s]})}function Dr({tier:s}){const r={max:"bg-purple-500/20 text-purple-400 border-purple-500/30",pro:"bg-blue-500/20 text-blue-400 border-blue-500/30",base:"bg-gray-500/20 text-gray-400 border-gray-500/30",unknown:"bg-gray-500/10 text-fg-tertiary border-border-default"};return e.jsx("span",{className:`px-1.5 py-0.5 text-[9px] rounded font-semibold uppercase border ${r[s]??r.unknown}`,children:s==="unknown"?"—":s})}const Ma=new Set(["imageGeneration","tts","stt","videoGeneration","audioOutput","audioInput"]);function Tn(s,r){if(r==="text")return s.filter(d=>!(d.capabilities&&d.capabilities.some(u=>Ma.has(u))||d.mode&&d.mode!=="chat"));const o={image_generation:["image_generation"],audio_tts:["audio_speech"],audio_stt:["audio_transcription"],video_generation:["video_generation"]},n={image_recognition:["vision"],image_generation:["imageGeneration"],audio_tts:["tts"],audio_stt:["stt"],video_generation:["videoGeneration"]},a=o[r],t=n[r];return s.filter(d=>!!(d.capabilities&&d.capabilities.length>0&&t&&t.some(u=>d.capabilities.includes(u))||a&&d.mode&&a.includes(d.mode)))}const At=[{id:"markus",label:"Markus Cloud AI",envKey:"MARKUS_SUBSCRIPTION_KEY",defaultModel:""},{id:"anthropic",label:"Anthropic",envKey:"ANTHROPIC_API_KEY",defaultModel:"claude-opus-4-6"},{id:"openai",label:"OpenAI",envKey:"OPENAI_API_KEY",defaultModel:"gpt-5.4"},{id:"google",label:"Google Gemini",envKey:"GOOGLE_API_KEY",defaultModel:"gemini-3-1-pro"},{id:"deepseek",label:"DeepSeek",envKey:"DEEPSEEK_API_KEY",baseUrl:"https://api.deepseek.com",defaultModel:"deepseek-v4-flash"},{id:"siliconflow",label:"SiliconFlow (中国)",envKey:"SILICONFLOW_API_KEY",baseUrl:"https://api.siliconflow.cn/v1",defaultModel:"Qwen/Qwen3.5-35B-A3B"},{id:"siliconflow-intl",label:"SiliconFlow (Global)",envKey:"SILICONFLOW_INTL_API_KEY",baseUrl:"https://api-st.siliconflow.cn/v1",defaultModel:"Qwen/Qwen3.5-35B-A3B"},{id:"minimax",label:"MiniMax (Global)",envKey:"MINIMAX_API_KEY",baseUrl:"https://api.minimax.io/v1",defaultModel:"MiniMax-M3"},{id:"minimax-cn",label:"MiniMax (中国)",envKey:"MINIMAX_CN_API_KEY",baseUrl:"https://api.minimaxi.com/v1",defaultModel:"MiniMax-M3"},{id:"openrouter",label:"OpenRouter",envKey:"OPENROUTER_API_KEY",baseUrl:"https://openrouter.ai/api/v1",defaultModel:"xiaomi/mimo-v2-pro:free"},{id:"zai",label:"ZAI (GLM)",envKey:"ZAI_API_KEY",baseUrl:"https://api.z.ai/api/paas/v4",defaultModel:"glm-5.1"},{id:"xai",label:"xAI (Grok)",envKey:"XAI_API_KEY",baseUrl:"https://api.x.ai/v1",defaultModel:"grok-3"},{id:"mistral",label:"Mistral AI",envKey:"MISTRAL_API_KEY",baseUrl:"https://api.mistral.ai/v1",defaultModel:"mistral-large-latest"},{id:"groq",label:"Groq",envKey:"GROQ_API_KEY",baseUrl:"https://api.groq.com/openai/v1",defaultModel:"llama-3.3-70b-versatile"},{id:"perplexity",label:"Perplexity",envKey:"PERPLEXITY_API_KEY",baseUrl:"https://api.perplexity.ai",defaultModel:"sonar-pro"},{id:"cohere",label:"Cohere",envKey:"COHERE_API_KEY",baseUrl:"https://api.cohere.ai/compatibility/v1",defaultModel:"command-r-plus"},{id:"together_ai",label:"Together AI",envKey:"TOGETHER_API_KEY",baseUrl:"https://api.together.xyz/v1",defaultModel:"meta-llama/Llama-3.3-70B-Instruct-Turbo"},{id:"fireworks_ai",label:"Fireworks AI",envKey:"FIREWORKS_API_KEY",baseUrl:"https://api.fireworks.ai/inference/v1",defaultModel:"accounts/fireworks/models/llama-v3p3-70b-instruct"},{id:"moonshot",label:"Moonshot (Kimi)",envKey:"MOONSHOT_API_KEY",baseUrl:"https://api.moonshot.cn/v1",defaultModel:"moonshot-v1-auto"},{id:"volcengine",label:"Volcengine (Doubao)",envKey:"VOLCENGINE_API_KEY",baseUrl:"https://ark.cn-beijing.volces.com/api/v3",defaultModel:"doubao-1.5-pro-32k"},{id:"dashscope",label:"DashScope (Qwen)",envKey:"DASHSCOPE_API_KEY",baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",defaultModel:"qwen-max"},{id:"ollama",label:"Ollama (Local)",envKey:"OLLAMA_BASE_URL",baseUrl:"http://localhost:11434/v1",defaultModel:"llama3"},{id:"atlascloud",label:"Atlas Cloud (Full-Modal)",envKey:"ATLASCLOUD_API_KEY",baseUrl:"https://api.atlascloud.ai/v1",defaultModel:"claude-sonnet-4-6"},{id:"strongly",label:"Strongly.AI (Full-Modal)",envKey:"STRONGLY_API_KEY",baseUrl:"https://api.strongly.ai/v1",defaultModel:"claude-sonnet-4-6"}];var Je={},is,Kr;function Ta(){return Kr||(Kr=1,is=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}),is}var ls={},Ke={},Ur;function He(){if(Ur)return Ke;Ur=1;let s;const r=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];return Ke.getSymbolSize=function(n){if(!n)throw new Error('"version" cannot be null or undefined');if(n<1||n>40)throw new Error('"version" should be in range from 1 to 40');return n*4+17},Ke.getSymbolTotalCodewords=function(n){return r[n]},Ke.getBCHDigit=function(o){let n=0;for(;o!==0;)n++,o>>>=1;return n},Ke.setToSJISFunction=function(n){if(typeof n!="function")throw new Error('"toSJISFunc" is not a valid function.');s=n},Ke.isKanjiModeEnabled=function(){return typeof s<"u"},Ke.toSJIS=function(n){return s(n)},Ke}var ds={},Fr;function Ks(){return Fr||(Fr=1,(function(s){s.L={bit:1},s.M={bit:0},s.Q={bit:3},s.H={bit:2};function r(o){if(typeof o!="string")throw new Error("Param is not a string");switch(o.toLowerCase()){case"l":case"low":return s.L;case"m":case"medium":return s.M;case"q":case"quartile":return s.Q;case"h":case"high":return s.H;default:throw new Error("Unknown EC Level: "+o)}}s.isValid=function(n){return n&&typeof n.bit<"u"&&n.bit>=0&&n.bit<4},s.from=function(n,a){if(s.isValid(n))return n;try{return r(n)}catch{return a}}})(ds)),ds}var cs,$r;function Ea(){if($r)return cs;$r=1;function s(){this.buffer=[],this.length=0}return s.prototype={get:function(r){const o=Math.floor(r/8);return(this.buffer[o]>>>7-r%8&1)===1},put:function(r,o){for(let n=0;n<o;n++)this.putBit((r>>>o-n-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(r){const o=Math.floor(this.length/8);this.buffer.length<=o&&this.buffer.push(0),r&&(this.buffer[o]|=128>>>this.length%8),this.length++}},cs=s,cs}var us,Vr;function Ia(){if(Vr)return us;Vr=1;function s(r){if(!r||r<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=r,this.data=new Uint8Array(r*r),this.reservedBit=new Uint8Array(r*r)}return s.prototype.set=function(r,o,n,a){const t=r*this.size+o;this.data[t]=n,a&&(this.reservedBit[t]=!0)},s.prototype.get=function(r,o){return this.data[r*this.size+o]},s.prototype.xor=function(r,o,n){this.data[r*this.size+o]^=n},s.prototype.isReserved=function(r,o){return this.reservedBit[r*this.size+o]},us=s,us}var xs={},Hr;function La(){return Hr||(Hr=1,(function(s){const r=He().getSymbolSize;s.getRowColCoords=function(n){if(n===1)return[];const a=Math.floor(n/7)+2,t=r(n),d=t===145?26:Math.ceil((t-13)/(2*a-2))*2,u=[t-7];for(let x=1;x<a-1;x++)u[x]=u[x-1]-d;return u.push(6),u.reverse()},s.getPositions=function(n){const a=[],t=s.getRowColCoords(n),d=t.length;for(let u=0;u<d;u++)for(let x=0;x<d;x++)u===0&&x===0||u===0&&x===d-1||u===d-1&&x===0||a.push([t[u],t[x]]);return a}})(xs)),xs}var ms={},qr;function Ra(){if(qr)return ms;qr=1;const s=He().getSymbolSize,r=7;return ms.getPositions=function(n){const a=s(n);return[[0,0],[a-r,0],[0,a-r]]},ms}var gs={},zr;function Ba(){return zr||(zr=1,(function(s){s.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};const r={N1:3,N2:3,N3:40,N4:10};s.isValid=function(a){return a!=null&&a!==""&&!isNaN(a)&&a>=0&&a<=7},s.from=function(a){return s.isValid(a)?parseInt(a,10):void 0},s.getPenaltyN1=function(a){const t=a.size;let d=0,u=0,x=0,f=null,v=null;for(let T=0;T<t;T++){u=x=0,f=v=null;for(let m=0;m<t;m++){let C=a.get(T,m);C===f?u++:(u>=5&&(d+=r.N1+(u-5)),f=C,u=1),C=a.get(m,T),C===v?x++:(x>=5&&(d+=r.N1+(x-5)),v=C,x=1)}u>=5&&(d+=r.N1+(u-5)),x>=5&&(d+=r.N1+(x-5))}return d},s.getPenaltyN2=function(a){const t=a.size;let d=0;for(let u=0;u<t-1;u++)for(let x=0;x<t-1;x++){const f=a.get(u,x)+a.get(u,x+1)+a.get(u+1,x)+a.get(u+1,x+1);(f===4||f===0)&&d++}return d*r.N2},s.getPenaltyN3=function(a){const t=a.size;let d=0,u=0,x=0;for(let f=0;f<t;f++){u=x=0;for(let v=0;v<t;v++)u=u<<1&2047|a.get(f,v),v>=10&&(u===1488||u===93)&&d++,x=x<<1&2047|a.get(v,f),v>=10&&(x===1488||x===93)&&d++}return d*r.N3},s.getPenaltyN4=function(a){let t=0;const d=a.data.length;for(let x=0;x<d;x++)t+=a.data[x];return Math.abs(Math.ceil(t*100/d/5)-10)*r.N4};function o(n,a,t){switch(n){case s.Patterns.PATTERN000:return(a+t)%2===0;case s.Patterns.PATTERN001:return a%2===0;case s.Patterns.PATTERN010:return t%3===0;case s.Patterns.PATTERN011:return(a+t)%3===0;case s.Patterns.PATTERN100:return(Math.floor(a/2)+Math.floor(t/3))%2===0;case s.Patterns.PATTERN101:return a*t%2+a*t%3===0;case s.Patterns.PATTERN110:return(a*t%2+a*t%3)%2===0;case s.Patterns.PATTERN111:return(a*t%3+(a+t)%2)%2===0;default:throw new Error("bad maskPattern:"+n)}}s.applyMask=function(a,t){const d=t.size;for(let u=0;u<d;u++)for(let x=0;x<d;x++)t.isReserved(x,u)||t.xor(x,u,o(a,x,u))},s.getBestMask=function(a,t){const d=Object.keys(s.Patterns).length;let u=0,x=1/0;for(let f=0;f<d;f++){t(f),s.applyMask(f,a);const v=s.getPenaltyN1(a)+s.getPenaltyN2(a)+s.getPenaltyN3(a)+s.getPenaltyN4(a);s.applyMask(f,a),v<x&&(x=v,u=f)}return u}})(gs)),gs}var Mt={},Wr;function En(){if(Wr)return Mt;Wr=1;const s=Ks(),r=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],o=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];return Mt.getBlocksCount=function(a,t){switch(t){case s.L:return r[(a-1)*4+0];case s.M:return r[(a-1)*4+1];case s.Q:return r[(a-1)*4+2];case s.H:return r[(a-1)*4+3];default:return}},Mt.getTotalCodewordsCount=function(a,t){switch(t){case s.L:return o[(a-1)*4+0];case s.M:return o[(a-1)*4+1];case s.Q:return o[(a-1)*4+2];case s.H:return o[(a-1)*4+3];default:return}},Mt}var fs={},dt={},Gr;function Oa(){if(Gr)return dt;Gr=1;const s=new Uint8Array(512),r=new Uint8Array(256);return(function(){let n=1;for(let a=0;a<255;a++)s[a]=n,r[n]=a,n<<=1,n&256&&(n^=285);for(let a=255;a<512;a++)s[a]=s[a-255]})(),dt.log=function(n){if(n<1)throw new Error("log("+n+")");return r[n]},dt.exp=function(n){return s[n]},dt.mul=function(n,a){return n===0||a===0?0:s[r[n]+r[a]]},dt}var Yr;function _a(){return Yr||(Yr=1,(function(s){const r=Oa();s.mul=function(n,a){const t=new Uint8Array(n.length+a.length-1);for(let d=0;d<n.length;d++)for(let u=0;u<a.length;u++)t[d+u]^=r.mul(n[d],a[u]);return t},s.mod=function(n,a){let t=new Uint8Array(n);for(;t.length-a.length>=0;){const d=t[0];for(let x=0;x<a.length;x++)t[x]^=r.mul(a[x],d);let u=0;for(;u<t.length&&t[u]===0;)u++;t=t.slice(u)}return t},s.generateECPolynomial=function(n){let a=new Uint8Array([1]);for(let t=0;t<n;t++)a=s.mul(a,new Uint8Array([1,r.exp(t)]));return a}})(fs)),fs}var ps,Jr;function Da(){if(Jr)return ps;Jr=1;const s=_a();function r(o){this.genPoly=void 0,this.degree=o,this.degree&&this.initialize(this.degree)}return r.prototype.initialize=function(n){this.degree=n,this.genPoly=s.generateECPolynomial(this.degree)},r.prototype.encode=function(n){if(!this.genPoly)throw new Error("Encoder not initialized");const a=new Uint8Array(n.length+this.degree);a.set(n);const t=s.mod(a,this.genPoly),d=this.degree-t.length;if(d>0){const u=new Uint8Array(this.degree);return u.set(t,d),u}return t},ps=r,ps}var hs={},bs={},ys={},Qr;function In(){return Qr||(Qr=1,ys.isValid=function(r){return!isNaN(r)&&r>=1&&r<=40}),ys}var Me={},Xr;function Ln(){if(Xr)return Me;Xr=1;const s="[0-9]+",r="[A-Z $%*+\\-./:]+";let o="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";o=o.replace(/u/g,"\\u");const n="(?:(?![A-Z0-9 $%*+\\-./:]|"+o+`)(?:.|[\r
1
+ import{u as pe,r as i,j as e,D as Pn,v as xa,l as V,a as ma,b as ga,c as fa,W as Lr,n as ns,X as pa,Y as Rr,P as Br,h as Ve,i as ha,Z as An,w as ba,o as as,t as Os,_ as ya}from"./index-sjnbPgLJ.js";function va(s,r){for(var o=0;o<r.length;o++){const n=r[o];if(typeof n!="string"&&!Array.isArray(n)){for(const a in n)if(a!=="default"&&!(a in s)){const t=Object.getOwnPropertyDescriptor(n,a);t&&Object.defineProperty(s,a,t.get?t:{enumerable:!0,get:()=>n[a]})}}}return Object.freeze(Object.defineProperty(s,Symbol.toStringTag,{value:"Module"}))}function ja(s){return s>=1e6?`${(s/1e6).toFixed(s%1e6===0?0:1)}M`:s>=1e3?`${(s/1e3).toFixed((s%1e3===0,0))}K`:String(s)}function Na(s){return s.maxInputTokens>0||s.inputCostPer1MTokens>0||s.outputCostPer1MTokens>0}function os(s){if(s.tier)return s.tier;const r=s.id.toLowerCase(),o=/opus|5\.4|o3-(?!mini)|o1-(?!mini)|gemini.*ultra|sonnet-4-20/,n=/haiku|flash|nano|lite|small|fast|free|8b|7b|1b|3b/;return/o4-mini|o3-mini|o1-mini|gpt-4o-mini/.test(r)?"pro":o.test(r)?"max":n.test(r)?"base":"pro"}const Or={max:"bg-purple-500/20 text-purple-400 border-purple-500/30",pro:"bg-blue-500/20 text-blue-400 border-blue-500/30",base:"bg-gray-500/20 text-gray-400 border-gray-500/30"};function Mn({models:s,selectedModel:r,onSelect:o,loading:n,compact:a,maxVisible:t,showTiers:d}){const{t:u}=pe("settings"),[x,f]=i.useState(""),[v,T]=i.useState(!1),[m,C]=i.useState(""),w=i.useMemo(()=>{let g=s;if(x){const j=x.toLowerCase();g=g.filter(S=>S.id.toLowerCase().includes(j))}return m&&(g=g.filter(j=>os(j)===m)),g},[s,x,m]),h=i.useMemo(()=>{const g={max:0,pro:0,base:0};for(const j of s)g[os(j)]++;return g},[s]),U=t??(a?5:10),y=v?w:w.slice(0,U),A=w.length>U;return n?e.jsxs("div",{className:"flex items-center gap-2 py-4 text-sm text-fg-tertiary",children:[e.jsx("div",{className:"w-4 h-4 border-2 border-brand-500 border-t-transparent rounded-full animate-spin"}),u("modelPicker.loading")]}):s.length===0?e.jsx("div",{className:"py-3 text-sm text-fg-tertiary",children:u("modelPicker.empty")}):e.jsxs("div",{className:"space-y-2",children:[d&&s.length>3&&e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("button",{onClick:()=>C(""),className:`px-2 py-0.5 rounded text-[10px] transition-colors ${m?"bg-surface-overlay text-fg-tertiary hover:text-fg-secondary":"bg-brand-500/20 text-brand-500"}`,children:u("modelPicker.allCount",{count:s.length})}),["max","pro","base"].filter(g=>h[g]>0).map(g=>e.jsx("button",{onClick:()=>C(m===g?"":g),className:`px-2 py-0.5 rounded text-[10px] font-medium uppercase transition-colors border ${m===g?Or[g]:"border-transparent bg-surface-overlay text-fg-tertiary hover:text-fg-secondary"}`,children:u("modelPicker.tierCount",{tier:u(`modelRouting.tier.${g}`),count:h[g]})},g))]}),s.length>5&&e.jsx("input",{type:"text",value:x,onChange:g=>{f(g.target.value),T(!1)},placeholder:u("modelPicker.filterPlaceholder"),className:"w-full px-3 py-1.5 bg-surface-overlay border border-border-default rounded-lg text-xs text-fg-primary placeholder:text-fg-tertiary focus:outline-none focus:border-brand-500"}),e.jsx("div",{className:`space-y-1 ${a?"max-h-[280px] overflow-y-auto":""}`,children:y.map(g=>{const j=g.id===r,S=os(g);return e.jsxs("button",{type:"button",onClick:()=>o(g.id),className:`w-full text-left px-3 py-2 rounded-lg transition-colors ${j?"bg-brand-500/10 border border-brand-500/30":"hover:bg-surface-overlay border border-transparent"}`,children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:`w-3 h-3 rounded-full border-2 flex items-center justify-center ${j?"border-brand-500":"border-border-default"}`,children:j&&e.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-brand-500"})}),e.jsx("span",{className:`text-xs font-medium ${j?"text-brand-500":"text-fg-primary"}`,children:g.id}),d&&e.jsx("span",{className:`px-1.5 py-0.5 rounded text-[9px] font-semibold uppercase border ${Or[S]}`,children:u(`modelRouting.tier.${S}`)})]}),e.jsx("div",{className:"flex items-center gap-2",children:j&&e.jsx("span",{className:"text-[10px] text-brand-500 font-medium",children:u("modelPicker.active")})})]}),Na(g)&&g.maxInputTokens>0&&e.jsx("div",{className:"ml-5 mt-0.5 flex items-center gap-2 text-[10px] text-fg-tertiary flex-wrap",children:e.jsxs("span",{children:[ja(g.maxInputTokens)," ",u("modelPicker.ctx")]})}),!a&&e.jsxs("div",{className:"ml-5 mt-1 flex items-center gap-1.5 flex-wrap",children:[g.capabilities.functionCalling&&e.jsx(lt,{label:u("modelPicker.capabilities.tools")}),g.capabilities.vision&&e.jsx(lt,{label:u("modelPicker.capabilities.vision")}),g.capabilities.reasoning&&e.jsx(lt,{label:u("modelPicker.capabilities.reasoning")}),g.capabilities.promptCaching&&e.jsx(lt,{label:u("modelPicker.capabilities.caching")}),g.capabilities.webSearch&&e.jsx(lt,{label:u("modelPicker.capabilities.search")})]})]},g.id)})}),A&&!v&&e.jsx("button",{type:"button",onClick:()=>T(!0),className:"text-xs text-brand-500 hover:text-brand-400 px-3",children:u("modelPicker.showAll",{count:w.length})}),v&&A&&e.jsx("button",{type:"button",onClick:()=>T(!1),className:"text-xs text-fg-tertiary hover:text-fg-secondary px-3",children:u("modelPicker.showLess")})]})}function lt({label:s}){return e.jsx("span",{className:"px-1.5 py-0.5 rounded text-[9px] bg-surface-overlay text-fg-tertiary border border-border-default",children:s})}function _s({value:s,options:r,placeholder:o,onChange:n}){const{t:a}=pe("settings"),[t,d]=i.useState(!1),[u,x]=i.useState(""),f=i.useRef(null),v=i.useRef(null),T=i.useRef(null),[m,C]=i.useState(-1);i.useEffect(()=>{function g(j){f.current&&!f.current.contains(j.target)&&d(!1)}return document.addEventListener("mousedown",g),()=>document.removeEventListener("mousedown",g)},[]),i.useEffect(()=>{t&&v.current&&v.current.focus()},[t]);const w=i.useMemo(()=>{if(!u.trim())return r;const g=u.toLowerCase();return r.filter(j=>j.modelId.toLowerCase().includes(g)||j.modelName.toLowerCase().includes(g)||j.provider.toLowerCase().includes(g)||j.providerLabel.toLowerCase().includes(g)||j.tier&&j.tier.toLowerCase().includes(g))},[r,u]),h=i.useMemo(()=>{const g=new Map;for(const S of w){const R=S.providerLabel;g.has(R)||g.set(R,[]),g.get(R).push(S)}const j={max:0,pro:1,base:2};for(const S of g.values())S.sort((R,E)=>(j[R.tier??"base"]??9)-(j[E.tier??"base"]??9));return g},[w]),U=i.useMemo(()=>{const g=[];for(const j of h.values())g.push(...j);return g},[h]),y=i.useMemo(()=>{if(!s)return o??a("modelRouting.auto");const g=r.find(j=>`${j.provider}/${j.modelId}`===s);return g?`${g.providerLabel}/${g.modelName}`:s},[s,r,o,a]);function A(g){if(!t){(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),d(!0));return}switch(g.key){case"ArrowDown":g.preventDefault(),C(j=>Math.min(j+1,U.length-1));break;case"ArrowUp":g.preventDefault(),C(j=>Math.max(j-1,-1));break;case"Enter":g.preventDefault(),m===-1?n(""):U[m]&&n(`${U[m].provider}/${U[m].modelId}`),d(!1),x("");break;case"Escape":d(!1),x("");break}}return i.useEffect(()=>{T.current&&m>=0&&T.current.querySelector(`[data-focus-index="${m}"]`)?.scrollIntoView({block:"nearest"})},[m]),e.jsxs("div",{ref:f,className:"relative",onKeyDown:A,children:[e.jsx("button",{type:"button",onClick:()=>{d(!t),x(""),C(-1)},className:"w-full px-2 py-1 bg-surface-overlay border border-border-default rounded text-xs text-fg-primary text-left truncate focus:outline-none focus:border-brand-500",children:y}),t&&e.jsxs("div",{className:"absolute z-50 mt-1 w-full min-w-[240px] max-h-[280px] bg-surface-elevated border border-border-default rounded-lg shadow-xl overflow-hidden flex flex-col",children:[e.jsx("div",{className:"p-1.5 border-b border-border-default",children:e.jsx("input",{ref:v,type:"text",value:u,onChange:g=>{x(g.target.value),C(-1)},placeholder:a("modelPicker.searchPlaceholder")||"Search models...",className:"w-full px-2 py-1 bg-surface-overlay border border-border-default rounded text-xs text-fg-primary focus:outline-none focus:border-brand-500"})}),e.jsxs("div",{ref:T,className:"overflow-y-auto flex-1",children:[e.jsx("div",{className:`px-3 py-1.5 text-xs cursor-pointer ${m===-1?"bg-brand-500/20 text-brand-500":"text-fg-secondary hover:bg-surface-overlay"}`,onClick:()=>{n(""),d(!1),x("")},children:o??a("modelRouting.auto")}),[...h.entries()].map(([g,j])=>e.jsxs("div",{children:[e.jsx("div",{className:"px-3 py-1 text-[10px] font-semibold text-fg-tertiary uppercase tracking-wider bg-surface-overlay/50 sticky top-0",children:g}),j.map(S=>{const R=U.indexOf(S),E=`${S.provider}/${S.modelId}`===s;return e.jsxs("div",{"data-focus-index":R,className:`px-3 py-1.5 text-xs cursor-pointer flex items-center gap-2 ${R===m?"bg-brand-500/20":E?"bg-surface-overlay":"hover:bg-surface-overlay/50"}`,onClick:()=>{n(`${S.provider}/${S.modelId}`),d(!1),x("")},children:[e.jsx("span",{className:"flex-1 truncate text-fg-primary",children:S.modelName}),S.tier&&e.jsx(wa,{tier:S.tier}),S.costTier&&e.jsx("span",{className:"text-[9px] text-fg-tertiary",children:S.costTier})]},`${S.provider}/${S.modelId}`)})]},g)),U.length===0&&e.jsx("div",{className:"px-3 py-3 text-xs text-fg-tertiary text-center",children:a("modelPicker.empty")})]})]})]})}function wa({tier:s}){const r={max:"bg-purple-500/20 text-purple-400",pro:"bg-blue-500/20 text-blue-400",base:"bg-gray-500/20 text-gray-400"};return e.jsx("span",{className:`px-1 py-0.5 rounded text-[8px] font-bold uppercase ${r[s]??r.base}`,children:s})}const ka=500,_r=[{groupKey:"image",capabilities:["image_recognition","image_generation"]},{groupKey:"audio",capabilities:["audio_tts","audio_stt"]},{groupKey:"video",capabilities:["video_generation"]}];function Ca({onSave:s,configuredProviders:r}){const{t:o}=pe(["settings","common"]),[n,a]=i.useState({}),[t,d]=i.useState(null),[u,x]=i.useState(!1),[f,v]=i.useState(null),[T,m]=i.useState(!0),[C,w]=i.useState("idle"),[h,U]=i.useState(null),[y,A]=i.useState({}),[g,j]=i.useState(!1),[S,R]=i.useState("idle"),[E,B]=i.useState(null),[K,_]=i.useState(!1),O=i.useRef(null),F=i.useRef(null),b=i.useMemo(()=>r.map(c=>c.name).sort().join(","),[r]);i.useEffect(()=>{fetch("/api/settings/llm/routing",{credentials:"include"}).then(c=>{if(!c.ok)throw new Error(`HTTP ${c.status}`);return c.json()}).then(c=>{a(c.capabilityRouting?.assignments??{}),d(c.routingDefaultModel??null),x(!0)}).catch(c=>{v(String(c)),x(!0)})},[b]),i.useEffect(()=>{let c=!1;return m(!0),fetch("/api/models/routing-candidates",{credentials:"include"}).then(k=>{if(!k.ok)throw new Error(`HTTP ${k.status}`);return k.json()}).then(k=>{if(c)return;const D=[];for(const $ of k.providers)for(const W of $.models)D.push({provider:$.provider,providerLabel:$.displayName,modelId:W.id,modelName:W.name,mode:W.mode,tier:W.tier,costTier:W.costTier,capabilities:W.capabilities});U(D)}).catch(()=>{c||U(null)}).finally(()=>{c||m(!1)}),()=>{c=!0}},[b]),i.useEffect(()=>{fetch("/api/models/suggested-assignments",{credentials:"include"}).then(c=>{if(!c.ok)throw new Error(`HTTP ${c.status}`);return c.json()}).then(c=>{A(c.suggestions),j(!0)}).catch(()=>j(!0))},[b]);const P=i.useCallback(c=>{w("saving"),s(c).then(()=>{w("saved"),setTimeout(()=>w(k=>k==="saved"?"idle":k),2e3)}).catch(()=>{w("error"),setTimeout(()=>w(k=>k==="error"?"idle":k),3e3)})},[s]),M=i.useCallback((c,k)=>{F.current={capabilityRouting:c!==void 0?{assignments:c}:F.current?.capabilityRouting,routingDefaultModel:k!==void 0?k:F.current?.routingDefaultModel},O.current&&clearTimeout(O.current),O.current=setTimeout(()=>{const D=F.current;F.current=null,D&&P(D)},ka)},[P]),q=i.useMemo(()=>r.flatMap(c=>(c.models??[{id:c.model,name:c.model}]).map(k=>({provider:c.name,providerLabel:c.displayName??c.name,modelId:k.id,modelName:k.name}))),[r]),Q=h??q,re=i.useMemo(()=>Object.entries(n).map(([c,k])=>`${c}:${k?.provider??""}/${k?.model??""}`).sort().join("|"),[n]);i.useEffect(()=>{!u||!h||h.length===0||h.some(c=>!!c.modelId)&&(a(c=>{let k=!1;const D={...c};for(const $ of _r)for(const W of $.capabilities){const Z=D[W];if(!Z?.model)continue;const X=Tn(h,W);if(X.length===0)continue;X.some(ce=>ce.provider===Z.provider&&ce.modelId===Z.model)||(delete D[W],k=!0)}return k?(M(D),D):c}),d(c=>{if(!c?.model||h.some(W=>W.provider===c.provider&&W.modelId===c.model))return c;const D=h.find(W=>W.provider==="markus"),$=D?{provider:D.provider,model:D.modelId}:{provider:h[0].provider,model:h[0].modelId};return s({routingDefaultModel:$}),$}))},[u,h,b,M,re]);const oe=i.useCallback(()=>{fetch("/api/settings/llm/routing",{credentials:"include"}).then(c=>{if(!c.ok)throw new Error(`HTTP ${c.status}`);return c.json()}).then(c=>{a(c.capabilityRouting?.assignments??{}),d(c.routingDefaultModel??null)}).catch(()=>{}),m(!0),fetch("/api/models/routing-candidates",{credentials:"include"}).then(c=>{if(!c.ok)throw new Error(`HTTP ${c.status}`);return c.json()}).then(c=>{const k=[];for(const D of c.providers)for(const $ of D.models)k.push({provider:D.provider,providerLabel:D.displayName,modelId:$.id,modelName:$.name,mode:$.mode,tier:$.tier,costTier:$.costTier,capabilities:$.capabilities});U(k)}).catch(()=>{}).finally(()=>m(!1))},[]),xe=i.useCallback(async()=>{if(S!=="working"){R("working"),B(null);try{const c=await fetch("/api/settings/llm/restore-recommended",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"}}),k=await c.json().catch(()=>({}));if(!c.ok||!k.ok)throw new Error(k.error??`HTTP ${c.status}`);k.capabilityRouting&&a(k.capabilityRouting.assignments??{}),k.routingDefaultModel!==void 0&&d(k.routingDefaultModel),oe(),R("idle"),w("saved"),setTimeout(()=>w(D=>D==="saved"?"idle":D),2e3)}catch(c){R("error"),B(c instanceof Error?c.message:String(c)),setTimeout(()=>R("idle"),4e3)}}},[S,oe]),ee=Q.length>0;return u?f?e.jsx("div",{className:"bg-red-500/10 border border-red-500/30 rounded-xl p-4 text-xs text-red-400",children:o("modelRouting.loadError",{error:f})}):T&&!ee?e.jsx("div",{className:"space-y-4",children:e.jsx("div",{className:"bg-surface-elevated rounded-xl p-5",children:e.jsxs("div",{className:"flex items-center gap-2 text-xs text-fg-secondary",children:[e.jsxs("svg",{className:"w-4 h-4 animate-spin text-brand-500",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z"})]}),e.jsx("span",{children:o("modelRouting.loadingModels")})]})})}):e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx(Aa,{status:C,t:o}),e.jsxs("div",{className:"flex flex-col items-end gap-1",children:[e.jsx("button",{type:"button",onClick:()=>_(!0),disabled:S==="working",className:"text-xs px-3 py-1.5 rounded-lg border border-border-default text-fg-secondary hover:text-fg-primary hover:border-brand-500/40 disabled:opacity-50 transition-colors",children:o(S==="working"?"modelRouting.restoreWorking":"modelRouting.restoreRecommended")}),E&&e.jsx("span",{className:"text-[10px] text-red-400 max-w-xs text-right",children:E})]})]}),e.jsxs("div",{className:"bg-surface-elevated rounded-xl p-5 space-y-3",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-semibold text-fg-primary",children:o("modelRouting.defaultModelTitle")}),e.jsx("p",{className:"text-xs text-fg-tertiary mt-1",children:o("modelRouting.defaultModelDesc")})]}),e.jsx("div",{className:"max-w-md",children:e.jsx(_s,{value:t?`${t.provider}/${t.model}`:"",options:Q,placeholder:o("modelRouting.defaultModelPlaceholder"),onChange:c=>{if(!c)d(null),M(void 0,null);else{const[k,...D]=c.split("/"),$={provider:k,model:D.join("/")};if(d($),n.text){const W={...n};delete W.text,a(W),M(W,$)}else M(void 0,$)}}})})]}),e.jsxs("div",{className:"bg-surface-elevated rounded-xl p-5 space-y-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-semibold text-fg-primary",children:o("modelRouting.capabilityAssignTitle")}),e.jsx("p",{className:"text-xs text-fg-tertiary mt-1",children:o("modelRouting.capabilityAssignDesc")})]}),r.length===0&&e.jsx("div",{className:"p-3 bg-yellow-500/10 border border-yellow-500/30 rounded-lg text-xs text-yellow-400",children:o("modelRouting.noProvidersHint")}),r.length>0&&e.jsx("div",{className:"space-y-4",children:_r.map(c=>e.jsx(Sa,{groupKey:c.groupKey,capabilities:c.capabilities,assignments:n,suggestions:y,allModels:Q,configuredProviderNames:new Set(r.map(k=>k.name)),t:o,onAssign:(k,D)=>{const $={...n};D?$[k]=D:delete $[k],a($),M($)}},c.groupKey))})]}),K&&e.jsx(Pn,{variant:"primary",title:o("modelRouting.restoreRecommended"),message:o("modelRouting.restoreConfirm"),confirmLabel:o("common:confirm"),onConfirm:()=>{_(!1),xe()},onCancel:()=>_(!1)})]}):e.jsx("div",{className:"space-y-4",children:e.jsxs("div",{className:"bg-surface-elevated rounded-xl p-5 animate-pulse",children:[e.jsx("div",{className:"h-4 bg-surface-overlay rounded w-1/3 mb-3"}),e.jsx("div",{className:"h-3 bg-surface-overlay rounded w-2/3 mb-4"}),e.jsx("div",{className:"space-y-2",children:[1,2,3,4,5].map(c=>e.jsx("div",{className:"h-10 bg-surface-overlay rounded-lg"},c))})]})})}function Sa({groupKey:s,capabilities:r,assignments:o,suggestions:n,allModels:a,configuredProviderNames:t,t:d,onAssign:u}){return e.jsxs("div",{children:[e.jsx("div",{className:"text-[10px] font-semibold text-fg-tertiary uppercase tracking-wider mb-2 px-1",children:d(`modelRouting.capabilityGroups.${s}`)}),e.jsx("div",{className:"space-y-1",children:r.map(x=>{const f=o[x],v=n[x],T=f?`${f.provider}/${f.model}`:"",m=Tn(a,x),C=v?m.find(A=>A.provider===v.provider&&A.modelId===v.model)?.modelName??v.model:void 0,w=m.length>0,h=f?Pa(a,f.provider,f.model):void 0,U=f&&!t.has(f.provider),y=!!(f&&w&&x!=="text"&&!m.some(A=>A.provider===f.provider&&A.modelId===f.model));return e.jsxs("div",{className:`flex items-center gap-3 px-3 py-2 rounded-lg ${y?"bg-red-500/10 border border-red-500/30":U?"bg-yellow-500/10 border border-yellow-500/30":!w&&!f?"bg-amber-500/5 border border-amber-500/20":"bg-surface-overlay/40"}`,children:[e.jsx("div",{className:"w-28 shrink-0",children:e.jsx("span",{className:"text-xs text-fg-primary",children:d(`modelRouting.capabilities.${x}`)})}),e.jsx("div",{className:"flex-1 min-w-0",children:y?e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsxs("span",{className:"text-xs text-red-400",children:["⚠ ",f.model]}),e.jsx("span",{className:"text-[10px] text-red-400/70",children:d("modelRouting.mismatchHint")})]}),e.jsx(_s,{value:"",options:m,placeholder:d("modelRouting.selectModel"),onChange:A=>{if(!A)u(x,null);else{const[g,...j]=A.split("/");u(x,{provider:g,model:j.join("/")})}}})]}):w?e.jsx(_s,{value:T,options:m,placeholder:C?`${C} (${d("modelRouting.suggested")})`:d("modelRouting.selectModel"),onChange:A=>{if(!A)u(x,null);else{const[g,...j]=A.split("/");u(x,{provider:g,model:j.join("/")})}}}):e.jsxs("span",{className:"text-xs text-amber-400",children:[d("modelRouting.noModelAvailable"),e.jsxs("span",{className:"text-fg-tertiary ml-1",children:["— ",d("modelRouting.addProviderHint")]})]})}),e.jsxs("div",{className:"w-14 shrink-0 flex justify-end",children:[y&&e.jsx("span",{className:"text-[10px] text-red-400 font-medium",title:d("modelRouting.mismatchHint"),children:"⚠"}),!y&&U&&e.jsx("span",{className:"text-[10px] text-yellow-400 font-medium",title:d("modelRouting.staleProvider"),children:"⚠"}),!y&&!U&&h&&e.jsx(Dr,{tier:h}),!y&&!U&&!h&&f&&e.jsx(Dr,{tier:"unknown"})]}),e.jsx("div",{className:"w-8 shrink-0 flex justify-end",children:f&&e.jsx("button",{onClick:()=>u(x,null),className:"text-fg-tertiary hover:text-red-400 transition-colors",title:d("modelRouting.clear"),children:e.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})})]},x)})})]})}function Pa(s,r,o){return s.find(a=>a.provider===r&&a.modelId===o)?.tier}function Aa({status:s,t:r}){if(s==="idle")return null;const o={idle:"",saving:"text-fg-tertiary",saved:"text-green-400",error:"text-red-400"},n={idle:"",saving:r("modelRouting.saving"),saved:r("modelRouting.saved"),error:r("modelRouting.saveError")};return e.jsx("div",{className:`text-xs font-medium transition-opacity ${o[s]}`,children:n[s]})}function Dr({tier:s}){const r={max:"bg-purple-500/20 text-purple-400 border-purple-500/30",pro:"bg-blue-500/20 text-blue-400 border-blue-500/30",base:"bg-gray-500/20 text-gray-400 border-gray-500/30",unknown:"bg-gray-500/10 text-fg-tertiary border-border-default"};return e.jsx("span",{className:`px-1.5 py-0.5 text-[9px] rounded font-semibold uppercase border ${r[s]??r.unknown}`,children:s==="unknown"?"—":s})}const Ma=new Set(["imageGeneration","tts","stt","videoGeneration","audioOutput","audioInput"]);function Tn(s,r){if(r==="text")return s.filter(d=>!(d.capabilities&&d.capabilities.some(u=>Ma.has(u))||d.mode&&d.mode!=="chat"));const o={image_generation:["image_generation"],audio_tts:["audio_speech"],audio_stt:["audio_transcription"],video_generation:["video_generation"]},n={image_recognition:["vision"],image_generation:["imageGeneration"],audio_tts:["tts"],audio_stt:["stt"],video_generation:["videoGeneration"]},a=o[r],t=n[r];return s.filter(d=>!!(d.capabilities&&d.capabilities.length>0&&t&&t.some(u=>d.capabilities.includes(u))||a&&d.mode&&a.includes(d.mode)))}const At=[{id:"markus",label:"Markus Cloud AI",envKey:"MARKUS_SUBSCRIPTION_KEY",defaultModel:""},{id:"anthropic",label:"Anthropic",envKey:"ANTHROPIC_API_KEY",defaultModel:"claude-opus-4-6"},{id:"openai",label:"OpenAI",envKey:"OPENAI_API_KEY",defaultModel:"gpt-5.4"},{id:"google",label:"Google Gemini",envKey:"GOOGLE_API_KEY",defaultModel:"gemini-3-1-pro"},{id:"deepseek",label:"DeepSeek",envKey:"DEEPSEEK_API_KEY",baseUrl:"https://api.deepseek.com",defaultModel:"deepseek-v4-flash"},{id:"siliconflow",label:"SiliconFlow (中国)",envKey:"SILICONFLOW_API_KEY",baseUrl:"https://api.siliconflow.cn/v1",defaultModel:"Qwen/Qwen3.5-35B-A3B"},{id:"siliconflow-intl",label:"SiliconFlow (Global)",envKey:"SILICONFLOW_INTL_API_KEY",baseUrl:"https://api-st.siliconflow.cn/v1",defaultModel:"Qwen/Qwen3.5-35B-A3B"},{id:"minimax",label:"MiniMax (Global)",envKey:"MINIMAX_API_KEY",baseUrl:"https://api.minimax.io/v1",defaultModel:"MiniMax-M3"},{id:"minimax-cn",label:"MiniMax (中国)",envKey:"MINIMAX_CN_API_KEY",baseUrl:"https://api.minimaxi.com/v1",defaultModel:"MiniMax-M3"},{id:"openrouter",label:"OpenRouter",envKey:"OPENROUTER_API_KEY",baseUrl:"https://openrouter.ai/api/v1",defaultModel:"xiaomi/mimo-v2-pro:free"},{id:"zai",label:"ZAI (GLM)",envKey:"ZAI_API_KEY",baseUrl:"https://api.z.ai/api/paas/v4",defaultModel:"glm-5.1"},{id:"xai",label:"xAI (Grok)",envKey:"XAI_API_KEY",baseUrl:"https://api.x.ai/v1",defaultModel:"grok-3"},{id:"mistral",label:"Mistral AI",envKey:"MISTRAL_API_KEY",baseUrl:"https://api.mistral.ai/v1",defaultModel:"mistral-large-latest"},{id:"groq",label:"Groq",envKey:"GROQ_API_KEY",baseUrl:"https://api.groq.com/openai/v1",defaultModel:"llama-3.3-70b-versatile"},{id:"perplexity",label:"Perplexity",envKey:"PERPLEXITY_API_KEY",baseUrl:"https://api.perplexity.ai",defaultModel:"sonar-pro"},{id:"cohere",label:"Cohere",envKey:"COHERE_API_KEY",baseUrl:"https://api.cohere.ai/compatibility/v1",defaultModel:"command-r-plus"},{id:"together_ai",label:"Together AI",envKey:"TOGETHER_API_KEY",baseUrl:"https://api.together.xyz/v1",defaultModel:"meta-llama/Llama-3.3-70B-Instruct-Turbo"},{id:"fireworks_ai",label:"Fireworks AI",envKey:"FIREWORKS_API_KEY",baseUrl:"https://api.fireworks.ai/inference/v1",defaultModel:"accounts/fireworks/models/llama-v3p3-70b-instruct"},{id:"moonshot",label:"Moonshot (Kimi)",envKey:"MOONSHOT_API_KEY",baseUrl:"https://api.moonshot.cn/v1",defaultModel:"moonshot-v1-auto"},{id:"volcengine",label:"Volcengine (Doubao)",envKey:"VOLCENGINE_API_KEY",baseUrl:"https://ark.cn-beijing.volces.com/api/v3",defaultModel:"doubao-1.5-pro-32k"},{id:"dashscope",label:"DashScope (Qwen)",envKey:"DASHSCOPE_API_KEY",baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",defaultModel:"qwen-max"},{id:"ollama",label:"Ollama (Local)",envKey:"OLLAMA_BASE_URL",baseUrl:"http://localhost:11434/v1",defaultModel:"llama3"},{id:"atlascloud",label:"Atlas Cloud (Full-Modal)",envKey:"ATLASCLOUD_API_KEY",baseUrl:"https://api.atlascloud.ai/v1",defaultModel:"claude-sonnet-4-6"},{id:"strongly",label:"Strongly.AI (Full-Modal)",envKey:"STRONGLY_API_KEY",baseUrl:"https://api.strongly.ai/v1",defaultModel:"claude-sonnet-4-6"}];var Je={},is,Kr;function Ta(){return Kr||(Kr=1,is=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}),is}var ls={},Ke={},Ur;function He(){if(Ur)return Ke;Ur=1;let s;const r=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];return Ke.getSymbolSize=function(n){if(!n)throw new Error('"version" cannot be null or undefined');if(n<1||n>40)throw new Error('"version" should be in range from 1 to 40');return n*4+17},Ke.getSymbolTotalCodewords=function(n){return r[n]},Ke.getBCHDigit=function(o){let n=0;for(;o!==0;)n++,o>>>=1;return n},Ke.setToSJISFunction=function(n){if(typeof n!="function")throw new Error('"toSJISFunc" is not a valid function.');s=n},Ke.isKanjiModeEnabled=function(){return typeof s<"u"},Ke.toSJIS=function(n){return s(n)},Ke}var ds={},Fr;function Ks(){return Fr||(Fr=1,(function(s){s.L={bit:1},s.M={bit:0},s.Q={bit:3},s.H={bit:2};function r(o){if(typeof o!="string")throw new Error("Param is not a string");switch(o.toLowerCase()){case"l":case"low":return s.L;case"m":case"medium":return s.M;case"q":case"quartile":return s.Q;case"h":case"high":return s.H;default:throw new Error("Unknown EC Level: "+o)}}s.isValid=function(n){return n&&typeof n.bit<"u"&&n.bit>=0&&n.bit<4},s.from=function(n,a){if(s.isValid(n))return n;try{return r(n)}catch{return a}}})(ds)),ds}var cs,$r;function Ea(){if($r)return cs;$r=1;function s(){this.buffer=[],this.length=0}return s.prototype={get:function(r){const o=Math.floor(r/8);return(this.buffer[o]>>>7-r%8&1)===1},put:function(r,o){for(let n=0;n<o;n++)this.putBit((r>>>o-n-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(r){const o=Math.floor(this.length/8);this.buffer.length<=o&&this.buffer.push(0),r&&(this.buffer[o]|=128>>>this.length%8),this.length++}},cs=s,cs}var us,Vr;function Ia(){if(Vr)return us;Vr=1;function s(r){if(!r||r<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=r,this.data=new Uint8Array(r*r),this.reservedBit=new Uint8Array(r*r)}return s.prototype.set=function(r,o,n,a){const t=r*this.size+o;this.data[t]=n,a&&(this.reservedBit[t]=!0)},s.prototype.get=function(r,o){return this.data[r*this.size+o]},s.prototype.xor=function(r,o,n){this.data[r*this.size+o]^=n},s.prototype.isReserved=function(r,o){return this.reservedBit[r*this.size+o]},us=s,us}var xs={},Hr;function La(){return Hr||(Hr=1,(function(s){const r=He().getSymbolSize;s.getRowColCoords=function(n){if(n===1)return[];const a=Math.floor(n/7)+2,t=r(n),d=t===145?26:Math.ceil((t-13)/(2*a-2))*2,u=[t-7];for(let x=1;x<a-1;x++)u[x]=u[x-1]-d;return u.push(6),u.reverse()},s.getPositions=function(n){const a=[],t=s.getRowColCoords(n),d=t.length;for(let u=0;u<d;u++)for(let x=0;x<d;x++)u===0&&x===0||u===0&&x===d-1||u===d-1&&x===0||a.push([t[u],t[x]]);return a}})(xs)),xs}var ms={},qr;function Ra(){if(qr)return ms;qr=1;const s=He().getSymbolSize,r=7;return ms.getPositions=function(n){const a=s(n);return[[0,0],[a-r,0],[0,a-r]]},ms}var gs={},zr;function Ba(){return zr||(zr=1,(function(s){s.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};const r={N1:3,N2:3,N3:40,N4:10};s.isValid=function(a){return a!=null&&a!==""&&!isNaN(a)&&a>=0&&a<=7},s.from=function(a){return s.isValid(a)?parseInt(a,10):void 0},s.getPenaltyN1=function(a){const t=a.size;let d=0,u=0,x=0,f=null,v=null;for(let T=0;T<t;T++){u=x=0,f=v=null;for(let m=0;m<t;m++){let C=a.get(T,m);C===f?u++:(u>=5&&(d+=r.N1+(u-5)),f=C,u=1),C=a.get(m,T),C===v?x++:(x>=5&&(d+=r.N1+(x-5)),v=C,x=1)}u>=5&&(d+=r.N1+(u-5)),x>=5&&(d+=r.N1+(x-5))}return d},s.getPenaltyN2=function(a){const t=a.size;let d=0;for(let u=0;u<t-1;u++)for(let x=0;x<t-1;x++){const f=a.get(u,x)+a.get(u,x+1)+a.get(u+1,x)+a.get(u+1,x+1);(f===4||f===0)&&d++}return d*r.N2},s.getPenaltyN3=function(a){const t=a.size;let d=0,u=0,x=0;for(let f=0;f<t;f++){u=x=0;for(let v=0;v<t;v++)u=u<<1&2047|a.get(f,v),v>=10&&(u===1488||u===93)&&d++,x=x<<1&2047|a.get(v,f),v>=10&&(x===1488||x===93)&&d++}return d*r.N3},s.getPenaltyN4=function(a){let t=0;const d=a.data.length;for(let x=0;x<d;x++)t+=a.data[x];return Math.abs(Math.ceil(t*100/d/5)-10)*r.N4};function o(n,a,t){switch(n){case s.Patterns.PATTERN000:return(a+t)%2===0;case s.Patterns.PATTERN001:return a%2===0;case s.Patterns.PATTERN010:return t%3===0;case s.Patterns.PATTERN011:return(a+t)%3===0;case s.Patterns.PATTERN100:return(Math.floor(a/2)+Math.floor(t/3))%2===0;case s.Patterns.PATTERN101:return a*t%2+a*t%3===0;case s.Patterns.PATTERN110:return(a*t%2+a*t%3)%2===0;case s.Patterns.PATTERN111:return(a*t%3+(a+t)%2)%2===0;default:throw new Error("bad maskPattern:"+n)}}s.applyMask=function(a,t){const d=t.size;for(let u=0;u<d;u++)for(let x=0;x<d;x++)t.isReserved(x,u)||t.xor(x,u,o(a,x,u))},s.getBestMask=function(a,t){const d=Object.keys(s.Patterns).length;let u=0,x=1/0;for(let f=0;f<d;f++){t(f),s.applyMask(f,a);const v=s.getPenaltyN1(a)+s.getPenaltyN2(a)+s.getPenaltyN3(a)+s.getPenaltyN4(a);s.applyMask(f,a),v<x&&(x=v,u=f)}return u}})(gs)),gs}var Mt={},Wr;function En(){if(Wr)return Mt;Wr=1;const s=Ks(),r=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],o=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];return Mt.getBlocksCount=function(a,t){switch(t){case s.L:return r[(a-1)*4+0];case s.M:return r[(a-1)*4+1];case s.Q:return r[(a-1)*4+2];case s.H:return r[(a-1)*4+3];default:return}},Mt.getTotalCodewordsCount=function(a,t){switch(t){case s.L:return o[(a-1)*4+0];case s.M:return o[(a-1)*4+1];case s.Q:return o[(a-1)*4+2];case s.H:return o[(a-1)*4+3];default:return}},Mt}var fs={},dt={},Gr;function Oa(){if(Gr)return dt;Gr=1;const s=new Uint8Array(512),r=new Uint8Array(256);return(function(){let n=1;for(let a=0;a<255;a++)s[a]=n,r[n]=a,n<<=1,n&256&&(n^=285);for(let a=255;a<512;a++)s[a]=s[a-255]})(),dt.log=function(n){if(n<1)throw new Error("log("+n+")");return r[n]},dt.exp=function(n){return s[n]},dt.mul=function(n,a){return n===0||a===0?0:s[r[n]+r[a]]},dt}var Yr;function _a(){return Yr||(Yr=1,(function(s){const r=Oa();s.mul=function(n,a){const t=new Uint8Array(n.length+a.length-1);for(let d=0;d<n.length;d++)for(let u=0;u<a.length;u++)t[d+u]^=r.mul(n[d],a[u]);return t},s.mod=function(n,a){let t=new Uint8Array(n);for(;t.length-a.length>=0;){const d=t[0];for(let x=0;x<a.length;x++)t[x]^=r.mul(a[x],d);let u=0;for(;u<t.length&&t[u]===0;)u++;t=t.slice(u)}return t},s.generateECPolynomial=function(n){let a=new Uint8Array([1]);for(let t=0;t<n;t++)a=s.mul(a,new Uint8Array([1,r.exp(t)]));return a}})(fs)),fs}var ps,Jr;function Da(){if(Jr)return ps;Jr=1;const s=_a();function r(o){this.genPoly=void 0,this.degree=o,this.degree&&this.initialize(this.degree)}return r.prototype.initialize=function(n){this.degree=n,this.genPoly=s.generateECPolynomial(this.degree)},r.prototype.encode=function(n){if(!this.genPoly)throw new Error("Encoder not initialized");const a=new Uint8Array(n.length+this.degree);a.set(n);const t=s.mod(a,this.genPoly),d=this.degree-t.length;if(d>0){const u=new Uint8Array(this.degree);return u.set(t,d),u}return t},ps=r,ps}var hs={},bs={},ys={},Qr;function In(){return Qr||(Qr=1,ys.isValid=function(r){return!isNaN(r)&&r>=1&&r<=40}),ys}var Me={},Xr;function Ln(){if(Xr)return Me;Xr=1;const s="[0-9]+",r="[A-Z $%*+\\-./:]+";let o="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";o=o.replace(/u/g,"\\u");const n="(?:(?![A-Z0-9 $%*+\\-./:]|"+o+`)(?:.|[\r
2
2
  ]))+`;Me.KANJI=new RegExp(o,"g"),Me.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),Me.BYTE=new RegExp(n,"g"),Me.NUMERIC=new RegExp(s,"g"),Me.ALPHANUMERIC=new RegExp(r,"g");const a=new RegExp("^"+o+"$"),t=new RegExp("^"+s+"$"),d=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");return Me.testKanji=function(x){return a.test(x)},Me.testNumeric=function(x){return t.test(x)},Me.testAlphanumeric=function(x){return d.test(x)},Me}var Zr;function qe(){return Zr||(Zr=1,(function(s){const r=In(),o=Ln();s.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},s.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},s.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},s.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},s.MIXED={bit:-1},s.getCharCountIndicator=function(t,d){if(!t.ccBits)throw new Error("Invalid mode: "+t);if(!r.isValid(d))throw new Error("Invalid version: "+d);return d>=1&&d<10?t.ccBits[0]:d<27?t.ccBits[1]:t.ccBits[2]},s.getBestModeForData=function(t){return o.testNumeric(t)?s.NUMERIC:o.testAlphanumeric(t)?s.ALPHANUMERIC:o.testKanji(t)?s.KANJI:s.BYTE},s.toString=function(t){if(t&&t.id)return t.id;throw new Error("Invalid mode")},s.isValid=function(t){return t&&t.bit&&t.ccBits};function n(a){if(typeof a!="string")throw new Error("Param is not a string");switch(a.toLowerCase()){case"numeric":return s.NUMERIC;case"alphanumeric":return s.ALPHANUMERIC;case"kanji":return s.KANJI;case"byte":return s.BYTE;default:throw new Error("Unknown mode: "+a)}}s.from=function(t,d){if(s.isValid(t))return t;try{return n(t)}catch{return d}}})(bs)),bs}var en;function Ka(){return en||(en=1,(function(s){const r=He(),o=En(),n=Ks(),a=qe(),t=In(),d=7973,u=r.getBCHDigit(d);function x(m,C,w){for(let h=1;h<=40;h++)if(C<=s.getCapacity(h,w,m))return h}function f(m,C){return a.getCharCountIndicator(m,C)+4}function v(m,C){let w=0;return m.forEach(function(h){const U=f(h.mode,C);w+=U+h.getBitsLength()}),w}function T(m,C){for(let w=1;w<=40;w++)if(v(m,w)<=s.getCapacity(w,C,a.MIXED))return w}s.from=function(C,w){return t.isValid(C)?parseInt(C,10):w},s.getCapacity=function(C,w,h){if(!t.isValid(C))throw new Error("Invalid QR Code version");typeof h>"u"&&(h=a.BYTE);const U=r.getSymbolTotalCodewords(C),y=o.getTotalCodewordsCount(C,w),A=(U-y)*8;if(h===a.MIXED)return A;const g=A-f(h,C);switch(h){case a.NUMERIC:return Math.floor(g/10*3);case a.ALPHANUMERIC:return Math.floor(g/11*2);case a.KANJI:return Math.floor(g/13);case a.BYTE:default:return Math.floor(g/8)}},s.getBestVersionForData=function(C,w){let h;const U=n.from(w,n.M);if(Array.isArray(C)){if(C.length>1)return T(C,U);if(C.length===0)return 1;h=C[0]}else h=C;return x(h.mode,h.getLength(),U)},s.getEncodedBits=function(C){if(!t.isValid(C)||C<7)throw new Error("Invalid QR Code version");let w=C<<12;for(;r.getBCHDigit(w)-u>=0;)w^=d<<r.getBCHDigit(w)-u;return C<<12|w}})(hs)),hs}var vs={},tn;function Ua(){if(tn)return vs;tn=1;const s=He(),r=1335,o=21522,n=s.getBCHDigit(r);return vs.getEncodedBits=function(t,d){const u=t.bit<<3|d;let x=u<<10;for(;s.getBCHDigit(x)-n>=0;)x^=r<<s.getBCHDigit(x)-n;return(u<<10|x)^o},vs}var js={},Ns,sn;function Fa(){if(sn)return Ns;sn=1;const s=qe();function r(o){this.mode=s.NUMERIC,this.data=o.toString()}return r.getBitsLength=function(n){return 10*Math.floor(n/3)+(n%3?n%3*3+1:0)},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(n){let a,t,d;for(a=0;a+3<=this.data.length;a+=3)t=this.data.substr(a,3),d=parseInt(t,10),n.put(d,10);const u=this.data.length-a;u>0&&(t=this.data.substr(a),d=parseInt(t,10),n.put(d,u*3+1))},Ns=r,Ns}var ws,rn;function $a(){if(rn)return ws;rn=1;const s=qe(),r=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function o(n){this.mode=s.ALPHANUMERIC,this.data=n}return o.getBitsLength=function(a){return 11*Math.floor(a/2)+6*(a%2)},o.prototype.getLength=function(){return this.data.length},o.prototype.getBitsLength=function(){return o.getBitsLength(this.data.length)},o.prototype.write=function(a){let t;for(t=0;t+2<=this.data.length;t+=2){let d=r.indexOf(this.data[t])*45;d+=r.indexOf(this.data[t+1]),a.put(d,11)}this.data.length%2&&a.put(r.indexOf(this.data[t]),6)},ws=o,ws}var ks,nn;function Va(){if(nn)return ks;nn=1;const s=qe();function r(o){this.mode=s.BYTE,typeof o=="string"?this.data=new TextEncoder().encode(o):this.data=new Uint8Array(o)}return r.getBitsLength=function(n){return n*8},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(o){for(let n=0,a=this.data.length;n<a;n++)o.put(this.data[n],8)},ks=r,ks}var Cs,an;function Ha(){if(an)return Cs;an=1;const s=qe(),r=He();function o(n){this.mode=s.KANJI,this.data=n}return o.getBitsLength=function(a){return a*13},o.prototype.getLength=function(){return this.data.length},o.prototype.getBitsLength=function(){return o.getBitsLength(this.data.length)},o.prototype.write=function(n){let a;for(a=0;a<this.data.length;a++){let t=r.toSJIS(this.data[a]);if(t>=33088&&t<=40956)t-=33088;else if(t>=57408&&t<=60351)t-=49472;else throw new Error("Invalid SJIS character: "+this.data[a]+`
3
3
  Make sure your charset is UTF-8`);t=(t>>>8&255)*192+(t&255),n.put(t,13)}},Cs=o,Cs}var Ss={exports:{}},on;function qa(){return on||(on=1,(function(s){var r={single_source_shortest_paths:function(o,n,a){var t={},d={};d[n]=0;var u=r.PriorityQueue.make();u.push(n,0);for(var x,f,v,T,m,C,w,h,U;!u.empty();){x=u.pop(),f=x.value,T=x.cost,m=o[f]||{};for(v in m)m.hasOwnProperty(v)&&(C=m[v],w=T+C,h=d[v],U=typeof d[v]>"u",(U||h>w)&&(d[v]=w,u.push(v,w),t[v]=f))}if(typeof a<"u"&&typeof d[a]>"u"){var y=["Could not find a path from ",n," to ",a,"."].join("");throw new Error(y)}return t},extract_shortest_path_from_predecessor_list:function(o,n){for(var a=[],t=n;t;)a.push(t),o[t],t=o[t];return a.reverse(),a},find_path:function(o,n,a){var t=r.single_source_shortest_paths(o,n,a);return r.extract_shortest_path_from_predecessor_list(t,a)},PriorityQueue:{make:function(o){var n=r.PriorityQueue,a={},t;o=o||{};for(t in n)n.hasOwnProperty(t)&&(a[t]=n[t]);return a.queue=[],a.sorter=o.sorter||n.default_sorter,a},default_sorter:function(o,n){return o.cost-n.cost},push:function(o,n){var a={value:o,cost:n};this.queue.push(a),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};s.exports=r})(Ss)),Ss.exports}var ln;function za(){return ln||(ln=1,(function(s){const r=qe(),o=Fa(),n=$a(),a=Va(),t=Ha(),d=Ln(),u=He(),x=qa();function f(y){return unescape(encodeURIComponent(y)).length}function v(y,A,g){const j=[];let S;for(;(S=y.exec(g))!==null;)j.push({data:S[0],index:S.index,mode:A,length:S[0].length});return j}function T(y){const A=v(d.NUMERIC,r.NUMERIC,y),g=v(d.ALPHANUMERIC,r.ALPHANUMERIC,y);let j,S;return u.isKanjiModeEnabled()?(j=v(d.BYTE,r.BYTE,y),S=v(d.KANJI,r.KANJI,y)):(j=v(d.BYTE_KANJI,r.BYTE,y),S=[]),A.concat(g,j,S).sort(function(E,B){return E.index-B.index}).map(function(E){return{data:E.data,mode:E.mode,length:E.length}})}function m(y,A){switch(A){case r.NUMERIC:return o.getBitsLength(y);case r.ALPHANUMERIC:return n.getBitsLength(y);case r.KANJI:return t.getBitsLength(y);case r.BYTE:return a.getBitsLength(y)}}function C(y){return y.reduce(function(A,g){const j=A.length-1>=0?A[A.length-1]:null;return j&&j.mode===g.mode?(A[A.length-1].data+=g.data,A):(A.push(g),A)},[])}function w(y){const A=[];for(let g=0;g<y.length;g++){const j=y[g];switch(j.mode){case r.NUMERIC:A.push([j,{data:j.data,mode:r.ALPHANUMERIC,length:j.length},{data:j.data,mode:r.BYTE,length:j.length}]);break;case r.ALPHANUMERIC:A.push([j,{data:j.data,mode:r.BYTE,length:j.length}]);break;case r.KANJI:A.push([j,{data:j.data,mode:r.BYTE,length:f(j.data)}]);break;case r.BYTE:A.push([{data:j.data,mode:r.BYTE,length:f(j.data)}])}}return A}function h(y,A){const g={},j={start:{}};let S=["start"];for(let R=0;R<y.length;R++){const E=y[R],B=[];for(let K=0;K<E.length;K++){const _=E[K],O=""+R+K;B.push(O),g[O]={node:_,lastCount:0},j[O]={};for(let F=0;F<S.length;F++){const b=S[F];g[b]&&g[b].node.mode===_.mode?(j[b][O]=m(g[b].lastCount+_.length,_.mode)-m(g[b].lastCount,_.mode),g[b].lastCount+=_.length):(g[b]&&(g[b].lastCount=_.length),j[b][O]=m(_.length,_.mode)+4+r.getCharCountIndicator(_.mode,A))}}S=B}for(let R=0;R<S.length;R++)j[S[R]].end=0;return{map:j,table:g}}function U(y,A){let g;const j=r.getBestModeForData(y);if(g=r.from(A,j),g!==r.BYTE&&g.bit<j.bit)throw new Error('"'+y+'" cannot be encoded with mode '+r.toString(g)+`.
4
4
  Suggested mode is: `+r.toString(j));switch(g===r.KANJI&&!u.isKanjiModeEnabled()&&(g=r.BYTE),g){case r.NUMERIC:return new o(y);case r.ALPHANUMERIC:return new n(y);case r.KANJI:return new t(y);case r.BYTE:return new a(y)}}s.fromArray=function(A){return A.reduce(function(g,j){return typeof j=="string"?g.push(U(j,null)):j.data&&g.push(U(j.data,j.mode)),g},[])},s.fromString=function(A,g){const j=T(A,u.isKanjiModeEnabled()),S=w(j),R=h(S,g),E=x.find_path(R.map,"start","end"),B=[];for(let K=1;K<E.length-1;K++)B.push(R.table[E[K]].node);return s.fromArray(C(B))},s.rawSplit=function(A){return s.fromArray(T(A,u.isKanjiModeEnabled()))}})(js)),js}var dn;function Wa(){if(dn)return ls;dn=1;const s=He(),r=Ks(),o=Ea(),n=Ia(),a=La(),t=Ra(),d=Ba(),u=En(),x=Da(),f=Ka(),v=Ua(),T=qe(),m=za();function C(R,E){const B=R.size,K=t.getPositions(E);for(let _=0;_<K.length;_++){const O=K[_][0],F=K[_][1];for(let b=-1;b<=7;b++)if(!(O+b<=-1||B<=O+b))for(let P=-1;P<=7;P++)F+P<=-1||B<=F+P||(b>=0&&b<=6&&(P===0||P===6)||P>=0&&P<=6&&(b===0||b===6)||b>=2&&b<=4&&P>=2&&P<=4?R.set(O+b,F+P,!0,!0):R.set(O+b,F+P,!1,!0))}}function w(R){const E=R.size;for(let B=8;B<E-8;B++){const K=B%2===0;R.set(B,6,K,!0),R.set(6,B,K,!0)}}function h(R,E){const B=a.getPositions(E);for(let K=0;K<B.length;K++){const _=B[K][0],O=B[K][1];for(let F=-2;F<=2;F++)for(let b=-2;b<=2;b++)F===-2||F===2||b===-2||b===2||F===0&&b===0?R.set(_+F,O+b,!0,!0):R.set(_+F,O+b,!1,!0)}}function U(R,E){const B=R.size,K=f.getEncodedBits(E);let _,O,F;for(let b=0;b<18;b++)_=Math.floor(b/3),O=b%3+B-8-3,F=(K>>b&1)===1,R.set(_,O,F,!0),R.set(O,_,F,!0)}function y(R,E,B){const K=R.size,_=v.getEncodedBits(E,B);let O,F;for(O=0;O<15;O++)F=(_>>O&1)===1,O<6?R.set(O,8,F,!0):O<8?R.set(O+1,8,F,!0):R.set(K-15+O,8,F,!0),O<8?R.set(8,K-O-1,F,!0):O<9?R.set(8,15-O-1+1,F,!0):R.set(8,15-O-1,F,!0);R.set(K-8,8,1,!0)}function A(R,E){const B=R.size;let K=-1,_=B-1,O=7,F=0;for(let b=B-1;b>0;b-=2)for(b===6&&b--;;){for(let P=0;P<2;P++)if(!R.isReserved(_,b-P)){let M=!1;F<E.length&&(M=(E[F]>>>O&1)===1),R.set(_,b-P,M),O--,O===-1&&(F++,O=7)}if(_+=K,_<0||B<=_){_-=K,K=-K;break}}}function g(R,E,B){const K=new o;B.forEach(function(P){K.put(P.mode.bit,4),K.put(P.getLength(),T.getCharCountIndicator(P.mode,R)),P.write(K)});const _=s.getSymbolTotalCodewords(R),O=u.getTotalCodewordsCount(R,E),F=(_-O)*8;for(K.getLengthInBits()+4<=F&&K.put(0,4);K.getLengthInBits()%8!==0;)K.putBit(0);const b=(F-K.getLengthInBits())/8;for(let P=0;P<b;P++)K.put(P%2?17:236,8);return j(K,R,E)}function j(R,E,B){const K=s.getSymbolTotalCodewords(E),_=u.getTotalCodewordsCount(E,B),O=K-_,F=u.getBlocksCount(E,B),b=K%F,P=F-b,M=Math.floor(K/F),q=Math.floor(O/F),Q=q+1,re=M-q,oe=new x(re);let xe=0;const ee=new Array(F),c=new Array(F);let k=0;const D=new Uint8Array(R.buffer);for(let ie=0;ie<F;ie++){const ce=ie<P?q:Q;ee[ie]=D.slice(xe,xe+ce),c[ie]=oe.encode(ee[ie]),xe+=ce,k=Math.max(k,ce)}const $=new Uint8Array(K);let W=0,Z,X;for(Z=0;Z<k;Z++)for(X=0;X<F;X++)Z<ee[X].length&&($[W++]=ee[X][Z]);for(Z=0;Z<re;Z++)for(X=0;X<F;X++)$[W++]=c[X][Z];return $}function S(R,E,B,K){let _;if(Array.isArray(R))_=m.fromArray(R);else if(typeof R=="string"){let M=E;if(!M){const q=m.rawSplit(R);M=f.getBestVersionForData(q,B)}_=m.fromString(R,M||40)}else throw new Error("Invalid data");const O=f.getBestVersionForData(_,B);if(!O)throw new Error("The amount of data is too big to be stored in a QR Code");if(!E)E=O;else if(E<O)throw new Error(`
@@ -1 +1 @@
1
- import{u as E,r as d,a as M,b as A,c as D,d as C,j as e,P as L,i as R,S as z,T as H,e as K,f as $,I as O,h as q,g as B}from"./index-B1VN5yM1.js";const v=[{id:"discover"},{id:"agents"},{id:"teams"},{id:"skills"},{id:"installed"}],P={agent:"agents",team:"teams",skill:"skills",connector:"skills"},F={discover:"M12 2l2.4 6.9L21 9l-5.4 4 2 7-5.6-4.1L6.4 20l2-7L3 9l6.6-.1z",agents:"M12 2a5 5 0 015 5v1a5 5 0 01-10 0V7a5 5 0 015-5zM4 21a8 8 0 0116 0z",teams:"M16 11a4 4 0 10-4-4 4 4 0 004 4zM8 13a3 3 0 10-3-3 3 3 0 003 3zm0 2c-2.7 0-5 1.3-5 3v2h7v-2c0-.7.2-1.3.6-1.9A7.6 7.6 0 008 15zm8 0c-3 0-6 1.5-6 3.5V21h12v-2.5c0-2-3-3.5-6-3.5z",skills:"M13 2L3 14h7l-1 8 10-12h-7z",installed:"M12 3v12m0 0l-4-4m4 4l4-4M5 21h14"};function I(n){return n==="discover"||n==="agents"||n==="teams"||n==="skills"||n==="installed"}function T(){const n=localStorage.getItem("markus_nav_installItem"),o=localStorage.getItem("markus_nav_storeTab");if(n)return{tab:I(o)?o:"agents",installId:n};const f=new URLSearchParams(window.location.search),s=f.get("install");if(s){const a=f.get("type");return{tab:a&&P[a]||"agents",installId:s}}return{tab:I(o)?o:"discover",installId:null}}function N(){localStorage.removeItem("markus_nav_installItem"),localStorage.removeItem("markus_nav_storeTab");const n=new URLSearchParams(window.location.search);if(n.has("install")||n.has("type")){n.delete("install"),n.delete("type");const o=n.toString();window.history.replaceState(null,"",window.location.pathname+(o?`?${o}`:"")+window.location.hash)}}function V({itemId:n,onDismiss:o,onInstalled:f}){const{t:s}=E(["store","common"]),[a,p]=d.useState(null),[g,l]=d.useState("loading"),[b,k]=d.useState(!1),[u,m]=d.useState("");d.useEffect(()=>{let x=!1;return l("loading"),p(null),m(""),q.getItem(n).then(({item:c})=>{x||(c?(p(c),l("ready")):l("missing"))}).catch(()=>{x||l("missing")}),()=>{x=!0}},[n]);const w=async()=>{if(!(!a||b)){k(!0),m("");try{await B(a),m(s("deepLink.installed")),f()}catch(x){const c=x instanceof Error?x.message:"";m(c.includes("402")||c.includes("Purchase")?s("deepLink.purchaseRequired"):s("deepLink.failed"))}finally{k(!1)}}};return e.jsxs("div",{className:"shrink-0 mx-3 mt-3 mb-1 rounded-xl border border-brand-500/30 bg-brand-600/10 px-4 py-3 flex flex-col sm:flex-row sm:items-center gap-3",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider text-brand-400/90 mb-0.5",children:s("deepLink.fromHub")}),g==="loading"&&e.jsx("p",{className:"text-sm text-fg-secondary",children:s("deepLink.loading")}),g==="missing"&&e.jsx("p",{className:"text-sm text-rose-300",children:s("deepLink.missing")}),g==="ready"&&a&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-sm font-semibold text-fg-primary truncate",children:a.name}),a.description&&e.jsx("p",{className:"text-xs text-fg-tertiary line-clamp-2 mt-0.5",children:a.description}),u&&e.jsx("p",{className:"text-xs mt-1 text-brand-300",children:u})]})]}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[g==="ready"&&a&&e.jsx("button",{type:"button",disabled:b,onClick:()=>{w()},className:"px-3.5 py-2 rounded-lg text-xs font-semibold bg-brand-600 hover:bg-brand-500 text-white disabled:opacity-60",children:s(b?"deepLink.installing":"deepLink.install")}),e.jsx("button",{type:"button",onClick:o,className:"px-2.5 py-2 rounded-lg text-xs text-fg-tertiary hover:text-fg-secondary hover:bg-surface-elevated/60",children:s("deepLink.dismiss")})]})]})}function G({authUser:n}){const{t:o}=E(["store","common"]),[f]=d.useState(T),[s,a]=d.useState(f.tab),p=M(),g=A(L.STORE),l=D(),b=l?.keyboardPane??"content",k=C(v,s,a),[u,m]=d.useState(f.installId),w=d.useRef(s);w.current=s,d.useEffect(()=>{if(p||!g)return;const t=r=>{if(l?.keyboardPane==="l0"||r.metaKey||r.ctrlKey||r.altKey||R(r.target))return;const i=r.key.length===1?r.key.toLowerCase():r.key;if(i==="h"||i==="ArrowLeft"){r.preventDefault(),l?.setL0FocusPageId(L.STORE),l?.setLeftCollapsed(!1),l?.setKeyboardPane("l0");return}if(i==="l"||i==="ArrowRight"){r.preventDefault(),l?.keyboardPane!=="l1"&&l?.setKeyboardPane("l1");return}const h=i==="j"||i==="ArrowDown"?1:i==="k"||i==="ArrowUp"?-1:0;if(!h)return;r.preventDefault(),l?.setKeyboardPane("l1");const y=v.findIndex(_=>_.id===w.current),S=v[Math.max(0,Math.min(v.length-1,y+h))];a(S.id),requestAnimationFrame(()=>{document.querySelector(`[data-store-tab-id="${S.id}"]`)?.scrollIntoView({block:"nearest"})})};return document.addEventListener("keydown",t,!0),()=>document.removeEventListener("keydown",t,!0)},[p,g,l]),d.useEffect(()=>{const t=T();t.installId&&(m(t.installId),I(t.tab)&&a(t.tab),N())},[]),d.useEffect(()=>{const t=r=>{const i=r.detail;if(i.page==="store"||i.page==="explore"){const h=i.params?.storeTab??localStorage.getItem("markus_nav_storeTab"),y=i.params?.installItem??localStorage.getItem("markus_nav_installItem");h&&I(h)&&a(h),y&&m(y),(h||y)&&N()}};return window.addEventListener("markus:navigate",t),()=>window.removeEventListener("markus:navigate",t)},[]);const x=(t,r)=>{const i=P[t]??"agents";r&&m(r),a(i)},c=()=>m(null),j=()=>e.jsxs(e.Fragment,{children:[u&&e.jsx(V,{itemId:u,onDismiss:c,onInstalled:c}),s==="discover"&&e.jsx(z,{onOpenType:x}),s==="agents"&&e.jsx(H,{authUser:n,highlightItemId:u,onHighlightDone:c}),s==="teams"&&e.jsx(K,{highlightItemId:u,onHighlightDone:c}),s==="skills"&&e.jsx($,{highlightItemId:u,onHighlightDone:c}),s==="installed"&&e.jsx(O,{})]});return p?e.jsxs("div",{className:"flex-1 overflow-hidden flex flex-col",onTouchStart:k.onTouchStart,onTouchEnd:k.onTouchEnd,children:[e.jsx("div",{className:"flex shrink-0 overflow-x-auto scrollbar-hide",children:v.map(t=>e.jsx("button",{onClick:()=>a(t.id),className:`flex-1 min-w-fit px-4 py-3 text-sm font-medium text-center whitespace-nowrap transition-colors border-b-2 ${s===t.id?"border-brand-500 text-brand-500":"border-transparent text-fg-tertiary hover:text-fg-secondary"}`,children:o(`tabs.${t.id}`)},t.id))}),e.jsx("div",{className:"flex-1 overflow-hidden flex flex-col",children:j()})]}):e.jsxs("div",{className:"flex-1 overflow-hidden flex flex-row",children:[e.jsxs("nav",{"data-keyboard-pane":"l1",className:`w-36 shrink-0 bg-surface-secondary rounded-xl m-1 mr-0 flex flex-col py-4 px-2 gap-1 ${b==="l1"?"ring-1 ring-inset ring-brand-500/30":""}`,children:[e.jsx("div",{className:"px-3 pb-3 mb-1",children:e.jsx("h2",{className:"text-xs font-semibold text-fg-tertiary uppercase tracking-wider",children:o("title")})}),v.map(t=>e.jsxs("button",{"data-store-tab-id":t.id,onClick:()=>a(t.id),className:`flex items-center gap-2.5 px-3 py-2.5 rounded-lg text-sm font-medium transition-all ${s===t.id?b==="l1"?"bg-brand-500/25 text-brand-400 ring-1 ring-inset ring-brand-500/40":"bg-brand-600/15 text-brand-400 shadow-sm shadow-brand-500/10":"text-fg-tertiary hover:text-fg-secondary hover:bg-surface-elevated/50"}`,children:[e.jsx("svg",{className:"w-4 h-4 shrink-0",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:e.jsx("path",{d:F[t.id]})}),o(`tabs.${t.id}`)]},t.id))]}),e.jsx("div",{className:"flex-1 overflow-hidden flex flex-col",children:j()})]})}export{G as StorePage};
1
+ import{u as E,r as d,a as M,b as A,c as D,d as C,j as e,P as L,i as R,S as z,T as H,e as K,f as $,I as O,h as q,g as B}from"./index-sjnbPgLJ.js";const v=[{id:"discover"},{id:"agents"},{id:"teams"},{id:"skills"},{id:"installed"}],P={agent:"agents",team:"teams",skill:"skills",connector:"skills"},F={discover:"M12 2l2.4 6.9L21 9l-5.4 4 2 7-5.6-4.1L6.4 20l2-7L3 9l6.6-.1z",agents:"M12 2a5 5 0 015 5v1a5 5 0 01-10 0V7a5 5 0 015-5zM4 21a8 8 0 0116 0z",teams:"M16 11a4 4 0 10-4-4 4 4 0 004 4zM8 13a3 3 0 10-3-3 3 3 0 003 3zm0 2c-2.7 0-5 1.3-5 3v2h7v-2c0-.7.2-1.3.6-1.9A7.6 7.6 0 008 15zm8 0c-3 0-6 1.5-6 3.5V21h12v-2.5c0-2-3-3.5-6-3.5z",skills:"M13 2L3 14h7l-1 8 10-12h-7z",installed:"M12 3v12m0 0l-4-4m4 4l4-4M5 21h14"};function I(n){return n==="discover"||n==="agents"||n==="teams"||n==="skills"||n==="installed"}function T(){const n=localStorage.getItem("markus_nav_installItem"),o=localStorage.getItem("markus_nav_storeTab");if(n)return{tab:I(o)?o:"agents",installId:n};const f=new URLSearchParams(window.location.search),s=f.get("install");if(s){const a=f.get("type");return{tab:a&&P[a]||"agents",installId:s}}return{tab:I(o)?o:"discover",installId:null}}function N(){localStorage.removeItem("markus_nav_installItem"),localStorage.removeItem("markus_nav_storeTab");const n=new URLSearchParams(window.location.search);if(n.has("install")||n.has("type")){n.delete("install"),n.delete("type");const o=n.toString();window.history.replaceState(null,"",window.location.pathname+(o?`?${o}`:"")+window.location.hash)}}function V({itemId:n,onDismiss:o,onInstalled:f}){const{t:s}=E(["store","common"]),[a,p]=d.useState(null),[g,l]=d.useState("loading"),[b,k]=d.useState(!1),[u,m]=d.useState("");d.useEffect(()=>{let x=!1;return l("loading"),p(null),m(""),q.getItem(n).then(({item:c})=>{x||(c?(p(c),l("ready")):l("missing"))}).catch(()=>{x||l("missing")}),()=>{x=!0}},[n]);const w=async()=>{if(!(!a||b)){k(!0),m("");try{await B(a),m(s("deepLink.installed")),f()}catch(x){const c=x instanceof Error?x.message:"";m(c.includes("402")||c.includes("Purchase")?s("deepLink.purchaseRequired"):s("deepLink.failed"))}finally{k(!1)}}};return e.jsxs("div",{className:"shrink-0 mx-3 mt-3 mb-1 rounded-xl border border-brand-500/30 bg-brand-600/10 px-4 py-3 flex flex-col sm:flex-row sm:items-center gap-3",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider text-brand-400/90 mb-0.5",children:s("deepLink.fromHub")}),g==="loading"&&e.jsx("p",{className:"text-sm text-fg-secondary",children:s("deepLink.loading")}),g==="missing"&&e.jsx("p",{className:"text-sm text-rose-300",children:s("deepLink.missing")}),g==="ready"&&a&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-sm font-semibold text-fg-primary truncate",children:a.name}),a.description&&e.jsx("p",{className:"text-xs text-fg-tertiary line-clamp-2 mt-0.5",children:a.description}),u&&e.jsx("p",{className:"text-xs mt-1 text-brand-300",children:u})]})]}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[g==="ready"&&a&&e.jsx("button",{type:"button",disabled:b,onClick:()=>{w()},className:"px-3.5 py-2 rounded-lg text-xs font-semibold bg-brand-600 hover:bg-brand-500 text-white disabled:opacity-60",children:s(b?"deepLink.installing":"deepLink.install")}),e.jsx("button",{type:"button",onClick:o,className:"px-2.5 py-2 rounded-lg text-xs text-fg-tertiary hover:text-fg-secondary hover:bg-surface-elevated/60",children:s("deepLink.dismiss")})]})]})}function G({authUser:n}){const{t:o}=E(["store","common"]),[f]=d.useState(T),[s,a]=d.useState(f.tab),p=M(),g=A(L.STORE),l=D(),b=l?.keyboardPane??"content",k=C(v,s,a),[u,m]=d.useState(f.installId),w=d.useRef(s);w.current=s,d.useEffect(()=>{if(p||!g)return;const t=r=>{if(l?.keyboardPane==="l0"||r.metaKey||r.ctrlKey||r.altKey||R(r.target))return;const i=r.key.length===1?r.key.toLowerCase():r.key;if(i==="h"||i==="ArrowLeft"){r.preventDefault(),l?.setL0FocusPageId(L.STORE),l?.setLeftCollapsed(!1),l?.setKeyboardPane("l0");return}if(i==="l"||i==="ArrowRight"){r.preventDefault(),l?.keyboardPane!=="l1"&&l?.setKeyboardPane("l1");return}const h=i==="j"||i==="ArrowDown"?1:i==="k"||i==="ArrowUp"?-1:0;if(!h)return;r.preventDefault(),l?.setKeyboardPane("l1");const y=v.findIndex(_=>_.id===w.current),S=v[Math.max(0,Math.min(v.length-1,y+h))];a(S.id),requestAnimationFrame(()=>{document.querySelector(`[data-store-tab-id="${S.id}"]`)?.scrollIntoView({block:"nearest"})})};return document.addEventListener("keydown",t,!0),()=>document.removeEventListener("keydown",t,!0)},[p,g,l]),d.useEffect(()=>{const t=T();t.installId&&(m(t.installId),I(t.tab)&&a(t.tab),N())},[]),d.useEffect(()=>{const t=r=>{const i=r.detail;if(i.page==="store"||i.page==="explore"){const h=i.params?.storeTab??localStorage.getItem("markus_nav_storeTab"),y=i.params?.installItem??localStorage.getItem("markus_nav_installItem");h&&I(h)&&a(h),y&&m(y),(h||y)&&N()}};return window.addEventListener("markus:navigate",t),()=>window.removeEventListener("markus:navigate",t)},[]);const x=(t,r)=>{const i=P[t]??"agents";r&&m(r),a(i)},c=()=>m(null),j=()=>e.jsxs(e.Fragment,{children:[u&&e.jsx(V,{itemId:u,onDismiss:c,onInstalled:c}),s==="discover"&&e.jsx(z,{onOpenType:x}),s==="agents"&&e.jsx(H,{authUser:n,highlightItemId:u,onHighlightDone:c}),s==="teams"&&e.jsx(K,{highlightItemId:u,onHighlightDone:c}),s==="skills"&&e.jsx($,{highlightItemId:u,onHighlightDone:c}),s==="installed"&&e.jsx(O,{})]});return p?e.jsxs("div",{className:"flex-1 overflow-hidden flex flex-col",onTouchStart:k.onTouchStart,onTouchEnd:k.onTouchEnd,children:[e.jsx("div",{className:"flex shrink-0 overflow-x-auto scrollbar-hide",children:v.map(t=>e.jsx("button",{onClick:()=>a(t.id),className:`flex-1 min-w-fit px-4 py-3 text-sm font-medium text-center whitespace-nowrap transition-colors border-b-2 ${s===t.id?"border-brand-500 text-brand-500":"border-transparent text-fg-tertiary hover:text-fg-secondary"}`,children:o(`tabs.${t.id}`)},t.id))}),e.jsx("div",{className:"flex-1 overflow-hidden flex flex-col",children:j()})]}):e.jsxs("div",{className:"flex-1 overflow-hidden flex flex-row",children:[e.jsxs("nav",{"data-keyboard-pane":"l1",className:`w-36 shrink-0 bg-surface-secondary rounded-xl m-1 mr-0 flex flex-col py-4 px-2 gap-1 ${b==="l1"?"ring-1 ring-inset ring-brand-500/30":""}`,children:[e.jsx("div",{className:"px-3 pb-3 mb-1",children:e.jsx("h2",{className:"text-xs font-semibold text-fg-tertiary uppercase tracking-wider",children:o("title")})}),v.map(t=>e.jsxs("button",{"data-store-tab-id":t.id,onClick:()=>a(t.id),className:`flex items-center gap-2.5 px-3 py-2.5 rounded-lg text-sm font-medium transition-all ${s===t.id?b==="l1"?"bg-brand-500/25 text-brand-400 ring-1 ring-inset ring-brand-500/40":"bg-brand-600/15 text-brand-400 shadow-sm shadow-brand-500/10":"text-fg-tertiary hover:text-fg-secondary hover:bg-surface-elevated/50"}`,children:[e.jsx("svg",{className:"w-4 h-4 shrink-0",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:e.jsx("path",{d:F[t.id]})}),o(`tabs.${t.id}`)]},t.id))]}),e.jsx("div",{className:"flex-1 overflow-hidden flex flex-col",children:j()})]})}export{G as StorePage};