agentstudio 0.1.25 → 0.1.26

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 (105) hide show
  1. package/package.json +2 -2
  2. package/public/assets/{AgentsPage-CUeihzHA.js → AgentsPage-DR5v4Vfe.js} +2 -2
  3. package/public/assets/{Button-CzjoLYT0.js → Button-6I_OiXLX.js} +1 -1
  4. package/public/assets/{ChatPage-BwU3MUke.js → ChatPage-DzORphjz.js} +5 -5
  5. package/public/assets/{CommandForm-owyuRt5W.js → CommandForm-k3XXwCB4.js} +2 -2
  6. package/public/assets/{CommandsPage-ChlY1Ohp.js → CommandsPage-C6dcKcFf.js} +1 -1
  7. package/public/assets/DashboardPage-4YSwoWTH.js +1 -0
  8. package/public/assets/{FileBrowser-Ctsx7oqC.js → FileBrowser-BvyXd63f.js} +5 -5
  9. package/public/assets/{FileExplorer-EenwcuMv.js → FileExplorer-DhPt_quM.js} +1 -1
  10. package/public/assets/{GeneralSettingsPage-CvpPve04.js → GeneralSettingsPage-DkHRbImS.js} +1 -1
  11. package/public/assets/LandingPage-vFck5FSW.js +1 -0
  12. package/public/assets/{LoginPage-xzXP3VG8.js → LoginPage-Bfy9WmmY.js} +4 -4
  13. package/public/assets/McpAdminSettingsPage-BFuQouo8.js +7 -0
  14. package/public/assets/{McpPage-DWuLyKMn.js → McpPage-DDiRtENp.js} +2 -2
  15. package/public/assets/{MemorySettingsPage-B2rZ5v2s.js → MemorySettingsPage-D5Kec6pT.js} +1 -1
  16. package/public/assets/{PluginsPage-GYreFLBB.js → PluginsPage-DSo1pTD-.js} +1 -1
  17. package/public/assets/{ProjectSelector-DS6uqOs_.js → ProjectSelector-Dqm5v8o9.js} +1 -1
  18. package/public/assets/{ProjectsPage-NyqKB1xe.js → ProjectsPage-C1VMe5nk.js} +5 -5
  19. package/public/assets/ScheduledTasksPage-CkUoeT04.js +1 -0
  20. package/public/assets/{SettingsLayout-CVWegGEj.js → SettingsLayout-Blt_jAZx.js} +1 -1
  21. package/public/assets/{SkillsPage-CfAdPMsi.js → SkillsPage-B5YxNlWJ.js} +3 -3
  22. package/public/assets/{SubagentForm-DPwXuXlv.js → SubagentForm-B09hmrYM.js} +3 -3
  23. package/public/assets/{SubagentsPage-BdvtKNca.js → SubagentsPage-Bqk10bb7.js} +1 -1
  24. package/public/assets/{ToastTestPage-Dp-QXXOR.js → ToastTestPage-Dzfb1AsW.js} +1 -1
  25. package/public/assets/{ToolsList-BEI5_57D.js → ToolsList-CmrJAKcE.js} +1 -1
  26. package/public/assets/{UnifiedToolSelector-CUDMlVoZ.js → UnifiedToolSelector-CN690ltz.js} +1 -1
  27. package/public/assets/{VersionSettingsPage-DWDybVFM.js → VersionSettingsPage-D_keS5fb.js} +3 -3
  28. package/public/assets/{_basePickBy-wkc_yFJ1.js → _basePickBy-X3KkSOFK.js} +1 -1
  29. package/public/assets/{_baseUniq-DqwalC-I.js → _baseUniq-cv9EC14t.js} +1 -1
  30. package/public/assets/{agents-D6AHwN6G.js → agents-DfHGzNHW.js} +1 -1
  31. package/public/assets/{arc-DSZUtUWs.js → arc-C7I_8kFm.js} +1 -1
  32. package/public/assets/{architectureDiagram-VXUJARFQ-BGWZ6a4a.js → architectureDiagram-VXUJARFQ-CMo92Xcm.js} +1 -1
  33. package/public/assets/{blockDiagram-VD42YOAC-BkzHe2t-.js → blockDiagram-VD42YOAC-CSewaHod.js} +1 -1
  34. package/public/assets/{c4Diagram-YG6GDRKO-BYGHEriN.js → c4Diagram-YG6GDRKO-D4-A7anv.js} +1 -1
  35. package/public/assets/channel-CTPfV_fA.js +1 -0
  36. package/public/assets/{chunk-4BX2VUAB-CudLkhaO.js → chunk-4BX2VUAB-CKW-jgB1.js} +1 -1
  37. package/public/assets/{chunk-55IACEB6-BJg--1-C.js → chunk-55IACEB6-Bh_iEZAg.js} +1 -1
  38. package/public/assets/{chunk-B4BG7PRW-HgTDxK6A.js → chunk-B4BG7PRW-CGcWESsJ.js} +1 -1
  39. package/public/assets/{chunk-DI55MBZ5-C9ulaCAK.js → chunk-DI55MBZ5-BNQVU-r5.js} +1 -1
  40. package/public/assets/{chunk-FMBD7UC4-C6BzAd-c.js → chunk-FMBD7UC4-B51X6fKC.js} +1 -1
  41. package/public/assets/{chunk-QN33PNHL-DYrgWi1t.js → chunk-QN33PNHL-DadRd0Qs.js} +1 -1
  42. package/public/assets/{chunk-QZHKN3VN-DQ5b9wrR.js → chunk-QZHKN3VN-0AwjBk6f.js} +1 -1
  43. package/public/assets/{chunk-TZMSLE5B-xviyKkSg.js → chunk-TZMSLE5B-CIFE5KnY.js} +1 -1
  44. package/public/assets/classDiagram-2ON5EDUG-CJDL4zC-.js +1 -0
  45. package/public/assets/classDiagram-v2-WZHVMYZB-CJDL4zC-.js +1 -0
  46. package/public/assets/clone-BvAwOIZu.js +1 -0
  47. package/public/assets/{cose-bilkent-S5V4N54A-D3PzOGZG.js → cose-bilkent-S5V4N54A-BPWEQsNm.js} +1 -1
  48. package/public/assets/{dagre-6UL2VRFP-D4_KYeYz.js → dagre-6UL2VRFP-Cu-RCZe5.js} +1 -1
  49. package/public/assets/{diagram-PSM6KHXK-CDPU5AtT.js → diagram-PSM6KHXK-DBfl10yA.js} +1 -1
  50. package/public/assets/{diagram-QEK2KX5R-DAZ9eaN-.js → diagram-QEK2KX5R-CXLsPBvR.js} +1 -1
  51. package/public/assets/{diagram-S2PKOQOG-CqUOjxeG.js → diagram-S2PKOQOG-BjaXE_9W.js} +1 -1
  52. package/public/assets/{erDiagram-Q2GNP2WA-DQ_q34K8.js → erDiagram-Q2GNP2WA-BPkK30VB.js} +1 -1
  53. package/public/assets/{flowDiagram-NV44I4VS-B6Ioydv8.js → flowDiagram-NV44I4VS-i4BoJF1x.js} +1 -1
  54. package/public/assets/{ganttDiagram-LVOFAZNH-BLyqpyCW.js → ganttDiagram-LVOFAZNH-C7Fa9LKl.js} +1 -1
  55. package/public/assets/{gitGraphDiagram-NY62KEGX-C85cydkw.js → gitGraphDiagram-NY62KEGX-x4fV46FC.js} +1 -1
  56. package/public/assets/{graph-B67i039z.js → graph-Bj4qRtTX.js} +1 -1
  57. package/public/assets/index-CJMPRxKv.css +1 -0
  58. package/public/assets/{index-DQpA4uo-.js → index-Dz27wKzJ.js} +8 -8
  59. package/public/assets/infoDiagram-F6ZHWCRC-BdQeovBp.js +2 -0
  60. package/public/assets/{journeyDiagram-XKPGCS4Q-ClVI-lkA.js → journeyDiagram-XKPGCS4Q-BByZuK2D.js} +1 -1
  61. package/public/assets/{kanban-definition-3W4ZIXB7-DLCDmQUa.js → kanban-definition-3W4ZIXB7-BW-KJqNN.js} +1 -1
  62. package/public/assets/{layout-CesDgCrl.js → layout-BIkzRvdA.js} +1 -1
  63. package/public/assets/{linear-B513CPHE.js → linear-CY3SKQlQ.js} +1 -1
  64. package/public/assets/{mindmap-definition-VGOIOE7T-CX2PPH7O.js → mindmap-definition-VGOIOE7T-CIjq8dul.js} +1 -1
  65. package/public/assets/{pieDiagram-ADFJNKIX-CeEKtb_b.js → pieDiagram-ADFJNKIX-CYrXbDgB.js} +1 -1
  66. package/public/assets/{quadrantDiagram-AYHSOK5B-MkmPd5Mn.js → quadrantDiagram-AYHSOK5B-zshqcC4H.js} +1 -1
  67. package/public/assets/{requirementDiagram-UZGBJVZJ-wrrmztHZ.js → requirementDiagram-UZGBJVZJ-Eykzktn0.js} +1 -1
  68. package/public/assets/{sankeyDiagram-TZEHDZUN-BPpprqy2.js → sankeyDiagram-TZEHDZUN-CUUZTWXT.js} +1 -1
  69. package/public/assets/{sequenceDiagram-WL72ISMW-BvamNHsO.js → sequenceDiagram-WL72ISMW-u-TgVaJG.js} +1 -1
  70. package/public/assets/{stateDiagram-FKZM4ZOC-C2a2WuTK.js → stateDiagram-FKZM4ZOC-L8719ElY.js} +1 -1
  71. package/public/assets/stateDiagram-v2-4FDKWEC3-DTGjtVxm.js +1 -0
  72. package/public/assets/{table-tOxtA21F.js → table-DUC-Ijtn.js} +1 -1
  73. package/public/assets/{timeline-definition-IT6M3QCI-Bkum51Ca.js → timeline-definition-IT6M3QCI-CJpXtgDn.js} +1 -1
  74. package/public/assets/{tools-Cwvcr7MC.js → tools-CljQNVZC.js} +1 -1
  75. package/public/assets/{treemap-KMMF4GRG-4DMXkZ4q.js → treemap-KMMF4GRG-BHfi2-Z-.js} +1 -1
  76. package/public/assets/{ui-components-Cpwcs6-O.js → ui-components-umMeMlgF.js} +135 -120
  77. package/public/assets/{useAgents-BY6mXIRZ.js → useAgents-Cc9gZfER.js} +1 -1
  78. package/public/assets/{useClaudeVersions-DY1nkpyH.js → useClaudeVersions-oq1-p4ja.js} +1 -1
  79. package/public/assets/{useCommands-kfKWaceZ.js → useCommands-CgIOltx6.js} +1 -1
  80. package/public/assets/{useProjects-D0fgMWMU.js → useProjects-B1Ip38ES.js} +1 -1
  81. package/public/assets/{useSessions-Do-a2c6a.js → useSessions-Dl3mKnA7.js} +1 -1
  82. package/public/assets/{xychartDiagram-PRI3JC2R-D4Trz9RS.js → xychartDiagram-PRI3JC2R-DrK8IYgl.js} +1 -1
  83. package/public/index.html +5 -5
  84. package/public/wechat-qr-code.png +0 -0
  85. package/routes/__tests__/agents.test.js +2 -2
  86. package/routes/__tests__/agents.test.js.map +1 -1
  87. package/routes/agents.js +2 -2
  88. package/routes/agents.js.map +1 -1
  89. package/services/a2a/__tests__/agentCardService.test.js +1 -1
  90. package/services/a2a/__tests__/agentCardService.test.js.map +1 -1
  91. package/types/commands.d.ts +1 -1
  92. package/types/commands.d.ts.map +1 -1
  93. package/types/commands.js +3 -3
  94. package/types/commands.js.map +1 -1
  95. package/public/assets/DashboardPage-B9keTygm.js +0 -1
  96. package/public/assets/LandingPage-G7KhCJIr.js +0 -1
  97. package/public/assets/McpAdminSettingsPage-scE09egp.js +0 -7
  98. package/public/assets/ScheduledTasksPage-Bgr8ftPg.js +0 -1
  99. package/public/assets/channel-bytRIjhw.js +0 -1
  100. package/public/assets/classDiagram-2ON5EDUG-DrZnP3eC.js +0 -1
  101. package/public/assets/classDiagram-v2-WZHVMYZB-DrZnP3eC.js +0 -1
  102. package/public/assets/clone-DwKwPrxe.js +0 -1
  103. package/public/assets/index-Dl3vQE4u.css +0 -1
  104. package/public/assets/infoDiagram-F6ZHWCRC-DTVe_JHD.js +0 -2
  105. package/public/assets/stateDiagram-v2-4FDKWEC3-DpepC8kO.js +0 -1
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DashboardPage-B9keTygm.js","assets/data-structures-C0h9Oap1.js","assets/monaco-editor-DHKm5-VF.js","assets/syntax-highlighting-CnREyncB.js","assets/useProjects-D0fgMWMU.js","assets/agents-D6AHwN6G.js","assets/tools-Cwvcr7MC.js","assets/ui-components-Cpwcs6-O.js","assets/agents-DwCY2K8p.css","assets/useAgents-BY6mXIRZ.js","assets/useSessions-Do-a2c6a.js","assets/AgentsPage-CUeihzHA.js","assets/table-tOxtA21F.js","assets/ProjectSelector-DS6uqOs_.js","assets/FileBrowser-Ctsx7oqC.js","assets/UnifiedToolSelector-CUDMlVoZ.js","assets/ToolsList-BEI5_57D.js","assets/ProjectsPage-NyqKB1xe.js","assets/dateFormat-CXa8VnEC.js","assets/useCommands-kfKWaceZ.js","assets/CommandForm-owyuRt5W.js","assets/SubagentForm-DPwXuXlv.js","assets/McpPage-DWuLyKMn.js","assets/SettingsLayout-CVWegGEj.js","assets/GeneralSettingsPage-CvpPve04.js","assets/VersionSettingsPage-DWDybVFM.js","assets/useClaudeVersions-DY1nkpyH.js","assets/MemorySettingsPage-B2rZ5v2s.js","assets/SubagentsPage-BdvtKNca.js","assets/McpAdminSettingsPage-scE09egp.js","assets/CommandsPage-ChlY1Ohp.js","assets/SkillsPage-CfAdPMsi.js","assets/Button-CzjoLYT0.js","assets/FileExplorer-EenwcuMv.js","assets/PluginsPage-GYreFLBB.js","assets/ScheduledTasksPage-Bgr8ftPg.js","assets/ChatPage-BwU3MUke.js","assets/ChatPage-BvQmXfcP.css","assets/LandingPage-G7KhCJIr.js","assets/LoginPage-xzXP3VG8.js","assets/ToastTestPage-Dp-QXXOR.js"])))=>i.map(i=>d[i]);
2
- import{j as u}from"./data-structures-C0h9Oap1.js";import{a as Bp,r as h,g as Cv,W as xn,R as Av}from"./monaco-editor-DHKm5-VF.js";import{c as $e}from"./syntax-highlighting-CnREyncB.js";import{l as Tv,s as kv,d as Ev,e as Nv,r as Mv,f as jv,g as _t,h as Ic,j as Dc,k as sp,m as Qi,Q as Dv,n as Rv}from"./agents-D6AHwN6G.js";import{u as Ea,i as Pv,a as Ov}from"./tools-Cwvcr7MC.js";import{U as bo,aI as zv,p as ts,C as It,n as Wi,X as ho,t as Rc,K as Lv,aJ as Uv,a5 as rp,ab as vc,aK as _v,v as Fv,aL as Bv,Y as Hv,E as qv,w as Hp,aM as Vv,f as Gv,Z as Iv,aH as Kv,r as cp,aw as Yv,m as Qv,a6 as Xv,T as Zv,N as $v,V as Jv,k as Wv,l as eb,aN as tb,ad as ab,e as nb,ar as lb,aO as ob,a4 as ib,L as qp,ao as sb,j as rb,R as up,Q as cb,z as dp,b as ub,aP as db}from"./ui-components-Cpwcs6-O.js";(function(){const c=document.createElement("link").relList;if(c&&c.supports&&c.supports("modulepreload"))return;for(const f of document.querySelectorAll('link[rel="modulepreload"]'))r(f);new MutationObserver(f=>{for(const m of f)if(m.type==="childList")for(const y of m.addedNodes)y.tagName==="LINK"&&y.rel==="modulepreload"&&r(y)}).observe(document,{childList:!0,subtree:!0});function s(f){const m={};return f.integrity&&(m.integrity=f.integrity),f.referrerPolicy&&(m.referrerPolicy=f.referrerPolicy),f.crossOrigin==="use-credentials"?m.credentials="include":f.crossOrigin==="anonymous"?m.credentials="omit":m.credentials="same-origin",m}function r(f){if(f.ep)return;f.ep=!0;const m=s(f);fetch(f.href,m)}})();var bc={exports:{}},fo={},Sc={exports:{}},xc={};/**
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DashboardPage-4YSwoWTH.js","assets/data-structures-C0h9Oap1.js","assets/monaco-editor-DHKm5-VF.js","assets/syntax-highlighting-CnREyncB.js","assets/useProjects-B1Ip38ES.js","assets/agents-DfHGzNHW.js","assets/tools-CljQNVZC.js","assets/ui-components-umMeMlgF.js","assets/agents-DwCY2K8p.css","assets/useAgents-Cc9gZfER.js","assets/useSessions-Dl3mKnA7.js","assets/AgentsPage-DR5v4Vfe.js","assets/table-DUC-Ijtn.js","assets/ProjectSelector-Dqm5v8o9.js","assets/FileBrowser-BvyXd63f.js","assets/UnifiedToolSelector-CN690ltz.js","assets/ToolsList-CmrJAKcE.js","assets/ProjectsPage-C1VMe5nk.js","assets/dateFormat-CXa8VnEC.js","assets/useCommands-CgIOltx6.js","assets/CommandForm-k3XXwCB4.js","assets/SubagentForm-B09hmrYM.js","assets/McpPage-DDiRtENp.js","assets/SettingsLayout-Blt_jAZx.js","assets/GeneralSettingsPage-DkHRbImS.js","assets/VersionSettingsPage-D_keS5fb.js","assets/useClaudeVersions-oq1-p4ja.js","assets/MemorySettingsPage-D5Kec6pT.js","assets/SubagentsPage-Bqk10bb7.js","assets/McpAdminSettingsPage-BFuQouo8.js","assets/CommandsPage-C6dcKcFf.js","assets/SkillsPage-B5YxNlWJ.js","assets/Button-6I_OiXLX.js","assets/FileExplorer-DhPt_quM.js","assets/PluginsPage-DSo1pTD-.js","assets/ScheduledTasksPage-CkUoeT04.js","assets/ChatPage-DzORphjz.js","assets/ChatPage-BvQmXfcP.css","assets/LandingPage-vFck5FSW.js","assets/LoginPage-Bfy9WmmY.js","assets/ToastTestPage-Dzfb1AsW.js"])))=>i.map(i=>d[i]);
2
+ import{j as u}from"./data-structures-C0h9Oap1.js";import{a as Bp,r as h,g as Cv,W as xn,R as Av}from"./monaco-editor-DHKm5-VF.js";import{c as $e}from"./syntax-highlighting-CnREyncB.js";import{l as Tv,s as kv,d as Ev,e as Nv,r as Mv,f as jv,g as _t,h as Ic,j as Dc,k as sp,m as Qi,Q as Dv,n as Rv}from"./agents-DfHGzNHW.js";import{u as Ea,i as Pv,a as Ov}from"./tools-CljQNVZC.js";import{Y as bo,aL as zv,r as ts,C as It,n as Wi,X as ho,v as Rc,O as Lv,aM as Uv,a8 as rp,ae as vc,aN as _v,y as Fv,aO as Bv,$ as Hv,E as qv,z as Hp,aP as Vv,f as Gv,Z as Iv,aK as Kv,t as cp,az as Yv,m as Qv,a9 as Xv,T as Zv,Q as $v,_ as Jv,k as Wv,l as eb,aQ as tb,ag as ab,e as nb,au as lb,aR as ob,a7 as ib,L as qp,ar as sb,j as rb,V as up,U as cb,I as dp,b as ub,aS as db}from"./ui-components-umMeMlgF.js";(function(){const c=document.createElement("link").relList;if(c&&c.supports&&c.supports("modulepreload"))return;for(const f of document.querySelectorAll('link[rel="modulepreload"]'))r(f);new MutationObserver(f=>{for(const m of f)if(m.type==="childList")for(const y of m.addedNodes)y.tagName==="LINK"&&y.rel==="modulepreload"&&r(y)}).observe(document,{childList:!0,subtree:!0});function s(f){const m={};return f.integrity&&(m.integrity=f.integrity),f.referrerPolicy&&(m.referrerPolicy=f.referrerPolicy),f.crossOrigin==="use-credentials"?m.credentials="include":f.crossOrigin==="anonymous"?m.credentials="omit":m.credentials="same-origin",m}function r(f){if(f.ep)return;f.ep=!0;const m=s(f);fetch(f.href,m)}})();var bc={exports:{}},fo={},Sc={exports:{}},xc={};/**
3
3
  * @license React
4
4
  * scheduler.production.js
5
5
  *
@@ -80,9 +80,9 @@ Please change the parent <Route path="${z}"> to <Route path="${z==="/"?"*":`${z}
80
80
  `,children:[u.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-gray-200 dark:border-gray-700",children:[u.jsx("h2",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:"Menu"}),u.jsx("button",{onClick:c,className:"p-2 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 rounded-md hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors","aria-label":"Close sidebar",children:u.jsx(ho,{className:"w-5 h-5"})})]}),u.jsx("div",{className:"overflow-y-auto h-full pb-20",children:u.jsx(ig,{onClose:c})})]})]}):null},ta=({children:o})=>{const{isMobile:c,sidebarOpen:s,setSidebarOpen:r}=eu();return u.jsxs("div",{className:"h-screen bg-gray-50 dark:bg-gray-900 flex",children:[u.jsx("div",{className:"hidden md:block",children:u.jsx(ig,{})}),u.jsx(aS,{isOpen:s,onClose:()=>r(!1)}),u.jsxs("main",{className:"flex-1 overflow-auto relative",children:[c&&u.jsx("header",{className:"sticky top-0 z-40 bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 px-4 py-3",children:u.jsxs("div",{className:"flex items-center justify-between",children:[u.jsx("button",{onClick:()=>r(!0),className:"p-2 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 rounded-md hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors","aria-label":"Open sidebar",children:u.jsx(tb,{className:"w-5 h-5"})}),u.jsxs("div",{className:"flex items-center space-x-2",children:[u.jsx("div",{className:"w-8 h-8 bg-blue-600 rounded-lg flex items-center justify-center",children:u.jsx("img",{src:"/cc-studio.png",alt:"Agent Studio",className:"w-8 h-8"})}),u.jsx("h1",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:"Agent Studio"})]}),u.jsx("div",{className:"w-9 h-9"})," "]})}),u.jsx("div",{className:c?"pb-4":"",children:o})]})]})};function nS(){const{token:o,setToken:c,removeToken:s,getToken:r}=Ic(),{currentService:f}=Co(),[m,y]=h.useState(!1),[b,v]=h.useState(null),[g,x]=h.useState(!1),C=h.useRef(null),D=h.useRef(0),H=f?.id,R=!!h.useMemo(()=>H?r(H):null,[H,r]),N=h.useCallback(async()=>{try{const V=await fetch(`${_t()}/auth/check-password-required`,{method:"GET",headers:{"Content-Type":"application/json"},signal:AbortSignal.timeout(5e3)}),_=await V.json();return V.ok?{success:!0,passwordRequired:_.passwordRequired}:{success:!1,passwordRequired:!0,error:_.error||"Failed to check password requirement"}}catch(V){return console.error("Failed to check password requirement:",V),{success:!1,passwordRequired:!0,error:V instanceof Error?V.message:"Network error"}}},[]),B=h.useCallback(async()=>{if(y(!0),v(null),!f)return v("No service selected"),y(!1),!1;try{const V=await fetch(`${_t()}/auth/login`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}),_=await V.json();if(!V.ok){const Q=new Error(_.error||"Login failed");return Q.status=V.status,Q.details=_,v(Q),!1}const F={token:_.token,serviceId:f.id,serviceName:f.name,serviceUrl:f.url,timestamp:Date.now()};return c(F),!0}catch(V){const _=new Error("Network error occurred during login");return _.originalError=V,v(_),!1}finally{y(!1)}},[f,c]),z=h.useCallback(async V=>{if(y(!0),v(null),!f)return v("No service selected"),y(!1),!1;try{const _=await fetch(`${_t()}/auth/login`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({password:V})}),F=await _.json();if(!_.ok){const le=new Error(F.error||"Login failed");return le.status=_.status,le.details=F,le.url=_t(),le.timestamp=Date.now(),v(le),!1}const Q={token:F.token,serviceId:f.id,serviceName:f.name,serviceUrl:f.url,timestamp:Date.now()};return c(Q),!0}catch(_){const F=new Error("Network error occurred during login"),Q=`${_t()}/auth/login`;return _ instanceof Error?(F.originalError={message:_.message,stack:_.stack,name:_.name},F.type=_.name,_.name==="TypeError"?(F.isNetworkError=!0,_.message.includes("fetch")?F.message=`Failed to connect to server at ${_t()}`:_.message.includes("network")&&(F.message=`Network connection error while contacting ${_t()}`)):_.name==="AbortError"&&(F.isAbortError=!0,F.message=`Login request timed out for ${Q}`)):(F.originalError=_,F.type=typeof _),F.requestUrl=Q,F.requestMethod="POST",F.requestBody={password:"[REDACTED]"},F.url=_t(),F.timestamp=Date.now(),v(F),!1}finally{y(!1)}},[f,c]),G=h.useCallback(async()=>{if(f)try{const V=r(f.id);V&&await fetch(`${_t()}/auth/logout`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${V.token}`}})}catch(V){console.error("Logout error:",V)}finally{f&&s(f.id)}},[f,r,s]),Z=h.useCallback(async()=>{if(!f)return!1;const V=r(f.id);if(!V)return!1;if(Dc(V))return s(f.id),!1;try{const _=sp(V);if(!_)return s(f.id),!1;const F=new AbortController,Q=setTimeout(()=>F.abort(),5e3),le=await fetch(`${_t()}/auth/verify`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:_}),signal:F.signal});clearTimeout(Q);const Pe=await le.json();return!le.ok||!Pe.valid?(le.status===401&&s(f.id),!1):!0}catch(_){return console.error("Token verification error:",_),_.name==="AbortError"?(console.warn("Token verification request timed out"),!1):_ instanceof TypeError&&(_.message.includes("fetch")||_.message.includes("network")||_.message.includes("Failed to fetch"))?(console.warn("Network error during token verification, keeping token"),!1):(s(f.id),!1)}},[f,r,s]),K=h.useCallback(async()=>{if(!f||g)return!1;const V=r(f.id);if(!V||Dc(V))return!1;if(!Qi(V))return!0;x(!0);try{const _=sp(V);if(!_)return!1;const F=await fetch(`${_t()}/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:_})});if(!F.ok)return console.error("Token refresh failed:",F.status),!1;const Q=await F.json();if(Q.success&&Q.token){if(Q.refreshed){const le={...V,token:Q.token,timestamp:Date.now()};c(le),console.log("Token refreshed successfully")}return!0}return!1}catch(_){return console.error("Token refresh error:",_),!1}finally{x(!1)}},[f,r,g,c]);return h.useEffect(()=>{if(!f||!R){C.current&&(clearInterval(C.current),C.current=null);return}return C.current=setInterval(async()=>{const V=Date.now();if(V-D.current<120*1e3)return;D.current=V;const _=r(f.id);_&&Qi(_)&&(console.log("Auto-refreshing token..."),await K())},300*1e3),()=>{C.current&&(clearInterval(C.current),C.current=null)}},[f,R,r,K]),h.useEffect(()=>{if(!f||!R)return;(async()=>{const _=r(f.id);_&&Qi(_)&&(console.log("Token needs refresh on service change..."),await K())})()},[f?.id]),{token:o,isAuthenticated:R,isLoading:m,error:b,isRefreshing:g,login:z,loginWithoutPassword:B,logout:G,verifyToken:Z,refreshToken:K,checkPasswordRequired:N}}const tu="backend_onboarding_completed",lS=()=>{try{const o=localStorage.getItem(tu);return o?JSON.parse(o):{completed:!1}}catch(o){return console.error("Failed to read backend onboarding status:",o),{completed:!1}}},Ec=(o=!1)=>{const c={completed:!0,completedAt:Date.now(),skipped:o};localStorage.setItem(tu,JSON.stringify(c))},Z1=()=>{localStorage.removeItem(tu)},oS=({onNext:o,onSkip:c})=>{const{t:s}=Ea("onboarding");return u.jsxs("div",{className:"text-center space-y-6",children:[u.jsx("div",{className:"flex justify-center",children:u.jsx("div",{className:"p-4 bg-blue-100 dark:bg-blue-900/30 rounded-full",children:u.jsx(ab,{className:"w-12 h-12 text-blue-600 dark:text-blue-400"})})}),u.jsxs("div",{children:[u.jsx("h2",{className:"text-2xl font-bold text-gray-900 dark:text-white mb-2",children:s("backend.welcome.title")}),u.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:s("backend.welcome.subtitle")})]}),u.jsxs("div",{className:"bg-gray-50 dark:bg-gray-700/50 rounded-lg p-6 space-y-4 text-left",children:[u.jsx("p",{className:"text-sm font-medium text-gray-700 dark:text-gray-300 mb-3",children:s("backend.welcome.features.title")}),u.jsxs("div",{className:"space-y-3",children:[u.jsxs("div",{className:"flex items-start space-x-3",children:[u.jsx(bo,{className:"w-5 h-5 text-blue-600 dark:text-blue-400 mt-0.5 flex-shrink-0"}),u.jsxs("div",{children:[u.jsx("p",{className:"text-sm font-medium text-gray-900 dark:text-white",children:s("backend.welcome.features.ai.title")}),u.jsx("p",{className:"text-xs text-gray-600 dark:text-gray-400",children:s("backend.welcome.features.ai.description")})]})]}),u.jsxs("div",{className:"flex items-start space-x-3",children:[u.jsx(nb,{className:"w-5 h-5 text-green-600 dark:text-green-400 mt-0.5 flex-shrink-0"}),u.jsxs("div",{children:[u.jsx("p",{className:"text-sm font-medium text-gray-900 dark:text-white",children:s("backend.welcome.features.storage.title")}),u.jsx("p",{className:"text-xs text-gray-600 dark:text-gray-400",children:s("backend.welcome.features.storage.description")})]})]}),u.jsxs("div",{className:"flex items-start space-x-3",children:[u.jsx(lb,{className:"w-5 h-5 text-purple-600 dark:text-purple-400 mt-0.5 flex-shrink-0"}),u.jsxs("div",{children:[u.jsx("p",{className:"text-sm font-medium text-gray-900 dark:text-white",children:s("backend.welcome.features.history.title")}),u.jsx("p",{className:"text-xs text-gray-600 dark:text-gray-400",children:s("backend.welcome.features.history.description")})]})]})]})]}),u.jsxs("div",{className:"flex space-x-3",children:[u.jsxs("button",{onClick:c,className:"flex-1 flex items-center justify-center space-x-2 px-4 py-3 border border-gray-300 dark:border-gray-600 rounded-lg text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors",children:[u.jsx(ob,{className:"w-4 h-4"}),u.jsx("span",{children:s("backend.actions.skip")})]}),u.jsxs("button",{onClick:o,className:"flex-1 flex items-center justify-center space-x-2 px-4 py-3 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors",children:[u.jsx("span",{children:s("backend.actions.getStarted")}),u.jsx(ib,{className:"w-4 h-4"})]})]})]})},iS=()=>{const{t:o}=Ea("onboarding");return u.jsxs("div",{className:"text-center py-8 space-y-6",children:[u.jsx(qp,{className:"w-12 h-12 mx-auto animate-spin text-blue-600 dark:text-blue-400"}),u.jsxs("div",{children:[u.jsx("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white mb-2",children:o("backend.detecting.title")}),u.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:o("backend.detecting.description")})]}),u.jsxs("div",{className:"bg-gray-50 dark:bg-gray-700/50 rounded-lg p-4 space-y-2 text-left",children:[u.jsxs("div",{className:"flex items-center space-x-2 text-sm text-gray-600 dark:text-gray-400",children:[u.jsx("div",{className:"w-2 h-2 bg-blue-600 rounded-full animate-pulse"}),u.jsx("span",{children:"http://127.0.0.1:4936"})]}),u.jsxs("div",{className:"flex items-center space-x-2 text-sm text-gray-600 dark:text-gray-400",children:[u.jsx("div",{className:"w-2 h-2 bg-blue-600 rounded-full animate-pulse"}),u.jsx("span",{children:"http://localhost:4936"})]})]})]})},sS=({serviceUrl:o,onUseService:c,onAddOther:s})=>{const{t:r}=Ea("onboarding");return u.jsxs("div",{className:"space-y-6",children:[u.jsx("div",{className:"flex justify-center",children:u.jsx(It,{className:"w-16 h-16 text-green-500"})}),u.jsxs("div",{className:"text-center",children:[u.jsx("h3",{className:"text-xl font-bold text-gray-900 dark:text-white mb-2",children:r("backend.found.title")}),u.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:r("backend.found.description")})]}),u.jsx("div",{className:"bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 rounded-lg p-4",children:u.jsxs("div",{className:"flex items-start space-x-3",children:[u.jsx(bo,{className:"w-5 h-5 text-green-600 dark:text-green-400 mt-0.5"}),u.jsxs("div",{className:"flex-1",children:[u.jsx("p",{className:"text-sm font-medium text-gray-900 dark:text-white mb-1",children:r("backend.found.serviceAddress")}),u.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-400 font-mono",children:o}),u.jsxs("div",{className:"flex items-center space-x-2 mt-2",children:[u.jsx(It,{className:"w-4 h-4 text-green-500"}),u.jsx("span",{className:"text-xs text-green-700 dark:text-green-300",children:r("backend.found.status")})]})]})]})}),u.jsxs("div",{className:"space-y-3",children:[u.jsxs("button",{onClick:c,className:"w-full flex items-center justify-center space-x-2 px-4 py-3 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors",children:[u.jsx(It,{className:"w-4 h-4"}),u.jsx("span",{children:r("backend.found.useThisService")})]}),u.jsxs("button",{onClick:s,className:"w-full flex items-center justify-center space-x-2 px-4 py-3 border border-gray-300 dark:border-gray-600 rounded-lg text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors",children:[u.jsx(Rc,{className:"w-4 h-4"}),u.jsx("span",{children:r("backend.found.addOtherService")})]})]})]})},Ap=({onRetry:o,onAddRemote:c,onBack:s,showWarning:r=!0})=>{const{t:f}=Ea("onboarding"),[m,y]=h.useState(""),[b,v]=h.useState(""),[g,x]=h.useState(!1),[C,D]=h.useState(null),[H,P]=h.useState(!1),R=`git clone https://github.com/okguitar/agentstudio.git
81
81
  cd agentstudio
82
82
  pnpm install
83
- pnpm run dev:backend`,N=async()=>{try{await navigator.clipboard.writeText(R),P(!0),setTimeout(()=>P(!1),2e3)}catch(G){console.error("Failed to copy:",G)}},B=async()=>{if(b){x(!0),D(null);try{const G=`${b}/api/health`,Z=await fetch(G,{method:"GET",headers:{"Content-Type":"application/json"},signal:AbortSignal.timeout(5e3)});D(Z.ok?"success":"error")}catch{D("error")}finally{x(!1)}}},z=async()=>{if(!m.trim()||!b.trim())return;await c(m.trim(),b.trim())&&(y(""),v(""),D(null))};return u.jsxs("div",{className:"space-y-6",children:[s&&u.jsxs("button",{onClick:s,className:"flex items-center space-x-2 text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 transition-colors",children:[u.jsx(sb,{className:"w-4 h-4"}),u.jsx("span",{children:f("backend.actions.back")})]}),r&&u.jsx("div",{className:"bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4",children:u.jsxs("div",{className:"flex items-start space-x-3",children:[u.jsx(rb,{className:"w-5 h-5 text-yellow-600 dark:text-yellow-400 mt-0.5 flex-shrink-0"}),u.jsxs("div",{children:[u.jsx("h4",{className:"font-medium text-yellow-900 dark:text-yellow-200 mb-1",children:f("backend.notFound.title")}),u.jsx("p",{className:"text-sm text-yellow-800 dark:text-yellow-300",children:f("backend.notFound.description")})]})]})}),u.jsxs("div",{children:[u.jsx("h4",{className:"font-medium text-gray-900 dark:text-white mb-2",children:f("backend.addService.title")}),u.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-400",children:f("backend.addService.description")})]}),u.jsxs("div",{className:"space-y-3",children:[u.jsxs("div",{children:[u.jsx("label",{className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1",children:f("backend.addService.serviceName")}),u.jsx("input",{type:"text",value:m,onChange:G=>y(G.target.value),placeholder:f("backend.addService.serviceNamePlaceholder"),className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-white"})]}),u.jsxs("div",{children:[u.jsx("label",{className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1",children:f("backend.addService.serviceUrl")}),u.jsx("input",{type:"url",value:b,onChange:G=>v(G.target.value),placeholder:"https://api.example.com",className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-white"})]})]}),u.jsxs("div",{className:"flex space-x-3",children:[u.jsx("button",{onClick:B,disabled:!b||g,className:"flex-1 flex items-center justify-center space-x-2 px-4 py-2.5 border border-gray-300 dark:border-gray-600 rounded-lg text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:g?u.jsxs(u.Fragment,{children:[u.jsx(qp,{className:"w-4 h-4 animate-spin"}),u.jsx("span",{children:f("backend.addService.testing")})]}):C==="success"?u.jsxs(u.Fragment,{children:[u.jsx(It,{className:"w-4 h-4 text-green-500"}),u.jsx("span",{children:f("backend.addService.success")})]}):C==="error"?u.jsxs(u.Fragment,{children:[u.jsx(Wi,{className:"w-4 h-4 text-red-500"}),u.jsx("span",{children:f("backend.addService.failed")})]}):u.jsxs(u.Fragment,{children:[u.jsx(up,{className:"w-4 h-4"}),u.jsx("span",{children:f("backend.addService.testConnection")})]})}),u.jsx("button",{onClick:z,disabled:!m||!b||C!=="success",className:"flex-1 px-4 py-2.5 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors disabled:bg-gray-400 disabled:cursor-not-allowed",children:f("backend.addService.addButton")})]}),u.jsxs("div",{className:"bg-gray-50 dark:bg-gray-800/50 border border-gray-200 dark:border-gray-700 rounded-lg p-4 space-y-3",children:[u.jsxs("div",{className:"flex items-center space-x-2",children:[u.jsx(cb,{className:"w-4 h-4 text-blue-600 dark:text-blue-400"}),u.jsx("h5",{className:"font-medium text-gray-900 dark:text-white text-sm",children:f("backend.addService.installGuide.title")})]}),u.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-400",children:f("backend.addService.installGuide.description")}),u.jsxs("div",{className:"bg-gray-900 dark:bg-gray-950 rounded-lg p-3 relative",children:[u.jsx("pre",{className:"text-xs text-green-400 font-mono whitespace-pre-wrap",children:R}),u.jsx("button",{onClick:N,className:"absolute top-2 right-2 p-1.5 bg-gray-800 hover:bg-gray-700 rounded text-gray-400 hover:text-white transition-colors",title:f("backend.addService.installGuide.copyCommands"),children:H?u.jsx(It,{className:"w-3.5 h-3.5 text-green-400"}):u.jsx(dp,{className:"w-3.5 h-3.5"})})]}),u.jsxs("div",{className:"flex space-x-2",children:[u.jsxs("button",{onClick:N,className:"flex-1 flex items-center justify-center space-x-1.5 px-3 py-1.5 border border-gray-300 dark:border-gray-600 rounded text-xs text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors",children:[u.jsx(dp,{className:"w-3.5 h-3.5"}),u.jsx("span",{children:f("backend.addService.installGuide.copyCommands")})]}),u.jsxs("a",{href:"https://github.com/okguitar/agentstudio?tab=readme-ov-file#-quick-start",target:"_blank",rel:"noopener noreferrer",className:"flex-1 flex items-center justify-center space-x-1.5 px-3 py-1.5 border border-gray-300 dark:border-gray-600 rounded text-xs text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors",children:[u.jsx(ub,{className:"w-3.5 h-3.5"}),u.jsx("span",{children:f("backend.addService.installGuide.viewDocs")})]})]})]}),o&&u.jsxs("button",{onClick:o,className:"w-full flex items-center justify-center space-x-2 px-4 py-2.5 border border-gray-300 dark:border-gray-600 rounded-lg text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors",children:[u.jsx(up,{className:"w-4 h-4"}),u.jsx("span",{children:f("backend.addService.retry")})]})]})},rS=({serviceName:o,serviceUrl:c,onGoToLogin:s,onManageServices:r})=>{const{t:f}=Ea("onboarding");return u.jsxs("div",{className:"text-center space-y-6",children:[u.jsx("div",{className:"flex justify-center",children:u.jsx("div",{className:"p-4 bg-green-100 dark:bg-green-900/30 rounded-full",children:u.jsx(It,{className:"w-12 h-12 text-green-600 dark:text-green-400"})})}),u.jsxs("div",{children:[u.jsx("h2",{className:"text-2xl font-bold text-gray-900 dark:text-white mb-2",children:f("backend.complete.title")}),u.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:f("backend.complete.description")})]}),u.jsx("div",{className:"bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 rounded-lg p-4 text-left",children:u.jsxs("div",{className:"space-y-2",children:[u.jsxs("div",{children:[u.jsx("p",{className:"text-xs text-gray-600 dark:text-gray-400",children:f("backend.complete.serviceName")}),u.jsx("p",{className:"text-sm font-medium text-gray-900 dark:text-white",children:o})]}),u.jsxs("div",{children:[u.jsx("p",{className:"text-xs text-gray-600 dark:text-gray-400",children:f("backend.complete.serviceUrl")}),u.jsx("p",{className:"text-sm font-mono text-gray-900 dark:text-white",children:c})]})]})}),u.jsxs("div",{className:"bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg p-4 text-left",children:[u.jsx("p",{className:"text-sm font-medium text-blue-900 dark:text-blue-200 mb-2",children:f("backend.complete.nextSteps.title")}),u.jsx("p",{className:"text-sm text-blue-800 dark:text-blue-300",children:f("backend.complete.nextSteps.description")})]}),u.jsxs("div",{className:"space-y-3",children:[u.jsxs("button",{onClick:s,className:"w-full flex items-center justify-center space-x-2 px-4 py-3 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors",children:[u.jsx(db,{className:"w-4 h-4"}),u.jsx("span",{children:f("backend.complete.goToLogin")})]}),u.jsxs("button",{onClick:r,className:"w-full flex items-center justify-center space-x-2 px-4 py-3 border border-gray-300 dark:border-gray-600 rounded-lg text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors",children:[u.jsx(ts,{className:"w-4 h-4"}),u.jsx("span",{children:f("backend.complete.manageServices")})]})]})]})},cS=({onComplete:o})=>{const{t:c}=Ea("onboarding"),s=xo(),{services:r,addService:f,switchService:m}=Co(),[y,b]=h.useState("welcome"),[v,g]=h.useState(null),[x,C]=h.useState(!1);h.useEffect(()=>{y==="detecting"&&D()},[y]);const D=async()=>{const F=["http://127.0.0.1:4936","http://localhost:4936"];for(const Q of F)try{if((await fetch(`${Q}/api/health`,{method:"GET",headers:{"Content-Type":"application/json"},signal:AbortSignal.timeout(3e3)})).ok){g({name:"Local Development Server",url:Q}),b("found");return}}catch{}b("not-found")},H=()=>{if(!v)return;const F=r.find(Q=>Q.url===v.url);if(F)m(F.id);else{const Q=f({name:v.name,url:v.url});m(Q.id)}Ec(!1),b("complete")},P=()=>{b("add-service")},R=()=>{b("detecting")},N=()=>{b("found")},B=async(F,Q)=>{try{const le=f({name:F,url:Q});return m(le.id),g({name:F,url:Q}),Ec(!1),b("complete"),!0}catch(le){return console.error("Failed to add remote service:",le),!1}},z=()=>{C(!0)},G=()=>{C(!1)},Z=()=>{Ec(!0),o()},K=()=>{o()},V=()=>{o(),s("/login")},_=()=>{switch(y){case"welcome":return u.jsx(oS,{onNext:()=>b("detecting"),onSkip:z});case"detecting":return u.jsx(iS,{});case"found":return v?u.jsx(sS,{serviceUrl:v.url,onUseService:H,onAddOther:P}):null;case"not-found":return u.jsx(Ap,{onRetry:R,onAddRemote:B,showWarning:!0});case"add-service":return u.jsx(Ap,{onAddRemote:B,onBack:N,showWarning:!1});case"complete":return v?u.jsx(rS,{serviceName:v.name,serviceUrl:v.url,onGoToLogin:K,onManageServices:V}):null;default:return null}};return u.jsxs(u.Fragment,{children:[u.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4",children:u.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-xl shadow-xl border border-gray-200 dark:border-gray-700 p-6 max-w-2xl w-full max-h-[90vh] overflow-y-auto",children:[y==="welcome"&&u.jsx("button",{onClick:z,className:"absolute top-4 right-4 p-2 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors","aria-label":"Close",children:u.jsx(ho,{className:"w-5 h-5"})}),_()]})}),x&&u.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-60 flex items-center justify-center z-[60] p-4",children:u.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-xl shadow-xl border border-gray-200 dark:border-gray-700 p-6 max-w-md w-full",children:[u.jsxs("div",{className:"flex items-start space-x-3 mb-4",children:[u.jsx(Hp,{className:"w-6 h-6 text-yellow-600 dark:text-yellow-400 flex-shrink-0 mt-0.5"}),u.jsxs("div",{children:[u.jsx("h3",{className:"text-lg font-bold text-gray-900 dark:text-white mb-2",children:c("backend.skipConfirm.title")}),u.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-400 mb-3",children:c("backend.skipConfirm.warning")}),u.jsxs("ul",{className:"text-sm text-gray-600 dark:text-gray-400 space-y-1 mb-3 list-disc list-inside",children:[u.jsx("li",{children:c("backend.skipConfirm.consequences.noAi")}),u.jsx("li",{children:c("backend.skipConfirm.consequences.noStorage")}),u.jsx("li",{children:c("backend.skipConfirm.consequences.noFeatures")})]}),u.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-400 mb-3",children:c("backend.skipConfirm.reconfigure")}),u.jsxs("ul",{className:"text-sm text-gray-600 dark:text-gray-400 space-y-1 list-disc list-inside",children:[u.jsx("li",{children:c("backend.skipConfirm.locations.loginPage")}),u.jsx("li",{children:c("backend.skipConfirm.locations.settingsPage")})]})]})]}),u.jsxs("div",{className:"flex space-x-3",children:[u.jsx("button",{onClick:G,className:"flex-1 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors",children:c("backend.skipConfirm.back")}),u.jsx("button",{onClick:Z,className:"flex-1 px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors",children:c("backend.skipConfirm.skip")})]})]})})]})};function Gt({children:o}){const{isAuthenticated:c,verifyToken:s}=nS(),{getToken:r}=Ic(),{currentService:f}=Co(),m=Yt(),[y,b]=h.useState(!0),[v,g]=h.useState(!1),[x,C]=h.useState(!1),D=h.useRef(null),H=h.useRef(0);h.useEffect(()=>{lS().completed||(C(!0),b(!1))},[]),h.useEffect(()=>{(async()=>{if(x)return;const N=f?.id||null,B=N?r(N):null;if(!B){g(!1),b(!1);return}if(Dc(B)){g(!1),b(!1);return}const z=Date.now(),G=z-300*1e3;if(!(N!==D.current||H.current===0||Qi(B)||H.current<G)&&!y){g(!0);return}if(b(!0),D.current=N,H.current=z,c){const K=await s();g(K)}else g(!1);b(!1)})()},[f?.id,x,c]);const P=()=>{C(!1),b(!0)};return x?u.jsx(cS,{onComplete:P}):y?u.jsx("div",{className:"min-h-screen flex items-center justify-center bg-gray-50 dark:bg-gray-900",children:u.jsxs("div",{className:"text-center",children:[u.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto"}),u.jsx("p",{className:"mt-4 text-gray-600 dark:text-gray-400",children:"Verifying..."})]})}):!c||!v?u.jsx(r0,{to:"/login",state:{from:m},replace:!0}):u.jsx(u.Fragment,{children:o})}function Et(o,c,{checkForDefaultPrevented:s=!0}={}){return function(f){if(o?.(f),s===!1||!f.defaultPrevented)return c?.(f)}}function Tp(o,c){if(typeof o=="function")return o(c);o!=null&&(o.current=c)}function sg(...o){return c=>{let s=!1;const r=o.map(f=>{const m=Tp(f,c);return!s&&typeof m=="function"&&(s=!0),m});if(s)return()=>{for(let f=0;f<r.length;f++){const m=r[f];typeof m=="function"?m():Tp(o[f],null)}}}}function Cn(...o){return h.useCallback(sg(...o),o)}function rg(o,c=[]){let s=[];function r(m,y){const b=h.createContext(y),v=s.length;s=[...s,y];const g=C=>{const{scope:D,children:H,...P}=C,R=D?.[o]?.[v]||b,N=h.useMemo(()=>P,Object.values(P));return u.jsx(R.Provider,{value:N,children:H})};g.displayName=m+"Provider";function x(C,D){const H=D?.[o]?.[v]||b,P=h.useContext(H);if(P)return P;if(y!==void 0)return y;throw new Error(`\`${C}\` must be used within \`${m}\``)}return[g,x]}const f=()=>{const m=s.map(y=>h.createContext(y));return function(b){const v=b?.[o]||m;return h.useMemo(()=>({[`__scope${o}`]:{...b,[o]:v}}),[b,v])}};return f.scopeName=o,[r,uS(f,...c)]}function uS(...o){const c=o[0];if(o.length===1)return c;const s=()=>{const r=o.map(f=>({useScope:f(),scopeName:f.scopeName}));return function(m){const y=r.reduce((b,{useScope:v,scopeName:g})=>{const C=v(m)[`__scope${g}`];return{...b,...C}},{});return h.useMemo(()=>({[`__scope${c.scopeName}`]:y}),[y])}};return s.scopeName=c.scopeName,s}function Uc(o){const c=dS(o),s=h.forwardRef((r,f)=>{const{children:m,...y}=r,b=h.Children.toArray(m),v=b.find(mS);if(v){const g=v.props.children,x=b.map(C=>C===v?h.Children.count(g)>1?h.Children.only(null):h.isValidElement(g)?g.props.children:null:C);return u.jsx(c,{...y,ref:f,children:h.isValidElement(g)?h.cloneElement(g,void 0,x):null})}return u.jsx(c,{...y,ref:f,children:m})});return s.displayName=`${o}.Slot`,s}function dS(o){const c=h.forwardRef((s,r)=>{const{children:f,...m}=s;if(h.isValidElement(f)){const y=gS(f),b=pS(m,f.props);return f.type!==h.Fragment&&(b.ref=r?sg(r,y):y),h.cloneElement(f,b)}return h.Children.count(f)>1?h.Children.only(null):null});return c.displayName=`${o}.SlotClone`,c}var fS=Symbol("radix.slottable");function mS(o){return h.isValidElement(o)&&typeof o.type=="function"&&"__radixId"in o.type&&o.type.__radixId===fS}function pS(o,c){const s={...c};for(const r in c){const f=o[r],m=c[r];/^on[A-Z]/.test(r)?f&&m?s[r]=(...b)=>{const v=m(...b);return f(...b),v}:f&&(s[r]=f):r==="style"?s[r]={...f,...m}:r==="className"&&(s[r]=[f,m].filter(Boolean).join(" "))}return{...o,...s}}function gS(o){let c=Object.getOwnPropertyDescriptor(o.props,"ref")?.get,s=c&&"isReactWarning"in c&&c.isReactWarning;return s?o.ref:(c=Object.getOwnPropertyDescriptor(o,"ref")?.get,s=c&&"isReactWarning"in c&&c.isReactWarning,s?o.props.ref:o.props.ref||o.ref)}function hS(o){const c=o+"CollectionProvider",[s,r]=rg(c),[f,m]=s(c,{collectionRef:{current:null},itemMap:new Map}),y=R=>{const{scope:N,children:B}=R,z=xn.useRef(null),G=xn.useRef(new Map).current;return u.jsx(f,{scope:N,itemMap:G,collectionRef:z,children:B})};y.displayName=c;const b=o+"CollectionSlot",v=Uc(b),g=xn.forwardRef((R,N)=>{const{scope:B,children:z}=R,G=m(b,B),Z=Cn(N,G.collectionRef);return u.jsx(v,{ref:Z,children:z})});g.displayName=b;const x=o+"CollectionItemSlot",C="data-radix-collection-item",D=Uc(x),H=xn.forwardRef((R,N)=>{const{scope:B,children:z,...G}=R,Z=xn.useRef(null),K=Cn(N,Z),V=m(x,B);return xn.useEffect(()=>(V.itemMap.set(Z,{ref:Z,...G}),()=>void V.itemMap.delete(Z))),u.jsx(D,{[C]:"",ref:K,children:z})});H.displayName=x;function P(R){const N=m(o+"CollectionConsumer",R);return xn.useCallback(()=>{const z=N.collectionRef.current;if(!z)return[];const G=Array.from(z.querySelectorAll(`[${C}]`));return Array.from(N.itemMap.values()).sort((V,_)=>G.indexOf(V.ref.current)-G.indexOf(_.ref.current))},[N.collectionRef,N.itemMap])}return[{Provider:y,Slot:g,ItemSlot:H},P,r]}var yS=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],aa=yS.reduce((o,c)=>{const s=Uc(`Primitive.${c}`),r=h.forwardRef((f,m)=>{const{asChild:y,...b}=f,v=y?s:c;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),u.jsx(v,{...b,ref:m})});return r.displayName=`Primitive.${c}`,{...o,[c]:r}},{});function cg(o,c){o&&Wc.flushSync(()=>o.dispatchEvent(c))}function An(o){const c=h.useRef(o);return h.useEffect(()=>{c.current=o}),h.useMemo(()=>(...s)=>c.current?.(...s),[])}function vS(o,c=globalThis?.document){const s=An(o);h.useEffect(()=>{const r=f=>{f.key==="Escape"&&s(f)};return c.addEventListener("keydown",r,{capture:!0}),()=>c.removeEventListener("keydown",r,{capture:!0})},[s,c])}var bS="DismissableLayer",_c="dismissableLayer.update",SS="dismissableLayer.pointerDownOutside",xS="dismissableLayer.focusOutside",kp,ug=h.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),dg=h.forwardRef((o,c)=>{const{disableOutsidePointerEvents:s=!1,onEscapeKeyDown:r,onPointerDownOutside:f,onFocusOutside:m,onInteractOutside:y,onDismiss:b,...v}=o,g=h.useContext(ug),[x,C]=h.useState(null),D=x?.ownerDocument??globalThis?.document,[,H]=h.useState({}),P=Cn(c,_=>C(_)),R=Array.from(g.layers),[N]=[...g.layersWithOutsidePointerEventsDisabled].slice(-1),B=R.indexOf(N),z=x?R.indexOf(x):-1,G=g.layersWithOutsidePointerEventsDisabled.size>0,Z=z>=B,K=CS(_=>{const F=_.target,Q=[...g.branches].some(le=>le.contains(F));!Z||Q||(f?.(_),y?.(_),_.defaultPrevented||b?.())},D),V=AS(_=>{const F=_.target;[...g.branches].some(le=>le.contains(F))||(m?.(_),y?.(_),_.defaultPrevented||b?.())},D);return vS(_=>{z===g.layers.size-1&&(r?.(_),!_.defaultPrevented&&b&&(_.preventDefault(),b()))},D),h.useEffect(()=>{if(x)return s&&(g.layersWithOutsidePointerEventsDisabled.size===0&&(kp=D.body.style.pointerEvents,D.body.style.pointerEvents="none"),g.layersWithOutsidePointerEventsDisabled.add(x)),g.layers.add(x),Ep(),()=>{s&&g.layersWithOutsidePointerEventsDisabled.size===1&&(D.body.style.pointerEvents=kp)}},[x,D,s,g]),h.useEffect(()=>()=>{x&&(g.layers.delete(x),g.layersWithOutsidePointerEventsDisabled.delete(x),Ep())},[x,g]),h.useEffect(()=>{const _=()=>H({});return document.addEventListener(_c,_),()=>document.removeEventListener(_c,_)},[]),u.jsx(aa.div,{...v,ref:P,style:{pointerEvents:G?Z?"auto":"none":void 0,...o.style},onFocusCapture:Et(o.onFocusCapture,V.onFocusCapture),onBlurCapture:Et(o.onBlurCapture,V.onBlurCapture),onPointerDownCapture:Et(o.onPointerDownCapture,K.onPointerDownCapture)})});dg.displayName=bS;var wS="DismissableLayerBranch",fg=h.forwardRef((o,c)=>{const s=h.useContext(ug),r=h.useRef(null),f=Cn(c,r);return h.useEffect(()=>{const m=r.current;if(m)return s.branches.add(m),()=>{s.branches.delete(m)}},[s.branches]),u.jsx(aa.div,{...o,ref:f})});fg.displayName=wS;function CS(o,c=globalThis?.document){const s=An(o),r=h.useRef(!1),f=h.useRef(()=>{});return h.useEffect(()=>{const m=b=>{if(b.target&&!r.current){let v=function(){mg(SS,s,g,{discrete:!0})};const g={originalEvent:b};b.pointerType==="touch"?(c.removeEventListener("click",f.current),f.current=v,c.addEventListener("click",f.current,{once:!0})):v()}else c.removeEventListener("click",f.current);r.current=!1},y=window.setTimeout(()=>{c.addEventListener("pointerdown",m)},0);return()=>{window.clearTimeout(y),c.removeEventListener("pointerdown",m),c.removeEventListener("click",f.current)}},[c,s]),{onPointerDownCapture:()=>r.current=!0}}function AS(o,c=globalThis?.document){const s=An(o),r=h.useRef(!1);return h.useEffect(()=>{const f=m=>{m.target&&!r.current&&mg(xS,s,{originalEvent:m},{discrete:!1})};return c.addEventListener("focusin",f),()=>c.removeEventListener("focusin",f)},[c,s]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function Ep(){const o=new CustomEvent(_c);document.dispatchEvent(o)}function mg(o,c,s,{discrete:r}){const f=s.originalEvent.target,m=new CustomEvent(o,{bubbles:!1,cancelable:!0,detail:s});c&&f.addEventListener(o,c,{once:!0}),r?cg(f,m):f.dispatchEvent(m)}var TS=dg,kS=fg,vo=globalThis?.document?h.useLayoutEffect:()=>{},ES="Portal",pg=h.forwardRef((o,c)=>{const{container:s,...r}=o,[f,m]=h.useState(!1);vo(()=>m(!0),[]);const y=s||f&&globalThis?.document?.body;return y?V0.createPortal(u.jsx(aa.div,{...r,ref:c}),y):null});pg.displayName=ES;function NS(o,c){return h.useReducer((s,r)=>c[s][r]??s,o)}var gg=o=>{const{present:c,children:s}=o,r=MS(c),f=typeof s=="function"?s({present:r.isPresent}):h.Children.only(s),m=Cn(r.ref,jS(f));return typeof s=="function"||r.isPresent?h.cloneElement(f,{ref:m}):null};gg.displayName="Presence";function MS(o){const[c,s]=h.useState(),r=h.useRef(null),f=h.useRef(o),m=h.useRef("none"),y=o?"mounted":"unmounted",[b,v]=NS(y,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return h.useEffect(()=>{const g=Gi(r.current);m.current=b==="mounted"?g:"none"},[b]),vo(()=>{const g=r.current,x=f.current;if(x!==o){const D=m.current,H=Gi(g);o?v("MOUNT"):H==="none"||g?.display==="none"?v("UNMOUNT"):v(x&&D!==H?"ANIMATION_OUT":"UNMOUNT"),f.current=o}},[o,v]),vo(()=>{if(c){let g;const x=c.ownerDocument.defaultView??window,C=H=>{const R=Gi(r.current).includes(CSS.escape(H.animationName));if(H.target===c&&R&&(v("ANIMATION_END"),!f.current)){const N=c.style.animationFillMode;c.style.animationFillMode="forwards",g=x.setTimeout(()=>{c.style.animationFillMode==="forwards"&&(c.style.animationFillMode=N)})}},D=H=>{H.target===c&&(m.current=Gi(r.current))};return c.addEventListener("animationstart",D),c.addEventListener("animationcancel",C),c.addEventListener("animationend",C),()=>{x.clearTimeout(g),c.removeEventListener("animationstart",D),c.removeEventListener("animationcancel",C),c.removeEventListener("animationend",C)}}else v("ANIMATION_END")},[c,v]),{isPresent:["mounted","unmountSuspended"].includes(b),ref:h.useCallback(g=>{r.current=g?getComputedStyle(g):null,s(g)},[])}}function Gi(o){return o?.animationName||"none"}function jS(o){let c=Object.getOwnPropertyDescriptor(o.props,"ref")?.get,s=c&&"isReactWarning"in c&&c.isReactWarning;return s?o.ref:(c=Object.getOwnPropertyDescriptor(o,"ref")?.get,s=c&&"isReactWarning"in c&&c.isReactWarning,s?o.props.ref:o.props.ref||o.ref)}var DS=Av[" useInsertionEffect ".trim().toString()]||vo;function RS({prop:o,defaultProp:c,onChange:s=()=>{},caller:r}){const[f,m,y]=PS({defaultProp:c,onChange:s}),b=o!==void 0,v=b?o:f;{const x=h.useRef(o!==void 0);h.useEffect(()=>{const C=x.current;C!==b&&console.warn(`${r} is changing from ${C?"controlled":"uncontrolled"} to ${b?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),x.current=b},[b,r])}const g=h.useCallback(x=>{if(b){const C=OS(x)?x(o):x;C!==o&&y.current?.(C)}else m(x)},[b,o,m,y]);return[v,g]}function PS({defaultProp:o,onChange:c}){const[s,r]=h.useState(o),f=h.useRef(s),m=h.useRef(c);return DS(()=>{m.current=c},[c]),h.useEffect(()=>{f.current!==s&&(m.current?.(s),f.current=s)},[s,f]),[s,r,m]}function OS(o){return typeof o=="function"}var zS=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),LS="VisuallyHidden",au=h.forwardRef((o,c)=>u.jsx(aa.span,{...o,ref:c,style:{...zS,...o.style}}));au.displayName=LS;var nu="ToastProvider",[lu,US,_S]=hS("Toast"),[hg]=rg("Toast",[_S]),[FS,os]=hg(nu),yg=o=>{const{__scopeToast:c,label:s="Notification",duration:r=5e3,swipeDirection:f="right",swipeThreshold:m=50,children:y}=o,[b,v]=h.useState(null),[g,x]=h.useState(0),C=h.useRef(!1),D=h.useRef(!1);return s.trim()||console.error(`Invalid prop \`label\` supplied to \`${nu}\`. Expected non-empty \`string\`.`),u.jsx(lu.Provider,{scope:c,children:u.jsx(FS,{scope:c,label:s,duration:r,swipeDirection:f,swipeThreshold:m,toastCount:g,viewport:b,onViewportChange:v,onToastAdd:h.useCallback(()=>x(H=>H+1),[]),onToastRemove:h.useCallback(()=>x(H=>H-1),[]),isFocusedToastEscapeKeyDownRef:C,isClosePausedRef:D,children:y})})};yg.displayName=nu;var vg="ToastViewport",BS=["F8"],Fc="toast.viewportPause",Bc="toast.viewportResume",bg=h.forwardRef((o,c)=>{const{__scopeToast:s,hotkey:r=BS,label:f="Notifications ({hotkey})",...m}=o,y=os(vg,s),b=US(s),v=h.useRef(null),g=h.useRef(null),x=h.useRef(null),C=h.useRef(null),D=Cn(c,C,y.onViewportChange),H=r.join("+").replace(/Key/g,"").replace(/Digit/g,""),P=y.toastCount>0;h.useEffect(()=>{const N=B=>{r.length!==0&&r.every(G=>B[G]||B.code===G)&&C.current?.focus()};return document.addEventListener("keydown",N),()=>document.removeEventListener("keydown",N)},[r]),h.useEffect(()=>{const N=v.current,B=C.current;if(P&&N&&B){const z=()=>{if(!y.isClosePausedRef.current){const V=new CustomEvent(Fc);B.dispatchEvent(V),y.isClosePausedRef.current=!0}},G=()=>{if(y.isClosePausedRef.current){const V=new CustomEvent(Bc);B.dispatchEvent(V),y.isClosePausedRef.current=!1}},Z=V=>{!N.contains(V.relatedTarget)&&G()},K=()=>{N.contains(document.activeElement)||G()};return N.addEventListener("focusin",z),N.addEventListener("focusout",Z),N.addEventListener("pointermove",z),N.addEventListener("pointerleave",K),window.addEventListener("blur",z),window.addEventListener("focus",G),()=>{N.removeEventListener("focusin",z),N.removeEventListener("focusout",Z),N.removeEventListener("pointermove",z),N.removeEventListener("pointerleave",K),window.removeEventListener("blur",z),window.removeEventListener("focus",G)}}},[P,y.isClosePausedRef]);const R=h.useCallback(({tabbingDirection:N})=>{const z=b().map(G=>{const Z=G.ref.current,K=[Z,...WS(Z)];return N==="forwards"?K:K.reverse()});return(N==="forwards"?z.reverse():z).flat()},[b]);return h.useEffect(()=>{const N=C.current;if(N){const B=z=>{const G=z.altKey||z.ctrlKey||z.metaKey;if(z.key==="Tab"&&!G){const K=document.activeElement,V=z.shiftKey;if(z.target===N&&V){g.current?.focus();return}const Q=R({tabbingDirection:V?"backwards":"forwards"}),le=Q.findIndex(Pe=>Pe===K);Nc(Q.slice(le+1))?z.preventDefault():V?g.current?.focus():x.current?.focus()}};return N.addEventListener("keydown",B),()=>N.removeEventListener("keydown",B)}},[b,R]),u.jsxs(kS,{ref:v,role:"region","aria-label":f.replace("{hotkey}",H),tabIndex:-1,style:{pointerEvents:P?void 0:"none"},children:[P&&u.jsx(Hc,{ref:g,onFocusFromOutsideViewport:()=>{const N=R({tabbingDirection:"forwards"});Nc(N)}}),u.jsx(lu.Slot,{scope:s,children:u.jsx(aa.ol,{tabIndex:-1,...m,ref:D})}),P&&u.jsx(Hc,{ref:x,onFocusFromOutsideViewport:()=>{const N=R({tabbingDirection:"backwards"});Nc(N)}})]})});bg.displayName=vg;var Sg="ToastFocusProxy",Hc=h.forwardRef((o,c)=>{const{__scopeToast:s,onFocusFromOutsideViewport:r,...f}=o,m=os(Sg,s);return u.jsx(au,{tabIndex:0,...f,ref:c,style:{position:"fixed"},onFocus:y=>{const b=y.relatedTarget;!m.viewport?.contains(b)&&r()}})});Hc.displayName=Sg;var Ao="Toast",HS="toast.swipeStart",qS="toast.swipeMove",VS="toast.swipeCancel",GS="toast.swipeEnd",xg=h.forwardRef((o,c)=>{const{forceMount:s,open:r,defaultOpen:f,onOpenChange:m,...y}=o,[b,v]=RS({prop:r,defaultProp:f??!0,onChange:m,caller:Ao});return u.jsx(gg,{present:s||b,children:u.jsx(YS,{open:b,...y,ref:c,onClose:()=>v(!1),onPause:An(o.onPause),onResume:An(o.onResume),onSwipeStart:Et(o.onSwipeStart,g=>{g.currentTarget.setAttribute("data-swipe","start")}),onSwipeMove:Et(o.onSwipeMove,g=>{const{x,y:C}=g.detail.delta;g.currentTarget.setAttribute("data-swipe","move"),g.currentTarget.style.setProperty("--radix-toast-swipe-move-x",`${x}px`),g.currentTarget.style.setProperty("--radix-toast-swipe-move-y",`${C}px`)}),onSwipeCancel:Et(o.onSwipeCancel,g=>{g.currentTarget.setAttribute("data-swipe","cancel"),g.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),g.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),g.currentTarget.style.removeProperty("--radix-toast-swipe-end-x"),g.currentTarget.style.removeProperty("--radix-toast-swipe-end-y")}),onSwipeEnd:Et(o.onSwipeEnd,g=>{const{x,y:C}=g.detail.delta;g.currentTarget.setAttribute("data-swipe","end"),g.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),g.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),g.currentTarget.style.setProperty("--radix-toast-swipe-end-x",`${x}px`),g.currentTarget.style.setProperty("--radix-toast-swipe-end-y",`${C}px`),v(!1)})})})});xg.displayName=Ao;var[IS,KS]=hg(Ao,{onClose(){}}),YS=h.forwardRef((o,c)=>{const{__scopeToast:s,type:r="foreground",duration:f,open:m,onClose:y,onEscapeKeyDown:b,onPause:v,onResume:g,onSwipeStart:x,onSwipeMove:C,onSwipeCancel:D,onSwipeEnd:H,...P}=o,R=os(Ao,s),[N,B]=h.useState(null),z=Cn(c,ne=>B(ne)),G=h.useRef(null),Z=h.useRef(null),K=f||R.duration,V=h.useRef(0),_=h.useRef(K),F=h.useRef(0),{onToastAdd:Q,onToastRemove:le}=R,Pe=An(()=>{N?.contains(document.activeElement)&&R.viewport?.focus(),y()}),Me=h.useCallback(ne=>{!ne||ne===1/0||(window.clearTimeout(F.current),V.current=new Date().getTime(),F.current=window.setTimeout(Pe,ne))},[Pe]);h.useEffect(()=>{const ne=R.viewport;if(ne){const we=()=>{Me(_.current),g?.()},j=()=>{const I=new Date().getTime()-V.current;_.current=_.current-I,window.clearTimeout(F.current),v?.()};return ne.addEventListener(Fc,j),ne.addEventListener(Bc,we),()=>{ne.removeEventListener(Fc,j),ne.removeEventListener(Bc,we)}}},[R.viewport,K,v,g,Me]),h.useEffect(()=>{m&&!R.isClosePausedRef.current&&Me(K)},[m,K,R.isClosePausedRef,Me]),h.useEffect(()=>(Q(),()=>le()),[Q,le]);const Qe=h.useMemo(()=>N?Ng(N):null,[N]);return R.viewport?u.jsxs(u.Fragment,{children:[Qe&&u.jsx(QS,{__scopeToast:s,role:"status","aria-live":r==="foreground"?"assertive":"polite",children:Qe}),u.jsx(IS,{scope:s,onClose:Pe,children:Wc.createPortal(u.jsx(lu.ItemSlot,{scope:s,children:u.jsx(TS,{asChild:!0,onEscapeKeyDown:Et(b,()=>{R.isFocusedToastEscapeKeyDownRef.current||Pe(),R.isFocusedToastEscapeKeyDownRef.current=!1}),children:u.jsx(aa.li,{tabIndex:0,"data-state":m?"open":"closed","data-swipe-direction":R.swipeDirection,...P,ref:z,style:{userSelect:"none",touchAction:"none",...o.style},onKeyDown:Et(o.onKeyDown,ne=>{ne.key==="Escape"&&(b?.(ne.nativeEvent),ne.nativeEvent.defaultPrevented||(R.isFocusedToastEscapeKeyDownRef.current=!0,Pe()))}),onPointerDown:Et(o.onPointerDown,ne=>{ne.button===0&&(G.current={x:ne.clientX,y:ne.clientY})}),onPointerMove:Et(o.onPointerMove,ne=>{if(!G.current)return;const we=ne.clientX-G.current.x,j=ne.clientY-G.current.y,I=!!Z.current,q=["left","right"].includes(R.swipeDirection),de=["left","up"].includes(R.swipeDirection)?Math.min:Math.max,he=q?de(0,we):0,Le=q?0:de(0,j),ye=ne.pointerType==="touch"?10:2,te={x:he,y:Le},re={originalEvent:ne,delta:te};I?(Z.current=te,Ii(qS,C,re,{discrete:!1})):Np(te,R.swipeDirection,ye)?(Z.current=te,Ii(HS,x,re,{discrete:!1}),ne.target.setPointerCapture(ne.pointerId)):(Math.abs(we)>ye||Math.abs(j)>ye)&&(G.current=null)}),onPointerUp:Et(o.onPointerUp,ne=>{const we=Z.current,j=ne.target;if(j.hasPointerCapture(ne.pointerId)&&j.releasePointerCapture(ne.pointerId),Z.current=null,G.current=null,we){const I=ne.currentTarget,q={originalEvent:ne,delta:we};Np(we,R.swipeDirection,R.swipeThreshold)?Ii(GS,H,q,{discrete:!0}):Ii(VS,D,q,{discrete:!0}),I.addEventListener("click",de=>de.preventDefault(),{once:!0})}})})})}),R.viewport)})]}):null}),QS=o=>{const{__scopeToast:c,children:s,...r}=o,f=os(Ao,c),[m,y]=h.useState(!1),[b,v]=h.useState(!1);return $S(()=>y(!0)),h.useEffect(()=>{const g=window.setTimeout(()=>v(!0),1e3);return()=>window.clearTimeout(g)},[]),b?null:u.jsx(pg,{asChild:!0,children:u.jsx(au,{...r,children:m&&u.jsxs(u.Fragment,{children:[f.label," ",s]})})})},XS="ToastTitle",wg=h.forwardRef((o,c)=>{const{__scopeToast:s,...r}=o;return u.jsx(aa.div,{...r,ref:c})});wg.displayName=XS;var ZS="ToastDescription",Cg=h.forwardRef((o,c)=>{const{__scopeToast:s,...r}=o;return u.jsx(aa.div,{...r,ref:c})});Cg.displayName=ZS;var Ag="ToastAction",Tg=h.forwardRef((o,c)=>{const{altText:s,...r}=o;return s.trim()?u.jsx(Eg,{altText:s,asChild:!0,children:u.jsx(ou,{...r,ref:c})}):(console.error(`Invalid prop \`altText\` supplied to \`${Ag}\`. Expected non-empty \`string\`.`),null)});Tg.displayName=Ag;var kg="ToastClose",ou=h.forwardRef((o,c)=>{const{__scopeToast:s,...r}=o,f=KS(kg,s);return u.jsx(Eg,{asChild:!0,children:u.jsx(aa.button,{type:"button",...r,ref:c,onClick:Et(o.onClick,f.onClose)})})});ou.displayName=kg;var Eg=h.forwardRef((o,c)=>{const{__scopeToast:s,altText:r,...f}=o;return u.jsx(aa.div,{"data-radix-toast-announce-exclude":"","data-radix-toast-announce-alt":r||void 0,...f,ref:c})});function Ng(o){const c=[];return Array.from(o.childNodes).forEach(r=>{if(r.nodeType===r.TEXT_NODE&&r.textContent&&c.push(r.textContent),JS(r)){const f=r.ariaHidden||r.hidden||r.style.display==="none",m=r.dataset.radixToastAnnounceExclude==="";if(!f)if(m){const y=r.dataset.radixToastAnnounceAlt;y&&c.push(y)}else c.push(...Ng(r))}}),c}function Ii(o,c,s,{discrete:r}){const f=s.originalEvent.currentTarget,m=new CustomEvent(o,{bubbles:!0,cancelable:!0,detail:s});c&&f.addEventListener(o,c,{once:!0}),r?cg(f,m):f.dispatchEvent(m)}var Np=(o,c,s=0)=>{const r=Math.abs(o.x),f=Math.abs(o.y),m=r>f;return c==="left"||c==="right"?m&&r>s:!m&&f>s};function $S(o=()=>{}){const c=An(o);vo(()=>{let s=0,r=0;return s=window.requestAnimationFrame(()=>r=window.requestAnimationFrame(c)),()=>{window.cancelAnimationFrame(s),window.cancelAnimationFrame(r)}},[c])}function JS(o){return o.nodeType===o.ELEMENT_NODE}function WS(o){const c=[],s=document.createTreeWalker(o,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const f=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||f?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;s.nextNode();)c.push(s.currentNode);return c}function Nc(o){const c=document.activeElement;return o.some(s=>s===c?!0:(s.focus(),document.activeElement!==c))}var ex=yg,Mg=bg,jg=xg,Dg=wg,Rg=Cg,Pg=Tg,Og=ou;function zg(o){var c,s,r="";if(typeof o=="string"||typeof o=="number")r+=o;else if(typeof o=="object")if(Array.isArray(o)){var f=o.length;for(c=0;c<f;c++)o[c]&&(s=zg(o[c]))&&(r&&(r+=" "),r+=s)}else for(s in o)o[s]&&(r&&(r+=" "),r+=s);return r}function Lg(){for(var o,c,s=0,r="",f=arguments.length;s<f;s++)(o=arguments[s])&&(c=zg(o))&&(r&&(r+=" "),r+=c);return r}const Mp=o=>typeof o=="boolean"?`${o}`:o===0?"0":o,jp=Lg,tx=(o,c)=>s=>{var r;if(c?.variants==null)return jp(o,s?.class,s?.className);const{variants:f,defaultVariants:m}=c,y=Object.keys(f).map(g=>{const x=s?.[g],C=m?.[g];if(x===null)return null;const D=Mp(x)||Mp(C);return f[g][D]}),b=s&&Object.entries(s).reduce((g,x)=>{let[C,D]=x;return D===void 0||(g[C]=D),g},{}),v=c==null||(r=c.compoundVariants)===null||r===void 0?void 0:r.reduce((g,x)=>{let{class:C,className:D,...H}=x;return Object.entries(H).every(P=>{let[R,N]=P;return Array.isArray(N)?N.includes({...m,...b}[R]):{...m,...b}[R]===N})?[...g,C,D]:g},[]);return jp(o,y,v,s?.class,s?.className)},iu="-",ax=o=>{const c=lx(o),{conflictingClassGroups:s,conflictingClassGroupModifiers:r}=o;return{getClassGroupId:y=>{const b=y.split(iu);return b[0]===""&&b.length!==1&&b.shift(),Ug(b,c)||nx(y)},getConflictingClassGroupIds:(y,b)=>{const v=s[y]||[];return b&&r[y]?[...v,...r[y]]:v}}},Ug=(o,c)=>{if(o.length===0)return c.classGroupId;const s=o[0],r=c.nextPart.get(s),f=r?Ug(o.slice(1),r):void 0;if(f)return f;if(c.validators.length===0)return;const m=o.join(iu);return c.validators.find(({validator:y})=>y(m))?.classGroupId},Dp=/^\[(.+)\]$/,nx=o=>{if(Dp.test(o)){const c=Dp.exec(o)[1],s=c?.substring(0,c.indexOf(":"));if(s)return"arbitrary.."+s}},lx=o=>{const{theme:c,classGroups:s}=o,r={nextPart:new Map,validators:[]};for(const f in s)qc(s[f],r,f,c);return r},qc=(o,c,s,r)=>{o.forEach(f=>{if(typeof f=="string"){const m=f===""?c:Rp(c,f);m.classGroupId=s;return}if(typeof f=="function"){if(ox(f)){qc(f(r),c,s,r);return}c.validators.push({validator:f,classGroupId:s});return}Object.entries(f).forEach(([m,y])=>{qc(y,Rp(c,m),s,r)})})},Rp=(o,c)=>{let s=o;return c.split(iu).forEach(r=>{s.nextPart.has(r)||s.nextPart.set(r,{nextPart:new Map,validators:[]}),s=s.nextPart.get(r)}),s},ox=o=>o.isThemeGetter,ix=o=>{if(o<1)return{get:()=>{},set:()=>{}};let c=0,s=new Map,r=new Map;const f=(m,y)=>{s.set(m,y),c++,c>o&&(c=0,r=s,s=new Map)};return{get(m){let y=s.get(m);if(y!==void 0)return y;if((y=r.get(m))!==void 0)return f(m,y),y},set(m,y){s.has(m)?s.set(m,y):f(m,y)}}},Vc="!",Gc=":",sx=Gc.length,rx=o=>{const{prefix:c,experimentalParseClassName:s}=o;let r=f=>{const m=[];let y=0,b=0,v=0,g;for(let P=0;P<f.length;P++){let R=f[P];if(y===0&&b===0){if(R===Gc){m.push(f.slice(v,P)),v=P+sx;continue}if(R==="/"){g=P;continue}}R==="["?y++:R==="]"?y--:R==="("?b++:R===")"&&b--}const x=m.length===0?f:f.substring(v),C=cx(x),D=C!==x,H=g&&g>v?g-v:void 0;return{modifiers:m,hasImportantModifier:D,baseClassName:C,maybePostfixModifierPosition:H}};if(c){const f=c+Gc,m=r;r=y=>y.startsWith(f)?m(y.substring(f.length)):{isExternal:!0,modifiers:[],hasImportantModifier:!1,baseClassName:y,maybePostfixModifierPosition:void 0}}if(s){const f=r;r=m=>s({className:m,parseClassName:f})}return r},cx=o=>o.endsWith(Vc)?o.substring(0,o.length-1):o.startsWith(Vc)?o.substring(1):o,ux=o=>{const c=Object.fromEntries(o.orderSensitiveModifiers.map(r=>[r,!0]));return r=>{if(r.length<=1)return r;const f=[];let m=[];return r.forEach(y=>{y[0]==="["||c[y]?(f.push(...m.sort(),y),m=[]):m.push(y)}),f.push(...m.sort()),f}},dx=o=>({cache:ix(o.cacheSize),parseClassName:rx(o),sortModifiers:ux(o),...ax(o)}),fx=/\s+/,mx=(o,c)=>{const{parseClassName:s,getClassGroupId:r,getConflictingClassGroupIds:f,sortModifiers:m}=c,y=[],b=o.trim().split(fx);let v="";for(let g=b.length-1;g>=0;g-=1){const x=b[g],{isExternal:C,modifiers:D,hasImportantModifier:H,baseClassName:P,maybePostfixModifierPosition:R}=s(x);if(C){v=x+(v.length>0?" "+v:v);continue}let N=!!R,B=r(N?P.substring(0,R):P);if(!B){if(!N){v=x+(v.length>0?" "+v:v);continue}if(B=r(P),!B){v=x+(v.length>0?" "+v:v);continue}N=!1}const z=m(D).join(":"),G=H?z+Vc:z,Z=G+B;if(y.includes(Z))continue;y.push(Z);const K=f(B,N);for(let V=0;V<K.length;++V){const _=K[V];y.push(G+_)}v=x+(v.length>0?" "+v:v)}return v};function px(){let o=0,c,s,r="";for(;o<arguments.length;)(c=arguments[o++])&&(s=_g(c))&&(r&&(r+=" "),r+=s);return r}const _g=o=>{if(typeof o=="string")return o;let c,s="";for(let r=0;r<o.length;r++)o[r]&&(c=_g(o[r]))&&(s&&(s+=" "),s+=c);return s};function gx(o,...c){let s,r,f,m=y;function y(v){const g=c.reduce((x,C)=>C(x),o());return s=dx(g),r=s.cache.get,f=s.cache.set,m=b,b(v)}function b(v){const g=r(v);if(g)return g;const x=mx(v,s);return f(v,x),x}return function(){return m(px.apply(null,arguments))}}const Ye=o=>{const c=s=>s[o]||[];return c.isThemeGetter=!0,c},Fg=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Bg=/^\((?:(\w[\w-]*):)?(.+)\)$/i,hx=/^\d+\/\d+$/,yx=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,vx=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,bx=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Sx=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,xx=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,ul=o=>hx.test(o),se=o=>!!o&&!Number.isNaN(Number(o)),en=o=>!!o&&Number.isInteger(Number(o)),Mc=o=>o.endsWith("%")&&se(o.slice(0,-1)),Aa=o=>yx.test(o),wx=()=>!0,Cx=o=>vx.test(o)&&!bx.test(o),Hg=()=>!1,Ax=o=>Sx.test(o),Tx=o=>xx.test(o),kx=o=>!$(o)&&!J(o),Ex=o=>hl(o,Gg,Hg),$=o=>Fg.test(o),wn=o=>hl(o,Ig,Cx),jc=o=>hl(o,Rx,se),Pp=o=>hl(o,qg,Hg),Nx=o=>hl(o,Vg,Tx),Ki=o=>hl(o,Kg,Ax),J=o=>Bg.test(o),po=o=>yl(o,Ig),Mx=o=>yl(o,Px),Op=o=>yl(o,qg),jx=o=>yl(o,Gg),Dx=o=>yl(o,Vg),Yi=o=>yl(o,Kg,!0),hl=(o,c,s)=>{const r=Fg.exec(o);return r?r[1]?c(r[1]):s(r[2]):!1},yl=(o,c,s=!1)=>{const r=Bg.exec(o);return r?r[1]?c(r[1]):s:!1},qg=o=>o==="position"||o==="percentage",Vg=o=>o==="image"||o==="url",Gg=o=>o==="length"||o==="size"||o==="bg-size",Ig=o=>o==="length",Rx=o=>o==="number",Px=o=>o==="family-name",Kg=o=>o==="shadow",Ox=()=>{const o=Ye("color"),c=Ye("font"),s=Ye("text"),r=Ye("font-weight"),f=Ye("tracking"),m=Ye("leading"),y=Ye("breakpoint"),b=Ye("container"),v=Ye("spacing"),g=Ye("radius"),x=Ye("shadow"),C=Ye("inset-shadow"),D=Ye("text-shadow"),H=Ye("drop-shadow"),P=Ye("blur"),R=Ye("perspective"),N=Ye("aspect"),B=Ye("ease"),z=Ye("animate"),G=()=>["auto","avoid","all","avoid-page","page","left","right","column"],Z=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],K=()=>[...Z(),J,$],V=()=>["auto","hidden","clip","visible","scroll"],_=()=>["auto","contain","none"],F=()=>[J,$,v],Q=()=>[ul,"full","auto",...F()],le=()=>[en,"none","subgrid",J,$],Pe=()=>["auto",{span:["full",en,J,$]},en,J,$],Me=()=>[en,"auto",J,$],Qe=()=>["auto","min","max","fr",J,$],ne=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],we=()=>["start","end","center","stretch","center-safe","end-safe"],j=()=>["auto",...F()],I=()=>[ul,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...F()],q=()=>[o,J,$],de=()=>[...Z(),Op,Pp,{position:[J,$]}],he=()=>["no-repeat",{repeat:["","x","y","space","round"]}],Le=()=>["auto","cover","contain",jx,Ex,{size:[J,$]}],ye=()=>[Mc,po,wn],te=()=>["","none","full",g,J,$],re=()=>["",se,po,wn],Je=()=>["solid","dashed","dotted","double"],pt=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],je=()=>[se,Mc,Op,Pp],na=()=>["","none",P,J,$],gt=()=>["none",se,J,$],Qt=()=>["none",se,J,$],Xt=()=>[se,J,$],Zt=()=>[ul,"full",...F()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[Aa],breakpoint:[Aa],color:[wx],container:[Aa],"drop-shadow":[Aa],ease:["in","out","in-out"],font:[kx],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[Aa],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[Aa],shadow:[Aa],spacing:["px",se],text:[Aa],"text-shadow":[Aa],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",ul,$,J,N]}],container:["container"],columns:[{columns:[se,$,J,b]}],"break-after":[{"break-after":G()}],"break-before":[{"break-before":G()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:K()}],overflow:[{overflow:V()}],"overflow-x":[{"overflow-x":V()}],"overflow-y":[{"overflow-y":V()}],overscroll:[{overscroll:_()}],"overscroll-x":[{"overscroll-x":_()}],"overscroll-y":[{"overscroll-y":_()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:Q()}],"inset-x":[{"inset-x":Q()}],"inset-y":[{"inset-y":Q()}],start:[{start:Q()}],end:[{end:Q()}],top:[{top:Q()}],right:[{right:Q()}],bottom:[{bottom:Q()}],left:[{left:Q()}],visibility:["visible","invisible","collapse"],z:[{z:[en,"auto",J,$]}],basis:[{basis:[ul,"full","auto",b,...F()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[se,ul,"auto","initial","none",$]}],grow:[{grow:["",se,J,$]}],shrink:[{shrink:["",se,J,$]}],order:[{order:[en,"first","last","none",J,$]}],"grid-cols":[{"grid-cols":le()}],"col-start-end":[{col:Pe()}],"col-start":[{"col-start":Me()}],"col-end":[{"col-end":Me()}],"grid-rows":[{"grid-rows":le()}],"row-start-end":[{row:Pe()}],"row-start":[{"row-start":Me()}],"row-end":[{"row-end":Me()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":Qe()}],"auto-rows":[{"auto-rows":Qe()}],gap:[{gap:F()}],"gap-x":[{"gap-x":F()}],"gap-y":[{"gap-y":F()}],"justify-content":[{justify:[...ne(),"normal"]}],"justify-items":[{"justify-items":[...we(),"normal"]}],"justify-self":[{"justify-self":["auto",...we()]}],"align-content":[{content:["normal",...ne()]}],"align-items":[{items:[...we(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...we(),{baseline:["","last"]}]}],"place-content":[{"place-content":ne()}],"place-items":[{"place-items":[...we(),"baseline"]}],"place-self":[{"place-self":["auto",...we()]}],p:[{p:F()}],px:[{px:F()}],py:[{py:F()}],ps:[{ps:F()}],pe:[{pe:F()}],pt:[{pt:F()}],pr:[{pr:F()}],pb:[{pb:F()}],pl:[{pl:F()}],m:[{m:j()}],mx:[{mx:j()}],my:[{my:j()}],ms:[{ms:j()}],me:[{me:j()}],mt:[{mt:j()}],mr:[{mr:j()}],mb:[{mb:j()}],ml:[{ml:j()}],"space-x":[{"space-x":F()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":F()}],"space-y-reverse":["space-y-reverse"],size:[{size:I()}],w:[{w:[b,"screen",...I()]}],"min-w":[{"min-w":[b,"screen","none",...I()]}],"max-w":[{"max-w":[b,"screen","none","prose",{screen:[y]},...I()]}],h:[{h:["screen","lh",...I()]}],"min-h":[{"min-h":["screen","lh","none",...I()]}],"max-h":[{"max-h":["screen","lh",...I()]}],"font-size":[{text:["base",s,po,wn]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[r,J,jc]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Mc,$]}],"font-family":[{font:[Mx,$,c]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[f,J,$]}],"line-clamp":[{"line-clamp":[se,"none",J,jc]}],leading:[{leading:[m,...F()]}],"list-image":[{"list-image":["none",J,$]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",J,$]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:q()}],"text-color":[{text:q()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...Je(),"wavy"]}],"text-decoration-thickness":[{decoration:[se,"from-font","auto",J,wn]}],"text-decoration-color":[{decoration:q()}],"underline-offset":[{"underline-offset":[se,"auto",J,$]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:F()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",J,$]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",J,$]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:de()}],"bg-repeat":[{bg:he()}],"bg-size":[{bg:Le()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},en,J,$],radial:["",J,$],conic:[en,J,$]},Dx,Nx]}],"bg-color":[{bg:q()}],"gradient-from-pos":[{from:ye()}],"gradient-via-pos":[{via:ye()}],"gradient-to-pos":[{to:ye()}],"gradient-from":[{from:q()}],"gradient-via":[{via:q()}],"gradient-to":[{to:q()}],rounded:[{rounded:te()}],"rounded-s":[{"rounded-s":te()}],"rounded-e":[{"rounded-e":te()}],"rounded-t":[{"rounded-t":te()}],"rounded-r":[{"rounded-r":te()}],"rounded-b":[{"rounded-b":te()}],"rounded-l":[{"rounded-l":te()}],"rounded-ss":[{"rounded-ss":te()}],"rounded-se":[{"rounded-se":te()}],"rounded-ee":[{"rounded-ee":te()}],"rounded-es":[{"rounded-es":te()}],"rounded-tl":[{"rounded-tl":te()}],"rounded-tr":[{"rounded-tr":te()}],"rounded-br":[{"rounded-br":te()}],"rounded-bl":[{"rounded-bl":te()}],"border-w":[{border:re()}],"border-w-x":[{"border-x":re()}],"border-w-y":[{"border-y":re()}],"border-w-s":[{"border-s":re()}],"border-w-e":[{"border-e":re()}],"border-w-t":[{"border-t":re()}],"border-w-r":[{"border-r":re()}],"border-w-b":[{"border-b":re()}],"border-w-l":[{"border-l":re()}],"divide-x":[{"divide-x":re()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":re()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...Je(),"hidden","none"]}],"divide-style":[{divide:[...Je(),"hidden","none"]}],"border-color":[{border:q()}],"border-color-x":[{"border-x":q()}],"border-color-y":[{"border-y":q()}],"border-color-s":[{"border-s":q()}],"border-color-e":[{"border-e":q()}],"border-color-t":[{"border-t":q()}],"border-color-r":[{"border-r":q()}],"border-color-b":[{"border-b":q()}],"border-color-l":[{"border-l":q()}],"divide-color":[{divide:q()}],"outline-style":[{outline:[...Je(),"none","hidden"]}],"outline-offset":[{"outline-offset":[se,J,$]}],"outline-w":[{outline:["",se,po,wn]}],"outline-color":[{outline:q()}],shadow:[{shadow:["","none",x,Yi,Ki]}],"shadow-color":[{shadow:q()}],"inset-shadow":[{"inset-shadow":["none",C,Yi,Ki]}],"inset-shadow-color":[{"inset-shadow":q()}],"ring-w":[{ring:re()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:q()}],"ring-offset-w":[{"ring-offset":[se,wn]}],"ring-offset-color":[{"ring-offset":q()}],"inset-ring-w":[{"inset-ring":re()}],"inset-ring-color":[{"inset-ring":q()}],"text-shadow":[{"text-shadow":["none",D,Yi,Ki]}],"text-shadow-color":[{"text-shadow":q()}],opacity:[{opacity:[se,J,$]}],"mix-blend":[{"mix-blend":[...pt(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":pt()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[se]}],"mask-image-linear-from-pos":[{"mask-linear-from":je()}],"mask-image-linear-to-pos":[{"mask-linear-to":je()}],"mask-image-linear-from-color":[{"mask-linear-from":q()}],"mask-image-linear-to-color":[{"mask-linear-to":q()}],"mask-image-t-from-pos":[{"mask-t-from":je()}],"mask-image-t-to-pos":[{"mask-t-to":je()}],"mask-image-t-from-color":[{"mask-t-from":q()}],"mask-image-t-to-color":[{"mask-t-to":q()}],"mask-image-r-from-pos":[{"mask-r-from":je()}],"mask-image-r-to-pos":[{"mask-r-to":je()}],"mask-image-r-from-color":[{"mask-r-from":q()}],"mask-image-r-to-color":[{"mask-r-to":q()}],"mask-image-b-from-pos":[{"mask-b-from":je()}],"mask-image-b-to-pos":[{"mask-b-to":je()}],"mask-image-b-from-color":[{"mask-b-from":q()}],"mask-image-b-to-color":[{"mask-b-to":q()}],"mask-image-l-from-pos":[{"mask-l-from":je()}],"mask-image-l-to-pos":[{"mask-l-to":je()}],"mask-image-l-from-color":[{"mask-l-from":q()}],"mask-image-l-to-color":[{"mask-l-to":q()}],"mask-image-x-from-pos":[{"mask-x-from":je()}],"mask-image-x-to-pos":[{"mask-x-to":je()}],"mask-image-x-from-color":[{"mask-x-from":q()}],"mask-image-x-to-color":[{"mask-x-to":q()}],"mask-image-y-from-pos":[{"mask-y-from":je()}],"mask-image-y-to-pos":[{"mask-y-to":je()}],"mask-image-y-from-color":[{"mask-y-from":q()}],"mask-image-y-to-color":[{"mask-y-to":q()}],"mask-image-radial":[{"mask-radial":[J,$]}],"mask-image-radial-from-pos":[{"mask-radial-from":je()}],"mask-image-radial-to-pos":[{"mask-radial-to":je()}],"mask-image-radial-from-color":[{"mask-radial-from":q()}],"mask-image-radial-to-color":[{"mask-radial-to":q()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":Z()}],"mask-image-conic-pos":[{"mask-conic":[se]}],"mask-image-conic-from-pos":[{"mask-conic-from":je()}],"mask-image-conic-to-pos":[{"mask-conic-to":je()}],"mask-image-conic-from-color":[{"mask-conic-from":q()}],"mask-image-conic-to-color":[{"mask-conic-to":q()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:de()}],"mask-repeat":[{mask:he()}],"mask-size":[{mask:Le()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",J,$]}],filter:[{filter:["","none",J,$]}],blur:[{blur:na()}],brightness:[{brightness:[se,J,$]}],contrast:[{contrast:[se,J,$]}],"drop-shadow":[{"drop-shadow":["","none",H,Yi,Ki]}],"drop-shadow-color":[{"drop-shadow":q()}],grayscale:[{grayscale:["",se,J,$]}],"hue-rotate":[{"hue-rotate":[se,J,$]}],invert:[{invert:["",se,J,$]}],saturate:[{saturate:[se,J,$]}],sepia:[{sepia:["",se,J,$]}],"backdrop-filter":[{"backdrop-filter":["","none",J,$]}],"backdrop-blur":[{"backdrop-blur":na()}],"backdrop-brightness":[{"backdrop-brightness":[se,J,$]}],"backdrop-contrast":[{"backdrop-contrast":[se,J,$]}],"backdrop-grayscale":[{"backdrop-grayscale":["",se,J,$]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[se,J,$]}],"backdrop-invert":[{"backdrop-invert":["",se,J,$]}],"backdrop-opacity":[{"backdrop-opacity":[se,J,$]}],"backdrop-saturate":[{"backdrop-saturate":[se,J,$]}],"backdrop-sepia":[{"backdrop-sepia":["",se,J,$]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":F()}],"border-spacing-x":[{"border-spacing-x":F()}],"border-spacing-y":[{"border-spacing-y":F()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",J,$]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[se,"initial",J,$]}],ease:[{ease:["linear","initial",B,J,$]}],delay:[{delay:[se,J,$]}],animate:[{animate:["none",z,J,$]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[R,J,$]}],"perspective-origin":[{"perspective-origin":K()}],rotate:[{rotate:gt()}],"rotate-x":[{"rotate-x":gt()}],"rotate-y":[{"rotate-y":gt()}],"rotate-z":[{"rotate-z":gt()}],scale:[{scale:Qt()}],"scale-x":[{"scale-x":Qt()}],"scale-y":[{"scale-y":Qt()}],"scale-z":[{"scale-z":Qt()}],"scale-3d":["scale-3d"],skew:[{skew:Xt()}],"skew-x":[{"skew-x":Xt()}],"skew-y":[{"skew-y":Xt()}],transform:[{transform:[J,$,"","none","gpu","cpu"]}],"transform-origin":[{origin:K()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:Zt()}],"translate-x":[{"translate-x":Zt()}],"translate-y":[{"translate-y":Zt()}],"translate-z":[{"translate-z":Zt()}],"translate-none":["translate-none"],accent:[{accent:q()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:q()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",J,$]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":F()}],"scroll-mx":[{"scroll-mx":F()}],"scroll-my":[{"scroll-my":F()}],"scroll-ms":[{"scroll-ms":F()}],"scroll-me":[{"scroll-me":F()}],"scroll-mt":[{"scroll-mt":F()}],"scroll-mr":[{"scroll-mr":F()}],"scroll-mb":[{"scroll-mb":F()}],"scroll-ml":[{"scroll-ml":F()}],"scroll-p":[{"scroll-p":F()}],"scroll-px":[{"scroll-px":F()}],"scroll-py":[{"scroll-py":F()}],"scroll-ps":[{"scroll-ps":F()}],"scroll-pe":[{"scroll-pe":F()}],"scroll-pt":[{"scroll-pt":F()}],"scroll-pr":[{"scroll-pr":F()}],"scroll-pb":[{"scroll-pb":F()}],"scroll-pl":[{"scroll-pl":F()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",J,$]}],fill:[{fill:["none",...q()]}],"stroke-w":[{stroke:[se,po,wn,jc]}],stroke:[{stroke:["none",...q()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},zx=gx(Ox);function vl(...o){return zx(Lg(o))}const Lx=ex,Yg=h.forwardRef(({className:o,...c},s)=>u.jsx(Mg,{ref:s,className:vl("fixed top-4 right-4 z-[100] flex max-h-screen w-full flex-col gap-2 p-4 md:max-w-[420px]",o),...c}));Yg.displayName=Mg.displayName;const Ux=tx("group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",{variants:{variant:{default:"border bg-background text-foreground",destructive:"destructive group border-destructive bg-destructive text-destructive-foreground"}},defaultVariants:{variant:"default"}}),Qg=h.forwardRef(({className:o,variant:c,...s},r)=>u.jsx(jg,{ref:r,className:vl(Ux({variant:c}),o),...s}));Qg.displayName=jg.displayName;const _x=h.forwardRef(({className:o,...c},s)=>u.jsx(Pg,{ref:s,className:vl("inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors hover:bg-secondary focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive",o),...c}));_x.displayName=Pg.displayName;const Xg=h.forwardRef(({className:o,...c},s)=>u.jsx(Og,{ref:s,className:vl("absolute right-2 top-2 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600",o),"toast-close":"",...c,children:u.jsx(ho,{className:"h-4 w-4"})}));Xg.displayName=Og.displayName;const Zg=h.forwardRef(({className:o,...c},s)=>u.jsx(Dg,{ref:s,className:vl("text-sm font-semibold",o),...c}));Zg.displayName=Dg.displayName;const $g=h.forwardRef(({className:o,...c},s)=>u.jsx(Rg,{ref:s,className:vl("text-sm opacity-90",o),...c}));$g.displayName=Rg.displayName;function Fx(){const{toasts:o}=X0();return u.jsxs(Lx,{children:[o.map(function({id:c,title:s,description:r,action:f,...m}){return u.jsxs(Qg,{...m,children:[u.jsxs("div",{className:"grid gap-1",children:[s&&u.jsx(Zg,{children:s}),r&&u.jsx($g,{children:r})]}),f,u.jsx(Xg,{})]},c)}),u.jsx(Yg,{})]})}const Bx=({url:o})=>(h.useEffect(()=>{window.location.href=o},[o]),u.jsx("div",{className:"flex items-center justify-center h-screen",children:"Redirecting..."})),Hx=h.lazy(()=>$e(()=>import("./DashboardPage-B9keTygm.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])).then(o=>({default:o.DashboardPage}))),qx=h.lazy(()=>$e(()=>import("./AgentsPage-CUeihzHA.js"),__vite__mapDeps([11,1,2,3,12,9,5,6,7,8,13,14,15,16])).then(o=>({default:o.AgentsPage}))),Vx=h.lazy(()=>$e(()=>import("./ProjectsPage-NyqKB1xe.js"),__vite__mapDeps([17,1,2,3,5,6,7,8,18,9,14,12,19,20,15,21,4])).then(o=>({default:o.ProjectsPage}))),Gx=h.lazy(()=>$e(()=>import("./McpPage-DWuLyKMn.js"),__vite__mapDeps([22,1,2,3,5,6,7,8,12])).then(o=>({default:o.McpPage}))),Ix=h.lazy(()=>$e(()=>import("./SettingsLayout-CVWegGEj.js"),__vite__mapDeps([23,1,2,3,5,6,7,8])).then(o=>({default:o.SettingsLayout}))),zp=h.lazy(()=>$e(()=>import("./GeneralSettingsPage-CvpPve04.js"),__vite__mapDeps([24,1,2,3,6,7,5,8])).then(o=>({default:o.GeneralSettingsPage}))),Kx=h.lazy(()=>$e(()=>import("./VersionSettingsPage-DWDybVFM.js"),__vite__mapDeps([25,1,2,3,26,5,6,7,8,14])).then(o=>({default:o.VersionSettingsPage}))),Yx=h.lazy(()=>$e(()=>import("./MemorySettingsPage-B2rZ5v2s.js"),__vite__mapDeps([27,1,2,3,5,6,7,8])).then(o=>({default:o.MemorySettingsPage}))),Qx=h.lazy(()=>$e(()=>import("./SubagentsPage-BdvtKNca.js"),__vite__mapDeps([28,1,2,3,12,21,5,6,7,8,15,18,16])).then(o=>({default:o.SubagentsPage}))),Xx=h.lazy(()=>$e(()=>import("./McpAdminSettingsPage-scE09egp.js"),__vite__mapDeps([29,1,2,3,5,6,7,8])).then(o=>({default:o.McpAdminSettingsPage}))),Zx=h.lazy(()=>$e(()=>import("./CommandsPage-ChlY1Ohp.js"),__vite__mapDeps([30,1,2,3,12,19,5,6,7,8,20,15,18,16])).then(o=>({default:o.CommandsPage}))),$x=h.lazy(()=>$e(()=>import("./SkillsPage-CfAdPMsi.js"),__vite__mapDeps([31,1,2,3,12,5,6,7,8,15,32,33,16])).then(o=>({default:o.SkillsPage}))),Jx=h.lazy(()=>$e(()=>import("./PluginsPage-GYreFLBB.js"),__vite__mapDeps([34,1,2,3,5,6,7,8,32,33])).then(o=>({default:o.PluginsPage}))),Wx=h.lazy(()=>$e(()=>import("./ScheduledTasksPage-Bgr8ftPg.js"),__vite__mapDeps([35,1,2,3,12,5,6,7,8,9,4,26])).then(o=>({default:o.ScheduledTasksPage}))),ew=h.lazy(()=>$e(()=>import("./ChatPage-BwU3MUke.js").then(o=>o.bC),__vite__mapDeps([36,1,2,3,5,6,7,8,9,10,19,26,33,15,14,13,37])).then(o=>({default:o.ChatPage}))),tw=h.lazy(()=>$e(()=>import("./LandingPage-G7KhCJIr.js"),__vite__mapDeps([38,1,2,3,6,7,5,8])).then(o=>({default:o.default}))),aw=h.lazy(()=>$e(()=>import("./LoginPage-xzXP3VG8.js"),__vite__mapDeps([39,1,2,3,7,6,5,8])).then(o=>({default:o.LoginPage}))),nw=h.lazy(()=>$e(()=>import("./ToastTestPage-Dp-QXXOR.js"),__vite__mapDeps([40,1,2,3,5,6,7,8])).then(o=>({default:o.ToastTestPage}))),lw=()=>u.jsx("div",{className:"flex items-center justify-center h-64",children:u.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900"})}),ow=new Dv({defaultOptions:{queries:{refetchOnWindowFocus:!1,retry:1}}}),iw=()=>(h.useEffect(()=>{(()=>{const c=localStorage.getItem("theme")||"auto";if(c==="dark")document.documentElement.classList.add("dark");else if(c==="light")document.documentElement.classList.remove("dark");else{const s=window.matchMedia("(prefers-color-scheme: dark)");s.matches?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark");const r=f=>{localStorage.getItem("theme")==="auto"&&(f.matches?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark"))};return s.addEventListener("change",r),()=>s.removeEventListener("change",r)}})()},[]),u.jsx(O0,{children:u.jsx(h.Suspense,{fallback:u.jsx(lw,{}),children:u.jsxs(u0,{children:[u.jsx(Fe,{path:"/",element:u.jsx(tw,{})}),u.jsx(Fe,{path:"/login",element:u.jsx(aw,{})}),u.jsx(Fe,{path:"/chat/:agentId",element:u.jsx(Gt,{children:u.jsx(ew,{})})}),u.jsx(Fe,{path:"/dashboard",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx(Hx,{})})})}),u.jsx(Fe,{path:"/agents",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx(qx,{})})})}),u.jsx(Fe,{path:"/projects",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx(Vx,{})})})}),u.jsx(Fe,{path:"/mcp",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx(Gx,{})})})}),u.jsx(Fe,{path:"/skills",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx($x,{})})})}),u.jsx(Fe,{path:"/plugins",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx(Jx,{})})})}),u.jsx(Fe,{path:"/scheduled-tasks",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx(Wx,{})})})}),u.jsxs(Fe,{path:"/settings",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx(Ix,{})})}),children:[u.jsx(Fe,{index:!0,element:u.jsx(zp,{})}),u.jsx(Fe,{path:"general",element:u.jsx(zp,{})}),u.jsx(Fe,{path:"suppliers",element:u.jsx(Kx,{})}),u.jsx(Fe,{path:"memory",element:u.jsx(Yx,{})}),u.jsx(Fe,{path:"commands",element:u.jsx(Zx,{})}),u.jsx(Fe,{path:"subagents",element:u.jsx(Qx,{})}),u.jsx(Fe,{path:"mcp-admin",element:u.jsx(Xx,{})})]}),u.jsx(Fe,{path:"/toast-test",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx(nw,{})})})}),u.jsx(Fe,{path:"/discord",element:u.jsx(Bx,{url:"https://discord.gg/6uYsrr66"})}),u.jsx(Fe,{path:"*",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx("div",{className:"p-4 text-center",children:"Page not found"})})})})]})})}));function sw(){return u.jsx(Rv,{client:ow,children:u.jsxs(eS,{children:[u.jsx(iw,{}),u.jsx(Fx,{})]})})}const{slice:rw,forEach:cw}=[];function uw(o){return cw.call(rw.call(arguments,1),c=>{if(c)for(const s in c)o[s]===void 0&&(o[s]=c[s])}),o}function dw(o){return typeof o!="string"?!1:[/<\s*script.*?>/i,/<\s*\/\s*script\s*>/i,/<\s*img.*?on\w+\s*=/i,/<\s*\w+\s*on\w+\s*=.*?>/i,/javascript\s*:/i,/vbscript\s*:/i,/expression\s*\(/i,/eval\s*\(/i,/alert\s*\(/i,/document\.cookie/i,/document\.write\s*\(/i,/window\.location/i,/innerHTML/i].some(s=>s.test(o))}const Lp=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,fw=function(o,c){const r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{path:"/"},f=encodeURIComponent(c);let m=`${o}=${f}`;if(r.maxAge>0){const y=r.maxAge-0;if(Number.isNaN(y))throw new Error("maxAge should be a Number");m+=`; Max-Age=${Math.floor(y)}`}if(r.domain){if(!Lp.test(r.domain))throw new TypeError("option domain is invalid");m+=`; Domain=${r.domain}`}if(r.path){if(!Lp.test(r.path))throw new TypeError("option path is invalid");m+=`; Path=${r.path}`}if(r.expires){if(typeof r.expires.toUTCString!="function")throw new TypeError("option expires is invalid");m+=`; Expires=${r.expires.toUTCString()}`}if(r.httpOnly&&(m+="; HttpOnly"),r.secure&&(m+="; Secure"),r.sameSite)switch(typeof r.sameSite=="string"?r.sameSite.toLowerCase():r.sameSite){case!0:m+="; SameSite=Strict";break;case"lax":m+="; SameSite=Lax";break;case"strict":m+="; SameSite=Strict";break;case"none":m+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}return r.partitioned&&(m+="; Partitioned"),m},Up={create(o,c,s,r){let f=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{path:"/",sameSite:"strict"};s&&(f.expires=new Date,f.expires.setTime(f.expires.getTime()+s*60*1e3)),r&&(f.domain=r),document.cookie=fw(o,c,f)},read(o){const c=`${o}=`,s=document.cookie.split(";");for(let r=0;r<s.length;r++){let f=s[r];for(;f.charAt(0)===" ";)f=f.substring(1,f.length);if(f.indexOf(c)===0)return f.substring(c.length,f.length)}return null},remove(o,c){this.create(o,"",-1,c)}};var mw={name:"cookie",lookup(o){let{lookupCookie:c}=o;if(c&&typeof document<"u")return Up.read(c)||void 0},cacheUserLanguage(o,c){let{lookupCookie:s,cookieMinutes:r,cookieDomain:f,cookieOptions:m}=c;s&&typeof document<"u"&&Up.create(s,o,r,f,m)}},pw={name:"querystring",lookup(o){let{lookupQuerystring:c}=o,s;if(typeof window<"u"){let{search:r}=window.location;!window.location.search&&window.location.hash?.indexOf("?")>-1&&(r=window.location.hash.substring(window.location.hash.indexOf("?")));const m=r.substring(1).split("&");for(let y=0;y<m.length;y++){const b=m[y].indexOf("=");b>0&&m[y].substring(0,b)===c&&(s=m[y].substring(b+1))}}return s}},gw={name:"hash",lookup(o){let{lookupHash:c,lookupFromHashIndex:s}=o,r;if(typeof window<"u"){const{hash:f}=window.location;if(f&&f.length>2){const m=f.substring(1);if(c){const y=m.split("&");for(let b=0;b<y.length;b++){const v=y[b].indexOf("=");v>0&&y[b].substring(0,v)===c&&(r=y[b].substring(v+1))}}if(r)return r;if(!r&&s>-1){const y=f.match(/\/([a-zA-Z-]*)/g);return Array.isArray(y)?y[typeof s=="number"?s:0]?.replace("/",""):void 0}}}return r}};let dl=null;const _p=()=>{if(dl!==null)return dl;try{if(dl=typeof window<"u"&&window.localStorage!==null,!dl)return!1;const o="i18next.translate.boo";window.localStorage.setItem(o,"foo"),window.localStorage.removeItem(o)}catch{dl=!1}return dl};var hw={name:"localStorage",lookup(o){let{lookupLocalStorage:c}=o;if(c&&_p())return window.localStorage.getItem(c)||void 0},cacheUserLanguage(o,c){let{lookupLocalStorage:s}=c;s&&_p()&&window.localStorage.setItem(s,o)}};let fl=null;const Fp=()=>{if(fl!==null)return fl;try{if(fl=typeof window<"u"&&window.sessionStorage!==null,!fl)return!1;const o="i18next.translate.boo";window.sessionStorage.setItem(o,"foo"),window.sessionStorage.removeItem(o)}catch{fl=!1}return fl};var yw={name:"sessionStorage",lookup(o){let{lookupSessionStorage:c}=o;if(c&&Fp())return window.sessionStorage.getItem(c)||void 0},cacheUserLanguage(o,c){let{lookupSessionStorage:s}=c;s&&Fp()&&window.sessionStorage.setItem(s,o)}},vw={name:"navigator",lookup(o){const c=[];if(typeof navigator<"u"){const{languages:s,userLanguage:r,language:f}=navigator;if(s)for(let m=0;m<s.length;m++)c.push(s[m]);r&&c.push(r),f&&c.push(f)}return c.length>0?c:void 0}},bw={name:"htmlTag",lookup(o){let{htmlTag:c}=o,s;const r=c||(typeof document<"u"?document.documentElement:null);return r&&typeof r.getAttribute=="function"&&(s=r.getAttribute("lang")),s}},Sw={name:"path",lookup(o){let{lookupFromPathIndex:c}=o;if(typeof window>"u")return;const s=window.location.pathname.match(/\/([a-zA-Z-]*)/g);return Array.isArray(s)?s[typeof c=="number"?c:0]?.replace("/",""):void 0}},xw={name:"subdomain",lookup(o){let{lookupFromSubdomainIndex:c}=o;const s=typeof c=="number"?c+1:1,r=typeof window<"u"&&window.location?.hostname?.match(/^(\w{2,5})\.(([a-z0-9-]{1,63}\.[a-z]{2,6})|localhost)/i);if(r)return r[s]}};let Jg=!1;try{document.cookie,Jg=!0}catch{}const Wg=["querystring","cookie","localStorage","sessionStorage","navigator","htmlTag"];Jg||Wg.splice(1,1);const ww=()=>({order:Wg,lookupQuerystring:"lng",lookupCookie:"i18next",lookupLocalStorage:"i18nextLng",lookupSessionStorage:"i18nextLng",caches:["localStorage"],excludeCacheFor:["cimode"],convertDetectedLanguage:o=>o});class eh{constructor(c){let s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.type="languageDetector",this.detectors={},this.init(c,s)}init(){let c=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{languageUtils:{}},s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=c,this.options=uw(s,this.options||{},ww()),typeof this.options.convertDetectedLanguage=="string"&&this.options.convertDetectedLanguage.indexOf("15897")>-1&&(this.options.convertDetectedLanguage=f=>f.replace("-","_")),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=r,this.addDetector(mw),this.addDetector(pw),this.addDetector(hw),this.addDetector(yw),this.addDetector(vw),this.addDetector(bw),this.addDetector(Sw),this.addDetector(xw),this.addDetector(gw)}addDetector(c){return this.detectors[c.name]=c,this}detect(){let c=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.order,s=[];return c.forEach(r=>{if(this.detectors[r]){let f=this.detectors[r].lookup(this.options);f&&typeof f=="string"&&(f=[f]),f&&(s=s.concat(f))}}),s=s.filter(r=>r!=null&&!dw(r)).map(r=>this.options.convertDetectedLanguage(r)),this.services&&this.services.languageUtils&&this.services.languageUtils.getBestMatchFromCodes?s:s.length>0?s[0]:null}cacheUserLanguage(c){let s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.caches;s&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(c)>-1||s.forEach(r=>{this.detectors[r]&&this.detectors[r].cacheUserLanguage(c,this.options)}))}}eh.type="languageDetector";const Cw={create:"创建",delete:"删除",save:"保存",cancel:"取消",confirm:"确定",edit:"编辑",close:"关闭",back:"返回",next:"下一步",refresh:"刷新",submit:"提交",reset:"重置",search:"搜索",add:"添加",remove:"移除",update:"更新",upload:"上传",download:"下载",export:"导出",import:"导入",copy:"复制",paste:"粘贴",cut:"剪切"},Aw={loading:"加载中...",processing:"处理中...",success:"操作成功",failed:"操作失败",saving:"保存中...",deleting:"删除中...",uploading:"上传中...",downloading:"下载中...",completed:"已完成",pending:"待处理",active:"活跃",inactive:"未激活",enabled:"已启用",disabled:"已禁用"},Tw={yes:"是",no:"否",ok:"好的",all:"全部",none:"无",or:"或",and:"和",more:"更多",less:"更少",unknown:"未知",optional:"可选",required:"必填",default:"默认",custom:"自定义"},kw="路径",Ew="创建时间",Nw={init:{description:""},clear:{description:""},compact:{description:""},agents:{description:""},settings:{description:""},help:{description:""}},Mw={sendImage:""},jw={chinese:"",english:""},Dw={pageTitle:"",metaDescription:"",nav:{enterWorkspace:""},hero:{title:"",subtitle:"",description:"",startNow:"",viewSource:""},features:{title:"",subtitle:"",modernWeb:{title:"",description:""},multiModel:{title:"",description:""},agentSystem:{title:"",description:""},fileManagement:{title:"",description:""},professionalTools:{title:"",description:""},secureReliable:{title:"",description:""}},quickStart:{title:"",subtitle:"",endUserTitle:"",endUserDescription:"",developerTitle:"",developerDescription:""},cta:{title:"",subtitle:"",start:""},footer:{description:"",copyright:"",product:"",workspace:"",sourceCode:"",releases:"",support:"",documentation:"",issues:"",discussions:""}},Rw={actions:Cw,status:Aw,common:Tw,path:kw,createdAt:Ew,systemCommands:Nw,agentChat:Mw,languageSwitcher:jw,landing:Dw},Pw={backToHome:"返回首页",documentation:"文档目录"},Ow={dashboard:"首页",projects:"项目管理",agents:"Agent管理",scheduledTasks:"定时任务",skills:"技能管理",plugins:"插件管理",mcp:"MCP服务",commands:"自定义命令",subagents:"Subagent管理",settings:"系统管理",settingsSubmenu:{general:"外观设置",suppliers:"供应商管理",memory:"全局记忆",mcpAdmin:"MCP Admin",cloudflareTunnel:"外网访问"}},zw={version:"版本 {{version}}",apiServerStatus:{connected:"API服务器设置 - 连接正常",disconnected:"API服务器设置 - 连接失败",checking:"API服务器设置 - 检查中..."},serviceStatus:{normal:"服务正常",unavailable:"服务不可用",checking:"检查中..."}},Lw={title:"登录",subtitle:"请输入密码以继续",passwordLabel:"密码",passwordPlaceholder:"请输入密码",loginButton:"登录",loggingIn:"登录中...",footer:"如果您忘记了密码,请联系管理员",manageServices:"管理后端服务",serviceName:"服务名称",serviceUrl:"服务地址",current:"当前",testConnection:"测试连接",switchTo:"切换到此服务",edit:"编辑",delete:"删除",save:"保存",cancel:"取消",add:"添加",addService:"添加新服务",rerunOnboarding:"重新运行配置向导",checkingConnection:"正在检查连接...",autoLoggingIn:"正在自动登录...",noPasswordRequired:"此服务未设置密码,可直接登录",enterSystem:"进入系统"},Uw={pageTitle:"AgentStudio - Agent 工作台 | Claude Agent SDK 驱动",metaDescription:"Agent for Work - 本地的 Agent 工作台,由 Claude Agent SDK 强力驱动。数据完全私有,支持定时任务、A2A 协议、自定义 Agent。",nav:{enterWorkspace:"进入工作台",docs:"文档"},hero:{badge:"由 Claude Agent SDK 强力驱动",title:"Agent for Work",subtitle:"本地的 Agent 工作台",description:"真正运行在你电脑上的私人 AI 助理。数据完全私有,安全可控,支持定时任务自动化和多 Agent 协作。",startNow:"开始使用",viewSource:"查看源码",copyCommand:"复制命令",installHint:"复制下面的命令到终端运行,即可开始使用",copy:"复制",copied:"已复制"},preview:{title:"产品预览",subtitle:"直观的 Web 界面,让 AI 工作更高效",chatAlt:"聊天界面截图",chatCaption:"聊天界面 - 与 Agent 对话,可视化展示工具调用",mcpAlt:"MCP 服务管理截图",mcpCaption:"MCP 服务管理 - 一键导入 Claude Code 配置"},features:{title:"核心特性",subtitle:"为 AI 工作自动化设计的完整解决方案",localWorkspace:{title:"本地的 Agent 工作台",point1:"运行在你的电脑上,真正意义的本地工作台",point2:"数据完全私有,不上传云端",point3:"文件、代码、对话记录都在掌控之中"},webExperience:{title:"Web 版交互体验",point1:"告别命令行,拥抱友好的 Web 界面",point2:"工具调用可视化呈现,对话体验更鲜活",point3:"内置文件浏览器,对话同时查看项目文件"},sdkFeatures:{title:"Claude Agent SDK 全家桶",skills:"技能系统",commands:"自定义命令",plugins:"插件生态",memory:"项目记忆",subagent:"子 Agent",multiModel:"多模型支持",anthropicCompat:"支持 Claude、GLM、DeepSeek、Kimi K2、MiniMax 等兼容 Anthropic 接口规范的模型"}},scheduler:{badge:"定时任务调度",title:"让 Agent 按计划自动执行",description:"真正实现 AI 工作自动化!设定时间规则,Agent 将自动完成重复性工作,解放你的时间。",scenariosTitle:"典型应用场景",scenario1:{title:"每日进度日报",desc:"每天早上 9 点,自动生成项目进度日报"},scenario2:{title:"代码自动审查",desc:"每 2 小时检查代码仓库,自动提交审查意见"},scenario3:{title:"周会纪要整理",desc:"每周五自动整理本周会议纪要并归档"},scenario4:{title:"月度数据分析",desc:"每月 1 号自动生成业务数据分析报告"}},a2a:{badge:"A2A 协议",title:"智能体协作网络",description:"让多个 Agent 形成协同工作的网络。本地 Agent、远程 Agent 互联互通,构建你的私人 AI 团队。",scenariosTitle:"典型应用场景",scenario1:{title:"秘书 Agent 调度",desc:"一个秘书 Agent 统一接收任务,自动调度其他项目 Agent 执行具体工作"},scenario2:{title:"本地 ↔ 远程协作",desc:"本地电脑与远程开发机上的 Agent 互相通讯,协同完成任务"},scenario3:{title:"移动端随时访问",desc:"通过移动通讯端与本地 Agent 交互,随时随地工作(内测中)"}},customAgent:{badge:"自定义 Agent",title:"打造你的专属 Agent",description:"无需编写代码,通过界面配置即可定制专属 Agent。内置 Claude Code Agent 开箱即用,满足各种工作场景。",example1:"PPT 制作 Agent",example2:"秘书 Agent",example3:"文档写作 Agent",example4:"代码审查 Agent"},comparison:{title:"AgentStudio vs Claude Code",subtitle:"同样的 Claude Agent SDK,更友好的使用体验",dimension:"对比维度",interface:"交互形态",webInterface:"界面",cli:"命令行 (CLI)",targetUsers:"目标用户",everyone:"所有人",developers:"主要开发者",toolDisplay:"工具展示",visual:"可视化呈现",textOnly:"纯文本",fileBrowser:"文件浏览器",agentCustom:"Agent 定制",scheduler:"定时任务",a2a:"A2A 协议",mobileAccess:"移动端访问",beta:"内测中"},cta:{title:"准备好开始你的 AI 工作自动化了吗?",subtitle:"一行命令,即刻启动你的本地 Agent 工作台",start:"开始使用"},footer:{description:"Agent for Work - 本地的 Agent 工作台,由 Claude Agent SDK 强力驱动。",copyright:"© 2026 AgentStudio. Apache 2.0 License.",product:"产品",workspace:"工作台",sourceCode:"源码",releases:"发布版本",support:"支持",documentation:"文档",issues:"问题反馈",discussions:"Discord 社区"}},_w={title:"Agent管理",subtitle:"管理专门的 AI 代理",createButton:"创建助手",editButton:"编辑助手",deleteButton:"删除助手",enableButton:"启用助手",disableButton:"禁用助手",useButton:"使用",startUsingButton:"开始使用助手",noAgents:"暂无助手",noAgentsSearch:"未找到匹配的助手",searchPlaceholder:"搜索助手...",createFirst:"创建你的第一个智能助手",adjustSearch:"尝试调整搜索条件",loading:"正在加载智能助手...",filter:{all:"全部",enabled:"已启用",disabled:"已禁用"},table:{agent:"智能助手",type:"类型",config:"配置",tools:"工具",status:"状态",actions:"操作",maxTurns:"最大轮次",unlimited:"不限制",permission:"权限",toolsCount:"{{count}} 个工具"},form:{create:"创建助手",edit:"编辑助手",name:"名称",description:"描述",maxTurns:"最大轮次",maxTurnsPlaceholder:"不限制",maxTurnsError:"最大轮次必须在1-100之间",maxTurnsExceeded:"最大轮次不能超过{{maximum}}",permissionMode:"权限模式",icon:"图标",primaryColor:"主题颜色",enabledTools:"启用的工具",selectTools:"选择工具",toolsRegular:"常规工具 {{count}} 个",toolsMcp:"MCP工具 {{count}} 个",systemPrompt:"系统提示词",systemPromptPlaceholder:"输入助手的系统提示词...",nameRequired:"请填写助手名称",save:"保存",cancel:"取消"},permissions:{default:"默认",acceptEdits:"自动接受编辑",bypassPermissions:"绕过权限检查",plan:"规划模式"},status:{enabled:"已启用",disabled:"已禁用"},errors:{createFailed:"创建失败,请重试。",saveFailed:"保存失败,请重试。",deleteFailed:"删除失败,请重试。",toggleFailed:"操作失败,请重试。",builtinCannotDelete:"内置助手无法删除,但可以禁用。"},confirmDelete:`确定要删除助手"{{name}}"吗?
83
+ pnpm run dev:backend`,N=async()=>{try{await navigator.clipboard.writeText(R),P(!0),setTimeout(()=>P(!1),2e3)}catch(G){console.error("Failed to copy:",G)}},B=async()=>{if(b){x(!0),D(null);try{const G=`${b}/api/health`,Z=await fetch(G,{method:"GET",headers:{"Content-Type":"application/json"},signal:AbortSignal.timeout(5e3)});D(Z.ok?"success":"error")}catch{D("error")}finally{x(!1)}}},z=async()=>{if(!m.trim()||!b.trim())return;await c(m.trim(),b.trim())&&(y(""),v(""),D(null))};return u.jsxs("div",{className:"space-y-6",children:[s&&u.jsxs("button",{onClick:s,className:"flex items-center space-x-2 text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 transition-colors",children:[u.jsx(sb,{className:"w-4 h-4"}),u.jsx("span",{children:f("backend.actions.back")})]}),r&&u.jsx("div",{className:"bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4",children:u.jsxs("div",{className:"flex items-start space-x-3",children:[u.jsx(rb,{className:"w-5 h-5 text-yellow-600 dark:text-yellow-400 mt-0.5 flex-shrink-0"}),u.jsxs("div",{children:[u.jsx("h4",{className:"font-medium text-yellow-900 dark:text-yellow-200 mb-1",children:f("backend.notFound.title")}),u.jsx("p",{className:"text-sm text-yellow-800 dark:text-yellow-300",children:f("backend.notFound.description")})]})]})}),u.jsxs("div",{children:[u.jsx("h4",{className:"font-medium text-gray-900 dark:text-white mb-2",children:f("backend.addService.title")}),u.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-400",children:f("backend.addService.description")})]}),u.jsxs("div",{className:"space-y-3",children:[u.jsxs("div",{children:[u.jsx("label",{className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1",children:f("backend.addService.serviceName")}),u.jsx("input",{type:"text",value:m,onChange:G=>y(G.target.value),placeholder:f("backend.addService.serviceNamePlaceholder"),className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-white"})]}),u.jsxs("div",{children:[u.jsx("label",{className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1",children:f("backend.addService.serviceUrl")}),u.jsx("input",{type:"url",value:b,onChange:G=>v(G.target.value),placeholder:"https://api.example.com",className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-white"})]})]}),u.jsxs("div",{className:"flex space-x-3",children:[u.jsx("button",{onClick:B,disabled:!b||g,className:"flex-1 flex items-center justify-center space-x-2 px-4 py-2.5 border border-gray-300 dark:border-gray-600 rounded-lg text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:g?u.jsxs(u.Fragment,{children:[u.jsx(qp,{className:"w-4 h-4 animate-spin"}),u.jsx("span",{children:f("backend.addService.testing")})]}):C==="success"?u.jsxs(u.Fragment,{children:[u.jsx(It,{className:"w-4 h-4 text-green-500"}),u.jsx("span",{children:f("backend.addService.success")})]}):C==="error"?u.jsxs(u.Fragment,{children:[u.jsx(Wi,{className:"w-4 h-4 text-red-500"}),u.jsx("span",{children:f("backend.addService.failed")})]}):u.jsxs(u.Fragment,{children:[u.jsx(up,{className:"w-4 h-4"}),u.jsx("span",{children:f("backend.addService.testConnection")})]})}),u.jsx("button",{onClick:z,disabled:!m||!b||C!=="success",className:"flex-1 px-4 py-2.5 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors disabled:bg-gray-400 disabled:cursor-not-allowed",children:f("backend.addService.addButton")})]}),u.jsxs("div",{className:"bg-gray-50 dark:bg-gray-800/50 border border-gray-200 dark:border-gray-700 rounded-lg p-4 space-y-3",children:[u.jsxs("div",{className:"flex items-center space-x-2",children:[u.jsx(cb,{className:"w-4 h-4 text-blue-600 dark:text-blue-400"}),u.jsx("h5",{className:"font-medium text-gray-900 dark:text-white text-sm",children:f("backend.addService.installGuide.title")})]}),u.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-400",children:f("backend.addService.installGuide.description")}),u.jsxs("div",{className:"bg-gray-900 dark:bg-gray-950 rounded-lg p-3 relative",children:[u.jsx("pre",{className:"text-xs text-green-400 font-mono whitespace-pre-wrap",children:R}),u.jsx("button",{onClick:N,className:"absolute top-2 right-2 p-1.5 bg-gray-800 hover:bg-gray-700 rounded text-gray-400 hover:text-white transition-colors",title:f("backend.addService.installGuide.copyCommands"),children:H?u.jsx(It,{className:"w-3.5 h-3.5 text-green-400"}):u.jsx(dp,{className:"w-3.5 h-3.5"})})]}),u.jsxs("div",{className:"flex space-x-2",children:[u.jsxs("button",{onClick:N,className:"flex-1 flex items-center justify-center space-x-1.5 px-3 py-1.5 border border-gray-300 dark:border-gray-600 rounded text-xs text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors",children:[u.jsx(dp,{className:"w-3.5 h-3.5"}),u.jsx("span",{children:f("backend.addService.installGuide.copyCommands")})]}),u.jsxs("a",{href:"https://github.com/okguitar/agentstudio?tab=readme-ov-file#-quick-start",target:"_blank",rel:"noopener noreferrer",className:"flex-1 flex items-center justify-center space-x-1.5 px-3 py-1.5 border border-gray-300 dark:border-gray-600 rounded text-xs text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors",children:[u.jsx(ub,{className:"w-3.5 h-3.5"}),u.jsx("span",{children:f("backend.addService.installGuide.viewDocs")})]})]})]}),o&&u.jsxs("button",{onClick:o,className:"w-full flex items-center justify-center space-x-2 px-4 py-2.5 border border-gray-300 dark:border-gray-600 rounded-lg text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors",children:[u.jsx(up,{className:"w-4 h-4"}),u.jsx("span",{children:f("backend.addService.retry")})]})]})},rS=({serviceName:o,serviceUrl:c,onGoToLogin:s,onManageServices:r})=>{const{t:f}=Ea("onboarding");return u.jsxs("div",{className:"text-center space-y-6",children:[u.jsx("div",{className:"flex justify-center",children:u.jsx("div",{className:"p-4 bg-green-100 dark:bg-green-900/30 rounded-full",children:u.jsx(It,{className:"w-12 h-12 text-green-600 dark:text-green-400"})})}),u.jsxs("div",{children:[u.jsx("h2",{className:"text-2xl font-bold text-gray-900 dark:text-white mb-2",children:f("backend.complete.title")}),u.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:f("backend.complete.description")})]}),u.jsx("div",{className:"bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 rounded-lg p-4 text-left",children:u.jsxs("div",{className:"space-y-2",children:[u.jsxs("div",{children:[u.jsx("p",{className:"text-xs text-gray-600 dark:text-gray-400",children:f("backend.complete.serviceName")}),u.jsx("p",{className:"text-sm font-medium text-gray-900 dark:text-white",children:o})]}),u.jsxs("div",{children:[u.jsx("p",{className:"text-xs text-gray-600 dark:text-gray-400",children:f("backend.complete.serviceUrl")}),u.jsx("p",{className:"text-sm font-mono text-gray-900 dark:text-white",children:c})]})]})}),u.jsxs("div",{className:"bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg p-4 text-left",children:[u.jsx("p",{className:"text-sm font-medium text-blue-900 dark:text-blue-200 mb-2",children:f("backend.complete.nextSteps.title")}),u.jsx("p",{className:"text-sm text-blue-800 dark:text-blue-300",children:f("backend.complete.nextSteps.description")})]}),u.jsxs("div",{className:"space-y-3",children:[u.jsxs("button",{onClick:s,className:"w-full flex items-center justify-center space-x-2 px-4 py-3 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors",children:[u.jsx(db,{className:"w-4 h-4"}),u.jsx("span",{children:f("backend.complete.goToLogin")})]}),u.jsxs("button",{onClick:r,className:"w-full flex items-center justify-center space-x-2 px-4 py-3 border border-gray-300 dark:border-gray-600 rounded-lg text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors",children:[u.jsx(ts,{className:"w-4 h-4"}),u.jsx("span",{children:f("backend.complete.manageServices")})]})]})]})},cS=({onComplete:o})=>{const{t:c}=Ea("onboarding"),s=xo(),{services:r,addService:f,switchService:m}=Co(),[y,b]=h.useState("welcome"),[v,g]=h.useState(null),[x,C]=h.useState(!1);h.useEffect(()=>{y==="detecting"&&D()},[y]);const D=async()=>{const F=["http://127.0.0.1:4936","http://localhost:4936"];for(const Q of F)try{if((await fetch(`${Q}/api/health`,{method:"GET",headers:{"Content-Type":"application/json"},signal:AbortSignal.timeout(3e3)})).ok){g({name:"Local Development Server",url:Q}),b("found");return}}catch{}b("not-found")},H=()=>{if(!v)return;const F=r.find(Q=>Q.url===v.url);if(F)m(F.id);else{const Q=f({name:v.name,url:v.url});m(Q.id)}Ec(!1),b("complete")},P=()=>{b("add-service")},R=()=>{b("detecting")},N=()=>{b("found")},B=async(F,Q)=>{try{const le=f({name:F,url:Q});return m(le.id),g({name:F,url:Q}),Ec(!1),b("complete"),!0}catch(le){return console.error("Failed to add remote service:",le),!1}},z=()=>{C(!0)},G=()=>{C(!1)},Z=()=>{Ec(!0),o()},K=()=>{o()},V=()=>{o(),s("/login")},_=()=>{switch(y){case"welcome":return u.jsx(oS,{onNext:()=>b("detecting"),onSkip:z});case"detecting":return u.jsx(iS,{});case"found":return v?u.jsx(sS,{serviceUrl:v.url,onUseService:H,onAddOther:P}):null;case"not-found":return u.jsx(Ap,{onRetry:R,onAddRemote:B,showWarning:!0});case"add-service":return u.jsx(Ap,{onAddRemote:B,onBack:N,showWarning:!1});case"complete":return v?u.jsx(rS,{serviceName:v.name,serviceUrl:v.url,onGoToLogin:K,onManageServices:V}):null;default:return null}};return u.jsxs(u.Fragment,{children:[u.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4",children:u.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-xl shadow-xl border border-gray-200 dark:border-gray-700 p-6 max-w-2xl w-full max-h-[90vh] overflow-y-auto",children:[y==="welcome"&&u.jsx("button",{onClick:z,className:"absolute top-4 right-4 p-2 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-colors","aria-label":"Close",children:u.jsx(ho,{className:"w-5 h-5"})}),_()]})}),x&&u.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-60 flex items-center justify-center z-[60] p-4",children:u.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-xl shadow-xl border border-gray-200 dark:border-gray-700 p-6 max-w-md w-full",children:[u.jsxs("div",{className:"flex items-start space-x-3 mb-4",children:[u.jsx(Hp,{className:"w-6 h-6 text-yellow-600 dark:text-yellow-400 flex-shrink-0 mt-0.5"}),u.jsxs("div",{children:[u.jsx("h3",{className:"text-lg font-bold text-gray-900 dark:text-white mb-2",children:c("backend.skipConfirm.title")}),u.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-400 mb-3",children:c("backend.skipConfirm.warning")}),u.jsxs("ul",{className:"text-sm text-gray-600 dark:text-gray-400 space-y-1 mb-3 list-disc list-inside",children:[u.jsx("li",{children:c("backend.skipConfirm.consequences.noAi")}),u.jsx("li",{children:c("backend.skipConfirm.consequences.noStorage")}),u.jsx("li",{children:c("backend.skipConfirm.consequences.noFeatures")})]}),u.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-400 mb-3",children:c("backend.skipConfirm.reconfigure")}),u.jsxs("ul",{className:"text-sm text-gray-600 dark:text-gray-400 space-y-1 list-disc list-inside",children:[u.jsx("li",{children:c("backend.skipConfirm.locations.loginPage")}),u.jsx("li",{children:c("backend.skipConfirm.locations.settingsPage")})]})]})]}),u.jsxs("div",{className:"flex space-x-3",children:[u.jsx("button",{onClick:G,className:"flex-1 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors",children:c("backend.skipConfirm.back")}),u.jsx("button",{onClick:Z,className:"flex-1 px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors",children:c("backend.skipConfirm.skip")})]})]})})]})};function Gt({children:o}){const{isAuthenticated:c,verifyToken:s}=nS(),{getToken:r}=Ic(),{currentService:f}=Co(),m=Yt(),[y,b]=h.useState(!0),[v,g]=h.useState(!1),[x,C]=h.useState(!1),D=h.useRef(null),H=h.useRef(0);h.useEffect(()=>{lS().completed||(C(!0),b(!1))},[]),h.useEffect(()=>{(async()=>{if(x)return;const N=f?.id||null,B=N?r(N):null;if(!B){g(!1),b(!1);return}if(Dc(B)){g(!1),b(!1);return}const z=Date.now(),G=z-300*1e3;if(!(N!==D.current||H.current===0||Qi(B)||H.current<G)&&!y){g(!0);return}if(b(!0),D.current=N,H.current=z,c){const K=await s();g(K)}else g(!1);b(!1)})()},[f?.id,x,c]);const P=()=>{C(!1),b(!0)};return x?u.jsx(cS,{onComplete:P}):y?u.jsx("div",{className:"min-h-screen flex items-center justify-center bg-gray-50 dark:bg-gray-900",children:u.jsxs("div",{className:"text-center",children:[u.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto"}),u.jsx("p",{className:"mt-4 text-gray-600 dark:text-gray-400",children:"Verifying..."})]})}):!c||!v?u.jsx(r0,{to:"/login",state:{from:m},replace:!0}):u.jsx(u.Fragment,{children:o})}function Et(o,c,{checkForDefaultPrevented:s=!0}={}){return function(f){if(o?.(f),s===!1||!f.defaultPrevented)return c?.(f)}}function Tp(o,c){if(typeof o=="function")return o(c);o!=null&&(o.current=c)}function sg(...o){return c=>{let s=!1;const r=o.map(f=>{const m=Tp(f,c);return!s&&typeof m=="function"&&(s=!0),m});if(s)return()=>{for(let f=0;f<r.length;f++){const m=r[f];typeof m=="function"?m():Tp(o[f],null)}}}}function Cn(...o){return h.useCallback(sg(...o),o)}function rg(o,c=[]){let s=[];function r(m,y){const b=h.createContext(y),v=s.length;s=[...s,y];const g=C=>{const{scope:D,children:H,...P}=C,R=D?.[o]?.[v]||b,N=h.useMemo(()=>P,Object.values(P));return u.jsx(R.Provider,{value:N,children:H})};g.displayName=m+"Provider";function x(C,D){const H=D?.[o]?.[v]||b,P=h.useContext(H);if(P)return P;if(y!==void 0)return y;throw new Error(`\`${C}\` must be used within \`${m}\``)}return[g,x]}const f=()=>{const m=s.map(y=>h.createContext(y));return function(b){const v=b?.[o]||m;return h.useMemo(()=>({[`__scope${o}`]:{...b,[o]:v}}),[b,v])}};return f.scopeName=o,[r,uS(f,...c)]}function uS(...o){const c=o[0];if(o.length===1)return c;const s=()=>{const r=o.map(f=>({useScope:f(),scopeName:f.scopeName}));return function(m){const y=r.reduce((b,{useScope:v,scopeName:g})=>{const C=v(m)[`__scope${g}`];return{...b,...C}},{});return h.useMemo(()=>({[`__scope${c.scopeName}`]:y}),[y])}};return s.scopeName=c.scopeName,s}function Uc(o){const c=dS(o),s=h.forwardRef((r,f)=>{const{children:m,...y}=r,b=h.Children.toArray(m),v=b.find(mS);if(v){const g=v.props.children,x=b.map(C=>C===v?h.Children.count(g)>1?h.Children.only(null):h.isValidElement(g)?g.props.children:null:C);return u.jsx(c,{...y,ref:f,children:h.isValidElement(g)?h.cloneElement(g,void 0,x):null})}return u.jsx(c,{...y,ref:f,children:m})});return s.displayName=`${o}.Slot`,s}function dS(o){const c=h.forwardRef((s,r)=>{const{children:f,...m}=s;if(h.isValidElement(f)){const y=gS(f),b=pS(m,f.props);return f.type!==h.Fragment&&(b.ref=r?sg(r,y):y),h.cloneElement(f,b)}return h.Children.count(f)>1?h.Children.only(null):null});return c.displayName=`${o}.SlotClone`,c}var fS=Symbol("radix.slottable");function mS(o){return h.isValidElement(o)&&typeof o.type=="function"&&"__radixId"in o.type&&o.type.__radixId===fS}function pS(o,c){const s={...c};for(const r in c){const f=o[r],m=c[r];/^on[A-Z]/.test(r)?f&&m?s[r]=(...b)=>{const v=m(...b);return f(...b),v}:f&&(s[r]=f):r==="style"?s[r]={...f,...m}:r==="className"&&(s[r]=[f,m].filter(Boolean).join(" "))}return{...o,...s}}function gS(o){let c=Object.getOwnPropertyDescriptor(o.props,"ref")?.get,s=c&&"isReactWarning"in c&&c.isReactWarning;return s?o.ref:(c=Object.getOwnPropertyDescriptor(o,"ref")?.get,s=c&&"isReactWarning"in c&&c.isReactWarning,s?o.props.ref:o.props.ref||o.ref)}function hS(o){const c=o+"CollectionProvider",[s,r]=rg(c),[f,m]=s(c,{collectionRef:{current:null},itemMap:new Map}),y=R=>{const{scope:N,children:B}=R,z=xn.useRef(null),G=xn.useRef(new Map).current;return u.jsx(f,{scope:N,itemMap:G,collectionRef:z,children:B})};y.displayName=c;const b=o+"CollectionSlot",v=Uc(b),g=xn.forwardRef((R,N)=>{const{scope:B,children:z}=R,G=m(b,B),Z=Cn(N,G.collectionRef);return u.jsx(v,{ref:Z,children:z})});g.displayName=b;const x=o+"CollectionItemSlot",C="data-radix-collection-item",D=Uc(x),H=xn.forwardRef((R,N)=>{const{scope:B,children:z,...G}=R,Z=xn.useRef(null),K=Cn(N,Z),V=m(x,B);return xn.useEffect(()=>(V.itemMap.set(Z,{ref:Z,...G}),()=>void V.itemMap.delete(Z))),u.jsx(D,{[C]:"",ref:K,children:z})});H.displayName=x;function P(R){const N=m(o+"CollectionConsumer",R);return xn.useCallback(()=>{const z=N.collectionRef.current;if(!z)return[];const G=Array.from(z.querySelectorAll(`[${C}]`));return Array.from(N.itemMap.values()).sort((V,_)=>G.indexOf(V.ref.current)-G.indexOf(_.ref.current))},[N.collectionRef,N.itemMap])}return[{Provider:y,Slot:g,ItemSlot:H},P,r]}var yS=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],aa=yS.reduce((o,c)=>{const s=Uc(`Primitive.${c}`),r=h.forwardRef((f,m)=>{const{asChild:y,...b}=f,v=y?s:c;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),u.jsx(v,{...b,ref:m})});return r.displayName=`Primitive.${c}`,{...o,[c]:r}},{});function cg(o,c){o&&Wc.flushSync(()=>o.dispatchEvent(c))}function An(o){const c=h.useRef(o);return h.useEffect(()=>{c.current=o}),h.useMemo(()=>(...s)=>c.current?.(...s),[])}function vS(o,c=globalThis?.document){const s=An(o);h.useEffect(()=>{const r=f=>{f.key==="Escape"&&s(f)};return c.addEventListener("keydown",r,{capture:!0}),()=>c.removeEventListener("keydown",r,{capture:!0})},[s,c])}var bS="DismissableLayer",_c="dismissableLayer.update",SS="dismissableLayer.pointerDownOutside",xS="dismissableLayer.focusOutside",kp,ug=h.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),dg=h.forwardRef((o,c)=>{const{disableOutsidePointerEvents:s=!1,onEscapeKeyDown:r,onPointerDownOutside:f,onFocusOutside:m,onInteractOutside:y,onDismiss:b,...v}=o,g=h.useContext(ug),[x,C]=h.useState(null),D=x?.ownerDocument??globalThis?.document,[,H]=h.useState({}),P=Cn(c,_=>C(_)),R=Array.from(g.layers),[N]=[...g.layersWithOutsidePointerEventsDisabled].slice(-1),B=R.indexOf(N),z=x?R.indexOf(x):-1,G=g.layersWithOutsidePointerEventsDisabled.size>0,Z=z>=B,K=CS(_=>{const F=_.target,Q=[...g.branches].some(le=>le.contains(F));!Z||Q||(f?.(_),y?.(_),_.defaultPrevented||b?.())},D),V=AS(_=>{const F=_.target;[...g.branches].some(le=>le.contains(F))||(m?.(_),y?.(_),_.defaultPrevented||b?.())},D);return vS(_=>{z===g.layers.size-1&&(r?.(_),!_.defaultPrevented&&b&&(_.preventDefault(),b()))},D),h.useEffect(()=>{if(x)return s&&(g.layersWithOutsidePointerEventsDisabled.size===0&&(kp=D.body.style.pointerEvents,D.body.style.pointerEvents="none"),g.layersWithOutsidePointerEventsDisabled.add(x)),g.layers.add(x),Ep(),()=>{s&&g.layersWithOutsidePointerEventsDisabled.size===1&&(D.body.style.pointerEvents=kp)}},[x,D,s,g]),h.useEffect(()=>()=>{x&&(g.layers.delete(x),g.layersWithOutsidePointerEventsDisabled.delete(x),Ep())},[x,g]),h.useEffect(()=>{const _=()=>H({});return document.addEventListener(_c,_),()=>document.removeEventListener(_c,_)},[]),u.jsx(aa.div,{...v,ref:P,style:{pointerEvents:G?Z?"auto":"none":void 0,...o.style},onFocusCapture:Et(o.onFocusCapture,V.onFocusCapture),onBlurCapture:Et(o.onBlurCapture,V.onBlurCapture),onPointerDownCapture:Et(o.onPointerDownCapture,K.onPointerDownCapture)})});dg.displayName=bS;var wS="DismissableLayerBranch",fg=h.forwardRef((o,c)=>{const s=h.useContext(ug),r=h.useRef(null),f=Cn(c,r);return h.useEffect(()=>{const m=r.current;if(m)return s.branches.add(m),()=>{s.branches.delete(m)}},[s.branches]),u.jsx(aa.div,{...o,ref:f})});fg.displayName=wS;function CS(o,c=globalThis?.document){const s=An(o),r=h.useRef(!1),f=h.useRef(()=>{});return h.useEffect(()=>{const m=b=>{if(b.target&&!r.current){let v=function(){mg(SS,s,g,{discrete:!0})};const g={originalEvent:b};b.pointerType==="touch"?(c.removeEventListener("click",f.current),f.current=v,c.addEventListener("click",f.current,{once:!0})):v()}else c.removeEventListener("click",f.current);r.current=!1},y=window.setTimeout(()=>{c.addEventListener("pointerdown",m)},0);return()=>{window.clearTimeout(y),c.removeEventListener("pointerdown",m),c.removeEventListener("click",f.current)}},[c,s]),{onPointerDownCapture:()=>r.current=!0}}function AS(o,c=globalThis?.document){const s=An(o),r=h.useRef(!1);return h.useEffect(()=>{const f=m=>{m.target&&!r.current&&mg(xS,s,{originalEvent:m},{discrete:!1})};return c.addEventListener("focusin",f),()=>c.removeEventListener("focusin",f)},[c,s]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function Ep(){const o=new CustomEvent(_c);document.dispatchEvent(o)}function mg(o,c,s,{discrete:r}){const f=s.originalEvent.target,m=new CustomEvent(o,{bubbles:!1,cancelable:!0,detail:s});c&&f.addEventListener(o,c,{once:!0}),r?cg(f,m):f.dispatchEvent(m)}var TS=dg,kS=fg,vo=globalThis?.document?h.useLayoutEffect:()=>{},ES="Portal",pg=h.forwardRef((o,c)=>{const{container:s,...r}=o,[f,m]=h.useState(!1);vo(()=>m(!0),[]);const y=s||f&&globalThis?.document?.body;return y?V0.createPortal(u.jsx(aa.div,{...r,ref:c}),y):null});pg.displayName=ES;function NS(o,c){return h.useReducer((s,r)=>c[s][r]??s,o)}var gg=o=>{const{present:c,children:s}=o,r=MS(c),f=typeof s=="function"?s({present:r.isPresent}):h.Children.only(s),m=Cn(r.ref,jS(f));return typeof s=="function"||r.isPresent?h.cloneElement(f,{ref:m}):null};gg.displayName="Presence";function MS(o){const[c,s]=h.useState(),r=h.useRef(null),f=h.useRef(o),m=h.useRef("none"),y=o?"mounted":"unmounted",[b,v]=NS(y,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return h.useEffect(()=>{const g=Gi(r.current);m.current=b==="mounted"?g:"none"},[b]),vo(()=>{const g=r.current,x=f.current;if(x!==o){const D=m.current,H=Gi(g);o?v("MOUNT"):H==="none"||g?.display==="none"?v("UNMOUNT"):v(x&&D!==H?"ANIMATION_OUT":"UNMOUNT"),f.current=o}},[o,v]),vo(()=>{if(c){let g;const x=c.ownerDocument.defaultView??window,C=H=>{const R=Gi(r.current).includes(CSS.escape(H.animationName));if(H.target===c&&R&&(v("ANIMATION_END"),!f.current)){const N=c.style.animationFillMode;c.style.animationFillMode="forwards",g=x.setTimeout(()=>{c.style.animationFillMode==="forwards"&&(c.style.animationFillMode=N)})}},D=H=>{H.target===c&&(m.current=Gi(r.current))};return c.addEventListener("animationstart",D),c.addEventListener("animationcancel",C),c.addEventListener("animationend",C),()=>{x.clearTimeout(g),c.removeEventListener("animationstart",D),c.removeEventListener("animationcancel",C),c.removeEventListener("animationend",C)}}else v("ANIMATION_END")},[c,v]),{isPresent:["mounted","unmountSuspended"].includes(b),ref:h.useCallback(g=>{r.current=g?getComputedStyle(g):null,s(g)},[])}}function Gi(o){return o?.animationName||"none"}function jS(o){let c=Object.getOwnPropertyDescriptor(o.props,"ref")?.get,s=c&&"isReactWarning"in c&&c.isReactWarning;return s?o.ref:(c=Object.getOwnPropertyDescriptor(o,"ref")?.get,s=c&&"isReactWarning"in c&&c.isReactWarning,s?o.props.ref:o.props.ref||o.ref)}var DS=Av[" useInsertionEffect ".trim().toString()]||vo;function RS({prop:o,defaultProp:c,onChange:s=()=>{},caller:r}){const[f,m,y]=PS({defaultProp:c,onChange:s}),b=o!==void 0,v=b?o:f;{const x=h.useRef(o!==void 0);h.useEffect(()=>{const C=x.current;C!==b&&console.warn(`${r} is changing from ${C?"controlled":"uncontrolled"} to ${b?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),x.current=b},[b,r])}const g=h.useCallback(x=>{if(b){const C=OS(x)?x(o):x;C!==o&&y.current?.(C)}else m(x)},[b,o,m,y]);return[v,g]}function PS({defaultProp:o,onChange:c}){const[s,r]=h.useState(o),f=h.useRef(s),m=h.useRef(c);return DS(()=>{m.current=c},[c]),h.useEffect(()=>{f.current!==s&&(m.current?.(s),f.current=s)},[s,f]),[s,r,m]}function OS(o){return typeof o=="function"}var zS=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),LS="VisuallyHidden",au=h.forwardRef((o,c)=>u.jsx(aa.span,{...o,ref:c,style:{...zS,...o.style}}));au.displayName=LS;var nu="ToastProvider",[lu,US,_S]=hS("Toast"),[hg]=rg("Toast",[_S]),[FS,os]=hg(nu),yg=o=>{const{__scopeToast:c,label:s="Notification",duration:r=5e3,swipeDirection:f="right",swipeThreshold:m=50,children:y}=o,[b,v]=h.useState(null),[g,x]=h.useState(0),C=h.useRef(!1),D=h.useRef(!1);return s.trim()||console.error(`Invalid prop \`label\` supplied to \`${nu}\`. Expected non-empty \`string\`.`),u.jsx(lu.Provider,{scope:c,children:u.jsx(FS,{scope:c,label:s,duration:r,swipeDirection:f,swipeThreshold:m,toastCount:g,viewport:b,onViewportChange:v,onToastAdd:h.useCallback(()=>x(H=>H+1),[]),onToastRemove:h.useCallback(()=>x(H=>H-1),[]),isFocusedToastEscapeKeyDownRef:C,isClosePausedRef:D,children:y})})};yg.displayName=nu;var vg="ToastViewport",BS=["F8"],Fc="toast.viewportPause",Bc="toast.viewportResume",bg=h.forwardRef((o,c)=>{const{__scopeToast:s,hotkey:r=BS,label:f="Notifications ({hotkey})",...m}=o,y=os(vg,s),b=US(s),v=h.useRef(null),g=h.useRef(null),x=h.useRef(null),C=h.useRef(null),D=Cn(c,C,y.onViewportChange),H=r.join("+").replace(/Key/g,"").replace(/Digit/g,""),P=y.toastCount>0;h.useEffect(()=>{const N=B=>{r.length!==0&&r.every(G=>B[G]||B.code===G)&&C.current?.focus()};return document.addEventListener("keydown",N),()=>document.removeEventListener("keydown",N)},[r]),h.useEffect(()=>{const N=v.current,B=C.current;if(P&&N&&B){const z=()=>{if(!y.isClosePausedRef.current){const V=new CustomEvent(Fc);B.dispatchEvent(V),y.isClosePausedRef.current=!0}},G=()=>{if(y.isClosePausedRef.current){const V=new CustomEvent(Bc);B.dispatchEvent(V),y.isClosePausedRef.current=!1}},Z=V=>{!N.contains(V.relatedTarget)&&G()},K=()=>{N.contains(document.activeElement)||G()};return N.addEventListener("focusin",z),N.addEventListener("focusout",Z),N.addEventListener("pointermove",z),N.addEventListener("pointerleave",K),window.addEventListener("blur",z),window.addEventListener("focus",G),()=>{N.removeEventListener("focusin",z),N.removeEventListener("focusout",Z),N.removeEventListener("pointermove",z),N.removeEventListener("pointerleave",K),window.removeEventListener("blur",z),window.removeEventListener("focus",G)}}},[P,y.isClosePausedRef]);const R=h.useCallback(({tabbingDirection:N})=>{const z=b().map(G=>{const Z=G.ref.current,K=[Z,...WS(Z)];return N==="forwards"?K:K.reverse()});return(N==="forwards"?z.reverse():z).flat()},[b]);return h.useEffect(()=>{const N=C.current;if(N){const B=z=>{const G=z.altKey||z.ctrlKey||z.metaKey;if(z.key==="Tab"&&!G){const K=document.activeElement,V=z.shiftKey;if(z.target===N&&V){g.current?.focus();return}const Q=R({tabbingDirection:V?"backwards":"forwards"}),le=Q.findIndex(Pe=>Pe===K);Nc(Q.slice(le+1))?z.preventDefault():V?g.current?.focus():x.current?.focus()}};return N.addEventListener("keydown",B),()=>N.removeEventListener("keydown",B)}},[b,R]),u.jsxs(kS,{ref:v,role:"region","aria-label":f.replace("{hotkey}",H),tabIndex:-1,style:{pointerEvents:P?void 0:"none"},children:[P&&u.jsx(Hc,{ref:g,onFocusFromOutsideViewport:()=>{const N=R({tabbingDirection:"forwards"});Nc(N)}}),u.jsx(lu.Slot,{scope:s,children:u.jsx(aa.ol,{tabIndex:-1,...m,ref:D})}),P&&u.jsx(Hc,{ref:x,onFocusFromOutsideViewport:()=>{const N=R({tabbingDirection:"backwards"});Nc(N)}})]})});bg.displayName=vg;var Sg="ToastFocusProxy",Hc=h.forwardRef((o,c)=>{const{__scopeToast:s,onFocusFromOutsideViewport:r,...f}=o,m=os(Sg,s);return u.jsx(au,{tabIndex:0,...f,ref:c,style:{position:"fixed"},onFocus:y=>{const b=y.relatedTarget;!m.viewport?.contains(b)&&r()}})});Hc.displayName=Sg;var Ao="Toast",HS="toast.swipeStart",qS="toast.swipeMove",VS="toast.swipeCancel",GS="toast.swipeEnd",xg=h.forwardRef((o,c)=>{const{forceMount:s,open:r,defaultOpen:f,onOpenChange:m,...y}=o,[b,v]=RS({prop:r,defaultProp:f??!0,onChange:m,caller:Ao});return u.jsx(gg,{present:s||b,children:u.jsx(YS,{open:b,...y,ref:c,onClose:()=>v(!1),onPause:An(o.onPause),onResume:An(o.onResume),onSwipeStart:Et(o.onSwipeStart,g=>{g.currentTarget.setAttribute("data-swipe","start")}),onSwipeMove:Et(o.onSwipeMove,g=>{const{x,y:C}=g.detail.delta;g.currentTarget.setAttribute("data-swipe","move"),g.currentTarget.style.setProperty("--radix-toast-swipe-move-x",`${x}px`),g.currentTarget.style.setProperty("--radix-toast-swipe-move-y",`${C}px`)}),onSwipeCancel:Et(o.onSwipeCancel,g=>{g.currentTarget.setAttribute("data-swipe","cancel"),g.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),g.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),g.currentTarget.style.removeProperty("--radix-toast-swipe-end-x"),g.currentTarget.style.removeProperty("--radix-toast-swipe-end-y")}),onSwipeEnd:Et(o.onSwipeEnd,g=>{const{x,y:C}=g.detail.delta;g.currentTarget.setAttribute("data-swipe","end"),g.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),g.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),g.currentTarget.style.setProperty("--radix-toast-swipe-end-x",`${x}px`),g.currentTarget.style.setProperty("--radix-toast-swipe-end-y",`${C}px`),v(!1)})})})});xg.displayName=Ao;var[IS,KS]=hg(Ao,{onClose(){}}),YS=h.forwardRef((o,c)=>{const{__scopeToast:s,type:r="foreground",duration:f,open:m,onClose:y,onEscapeKeyDown:b,onPause:v,onResume:g,onSwipeStart:x,onSwipeMove:C,onSwipeCancel:D,onSwipeEnd:H,...P}=o,R=os(Ao,s),[N,B]=h.useState(null),z=Cn(c,ne=>B(ne)),G=h.useRef(null),Z=h.useRef(null),K=f||R.duration,V=h.useRef(0),_=h.useRef(K),F=h.useRef(0),{onToastAdd:Q,onToastRemove:le}=R,Pe=An(()=>{N?.contains(document.activeElement)&&R.viewport?.focus(),y()}),Me=h.useCallback(ne=>{!ne||ne===1/0||(window.clearTimeout(F.current),V.current=new Date().getTime(),F.current=window.setTimeout(Pe,ne))},[Pe]);h.useEffect(()=>{const ne=R.viewport;if(ne){const we=()=>{Me(_.current),g?.()},j=()=>{const I=new Date().getTime()-V.current;_.current=_.current-I,window.clearTimeout(F.current),v?.()};return ne.addEventListener(Fc,j),ne.addEventListener(Bc,we),()=>{ne.removeEventListener(Fc,j),ne.removeEventListener(Bc,we)}}},[R.viewport,K,v,g,Me]),h.useEffect(()=>{m&&!R.isClosePausedRef.current&&Me(K)},[m,K,R.isClosePausedRef,Me]),h.useEffect(()=>(Q(),()=>le()),[Q,le]);const Qe=h.useMemo(()=>N?Ng(N):null,[N]);return R.viewport?u.jsxs(u.Fragment,{children:[Qe&&u.jsx(QS,{__scopeToast:s,role:"status","aria-live":r==="foreground"?"assertive":"polite",children:Qe}),u.jsx(IS,{scope:s,onClose:Pe,children:Wc.createPortal(u.jsx(lu.ItemSlot,{scope:s,children:u.jsx(TS,{asChild:!0,onEscapeKeyDown:Et(b,()=>{R.isFocusedToastEscapeKeyDownRef.current||Pe(),R.isFocusedToastEscapeKeyDownRef.current=!1}),children:u.jsx(aa.li,{tabIndex:0,"data-state":m?"open":"closed","data-swipe-direction":R.swipeDirection,...P,ref:z,style:{userSelect:"none",touchAction:"none",...o.style},onKeyDown:Et(o.onKeyDown,ne=>{ne.key==="Escape"&&(b?.(ne.nativeEvent),ne.nativeEvent.defaultPrevented||(R.isFocusedToastEscapeKeyDownRef.current=!0,Pe()))}),onPointerDown:Et(o.onPointerDown,ne=>{ne.button===0&&(G.current={x:ne.clientX,y:ne.clientY})}),onPointerMove:Et(o.onPointerMove,ne=>{if(!G.current)return;const we=ne.clientX-G.current.x,j=ne.clientY-G.current.y,I=!!Z.current,q=["left","right"].includes(R.swipeDirection),de=["left","up"].includes(R.swipeDirection)?Math.min:Math.max,he=q?de(0,we):0,Le=q?0:de(0,j),ye=ne.pointerType==="touch"?10:2,te={x:he,y:Le},re={originalEvent:ne,delta:te};I?(Z.current=te,Ii(qS,C,re,{discrete:!1})):Np(te,R.swipeDirection,ye)?(Z.current=te,Ii(HS,x,re,{discrete:!1}),ne.target.setPointerCapture(ne.pointerId)):(Math.abs(we)>ye||Math.abs(j)>ye)&&(G.current=null)}),onPointerUp:Et(o.onPointerUp,ne=>{const we=Z.current,j=ne.target;if(j.hasPointerCapture(ne.pointerId)&&j.releasePointerCapture(ne.pointerId),Z.current=null,G.current=null,we){const I=ne.currentTarget,q={originalEvent:ne,delta:we};Np(we,R.swipeDirection,R.swipeThreshold)?Ii(GS,H,q,{discrete:!0}):Ii(VS,D,q,{discrete:!0}),I.addEventListener("click",de=>de.preventDefault(),{once:!0})}})})})}),R.viewport)})]}):null}),QS=o=>{const{__scopeToast:c,children:s,...r}=o,f=os(Ao,c),[m,y]=h.useState(!1),[b,v]=h.useState(!1);return $S(()=>y(!0)),h.useEffect(()=>{const g=window.setTimeout(()=>v(!0),1e3);return()=>window.clearTimeout(g)},[]),b?null:u.jsx(pg,{asChild:!0,children:u.jsx(au,{...r,children:m&&u.jsxs(u.Fragment,{children:[f.label," ",s]})})})},XS="ToastTitle",wg=h.forwardRef((o,c)=>{const{__scopeToast:s,...r}=o;return u.jsx(aa.div,{...r,ref:c})});wg.displayName=XS;var ZS="ToastDescription",Cg=h.forwardRef((o,c)=>{const{__scopeToast:s,...r}=o;return u.jsx(aa.div,{...r,ref:c})});Cg.displayName=ZS;var Ag="ToastAction",Tg=h.forwardRef((o,c)=>{const{altText:s,...r}=o;return s.trim()?u.jsx(Eg,{altText:s,asChild:!0,children:u.jsx(ou,{...r,ref:c})}):(console.error(`Invalid prop \`altText\` supplied to \`${Ag}\`. Expected non-empty \`string\`.`),null)});Tg.displayName=Ag;var kg="ToastClose",ou=h.forwardRef((o,c)=>{const{__scopeToast:s,...r}=o,f=KS(kg,s);return u.jsx(Eg,{asChild:!0,children:u.jsx(aa.button,{type:"button",...r,ref:c,onClick:Et(o.onClick,f.onClose)})})});ou.displayName=kg;var Eg=h.forwardRef((o,c)=>{const{__scopeToast:s,altText:r,...f}=o;return u.jsx(aa.div,{"data-radix-toast-announce-exclude":"","data-radix-toast-announce-alt":r||void 0,...f,ref:c})});function Ng(o){const c=[];return Array.from(o.childNodes).forEach(r=>{if(r.nodeType===r.TEXT_NODE&&r.textContent&&c.push(r.textContent),JS(r)){const f=r.ariaHidden||r.hidden||r.style.display==="none",m=r.dataset.radixToastAnnounceExclude==="";if(!f)if(m){const y=r.dataset.radixToastAnnounceAlt;y&&c.push(y)}else c.push(...Ng(r))}}),c}function Ii(o,c,s,{discrete:r}){const f=s.originalEvent.currentTarget,m=new CustomEvent(o,{bubbles:!0,cancelable:!0,detail:s});c&&f.addEventListener(o,c,{once:!0}),r?cg(f,m):f.dispatchEvent(m)}var Np=(o,c,s=0)=>{const r=Math.abs(o.x),f=Math.abs(o.y),m=r>f;return c==="left"||c==="right"?m&&r>s:!m&&f>s};function $S(o=()=>{}){const c=An(o);vo(()=>{let s=0,r=0;return s=window.requestAnimationFrame(()=>r=window.requestAnimationFrame(c)),()=>{window.cancelAnimationFrame(s),window.cancelAnimationFrame(r)}},[c])}function JS(o){return o.nodeType===o.ELEMENT_NODE}function WS(o){const c=[],s=document.createTreeWalker(o,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const f=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||f?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;s.nextNode();)c.push(s.currentNode);return c}function Nc(o){const c=document.activeElement;return o.some(s=>s===c?!0:(s.focus(),document.activeElement!==c))}var ex=yg,Mg=bg,jg=xg,Dg=wg,Rg=Cg,Pg=Tg,Og=ou;function zg(o){var c,s,r="";if(typeof o=="string"||typeof o=="number")r+=o;else if(typeof o=="object")if(Array.isArray(o)){var f=o.length;for(c=0;c<f;c++)o[c]&&(s=zg(o[c]))&&(r&&(r+=" "),r+=s)}else for(s in o)o[s]&&(r&&(r+=" "),r+=s);return r}function Lg(){for(var o,c,s=0,r="",f=arguments.length;s<f;s++)(o=arguments[s])&&(c=zg(o))&&(r&&(r+=" "),r+=c);return r}const Mp=o=>typeof o=="boolean"?`${o}`:o===0?"0":o,jp=Lg,tx=(o,c)=>s=>{var r;if(c?.variants==null)return jp(o,s?.class,s?.className);const{variants:f,defaultVariants:m}=c,y=Object.keys(f).map(g=>{const x=s?.[g],C=m?.[g];if(x===null)return null;const D=Mp(x)||Mp(C);return f[g][D]}),b=s&&Object.entries(s).reduce((g,x)=>{let[C,D]=x;return D===void 0||(g[C]=D),g},{}),v=c==null||(r=c.compoundVariants)===null||r===void 0?void 0:r.reduce((g,x)=>{let{class:C,className:D,...H}=x;return Object.entries(H).every(P=>{let[R,N]=P;return Array.isArray(N)?N.includes({...m,...b}[R]):{...m,...b}[R]===N})?[...g,C,D]:g},[]);return jp(o,y,v,s?.class,s?.className)},iu="-",ax=o=>{const c=lx(o),{conflictingClassGroups:s,conflictingClassGroupModifiers:r}=o;return{getClassGroupId:y=>{const b=y.split(iu);return b[0]===""&&b.length!==1&&b.shift(),Ug(b,c)||nx(y)},getConflictingClassGroupIds:(y,b)=>{const v=s[y]||[];return b&&r[y]?[...v,...r[y]]:v}}},Ug=(o,c)=>{if(o.length===0)return c.classGroupId;const s=o[0],r=c.nextPart.get(s),f=r?Ug(o.slice(1),r):void 0;if(f)return f;if(c.validators.length===0)return;const m=o.join(iu);return c.validators.find(({validator:y})=>y(m))?.classGroupId},Dp=/^\[(.+)\]$/,nx=o=>{if(Dp.test(o)){const c=Dp.exec(o)[1],s=c?.substring(0,c.indexOf(":"));if(s)return"arbitrary.."+s}},lx=o=>{const{theme:c,classGroups:s}=o,r={nextPart:new Map,validators:[]};for(const f in s)qc(s[f],r,f,c);return r},qc=(o,c,s,r)=>{o.forEach(f=>{if(typeof f=="string"){const m=f===""?c:Rp(c,f);m.classGroupId=s;return}if(typeof f=="function"){if(ox(f)){qc(f(r),c,s,r);return}c.validators.push({validator:f,classGroupId:s});return}Object.entries(f).forEach(([m,y])=>{qc(y,Rp(c,m),s,r)})})},Rp=(o,c)=>{let s=o;return c.split(iu).forEach(r=>{s.nextPart.has(r)||s.nextPart.set(r,{nextPart:new Map,validators:[]}),s=s.nextPart.get(r)}),s},ox=o=>o.isThemeGetter,ix=o=>{if(o<1)return{get:()=>{},set:()=>{}};let c=0,s=new Map,r=new Map;const f=(m,y)=>{s.set(m,y),c++,c>o&&(c=0,r=s,s=new Map)};return{get(m){let y=s.get(m);if(y!==void 0)return y;if((y=r.get(m))!==void 0)return f(m,y),y},set(m,y){s.has(m)?s.set(m,y):f(m,y)}}},Vc="!",Gc=":",sx=Gc.length,rx=o=>{const{prefix:c,experimentalParseClassName:s}=o;let r=f=>{const m=[];let y=0,b=0,v=0,g;for(let P=0;P<f.length;P++){let R=f[P];if(y===0&&b===0){if(R===Gc){m.push(f.slice(v,P)),v=P+sx;continue}if(R==="/"){g=P;continue}}R==="["?y++:R==="]"?y--:R==="("?b++:R===")"&&b--}const x=m.length===0?f:f.substring(v),C=cx(x),D=C!==x,H=g&&g>v?g-v:void 0;return{modifiers:m,hasImportantModifier:D,baseClassName:C,maybePostfixModifierPosition:H}};if(c){const f=c+Gc,m=r;r=y=>y.startsWith(f)?m(y.substring(f.length)):{isExternal:!0,modifiers:[],hasImportantModifier:!1,baseClassName:y,maybePostfixModifierPosition:void 0}}if(s){const f=r;r=m=>s({className:m,parseClassName:f})}return r},cx=o=>o.endsWith(Vc)?o.substring(0,o.length-1):o.startsWith(Vc)?o.substring(1):o,ux=o=>{const c=Object.fromEntries(o.orderSensitiveModifiers.map(r=>[r,!0]));return r=>{if(r.length<=1)return r;const f=[];let m=[];return r.forEach(y=>{y[0]==="["||c[y]?(f.push(...m.sort(),y),m=[]):m.push(y)}),f.push(...m.sort()),f}},dx=o=>({cache:ix(o.cacheSize),parseClassName:rx(o),sortModifiers:ux(o),...ax(o)}),fx=/\s+/,mx=(o,c)=>{const{parseClassName:s,getClassGroupId:r,getConflictingClassGroupIds:f,sortModifiers:m}=c,y=[],b=o.trim().split(fx);let v="";for(let g=b.length-1;g>=0;g-=1){const x=b[g],{isExternal:C,modifiers:D,hasImportantModifier:H,baseClassName:P,maybePostfixModifierPosition:R}=s(x);if(C){v=x+(v.length>0?" "+v:v);continue}let N=!!R,B=r(N?P.substring(0,R):P);if(!B){if(!N){v=x+(v.length>0?" "+v:v);continue}if(B=r(P),!B){v=x+(v.length>0?" "+v:v);continue}N=!1}const z=m(D).join(":"),G=H?z+Vc:z,Z=G+B;if(y.includes(Z))continue;y.push(Z);const K=f(B,N);for(let V=0;V<K.length;++V){const _=K[V];y.push(G+_)}v=x+(v.length>0?" "+v:v)}return v};function px(){let o=0,c,s,r="";for(;o<arguments.length;)(c=arguments[o++])&&(s=_g(c))&&(r&&(r+=" "),r+=s);return r}const _g=o=>{if(typeof o=="string")return o;let c,s="";for(let r=0;r<o.length;r++)o[r]&&(c=_g(o[r]))&&(s&&(s+=" "),s+=c);return s};function gx(o,...c){let s,r,f,m=y;function y(v){const g=c.reduce((x,C)=>C(x),o());return s=dx(g),r=s.cache.get,f=s.cache.set,m=b,b(v)}function b(v){const g=r(v);if(g)return g;const x=mx(v,s);return f(v,x),x}return function(){return m(px.apply(null,arguments))}}const Ye=o=>{const c=s=>s[o]||[];return c.isThemeGetter=!0,c},Fg=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Bg=/^\((?:(\w[\w-]*):)?(.+)\)$/i,hx=/^\d+\/\d+$/,yx=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,vx=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,bx=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Sx=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,xx=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,ul=o=>hx.test(o),se=o=>!!o&&!Number.isNaN(Number(o)),en=o=>!!o&&Number.isInteger(Number(o)),Mc=o=>o.endsWith("%")&&se(o.slice(0,-1)),Aa=o=>yx.test(o),wx=()=>!0,Cx=o=>vx.test(o)&&!bx.test(o),Hg=()=>!1,Ax=o=>Sx.test(o),Tx=o=>xx.test(o),kx=o=>!$(o)&&!J(o),Ex=o=>hl(o,Gg,Hg),$=o=>Fg.test(o),wn=o=>hl(o,Ig,Cx),jc=o=>hl(o,Rx,se),Pp=o=>hl(o,qg,Hg),Nx=o=>hl(o,Vg,Tx),Ki=o=>hl(o,Kg,Ax),J=o=>Bg.test(o),po=o=>yl(o,Ig),Mx=o=>yl(o,Px),Op=o=>yl(o,qg),jx=o=>yl(o,Gg),Dx=o=>yl(o,Vg),Yi=o=>yl(o,Kg,!0),hl=(o,c,s)=>{const r=Fg.exec(o);return r?r[1]?c(r[1]):s(r[2]):!1},yl=(o,c,s=!1)=>{const r=Bg.exec(o);return r?r[1]?c(r[1]):s:!1},qg=o=>o==="position"||o==="percentage",Vg=o=>o==="image"||o==="url",Gg=o=>o==="length"||o==="size"||o==="bg-size",Ig=o=>o==="length",Rx=o=>o==="number",Px=o=>o==="family-name",Kg=o=>o==="shadow",Ox=()=>{const o=Ye("color"),c=Ye("font"),s=Ye("text"),r=Ye("font-weight"),f=Ye("tracking"),m=Ye("leading"),y=Ye("breakpoint"),b=Ye("container"),v=Ye("spacing"),g=Ye("radius"),x=Ye("shadow"),C=Ye("inset-shadow"),D=Ye("text-shadow"),H=Ye("drop-shadow"),P=Ye("blur"),R=Ye("perspective"),N=Ye("aspect"),B=Ye("ease"),z=Ye("animate"),G=()=>["auto","avoid","all","avoid-page","page","left","right","column"],Z=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],K=()=>[...Z(),J,$],V=()=>["auto","hidden","clip","visible","scroll"],_=()=>["auto","contain","none"],F=()=>[J,$,v],Q=()=>[ul,"full","auto",...F()],le=()=>[en,"none","subgrid",J,$],Pe=()=>["auto",{span:["full",en,J,$]},en,J,$],Me=()=>[en,"auto",J,$],Qe=()=>["auto","min","max","fr",J,$],ne=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],we=()=>["start","end","center","stretch","center-safe","end-safe"],j=()=>["auto",...F()],I=()=>[ul,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...F()],q=()=>[o,J,$],de=()=>[...Z(),Op,Pp,{position:[J,$]}],he=()=>["no-repeat",{repeat:["","x","y","space","round"]}],Le=()=>["auto","cover","contain",jx,Ex,{size:[J,$]}],ye=()=>[Mc,po,wn],te=()=>["","none","full",g,J,$],re=()=>["",se,po,wn],Je=()=>["solid","dashed","dotted","double"],pt=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],je=()=>[se,Mc,Op,Pp],na=()=>["","none",P,J,$],gt=()=>["none",se,J,$],Qt=()=>["none",se,J,$],Xt=()=>[se,J,$],Zt=()=>[ul,"full",...F()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[Aa],breakpoint:[Aa],color:[wx],container:[Aa],"drop-shadow":[Aa],ease:["in","out","in-out"],font:[kx],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[Aa],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[Aa],shadow:[Aa],spacing:["px",se],text:[Aa],"text-shadow":[Aa],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",ul,$,J,N]}],container:["container"],columns:[{columns:[se,$,J,b]}],"break-after":[{"break-after":G()}],"break-before":[{"break-before":G()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:K()}],overflow:[{overflow:V()}],"overflow-x":[{"overflow-x":V()}],"overflow-y":[{"overflow-y":V()}],overscroll:[{overscroll:_()}],"overscroll-x":[{"overscroll-x":_()}],"overscroll-y":[{"overscroll-y":_()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:Q()}],"inset-x":[{"inset-x":Q()}],"inset-y":[{"inset-y":Q()}],start:[{start:Q()}],end:[{end:Q()}],top:[{top:Q()}],right:[{right:Q()}],bottom:[{bottom:Q()}],left:[{left:Q()}],visibility:["visible","invisible","collapse"],z:[{z:[en,"auto",J,$]}],basis:[{basis:[ul,"full","auto",b,...F()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[se,ul,"auto","initial","none",$]}],grow:[{grow:["",se,J,$]}],shrink:[{shrink:["",se,J,$]}],order:[{order:[en,"first","last","none",J,$]}],"grid-cols":[{"grid-cols":le()}],"col-start-end":[{col:Pe()}],"col-start":[{"col-start":Me()}],"col-end":[{"col-end":Me()}],"grid-rows":[{"grid-rows":le()}],"row-start-end":[{row:Pe()}],"row-start":[{"row-start":Me()}],"row-end":[{"row-end":Me()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":Qe()}],"auto-rows":[{"auto-rows":Qe()}],gap:[{gap:F()}],"gap-x":[{"gap-x":F()}],"gap-y":[{"gap-y":F()}],"justify-content":[{justify:[...ne(),"normal"]}],"justify-items":[{"justify-items":[...we(),"normal"]}],"justify-self":[{"justify-self":["auto",...we()]}],"align-content":[{content:["normal",...ne()]}],"align-items":[{items:[...we(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...we(),{baseline:["","last"]}]}],"place-content":[{"place-content":ne()}],"place-items":[{"place-items":[...we(),"baseline"]}],"place-self":[{"place-self":["auto",...we()]}],p:[{p:F()}],px:[{px:F()}],py:[{py:F()}],ps:[{ps:F()}],pe:[{pe:F()}],pt:[{pt:F()}],pr:[{pr:F()}],pb:[{pb:F()}],pl:[{pl:F()}],m:[{m:j()}],mx:[{mx:j()}],my:[{my:j()}],ms:[{ms:j()}],me:[{me:j()}],mt:[{mt:j()}],mr:[{mr:j()}],mb:[{mb:j()}],ml:[{ml:j()}],"space-x":[{"space-x":F()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":F()}],"space-y-reverse":["space-y-reverse"],size:[{size:I()}],w:[{w:[b,"screen",...I()]}],"min-w":[{"min-w":[b,"screen","none",...I()]}],"max-w":[{"max-w":[b,"screen","none","prose",{screen:[y]},...I()]}],h:[{h:["screen","lh",...I()]}],"min-h":[{"min-h":["screen","lh","none",...I()]}],"max-h":[{"max-h":["screen","lh",...I()]}],"font-size":[{text:["base",s,po,wn]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[r,J,jc]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Mc,$]}],"font-family":[{font:[Mx,$,c]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[f,J,$]}],"line-clamp":[{"line-clamp":[se,"none",J,jc]}],leading:[{leading:[m,...F()]}],"list-image":[{"list-image":["none",J,$]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",J,$]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:q()}],"text-color":[{text:q()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...Je(),"wavy"]}],"text-decoration-thickness":[{decoration:[se,"from-font","auto",J,wn]}],"text-decoration-color":[{decoration:q()}],"underline-offset":[{"underline-offset":[se,"auto",J,$]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:F()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",J,$]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",J,$]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:de()}],"bg-repeat":[{bg:he()}],"bg-size":[{bg:Le()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},en,J,$],radial:["",J,$],conic:[en,J,$]},Dx,Nx]}],"bg-color":[{bg:q()}],"gradient-from-pos":[{from:ye()}],"gradient-via-pos":[{via:ye()}],"gradient-to-pos":[{to:ye()}],"gradient-from":[{from:q()}],"gradient-via":[{via:q()}],"gradient-to":[{to:q()}],rounded:[{rounded:te()}],"rounded-s":[{"rounded-s":te()}],"rounded-e":[{"rounded-e":te()}],"rounded-t":[{"rounded-t":te()}],"rounded-r":[{"rounded-r":te()}],"rounded-b":[{"rounded-b":te()}],"rounded-l":[{"rounded-l":te()}],"rounded-ss":[{"rounded-ss":te()}],"rounded-se":[{"rounded-se":te()}],"rounded-ee":[{"rounded-ee":te()}],"rounded-es":[{"rounded-es":te()}],"rounded-tl":[{"rounded-tl":te()}],"rounded-tr":[{"rounded-tr":te()}],"rounded-br":[{"rounded-br":te()}],"rounded-bl":[{"rounded-bl":te()}],"border-w":[{border:re()}],"border-w-x":[{"border-x":re()}],"border-w-y":[{"border-y":re()}],"border-w-s":[{"border-s":re()}],"border-w-e":[{"border-e":re()}],"border-w-t":[{"border-t":re()}],"border-w-r":[{"border-r":re()}],"border-w-b":[{"border-b":re()}],"border-w-l":[{"border-l":re()}],"divide-x":[{"divide-x":re()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":re()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...Je(),"hidden","none"]}],"divide-style":[{divide:[...Je(),"hidden","none"]}],"border-color":[{border:q()}],"border-color-x":[{"border-x":q()}],"border-color-y":[{"border-y":q()}],"border-color-s":[{"border-s":q()}],"border-color-e":[{"border-e":q()}],"border-color-t":[{"border-t":q()}],"border-color-r":[{"border-r":q()}],"border-color-b":[{"border-b":q()}],"border-color-l":[{"border-l":q()}],"divide-color":[{divide:q()}],"outline-style":[{outline:[...Je(),"none","hidden"]}],"outline-offset":[{"outline-offset":[se,J,$]}],"outline-w":[{outline:["",se,po,wn]}],"outline-color":[{outline:q()}],shadow:[{shadow:["","none",x,Yi,Ki]}],"shadow-color":[{shadow:q()}],"inset-shadow":[{"inset-shadow":["none",C,Yi,Ki]}],"inset-shadow-color":[{"inset-shadow":q()}],"ring-w":[{ring:re()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:q()}],"ring-offset-w":[{"ring-offset":[se,wn]}],"ring-offset-color":[{"ring-offset":q()}],"inset-ring-w":[{"inset-ring":re()}],"inset-ring-color":[{"inset-ring":q()}],"text-shadow":[{"text-shadow":["none",D,Yi,Ki]}],"text-shadow-color":[{"text-shadow":q()}],opacity:[{opacity:[se,J,$]}],"mix-blend":[{"mix-blend":[...pt(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":pt()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[se]}],"mask-image-linear-from-pos":[{"mask-linear-from":je()}],"mask-image-linear-to-pos":[{"mask-linear-to":je()}],"mask-image-linear-from-color":[{"mask-linear-from":q()}],"mask-image-linear-to-color":[{"mask-linear-to":q()}],"mask-image-t-from-pos":[{"mask-t-from":je()}],"mask-image-t-to-pos":[{"mask-t-to":je()}],"mask-image-t-from-color":[{"mask-t-from":q()}],"mask-image-t-to-color":[{"mask-t-to":q()}],"mask-image-r-from-pos":[{"mask-r-from":je()}],"mask-image-r-to-pos":[{"mask-r-to":je()}],"mask-image-r-from-color":[{"mask-r-from":q()}],"mask-image-r-to-color":[{"mask-r-to":q()}],"mask-image-b-from-pos":[{"mask-b-from":je()}],"mask-image-b-to-pos":[{"mask-b-to":je()}],"mask-image-b-from-color":[{"mask-b-from":q()}],"mask-image-b-to-color":[{"mask-b-to":q()}],"mask-image-l-from-pos":[{"mask-l-from":je()}],"mask-image-l-to-pos":[{"mask-l-to":je()}],"mask-image-l-from-color":[{"mask-l-from":q()}],"mask-image-l-to-color":[{"mask-l-to":q()}],"mask-image-x-from-pos":[{"mask-x-from":je()}],"mask-image-x-to-pos":[{"mask-x-to":je()}],"mask-image-x-from-color":[{"mask-x-from":q()}],"mask-image-x-to-color":[{"mask-x-to":q()}],"mask-image-y-from-pos":[{"mask-y-from":je()}],"mask-image-y-to-pos":[{"mask-y-to":je()}],"mask-image-y-from-color":[{"mask-y-from":q()}],"mask-image-y-to-color":[{"mask-y-to":q()}],"mask-image-radial":[{"mask-radial":[J,$]}],"mask-image-radial-from-pos":[{"mask-radial-from":je()}],"mask-image-radial-to-pos":[{"mask-radial-to":je()}],"mask-image-radial-from-color":[{"mask-radial-from":q()}],"mask-image-radial-to-color":[{"mask-radial-to":q()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":Z()}],"mask-image-conic-pos":[{"mask-conic":[se]}],"mask-image-conic-from-pos":[{"mask-conic-from":je()}],"mask-image-conic-to-pos":[{"mask-conic-to":je()}],"mask-image-conic-from-color":[{"mask-conic-from":q()}],"mask-image-conic-to-color":[{"mask-conic-to":q()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:de()}],"mask-repeat":[{mask:he()}],"mask-size":[{mask:Le()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",J,$]}],filter:[{filter:["","none",J,$]}],blur:[{blur:na()}],brightness:[{brightness:[se,J,$]}],contrast:[{contrast:[se,J,$]}],"drop-shadow":[{"drop-shadow":["","none",H,Yi,Ki]}],"drop-shadow-color":[{"drop-shadow":q()}],grayscale:[{grayscale:["",se,J,$]}],"hue-rotate":[{"hue-rotate":[se,J,$]}],invert:[{invert:["",se,J,$]}],saturate:[{saturate:[se,J,$]}],sepia:[{sepia:["",se,J,$]}],"backdrop-filter":[{"backdrop-filter":["","none",J,$]}],"backdrop-blur":[{"backdrop-blur":na()}],"backdrop-brightness":[{"backdrop-brightness":[se,J,$]}],"backdrop-contrast":[{"backdrop-contrast":[se,J,$]}],"backdrop-grayscale":[{"backdrop-grayscale":["",se,J,$]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[se,J,$]}],"backdrop-invert":[{"backdrop-invert":["",se,J,$]}],"backdrop-opacity":[{"backdrop-opacity":[se,J,$]}],"backdrop-saturate":[{"backdrop-saturate":[se,J,$]}],"backdrop-sepia":[{"backdrop-sepia":["",se,J,$]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":F()}],"border-spacing-x":[{"border-spacing-x":F()}],"border-spacing-y":[{"border-spacing-y":F()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",J,$]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[se,"initial",J,$]}],ease:[{ease:["linear","initial",B,J,$]}],delay:[{delay:[se,J,$]}],animate:[{animate:["none",z,J,$]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[R,J,$]}],"perspective-origin":[{"perspective-origin":K()}],rotate:[{rotate:gt()}],"rotate-x":[{"rotate-x":gt()}],"rotate-y":[{"rotate-y":gt()}],"rotate-z":[{"rotate-z":gt()}],scale:[{scale:Qt()}],"scale-x":[{"scale-x":Qt()}],"scale-y":[{"scale-y":Qt()}],"scale-z":[{"scale-z":Qt()}],"scale-3d":["scale-3d"],skew:[{skew:Xt()}],"skew-x":[{"skew-x":Xt()}],"skew-y":[{"skew-y":Xt()}],transform:[{transform:[J,$,"","none","gpu","cpu"]}],"transform-origin":[{origin:K()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:Zt()}],"translate-x":[{"translate-x":Zt()}],"translate-y":[{"translate-y":Zt()}],"translate-z":[{"translate-z":Zt()}],"translate-none":["translate-none"],accent:[{accent:q()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:q()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",J,$]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":F()}],"scroll-mx":[{"scroll-mx":F()}],"scroll-my":[{"scroll-my":F()}],"scroll-ms":[{"scroll-ms":F()}],"scroll-me":[{"scroll-me":F()}],"scroll-mt":[{"scroll-mt":F()}],"scroll-mr":[{"scroll-mr":F()}],"scroll-mb":[{"scroll-mb":F()}],"scroll-ml":[{"scroll-ml":F()}],"scroll-p":[{"scroll-p":F()}],"scroll-px":[{"scroll-px":F()}],"scroll-py":[{"scroll-py":F()}],"scroll-ps":[{"scroll-ps":F()}],"scroll-pe":[{"scroll-pe":F()}],"scroll-pt":[{"scroll-pt":F()}],"scroll-pr":[{"scroll-pr":F()}],"scroll-pb":[{"scroll-pb":F()}],"scroll-pl":[{"scroll-pl":F()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",J,$]}],fill:[{fill:["none",...q()]}],"stroke-w":[{stroke:[se,po,wn,jc]}],stroke:[{stroke:["none",...q()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},zx=gx(Ox);function vl(...o){return zx(Lg(o))}const Lx=ex,Yg=h.forwardRef(({className:o,...c},s)=>u.jsx(Mg,{ref:s,className:vl("fixed top-4 right-4 z-[100] flex max-h-screen w-full flex-col gap-2 p-4 md:max-w-[420px]",o),...c}));Yg.displayName=Mg.displayName;const Ux=tx("group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",{variants:{variant:{default:"border bg-background text-foreground",destructive:"destructive group border-destructive bg-destructive text-destructive-foreground"}},defaultVariants:{variant:"default"}}),Qg=h.forwardRef(({className:o,variant:c,...s},r)=>u.jsx(jg,{ref:r,className:vl(Ux({variant:c}),o),...s}));Qg.displayName=jg.displayName;const _x=h.forwardRef(({className:o,...c},s)=>u.jsx(Pg,{ref:s,className:vl("inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors hover:bg-secondary focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive",o),...c}));_x.displayName=Pg.displayName;const Xg=h.forwardRef(({className:o,...c},s)=>u.jsx(Og,{ref:s,className:vl("absolute right-2 top-2 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600",o),"toast-close":"",...c,children:u.jsx(ho,{className:"h-4 w-4"})}));Xg.displayName=Og.displayName;const Zg=h.forwardRef(({className:o,...c},s)=>u.jsx(Dg,{ref:s,className:vl("text-sm font-semibold",o),...c}));Zg.displayName=Dg.displayName;const $g=h.forwardRef(({className:o,...c},s)=>u.jsx(Rg,{ref:s,className:vl("text-sm opacity-90",o),...c}));$g.displayName=Rg.displayName;function Fx(){const{toasts:o}=X0();return u.jsxs(Lx,{children:[o.map(function({id:c,title:s,description:r,action:f,...m}){return u.jsxs(Qg,{...m,children:[u.jsxs("div",{className:"grid gap-1",children:[s&&u.jsx(Zg,{children:s}),r&&u.jsx($g,{children:r})]}),f,u.jsx(Xg,{})]},c)}),u.jsx(Yg,{})]})}const Bx=({url:o})=>(h.useEffect(()=>{window.location.href=o},[o]),u.jsx("div",{className:"flex items-center justify-center h-screen",children:"Redirecting..."})),Hx=h.lazy(()=>$e(()=>import("./DashboardPage-4YSwoWTH.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])).then(o=>({default:o.DashboardPage}))),qx=h.lazy(()=>$e(()=>import("./AgentsPage-DR5v4Vfe.js"),__vite__mapDeps([11,1,2,3,12,9,5,6,7,8,13,14,15,16])).then(o=>({default:o.AgentsPage}))),Vx=h.lazy(()=>$e(()=>import("./ProjectsPage-C1VMe5nk.js"),__vite__mapDeps([17,1,2,3,5,6,7,8,18,9,14,12,19,20,15,21,4])).then(o=>({default:o.ProjectsPage}))),Gx=h.lazy(()=>$e(()=>import("./McpPage-DDiRtENp.js"),__vite__mapDeps([22,1,2,3,5,6,7,8,12])).then(o=>({default:o.McpPage}))),Ix=h.lazy(()=>$e(()=>import("./SettingsLayout-Blt_jAZx.js"),__vite__mapDeps([23,1,2,3,5,6,7,8])).then(o=>({default:o.SettingsLayout}))),zp=h.lazy(()=>$e(()=>import("./GeneralSettingsPage-DkHRbImS.js"),__vite__mapDeps([24,1,2,3,6,7,5,8])).then(o=>({default:o.GeneralSettingsPage}))),Kx=h.lazy(()=>$e(()=>import("./VersionSettingsPage-D_keS5fb.js"),__vite__mapDeps([25,1,2,3,26,5,6,7,8,14])).then(o=>({default:o.VersionSettingsPage}))),Yx=h.lazy(()=>$e(()=>import("./MemorySettingsPage-D5Kec6pT.js"),__vite__mapDeps([27,1,2,3,5,6,7,8])).then(o=>({default:o.MemorySettingsPage}))),Qx=h.lazy(()=>$e(()=>import("./SubagentsPage-Bqk10bb7.js"),__vite__mapDeps([28,1,2,3,12,21,5,6,7,8,15,18,16])).then(o=>({default:o.SubagentsPage}))),Xx=h.lazy(()=>$e(()=>import("./McpAdminSettingsPage-BFuQouo8.js"),__vite__mapDeps([29,1,2,3,5,6,7,8])).then(o=>({default:o.McpAdminSettingsPage}))),Zx=h.lazy(()=>$e(()=>import("./CommandsPage-C6dcKcFf.js"),__vite__mapDeps([30,1,2,3,12,19,5,6,7,8,20,15,18,16])).then(o=>({default:o.CommandsPage}))),$x=h.lazy(()=>$e(()=>import("./SkillsPage-B5YxNlWJ.js"),__vite__mapDeps([31,1,2,3,12,5,6,7,8,15,32,33,16])).then(o=>({default:o.SkillsPage}))),Jx=h.lazy(()=>$e(()=>import("./PluginsPage-DSo1pTD-.js"),__vite__mapDeps([34,1,2,3,5,6,7,8,32,33])).then(o=>({default:o.PluginsPage}))),Wx=h.lazy(()=>$e(()=>import("./ScheduledTasksPage-CkUoeT04.js"),__vite__mapDeps([35,1,2,3,12,5,6,7,8,9,4,26])).then(o=>({default:o.ScheduledTasksPage}))),ew=h.lazy(()=>$e(()=>import("./ChatPage-DzORphjz.js").then(o=>o.bC),__vite__mapDeps([36,1,2,3,5,6,7,8,9,10,19,26,33,15,14,13,37])).then(o=>({default:o.ChatPage}))),tw=h.lazy(()=>$e(()=>import("./LandingPage-vFck5FSW.js"),__vite__mapDeps([38,1,2,3,6,7,5,8])).then(o=>({default:o.default}))),aw=h.lazy(()=>$e(()=>import("./LoginPage-Bfy9WmmY.js"),__vite__mapDeps([39,1,2,3,7,6,5,8])).then(o=>({default:o.LoginPage}))),nw=h.lazy(()=>$e(()=>import("./ToastTestPage-Dzfb1AsW.js"),__vite__mapDeps([40,1,2,3,5,6,7,8])).then(o=>({default:o.ToastTestPage}))),lw=()=>u.jsx("div",{className:"flex items-center justify-center h-64",children:u.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900"})}),ow=new Dv({defaultOptions:{queries:{refetchOnWindowFocus:!1,retry:1}}}),iw=()=>(h.useEffect(()=>{(()=>{const c=localStorage.getItem("theme")||"auto";if(c==="dark")document.documentElement.classList.add("dark");else if(c==="light")document.documentElement.classList.remove("dark");else{const s=window.matchMedia("(prefers-color-scheme: dark)");s.matches?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark");const r=f=>{localStorage.getItem("theme")==="auto"&&(f.matches?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark"))};return s.addEventListener("change",r),()=>s.removeEventListener("change",r)}})()},[]),u.jsx(O0,{children:u.jsx(h.Suspense,{fallback:u.jsx(lw,{}),children:u.jsxs(u0,{children:[u.jsx(Fe,{path:"/",element:u.jsx(tw,{})}),u.jsx(Fe,{path:"/login",element:u.jsx(aw,{})}),u.jsx(Fe,{path:"/chat/:agentId",element:u.jsx(Gt,{children:u.jsx(ew,{})})}),u.jsx(Fe,{path:"/dashboard",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx(Hx,{})})})}),u.jsx(Fe,{path:"/agents",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx(qx,{})})})}),u.jsx(Fe,{path:"/projects",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx(Vx,{})})})}),u.jsx(Fe,{path:"/mcp",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx(Gx,{})})})}),u.jsx(Fe,{path:"/skills",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx($x,{})})})}),u.jsx(Fe,{path:"/plugins",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx(Jx,{})})})}),u.jsx(Fe,{path:"/scheduled-tasks",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx(Wx,{})})})}),u.jsxs(Fe,{path:"/settings",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx(Ix,{})})}),children:[u.jsx(Fe,{index:!0,element:u.jsx(zp,{})}),u.jsx(Fe,{path:"general",element:u.jsx(zp,{})}),u.jsx(Fe,{path:"suppliers",element:u.jsx(Kx,{})}),u.jsx(Fe,{path:"memory",element:u.jsx(Yx,{})}),u.jsx(Fe,{path:"commands",element:u.jsx(Zx,{})}),u.jsx(Fe,{path:"subagents",element:u.jsx(Qx,{})}),u.jsx(Fe,{path:"mcp-admin",element:u.jsx(Xx,{})})]}),u.jsx(Fe,{path:"/toast-test",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx(nw,{})})})}),u.jsx(Fe,{path:"/discord",element:u.jsx(Bx,{url:"https://discord.gg/6uYsrr66"})}),u.jsx(Fe,{path:"*",element:u.jsx(Gt,{children:u.jsx(ta,{children:u.jsx("div",{className:"p-4 text-center",children:"Page not found"})})})})]})})}));function sw(){return u.jsx(Rv,{client:ow,children:u.jsxs(eS,{children:[u.jsx(iw,{}),u.jsx(Fx,{})]})})}const{slice:rw,forEach:cw}=[];function uw(o){return cw.call(rw.call(arguments,1),c=>{if(c)for(const s in c)o[s]===void 0&&(o[s]=c[s])}),o}function dw(o){return typeof o!="string"?!1:[/<\s*script.*?>/i,/<\s*\/\s*script\s*>/i,/<\s*img.*?on\w+\s*=/i,/<\s*\w+\s*on\w+\s*=.*?>/i,/javascript\s*:/i,/vbscript\s*:/i,/expression\s*\(/i,/eval\s*\(/i,/alert\s*\(/i,/document\.cookie/i,/document\.write\s*\(/i,/window\.location/i,/innerHTML/i].some(s=>s.test(o))}const Lp=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,fw=function(o,c){const r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{path:"/"},f=encodeURIComponent(c);let m=`${o}=${f}`;if(r.maxAge>0){const y=r.maxAge-0;if(Number.isNaN(y))throw new Error("maxAge should be a Number");m+=`; Max-Age=${Math.floor(y)}`}if(r.domain){if(!Lp.test(r.domain))throw new TypeError("option domain is invalid");m+=`; Domain=${r.domain}`}if(r.path){if(!Lp.test(r.path))throw new TypeError("option path is invalid");m+=`; Path=${r.path}`}if(r.expires){if(typeof r.expires.toUTCString!="function")throw new TypeError("option expires is invalid");m+=`; Expires=${r.expires.toUTCString()}`}if(r.httpOnly&&(m+="; HttpOnly"),r.secure&&(m+="; Secure"),r.sameSite)switch(typeof r.sameSite=="string"?r.sameSite.toLowerCase():r.sameSite){case!0:m+="; SameSite=Strict";break;case"lax":m+="; SameSite=Lax";break;case"strict":m+="; SameSite=Strict";break;case"none":m+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}return r.partitioned&&(m+="; Partitioned"),m},Up={create(o,c,s,r){let f=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{path:"/",sameSite:"strict"};s&&(f.expires=new Date,f.expires.setTime(f.expires.getTime()+s*60*1e3)),r&&(f.domain=r),document.cookie=fw(o,c,f)},read(o){const c=`${o}=`,s=document.cookie.split(";");for(let r=0;r<s.length;r++){let f=s[r];for(;f.charAt(0)===" ";)f=f.substring(1,f.length);if(f.indexOf(c)===0)return f.substring(c.length,f.length)}return null},remove(o,c){this.create(o,"",-1,c)}};var mw={name:"cookie",lookup(o){let{lookupCookie:c}=o;if(c&&typeof document<"u")return Up.read(c)||void 0},cacheUserLanguage(o,c){let{lookupCookie:s,cookieMinutes:r,cookieDomain:f,cookieOptions:m}=c;s&&typeof document<"u"&&Up.create(s,o,r,f,m)}},pw={name:"querystring",lookup(o){let{lookupQuerystring:c}=o,s;if(typeof window<"u"){let{search:r}=window.location;!window.location.search&&window.location.hash?.indexOf("?")>-1&&(r=window.location.hash.substring(window.location.hash.indexOf("?")));const m=r.substring(1).split("&");for(let y=0;y<m.length;y++){const b=m[y].indexOf("=");b>0&&m[y].substring(0,b)===c&&(s=m[y].substring(b+1))}}return s}},gw={name:"hash",lookup(o){let{lookupHash:c,lookupFromHashIndex:s}=o,r;if(typeof window<"u"){const{hash:f}=window.location;if(f&&f.length>2){const m=f.substring(1);if(c){const y=m.split("&");for(let b=0;b<y.length;b++){const v=y[b].indexOf("=");v>0&&y[b].substring(0,v)===c&&(r=y[b].substring(v+1))}}if(r)return r;if(!r&&s>-1){const y=f.match(/\/([a-zA-Z-]*)/g);return Array.isArray(y)?y[typeof s=="number"?s:0]?.replace("/",""):void 0}}}return r}};let dl=null;const _p=()=>{if(dl!==null)return dl;try{if(dl=typeof window<"u"&&window.localStorage!==null,!dl)return!1;const o="i18next.translate.boo";window.localStorage.setItem(o,"foo"),window.localStorage.removeItem(o)}catch{dl=!1}return dl};var hw={name:"localStorage",lookup(o){let{lookupLocalStorage:c}=o;if(c&&_p())return window.localStorage.getItem(c)||void 0},cacheUserLanguage(o,c){let{lookupLocalStorage:s}=c;s&&_p()&&window.localStorage.setItem(s,o)}};let fl=null;const Fp=()=>{if(fl!==null)return fl;try{if(fl=typeof window<"u"&&window.sessionStorage!==null,!fl)return!1;const o="i18next.translate.boo";window.sessionStorage.setItem(o,"foo"),window.sessionStorage.removeItem(o)}catch{fl=!1}return fl};var yw={name:"sessionStorage",lookup(o){let{lookupSessionStorage:c}=o;if(c&&Fp())return window.sessionStorage.getItem(c)||void 0},cacheUserLanguage(o,c){let{lookupSessionStorage:s}=c;s&&Fp()&&window.sessionStorage.setItem(s,o)}},vw={name:"navigator",lookup(o){const c=[];if(typeof navigator<"u"){const{languages:s,userLanguage:r,language:f}=navigator;if(s)for(let m=0;m<s.length;m++)c.push(s[m]);r&&c.push(r),f&&c.push(f)}return c.length>0?c:void 0}},bw={name:"htmlTag",lookup(o){let{htmlTag:c}=o,s;const r=c||(typeof document<"u"?document.documentElement:null);return r&&typeof r.getAttribute=="function"&&(s=r.getAttribute("lang")),s}},Sw={name:"path",lookup(o){let{lookupFromPathIndex:c}=o;if(typeof window>"u")return;const s=window.location.pathname.match(/\/([a-zA-Z-]*)/g);return Array.isArray(s)?s[typeof c=="number"?c:0]?.replace("/",""):void 0}},xw={name:"subdomain",lookup(o){let{lookupFromSubdomainIndex:c}=o;const s=typeof c=="number"?c+1:1,r=typeof window<"u"&&window.location?.hostname?.match(/^(\w{2,5})\.(([a-z0-9-]{1,63}\.[a-z]{2,6})|localhost)/i);if(r)return r[s]}};let Jg=!1;try{document.cookie,Jg=!0}catch{}const Wg=["querystring","cookie","localStorage","sessionStorage","navigator","htmlTag"];Jg||Wg.splice(1,1);const ww=()=>({order:Wg,lookupQuerystring:"lng",lookupCookie:"i18next",lookupLocalStorage:"i18nextLng",lookupSessionStorage:"i18nextLng",caches:["localStorage"],excludeCacheFor:["cimode"],convertDetectedLanguage:o=>o});class eh{constructor(c){let s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.type="languageDetector",this.detectors={},this.init(c,s)}init(){let c=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{languageUtils:{}},s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=c,this.options=uw(s,this.options||{},ww()),typeof this.options.convertDetectedLanguage=="string"&&this.options.convertDetectedLanguage.indexOf("15897")>-1&&(this.options.convertDetectedLanguage=f=>f.replace("-","_")),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=r,this.addDetector(mw),this.addDetector(pw),this.addDetector(hw),this.addDetector(yw),this.addDetector(vw),this.addDetector(bw),this.addDetector(Sw),this.addDetector(xw),this.addDetector(gw)}addDetector(c){return this.detectors[c.name]=c,this}detect(){let c=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.order,s=[];return c.forEach(r=>{if(this.detectors[r]){let f=this.detectors[r].lookup(this.options);f&&typeof f=="string"&&(f=[f]),f&&(s=s.concat(f))}}),s=s.filter(r=>r!=null&&!dw(r)).map(r=>this.options.convertDetectedLanguage(r)),this.services&&this.services.languageUtils&&this.services.languageUtils.getBestMatchFromCodes?s:s.length>0?s[0]:null}cacheUserLanguage(c){let s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.caches;s&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(c)>-1||s.forEach(r=>{this.detectors[r]&&this.detectors[r].cacheUserLanguage(c,this.options)}))}}eh.type="languageDetector";const Cw={create:"创建",delete:"删除",save:"保存",cancel:"取消",confirm:"确定",edit:"编辑",close:"关闭",back:"返回",next:"下一步",refresh:"刷新",submit:"提交",reset:"重置",search:"搜索",add:"添加",remove:"移除",update:"更新",upload:"上传",download:"下载",export:"导出",import:"导入",copy:"复制",paste:"粘贴",cut:"剪切"},Aw={loading:"加载中...",processing:"处理中...",success:"操作成功",failed:"操作失败",saving:"保存中...",deleting:"删除中...",uploading:"上传中...",downloading:"下载中...",completed:"已完成",pending:"待处理",active:"活跃",inactive:"未激活",enabled:"已启用",disabled:"已禁用"},Tw={yes:"是",no:"否",ok:"好的",all:"全部",none:"无",or:"或",and:"和",more:"更多",less:"更少",unknown:"未知",optional:"可选",required:"必填",default:"默认",custom:"自定义"},kw="路径",Ew="创建时间",Nw={init:{description:""},clear:{description:""},compact:{description:""},agents:{description:""},settings:{description:""},help:{description:""}},Mw={sendImage:""},jw={chinese:"",english:""},Dw={pageTitle:"",metaDescription:"",nav:{enterWorkspace:""},hero:{title:"",subtitle:"",description:"",startNow:"",viewSource:""},features:{title:"",subtitle:"",modernWeb:{title:"",description:""},multiModel:{title:"",description:""},agentSystem:{title:"",description:""},fileManagement:{title:"",description:""},professionalTools:{title:"",description:""},secureReliable:{title:"",description:""}},quickStart:{title:"",subtitle:"",endUserTitle:"",endUserDescription:"",developerTitle:"",developerDescription:""},cta:{title:"",subtitle:"",start:""},footer:{description:"",copyright:"",product:"",workspace:"",sourceCode:"",releases:"",support:"",documentation:"",issues:"",discussions:""}},Rw={actions:Cw,status:Aw,common:Tw,path:kw,createdAt:Ew,systemCommands:Nw,agentChat:Mw,languageSwitcher:jw,landing:Dw},Pw={backToHome:"返回首页",documentation:"文档目录"},Ow={dashboard:"首页",projects:"项目管理",agents:"Agent管理",scheduledTasks:"定时任务",skills:"技能管理",plugins:"插件管理",mcp:"MCP服务",commands:"自定义命令",subagents:"Subagent管理",settings:"系统管理",settingsSubmenu:{general:"外观设置",suppliers:"供应商管理",memory:"全局记忆",mcpAdmin:"MCP Admin",cloudflareTunnel:"外网访问"}},zw={version:"版本 {{version}}",apiServerStatus:{connected:"API服务器设置 - 连接正常",disconnected:"API服务器设置 - 连接失败",checking:"API服务器设置 - 检查中..."},serviceStatus:{normal:"服务正常",unavailable:"服务不可用",checking:"检查中..."}},Lw={title:"登录",subtitle:"请输入密码以继续",passwordLabel:"密码",passwordPlaceholder:"请输入密码",loginButton:"登录",loggingIn:"登录中...",footer:"如果您忘记了密码,请联系管理员",manageServices:"管理后端服务",serviceName:"服务名称",serviceUrl:"服务地址",current:"当前",testConnection:"测试连接",switchTo:"切换到此服务",edit:"编辑",delete:"删除",save:"保存",cancel:"取消",add:"添加",addService:"添加新服务",rerunOnboarding:"重新运行配置向导",checkingConnection:"正在检查连接...",autoLoggingIn:"正在自动登录...",noPasswordRequired:"此服务未设置密码,可直接登录",enterSystem:"进入系统"},Uw={pageTitle:"AgentStudio - Agent 工作台 | Claude Agent SDK 驱动",metaDescription:"Agent for Work - 本地的 Agent 工作台,由 Claude Agent SDK 强力驱动。数据完全私有,支持定时任务、A2A 协议、自定义 Agent。",nav:{enterWorkspace:"进入工作台",docs:"文档",wechat:"微信群"},hero:{badge:"由 Claude Agent SDK 强力驱动",title:"Agent for Work",subtitle:"本地的 Agent 工作台",description:"真正运行在你电脑上的私人 AI 助理。数据完全私有,安全可控,支持定时任务自动化和多 Agent 协作。",startNow:"开始使用",viewSource:"查看源码",copyCommand:"复制命令",installHint:"复制下面的命令到终端运行,即可开始使用",copy:"复制",copied:"已复制"},preview:{title:"产品预览",subtitle:"直观的 Web 界面,让 AI 工作更高效",chatAlt:"聊天界面截图",chatCaption:"聊天界面 - 与 Agent 对话,可视化展示工具调用",mcpAlt:"MCP 服务管理截图",mcpCaption:"MCP 服务管理 - 一键导入 Claude Code 配置"},features:{title:"核心特性",subtitle:"为 AI 工作自动化设计的完整解决方案",localWorkspace:{title:"本地的 Agent 工作台",point1:"运行在你的电脑上,真正意义的本地工作台",point2:"数据完全私有,不上传云端",point3:"文件、代码、对话记录都在掌控之中"},webExperience:{title:"Web 版交互体验",point1:"告别命令行,拥抱友好的 Web 界面",point2:"工具调用可视化呈现,对话体验更鲜活",point3:"内置文件浏览器,对话同时查看项目文件"},sdkFeatures:{title:"Claude Agent SDK 全家桶",skills:"技能系统",commands:"自定义命令",plugins:"插件生态",memory:"项目记忆",subagent:"子 Agent",multiModel:"多模型支持",anthropicCompat:"支持 Claude、GLM、DeepSeek、Kimi K2、MiniMax 等兼容 Anthropic 接口规范的模型"}},scheduler:{badge:"定时任务调度",title:"让 Agent 按计划自动执行",description:"真正实现 AI 工作自动化!设定时间规则,Agent 将自动完成重复性工作,解放你的时间。",scenariosTitle:"典型应用场景",scenario1:{title:"每日进度日报",desc:"每天早上 9 点,自动生成项目进度日报"},scenario2:{title:"代码自动审查",desc:"每 2 小时检查代码仓库,自动提交审查意见"},scenario3:{title:"周会纪要整理",desc:"每周五自动整理本周会议纪要并归档"},scenario4:{title:"月度数据分析",desc:"每月 1 号自动生成业务数据分析报告"}},a2a:{badge:"A2A 协议",title:"智能体协作网络",description:"让多个 Agent 形成协同工作的网络。本地 Agent、远程 Agent 互联互通,构建你的私人 AI 团队。",scenariosTitle:"典型应用场景",scenario1:{title:"秘书 Agent 调度",desc:"一个秘书 Agent 统一接收任务,自动调度其他项目 Agent 执行具体工作"},scenario2:{title:"本地 ↔ 远程协作",desc:"本地电脑与远程开发机上的 Agent 互相通讯,协同完成任务"},scenario3:{title:"移动端随时访问",desc:"通过移动通讯端与本地 Agent 交互,随时随地工作(内测中)"}},customAgent:{badge:"自定义 Agent",title:"打造你的专属 Agent",description:"无需编写代码,通过界面配置即可定制专属 Agent。内置 Claude Code Agent 开箱即用,满足各种工作场景。",example1:"PPT 制作 Agent",example2:"秘书 Agent",example3:"文档写作 Agent",example4:"代码审查 Agent"},comparison:{title:"AgentStudio vs Claude Code",subtitle:"同样的 Claude Agent SDK,更友好的使用体验",dimension:"对比维度",interface:"交互形态",webInterface:"界面",cli:"命令行 (CLI)",targetUsers:"目标用户",everyone:"所有人",developers:"主要开发者",toolDisplay:"工具展示",visual:"可视化呈现",textOnly:"纯文本",fileBrowser:"文件浏览器",agentCustom:"Agent 定制",scheduler:"定时任务",a2a:"A2A 协议",mobileAccess:"移动端访问",beta:"内测中"},cta:{title:"准备好开始你的 AI 工作自动化了吗?",subtitle:"一行命令,即刻启动你的本地 Agent 工作台",start:"开始使用"},footer:{description:"Agent for Work - 本地的 Agent 工作台,由 Claude Agent SDK 强力驱动。",copyright:"© 2026 AgentStudio. GPL v3 License.",product:"产品",workspace:"工作台",sourceCode:"源码",releases:"发布版本",support:"支持",documentation:"文档",issues:"问题反馈",wechat:"微信群"},wechat:{title:"加入微信群",fallback:"二维码失效?请添加微信号:",wechatId:"talk4kong",tip:"扫码或添加微信号,即可加入交流群"}},_w={title:"Agent管理",subtitle:"管理专门的 AI 代理",createButton:"创建助手",editButton:"编辑助手",deleteButton:"删除助手",enableButton:"启用助手",disableButton:"禁用助手",useButton:"使用",startUsingButton:"开始使用助手",noAgents:"暂无助手",noAgentsSearch:"未找到匹配的助手",searchPlaceholder:"搜索助手...",createFirst:"创建你的第一个智能助手",adjustSearch:"尝试调整搜索条件",loading:"正在加载智能助手...",filter:{all:"全部",enabled:"已启用",disabled:"已禁用"},table:{agent:"智能助手",type:"类型",config:"配置",tools:"工具",status:"状态",actions:"操作",maxTurns:"最大轮次",unlimited:"不限制",permission:"权限",toolsCount:"{{count}} 个工具"},form:{create:"创建助手",edit:"编辑助手",name:"名称",description:"描述",maxTurns:"最大轮次",maxTurnsPlaceholder:"不限制",maxTurnsError:"最大轮次必须在1-100之间",maxTurnsExceeded:"最大轮次不能超过{{maximum}}",permissionMode:"权限模式",icon:"图标",primaryColor:"主题颜色",enabledTools:"启用的工具",selectTools:"选择工具",toolsRegular:"常规工具 {{count}} 个",toolsMcp:"MCP工具 {{count}} 个",systemPrompt:"系统提示词",systemPromptPlaceholder:"输入助手的系统提示词...",nameRequired:"请填写助手名称",save:"保存",cancel:"取消"},permissions:{default:"默认",acceptEdits:"自动接受编辑",bypassPermissions:"绕过权限检查",plan:"规划模式"},status:{enabled:"已启用",disabled:"已禁用"},errors:{createFailed:"创建失败,请重试。",saveFailed:"保存失败,请重试。",deleteFailed:"删除失败,请重试。",toggleFailed:"操作失败,请重试。",builtinCannotDelete:"内置助手无法删除,但可以禁用。"},confirmDelete:`确定要删除助手"{{name}}"吗?
84
84
 
85
- 此操作无法撤销,相关的所有会话也会被删除。`},Fw={title:"项目管理",subtitle:"管理你的所有工作项目",createButton:"创建新项目",selectType:"选择助手类型创建工作项目",noProjects:"暂无项目",searchPlaceholder:"搜索项目...",loading:"正在加载项目...",filter:{all:"全部",active:"活跃",inactive:"未活跃"},table:{project:"项目",agent:"助手",lastActive:"最后活跃",sessions:"会话",actions:"操作",sessionsCount:"{{count}} 个会话"},form:{create:"创建项目",edit:"编辑项目",name:"项目名称",namePlaceholder:"输入项目名称",nameRequired:"项目名称 *",agentType:"选择助手类型 *",agentTypePlaceholder:"选择一个助手类型",directory:"项目目录",directoryNote:"项目将在此目录下创建一个新文件夹",description:"项目描述",descriptionPlaceholder:"简单描述这个项目的用途...",save:"保存",cancel:"取消"},actions:{open:"打开",openInNewTab:"在新标签页打开",edit:"编辑",delete:"删除"},status:{active:"活跃",inactive:"未活跃",never:"从未"},errors:{createFailed:"创建项目失败",updateFailed:"更新项目失败",deleteFailed:"删除项目失败",loadFailed:"加载项目失败"},deleteConfirm:"确定要删除项目吗?",deleteNote:"注意:这只会从列表中移除项目,不会删除实际的文件目录。",deleteSuccess:"项目已删除"},Bw={title:"对话",inputPlaceholder:"输入消息...",aiTyping:"AI正在输入中",newSession:"新对话",sessionHistory:"历史会话",loading:"正在加载智能助手...",agentNotFound:"助手未找到",agentNotFoundDesc:"无法找到指定的智能助手,可能已被删除或禁用。",agentDisabled:"助手已禁用",agentDisabledDesc:'智能助手 "{{name}}" 目前已被禁用,无法使用。',closePage:"关闭页面",tabNotification:{working:"🤖 正在工作",completed:"✅ 已完成",error:"❌ 发生错误"}},Hw={title:"首页",welcome:"欢迎回到Claude Code工作台",defaultProjectName:"默认工作空间",loading:"加载中...",creatingDefaultProject:"正在创建默认工作空间...",noAgentsEnabled:"没有可用的 Agent,请先启用一个 Agent",goToAgents:"前往 Agent 管理",selectProject:"选择项目",noProjects:"暂无项目",createNewProject:"创建新项目",noProjectsHint:{title:"还没有项目",description:"创建一个项目来开始与 AI 协作",createButton:"一键创建默认项目",creating:"创建中..."},projectCreated:{title:"项目创建成功",message:"已经为您创建项目:{{name}},你现在可以开始与 Agent 工作了。"},quickLinks:{title:"快捷入口",projects:"项目管理",modelSettings:"模型供应商",scheduledTasks:"定时任务",customAgents:"自定义 Agent"},sessions:{title:"活跃会话",clearAll:"清除全部",close:"关闭会话",closed:"会话已关闭",closedMessage:"会话已成功关闭",closeFailed:"关闭失败",closeError:"无法关闭会话",allCleared:"全部清除",allClearedMessage:"已清除 {{count}} 个会话",clearFailed:"清除失败",clearError:"无法清除会话",confirmed:"已确认",pending:"等待中",idle:"空闲",heartbeatTimeout:"心跳超时",session:"会话"},selectProjectToStart:"请选择一个项目开始聊天",stats:{agentManagement:"Agent管理",workProjects:"工作项目",slashCommands:"Slash命令",activeSessions:"活跃会话"},recentAgents:{title:"常用助手",viewAll:"查看全部",types:{slides:"演示文稿","claude-code":"Claude Code"},noAgents:"暂无可用助手",goEnable:"去启用助手"},quickActions:{title:"快速操作",createProject:{title:"创建新项目",description:"选择助手类型创建工作项目"},createAgent:{title:"创建新助手",description:"配置自定义AI助手"},addMcp:{title:"添加MCP服务",description:"连接新的MCP服务器"},viewAnalytics:{title:"查看统计",description:"分析使用情况和性能"}},overview:"概览",statistics:"统计信息",recentActivity:"最近活动"},qw={title:"设置",general:{title:"外观设置",description:"配置界面主题和语言",interfaceSettings:"外观设置",theme:{label:"主题",description:"选择界面主题模式",auto:"跟随系统",light:"浅色模式",dark:"深色模式"},language:{label:"语言",description:"选择界面语言"},password:{title:"访问密码",checking:"正在检查...",currentlySet:"当前已设置访问密码",currentlyNotSet:"当前未设置密码,可免密登录",description:"设置密码后,登录时需要输入密码。留空并保存可清除密码,启用免密登录。",newPassword:"新密码",newPasswordPlaceholder:"输入新密码(留空则清除密码)",confirmPassword:"确认密码",confirmPasswordPlaceholder:"再次输入密码",save:"保存密码",clear:"清除密码",mismatch:"两次输入的密码不一致",tooShort:"密码长度至少为4位",setSuccess:"密码设置成功,下次登录时生效",clearSuccess:"密码已清除,系统现在可以免密登录",saveFailed:"保存密码失败",clearFailed:"清除密码失败"}},api:"API服务器设置",memory:"全局记忆",memorySettings:{title:"全局记忆设置",description:"全局记忆是所有AI助手共享的背景信息,包含您的工作偏好、项目信息等",fileSourceInfo:"内容来自用户目录下的 ~/.claude/CLAUDE.md 文件。",memoryContent:"记忆内容",edit:"编辑",cancelEdit:"取消编辑",refresh:"刷新",refreshing:"刷新中...",placeholder:"在这里编写您的全局记忆内容...",cancel:"取消",saveMemory:"保存记忆",loading:"正在加载全局记忆...",noMemory:"暂无全局记忆内容",clickEditToStart:'点击"编辑"按钮开始添加',infoAutoLoad:"全局记忆将在每次对话时自动加载,为AI提供背景信息",infoSuggestions:"建议包含:工作偏好、项目背景、个人信息等",infoFileLocation:"文件位置:~/.claude/CLAUDE.md",saveSuccess:"全局记忆已保存",saveFailed:"保存失败,请重试"},supplier:{title:"供应商管理",subtitle:"管理多个模型供应商,指定可执行路径、别名和环境变量",addSupplier:"添加供应商",noSuppliers:"还没有配置模型供应商",clickToAddFirst:'点击"添加供应商"来配置第一个模型供应商',systemLabel:"系统",defaultLabel:"默认",pathLabel:"路径",envVarsLabel:"环境变量",modelsLabel:"支持的模型",setAsDefault:"设为默认",copyCommand:"复制命令",edit:"编辑",delete:"删除",confirmDelete:'确定要删除供应商 "{{alias}}" 吗?',currentSupplier:{title:"当前供应商",checking:"检查中...",checkVersion:"检查供应商",claudeDesc:"AI编程助手",updating:"更新中...",update:"更新",willUse:"将使用",toUpdate:"更新",nodejsDesc:"JavaScript运行环境",preferred:"推荐",packageManager:"包管理器",lastChecked:"最后检查时间",clickToCheck:'点击"检查供应商"获取供应商信息',updateSuccess:"更新成功",updateFailed:"更新失败",info1:"Claude Code 是 AI 编程助手,支持代码生成、编辑和项目管理",info2:"Node.js 是系统运行的基础环境",info3:"支持多种包管理器:npm、pnpm、yarn(优先级:pnpm > yarn > npm)",info4:"系统会自动选择推荐的包管理器进行更新操作",info5:"建议保持 Claude Code 为最新版本以获得最佳体验"},templates:{title:"供应商快速配置模板",description:"选择预设模板快速配置第三方API供应商,自动填充环境变量配置",providers:{glm:{name:"GLM (智谱AI)",description:"使用智谱AI的GLM模型服务,兼容Anthropic API"},deepseek:{name:"DeepSeek",description:"使用DeepSeek的高性能模型服务"},kimi:{name:"Kimi K2 (月之暗面)",description:"使用Kimi K2模型服务,支持Anthropic API兼容"},minimax:{name:"MiniMax",description:"使用MiniMax的高性能模型服务,支持Anthropic API兼容"}}},form:{createTitle:"添加新供应商",editTitle:"编辑供应商",supplierName:"供应商名称",supplierNamePlaceholder:"例如: Claude Code v1.2.3",alias:"别名",aliasPlaceholder:"例如: claude-1.2.3",description:"描述",descriptionPlaceholder:"供应商描述(可选)",executablePath:"可执行文件路径",executablePathPlaceholder:"不指定则使用系统默认路径",browseFile:"浏览文件",envVars:"环境变量",varName:"变量名",varValue:"变量值",emptyValue:"未设置",getApiKey:"获取密钥",models:"模型配置",modelId:"模型ID",modelName:"模型名称",visionModel:"视觉模型",addModel:"添加模型",cancel:"取消",saving:"保存中...",update:"更新",create:"创建",selectExecutable:"选择Claude可执行文件"},errors:{requiredFields:"请填写所有必填字段",saveFailed:"保存失败",deleteFailed:"删除失败",setDefaultFailed:"设置默认供应商失败",cannotDeleteSystem:"不能删除系统供应商",copyFailed:"复制失败,请手动复制以下命令:"},success:{createVersion:"供应商创建成功",updateVersion:"供应商更新成功",deleteVersion:"供应商删除成功",setDefault:'已将 "{{alias}}" 设置为默认供应商',copyCommand:"命令已复制到剪贴板"}},cloudflare:{title:"Cloudflare Tunnel",description:"一键启用外网访问,通过 Cloudflare Tunnel 将本地服务暴露到公网",wizard:{showGuide:"显示设置向导",steps:{intro:"介绍",credentials:"配置凭证",create:"创建隧道",start:"启动服务",done:"完成"},intro:{title:"欢迎使用 Cloudflare Tunnel",description:"Cloudflare Tunnel 可以让你无需公网 IP,就能将本地运行的 AgentStudio 暴露到公网,实现随时随地访问。",benefit1:"无需公网 IP 或路由器配置",benefit2:"自动 HTTPS 加密,安全可靠",benefit3:"利用 Cloudflare 全球 CDN 加速",benefit4:"免费使用,快速部署",requirements:"前置要求",req1:"一个 Cloudflare 免费账号",req2:"Python 3 环境(用于调用 API)",req3:"Docker 或 cloudflared CLI(用于启动隧道)",getStarted:"开始设置"},credentials:{howToGet:"如何获取 Cloudflare 凭证?",step1:"访问 Cloudflare Dashboard 创建 API Token",step2:"配置权限:Cloudflare Tunnel - Edit",step3:"复制 Account ID 和 API Token",openDashboard:"打开 Cloudflare Dashboard",saveAndContinue:"保存并继续"},create:{description:"现在可以创建你的第一个 Tunnel 了。你可以自定义子域名前缀,或者留空让系统自动生成。",createButton:"一键创建 Tunnel"},start:{tunnelCreated:"Tunnel 创建成功!",nextStep:"现在需要启动 cloudflared 客户端来建立连接。",yourPublicUrl:"你的公网访问地址",importantNote:"重要提示",needToStartClient:"Tunnel 已创建,但还需要启动 cloudflared 客户端才能真正建立连接。请按照下方步骤操作。",howToStart:"如何启动 Tunnel?",option1:"方式一:使用 Docker",option2:"方式二:使用 cloudflared CLI",recommended:"推荐",copy:"复制",copied:"已复制",installCloudfared:"安装 cloudflared",runCommand:"运行命令",finishSetup:"完成设置"},done:{title:"设置完成!",description:"你的 AgentStudio 现在可以通过公网访问了",deleteTunnel:"删除 Tunnel",reminder:"温馨提示",keepClientRunning:"请保持 cloudflared 客户端运行,关闭后将无法访问公网地址。"}},credentials:{title:"Cloudflare 凭证配置",configured:"凭证已配置",update:"更新凭证",apiToken:"API Token",accountId:"Account ID",save:"保存",saving:"保存中...",cancel:"取消",help:"获取 API Token 和 Account ID,请访问"},tunnel:{title:"Tunnel 管理",active:"当前激活的 Tunnel",publicUrl:"公网访问地址",name:"Tunnel 名称",localPort:"本地端口",createdAt:"创建时间",subdomain:"子域名前缀(可选)",subdomainPlaceholder:"留空自动生成随机子域名",subdomainHelp:"留空将自动生成一个随机子域名",create:"一键启用外网访问",creating:"创建中...",details:"Tunnel 详情",token:"Tunnel Token",cliCommand:"CLI 启动命令"},credentialsSaved:"Cloudflare 凭证保存成功",tunnelCreated:"Tunnel 创建成功!现在可以通过公网 URL 访问",tunnelDeleted:"Tunnel 已删除",confirmDelete:"确定要删除这个 Tunnel 吗?",errors:{credentialsRequired:"请填写 API Token 和 Account ID"}},language:"语言设置",subagents:{title:"Subagent 管理",subtitle:"管理专门的 AI 子代理",loading:"正在加载 Subagents...",loadFailed:"加载失败",loadFailedMessage:"无法加载 Subagents 列表",retry:"重试",searchPlaceholder:"搜索 Subagents...",createButton:"新建 Subagent",noSubagents:"还没有 Subagents",noSubagentsSearch:"未找到匹配的 Subagents",adjustSearch:"尝试调整搜索条件",createFirst:"创建你的第一个专门的 AI 子代理来处理特定任务",table:{subagent:"Subagent",tools:"工具",createdAt:"创建时间",actions:"操作",toolsCount:"{{count}} 个工具",inheritSettings:"继承对话设置"},actions:{edit:"编辑",view:"查看",editTitle:"编辑 Subagent",viewTitle:"查看 Subagent",deleteTitle:"删除 Subagent"},source:{local:"本地",plugin:"插件"},deleteConfirm:{title:"确认删除",message:'确定要删除 Subagent "{{name}}" 吗?',warning:"此操作无法撤销。",cancel:"取消",delete:"删除"}},mcpAdmin:{title:"MCP Admin Server",subtitle:"配置 MCP Admin API,允许外部 AI 工具管理您的 AgentStudio",refresh:"刷新",serverStatus:"服务器状态",status:{status:"状态",active:"运行中",version:"版本",tools:"可用工具",activeKeys:"活跃密钥",unavailable:"服务不可用"},endpoint:"端点",apiKeys:"API 密钥",createKey:"创建密钥",noKeys:"暂无 API 密钥",noKeysHint:"创建一个 API 密钥以允许外部工具访问",createdAt:"创建于",lastUsed:"最后使用",revoked:"已撤销",revokeKey:"撤销密钥",confirmRevoke:"确定要撤销此 API 密钥吗?此操作无法撤销。",availableTools:"可用管理工具",createKeyTitle:"创建 API 密钥",keyDescription:"密钥描述",keyDescriptionPlaceholder:"例如:Cursor MCP 连接",fullPermissions:"此密钥将拥有完整管理权限",cancel:"取消",create:"创建",creating:"创建中...",keyCreated:"API 密钥已创建!",configTitle:"MCP 配置",saveKeyWarning:"请立即保存此密钥!它只会显示这一次,无法再次查看。",yourApiKey:"您的 API 密钥",configFile:"配置文件",copyConfig:"复制配置",done:"完成",showKey:"显示密钥",hideKey:"隐藏密钥",copyKey:"复制密钥",viewConfig:"查看配置",limitTools:"限制可用工具",selectAll:"全选",deselectAll:"取消全选",selectedToolsCount:"已选择 {{count}} 个工具",limitedTools:"限制 {{count}} 个工具",allToolsAccess:"所有工具",disabled:"已停用",enableKey:"启用密钥",disableKey:"停用密钥",editKey:"编辑密钥",editKeyTitle:"编辑 API 密钥",save:"保存",saving:"保存中...",toolParams:"参数",noParams:"无参数",success:{copied:"已复制到剪贴板",keyRevoked:"API 密钥已撤销",keyUpdated:"API 密钥已更新",keyEnabled:"API 密钥已启用",keyDisabled:"API 密钥已停用"},errors:{configFetch:"获取配置失败",createFailed:"创建密钥失败",revokeFailed:"撤销密钥失败",copyFailed:"复制失败",descriptionRequired:"请输入密钥描述",updateFailed:"更新密钥失败",toggleFailed:"切换密钥状态失败"},help:{button:"使用帮助",title:"MCP Admin Server 使用帮助",whatIs:"什么是 MCP Admin Server?",whatIsDesc:"MCP Admin Server 是一个标准的 MCP(Model Context Protocol)服务器,允许其他 AI 工具(如 Cursor、Claude Desktop)通过 MCP 协议远程管理您的 AgentStudio。通过这个接口,您可以在其他 AI 工具中直接查询和管理 AgentStudio 的项目、智能体、MCP 服务器等。",howToUse:"如何使用?",step1:"在本页面创建一个 Admin API 密钥",step2:"点击「查看配置」获取配置代码片段",step3:"将配置添加到 Cursor 或 Claude Desktop 的 MCP 配置文件中",step4:"重启 Cursor/Claude Desktop,然后就可以在对话中使用管理工具了",availableTools:"可用工具示例",toolListProjects:"列出所有项目",toolGetProject:"获取项目详情",toolListAgents:"列出所有智能体",toolGetAgent:"获取智能体详情",toolHealthCheck:"系统健康检查",examples:"使用示例",examplePrompt:"在 Cursor 中,你可以直接对 AI 说:"}},apiSettings:{title:"API服务器设置",hostLabel:"API服务器地址",hostPlaceholder:"http://localhost:4936 或 https://your-domain.com",testConnection:"测试连接",quickSelect:"快捷选择:",connectionStatus:"连接状态",status:{success:"连接成功",error:"连接失败",untested:"未测试"},serverError:"服务器响应错误: {{status}} {{statusText}}",connectionFailed:"连接失败: {{message}}",connectionUnknownError:"连接失败: 未知错误",enterApiHost:"请输入API服务器地址",settingsSavedRefresh:"设置已保存,页面将刷新以应用新设置",usage:{title:"使用说明:",localDev:"在本地开发时,使用",production:"在生产环境中,使用您的服务器域名,如",cors:"确保服务器支持CORS访问,允许前端域名访问",refresh:"修改后需要刷新页面才能生效"},resetToDefault:"重置为默认",saveSettings:"保存设置"}},Vw={title:"数据分析",usage:"使用统计",performance:"性能指标"},Gw={title:"MCP服务",subtitle:"管理和监控Model Context Protocol服务器",loading:"正在加载MCP配置...",searchPlaceholder:"搜索配置名称、命令或参数...",addServer:"添加服务",noServers:"还没有MCP服务配置",noResults:"未找到匹配的配置",adjustSearch:"尝试调整搜索条件",addFirstServer:"添加你的第一个MCP服务配置",confirmDelete:'确定要删除 "{{name}}" 配置吗?',validateAll:"验证全部",stats:{total:"总计",active:"活动",error:"错误",validating:"验证中",tools:"工具"},import:{button:"从Claude Code导入",importing:"导入中...",noConfigFound:"没有找到Claude Code的MCP配置(从 ~/.claude.json 读取)",success:"成功导入 {{imported}} 个MCP服务器配置{{skipped, select, 0{} other{,跳过 {{skipped}} 个已存在的配置}}",allExist:"所有配置都已存在,没有导入新的配置"},table:{server:"服务",type:"类型",status:"状态",tools:"可用工具",actions:"操作",toolsCount:"{{count}} 个工具",noTools:"无工具"},status:{active:"可用",error:"错误",validating:"验证中",unvalidated:"未验证"},actions:{validate:"重新验证",copyCommand:"复制命令",edit:"编辑",view:"查看",delete:"删除配置"},source:{local:"本地",plugin:"插件"},modal:{addTitle:"添加MCP服务配置",editTitle:"编辑MCP服务配置",saving:"保存中...",saveConfig:"保存配置",addConfig:"添加配置"},form:{serverName:"服务名称 *",serverNamePlaceholder:"例如:playwright",nameNotEditable:"服务名称不可修改",nameRequired:"请输入服务名称",mcpType:"MCP 类型 *",stdioOption:"Stdio (本地进程)",httpOption:"HTTP (远程服务)",selectConnectionType:"选择 MCP 服务器的连接类型",configuration:"配置 * (JSON格式)",configInvalid:"配置格式不正确,请确保包含必需的 {{fields}} 字段,并且格式正确",configFormatError:"⚠️ 配置格式不正确,请确保包含必需的 {{fields}} 字段",requiredFields:"必需字段:",requiredFieldsStdio:"type, command 和 args",requiredFieldsHttp:"type 和 url",optionalFields:"可选字段:",typeField:'字符串,MCP 类型("stdio" 或 "http")',commandField:'字符串,执行命令(如 "npx", "uvx")',argsField:"数组,命令参数",urlField:"字符串,HTTP MCP 服务器的 URL",timeoutField:"数字,超时时间(毫秒)",autoApproveField:"数组,自动批准的操作"},errors:{validationFailed:"验证失败",networkError:"网络错误或服务不可用",deleteFailed:"删除配置失败",importFailed:"导入失败",saveFailed:"保存配置失败",copyFailed:"复制失败"},commandCopied:"命令已复制到剪贴板"},Iw={title:"自定义命令",subtitle:"管理 Slash Commands",loading:"加载命令中...",searchPlaceholder:"搜索命令...",createButton:"新建命令",error:{loadFailed:"加载失败",cannotLoadCommands:"无法加载自定义命令",retry:"重试"},empty:{noCommands:"还没有自定义命令",noMatchingCommands:"未找到匹配的命令",adjustSearch:"尝试调整搜索条件或筛选器",createFirst:"创建你的第一个自定义 Slash Command"},table:{command:"命令",model:"模型",tools:"工具",createdAt:"创建时间",actions:"操作",inheritSettings:"继承对话设置",toolsCount:"{{count}} 个工具"},actions:{edit:"编辑",view:"查看",editCommand:"编辑命令",deleteCommand:"删除命令"},source:{local:"本地",plugin:"插件"},delete:{title:"删除命令",confirmMessage:'确定要删除命令 "/{{name}}" 吗?此操作无法撤销。',cancel:"取消",delete:"删除",deleting:"删除中..."}},Kw={title:"插件管理",subtitle:"管理插件市场和已安装插件",tabs:{marketplaces:"插件市场",browse:"浏览插件",installed:"已安装插件"},marketplaces:{title:"插件市场",subtitle:"管理插件市场源",addButton:"添加市场",searchPlaceholder:"搜索市场...",noMarketplaces:"还没有配置插件市场",addFirst:"添加你的第一个插件市场",table:{marketplace:"市场",type:"类型",plugins:"插件数",lastSync:"最后同步",actions:"操作"},types:{git:"Git 仓库",github:"GitHub",local:"本地目录"},actions:{sync:"同步",syncing:"同步中...",edit:"编辑",delete:"删除"},addModal:{title:"添加市场",editTitle:"编辑市场",name:"市场名称",namePlaceholder:"例如:official-plugins",type:"来源类型",typePlaceholder:"选择来源类型",source:"来源",sourcePlaceholderGit:"Git 仓库 URL",sourcePlaceholderGithub:"owner/repo 或完整 URL",sourcePlaceholderLocal:"本地目录路径",branch:"分支(可选)",branchPlaceholder:"main",description:"描述(可选)",descriptionPlaceholder:"市场描述",cancel:"取消",add:"添加",adding:"添加中...",save:"保存",saving:"保存中..."},confirmDelete:'确定要删除市场 "{{name}}" 吗?该市场的所有插件都会被卸载。'},browse:{title:"浏览插件",subtitle:"从市场发现和安装插件",searchPlaceholder:"搜索插件...",filters:{allMarketplaces:"所有市场",allTypes:"所有类型",showOnlyInstalled:"只显示已安装"},noPlugins:"没有可用插件",noMarketplaces:"还没有添加市场",goAddMarketplace:"添加市场以浏览插件",noResults:"未找到插件",adjustSearch:"尝试调整搜索条件",card:{from:"来自",version:"v{{version}}",by:"作者",installed:"已安装",install:"安装",installing:"安装中...",viewDetails:"查看详情"},actions:{details:"详情",install:"安装",uninstall:"卸载"},confirmUninstall:'确定要卸载插件 "{{name}}" 吗?',components:{commands:"{{count}} 个命令",agents:"{{count}} 个 Agent",skills:"{{count}} 个技能",hooks:"{{count}} 个钩子",mcpServers:"{{count}} 个 MCP 服务"},detailModal:{title:"插件详情",version:"版本",author:"作者",marketplace:"市场",updated:"最后更新",components:"组件",files:"文件",readme:"说明文档",noReadme:"无说明文档",install:"安装插件",installing:"安装中...",installed:"已安装",close:"关闭"}},installed:{title:"已安装插件",subtitle:"管理已安装的插件",searchPlaceholder:"搜索已安装插件...",filters:{all:"全部",enabled:"已启用",disabled:"已禁用",allMarketplaces:"所有市场"},noPlugins:"还没有安装插件",goBrowse:"浏览插件以安装",noResults:"未找到匹配的插件",table:{plugin:"插件",marketplace:"市场",version:"版本",status:"状态",components:"组件",actions:"操作"},status:{enabled:"已启用",disabled:"已禁用"},actions:{details:"详情",viewDetails:"查看详情",enable:"启用",enabling:"启用中...",disable:"禁用",disabling:"禁用中...",uninstall:"卸载"},confirmUninstall:'确定要卸载插件 "{{name}}" 吗?',detailModal:{title:"插件详情",basicInfo:"基本信息",version:"版本",author:"作者",marketplace:"市场",installedAt:"安装时间",status:"状态",components:"组件",commands:"命令",agents:"Agents",skills:"技能",hooks:"钩子",mcpServers:"MCP 服务",none:"无",files:"插件文件",viewFile:"查看文件",close:"关闭",enable:"启用",disable:"禁用",uninstall:"卸载"},fileViewer:{title:"文件查看器",loading:"加载中...",error:"加载文件失败",close:"关闭"}},messages:{installSuccess:"插件安装成功,请刷新以使用新插件",installError:"安装插件失败",enableSuccess:"插件启用成功,请刷新以使用该插件",enableError:"启用插件失败",disableSuccess:"插件已成功禁用",disableError:"禁用插件失败",uninstallSuccess:"插件已成功卸载",uninstallError:"卸载插件失败",marketplaceAddSuccess:"市场添加成功",marketplaceAddError:"添加市场失败",marketplaceSyncSuccess:"市场同步成功",marketplaceSyncError:"同步市场失败",marketplaceRemoveSuccess:"市场移除成功",marketplaceRemoveError:"移除市场失败"},detail:{back:"返回",root:"根目录",noDescription:"无描述",version:"版本",author:"作者",license:"许可证",components:"组件",type:"类型",name:"名称",description:"描述",actions:"操作",viewEntryFile:"查看入口文件",browseDirectory:"浏览目录",noComponents:"未找到组件",loadFailed:"加载插件详情失败",componentTypes:{command:"命令",agent:"Agent",skill:"技能",hook:"钩子",mcp:"MCP 服务"}}},Yw={title:"技能管理",subtitle:"管理你的专业技能库",loading:"加载技能中...",searchPlaceholder:"搜索技能...",createButton:"创建新技能",noSkills:"还没有技能",noSkillsSearch:"未找到匹配的技能",createFirst:"创建你的第一个专业技能",adjustSearch:"尝试调整搜索条件",card:{viewDetails:"查看详情",tools:"{{count}} 个工具",editSkill:"编辑技能",deleteSkill:"删除技能"},form:{name:"技能名称",namePlaceholder:"例如:网页开发专家",nameRequired:"请输入技能名称",description:"技能描述",descriptionPlaceholder:"描述这个技能的作用和适用场景...",systemPrompt:"系统提示词",systemPromptPlaceholder:"定义AI助手在启用此技能时的行为和专业知识...",tags:"标签",tagsPlaceholder:"添加相关标签,用逗号分隔",enabledTools:"启用的工具",selectTools:"选择工具",tools:"工具",allTools:"所有工具",save:"保存技能",cancel:"取消",saving:"保存中...",preview:{title:"预览",name:"技能名称",description:"技能描述",tools:"可用工具"}},modal:{createTitle:"创建新技能",editTitle:"编辑技能",saveSkill:"保存技能",updateSkill:"更新技能",close:"关闭"},delete:{title:"删除技能",confirmMessage:'确定要删除技能 "{{name}}" 吗?此操作无法撤销。',cancel:"取消",delete:"删除",deleting:"删除中..."},errors:{createFailed:"创建技能失败",updateFailed:"更新技能失败",deleteFailed:"删除技能失败",loadFailed:"加载技能失败"},success:{create:"技能创建成功",update:"技能更新成功",delete:"技能删除成功"},editor:{title:"技能编辑器",files:{title:"技能文件",addFile:"添加文件",createFile:"新建文件",uploadFile:"上传文件",noFiles:"还没有技能文件",fileActions:"文件操作",deleteFile:"删除文件",renameFile:"重命名文件",saveFile:"保存文件"},manifest:{title:"技能清单",name:"技能名称",description:"描述",version:"版本",author:"作者",license:"许可证",tags:"标签"},validation:{invalidYaml:"YAML 格式错误",missingFields:"缺少必需字段",invalidSkillName:"技能名称无效"}}},Qw={title:"A2A Protocol 管理",subtitle:"管理 Agent-to-Agent 通信协议",tabs:{overview:"概览",keys:"API密钥",external:"外部Agent",tasks:"任务监控"},overview:{agentIdentity:"Agent Identity",a2aAgentId:"A2A Agent ID",copy:"复制",projectId:"项目ID",agentType:"Agent类型",notEnabled:"此项目尚未启用A2A功能",enableHint:"创建API密钥后自动启用",agentCard:"Agent Card",quickStats:"快速统计",apiKeys:"API密钥",externalAgents:"外部Agent",activeTasks:"活跃任务"},keys:{title:"API密钥管理",createButton:"创建密钥",noKeys:"还没有API密钥",createFirst:"创建第一个API密钥",active:"Active",description:"描述",createdAt:"创建时间",lastUsed:"最后使用",usageCount:"使用次数",show:"显示",hide:"隐藏",delete:"删除",deleteConfirm:"确定要删除这个API密钥吗?此操作不可撤销。",createModal:{title:"创建API密钥",descriptionLabel:"描述 *",descriptionPlaceholder:"例如:生产环境密钥",descriptionHint:"用于标识此API密钥的用途,最多100个字符",descriptionRequired:"描述不能为空",descriptionTooLong:"描述不能超过100个字符",importantNote:"重要提示:",importantHint:"API密钥创建后只会完整显示一次,请妥善保存。",cancel:"取消",creating:"创建中...",createKey:"创建密钥"},copySuccess:"已复制到剪贴板",copyFailed:"复制失败"},external:{title:"外部Agent配置",addButton:"添加Agent",noAgents:"还没有配置外部Agent",addFirst:"添加第一个外部Agent",name:"Agent名称",url:"URL",apiKey:"API密钥",description:"描述",enabled:"启用",disabled:"禁用",enable:"启用",disable:"禁用",edit:"编辑",delete:"删除",deleteConfirm:"确定要删除这个外部Agent吗?此操作不可撤销。",addModal:{title:"添加外部Agent",editTitle:"编辑外部Agent",nameLabel:"Agent名称 *",namePlaceholder:"例如:数据分析Agent",nameRequired:"Agent名称不能为空",nameTooLong:"Agent名称不能超过50个字符",urlLabel:"URL *",urlPlaceholder:"https://agent.example.com/a2a/uuid",urlRequired:"URL不能为空",urlInvalid:"URL格式无效",urlHint:"必须是完整的HTTP或HTTPS URL",apiKeyLabel:"API密钥 *",apiKeyRequired:"API密钥不能为空",apiKeyPlaceholder:"agt_proj_external_key_here",descriptionLabel:"描述",descriptionPlaceholder:"可选的Agent功能描述",enabledLabel:"启用此Agent",cancel:"取消",addAgent:"添加Agent",saveChanges:"保存修改"},errors:{createFailed:"创建外部Agent失败",updateFailed:"更新外部Agent失败",deleteFailed:"删除外部Agent失败"},success:{create:"外部Agent创建成功",update:"外部Agent更新成功",delete:"外部Agent删除成功"}},tasks:{title:"任务监控",noTasks:"还没有任务记录",notEnabled:"需要先启用A2A功能",refresh:"刷新",status:{pending:"等待中",running:"运行中",completed:"已完成",failed:"失败",canceled:"已取消"},taskId:"任务ID",createdAt:"创建时间",startedAt:"开始时间",completedAt:"完成时间",cancel:"取消任务",cancelConfirm:"确定要取消这个任务吗?",cancelSuccess:"任务已取消",cancelFailed:"取消任务失败"},errors:{createKeyFailed:"创建API密钥失败",deleteKeyFailed:"删除API密钥失败",loadConfigFailed:"加载A2A配置失败",updateConfigFailed:"更新A2A配置失败",loadMappingFailed:"加载Agent映射失败",loadCardFailed:"加载Agent Card失败",loadTasksFailed:"加载任务列表失败"},success:{createKey:"API密钥创建成功",deleteKey:"API密钥删除成功",updateConfig:"A2A配置更新成功"}},Xw={docs:Pw,nav:Ow,footer:zw,login:Lw,landing:Uw,agents:_w,projects:Fw,chat:Bw,dashboard:Hw,settings:qw,analytics:Vw,mcp:Gw,commands:Iw,plugins:Kw,skills:Yw,a2a:Qw},Zw="AgentStudio",$w="选择一个智能助手开始工作",Jw="正在加载...",Ww="可用的智能助手",eC="已禁用的助手",tC="共 {{count}} 个助手",aC="创建自定义助手",nC="自定义助手功能即将推出!",lC="还没有可用的智能助手",oC="启用一些内置助手或创建自己的自定义助手开始使用",iC="管理智能助手",sC="开始使用",rC="编辑助手",cC="禁用助手",uC="启用助手",dC="已禁用",fC="启用助手",mC={slides:"幻灯片",chat:"对话","claude-code":"Claude Code"},pC={toggleFailed:"操作失败,请重试"},gC={title:Zw,subtitle:$w,loading:Jw,availableAgents:Ww,disabledAgents:eC,agentCount:tC,createCustomAgent:aC,customAgentComingSoon:nC,noAgentsTitle:lC,noAgentsDescription:oC,manageAgents:iC,startUsing:sC,editAgent:rC,disableAgent:cC,enableAgent:uC,disabledStatus:dC,enableAgentButton:fC,componentTypes:mC,errors:pC},hC={enabled:"已启用",disabled:"已禁用"},yC={name:"项目名称",nameRequired:"项目名称 *",namePlaceholder:"输入项目名称",description:"项目描述",descriptionPlaceholder:"简单描述这个项目的用途...",directory:"项目目录",directoryNote:"项目将在此目录下创建一个新文件夹",agentType:"选择助手类型 *",agentTypePlaceholder:"选择一个助手类型"},vC={name:"助手名称",namePlaceholder:"输入助手名称",description:"助手描述",descriptionPlaceholder:"描述这个助手的功能...",systemPrompt:"系统提示",systemPromptPlaceholder:"输入系统提示词...",tools:"可用工具",selectTools:"选择工具"},bC={editTitle:"编辑命令",createTitle:"新建命令",formMode:"表单",codeMode:"代码",saveChanges:"保存更改",createCommand:"创建命令",nameLabel:"命令名称",nameHint:"只能包含字母、数字、下划线和短划线",modelLabel:"指定模型",inheritModel:"继承对话设置",modelHint:"为此命令指定特定的 AI 模型。",namespaceLabel:"命名空间",namespaceHint:"用于组织命令,可以包含 / 分隔符",argumentHintLabel:"参数提示",argumentHintHint:"在自动完成时显示的参数提示",descriptionLabel:"描述",descriptionPlaceholder:"优化代码性能和可读性",descriptionHint:"命令的简短描述,如果不填写将使用内容的第一行",allowedToolsLabel:"允许的工具",selectTools:"选择工具",regularToolsCount:"常规工具 {{count}} 个",mcpToolsCount:"MCP工具 {{count}} 个",allowedToolsHint:"留空则继承对话权限",contentLabel:"命令内容",contentPlaceholder:`分析这段代码的性能问题并提供优化建议:
85
+ 此操作无法撤销,相关的所有会话也会被删除。`},Fw={title:"项目管理",subtitle:"管理你的所有工作项目",createButton:"创建新项目",selectType:"选择助手类型创建工作项目",noProjects:"暂无项目",searchPlaceholder:"搜索项目...",loading:"正在加载项目...",filter:{all:"全部",active:"活跃",inactive:"未活跃"},table:{project:"项目",agent:"助手",lastActive:"最后活跃",sessions:"会话",actions:"操作",sessionsCount:"{{count}} 个会话"},form:{create:"创建项目",edit:"编辑项目",name:"项目名称",namePlaceholder:"输入项目名称",nameRequired:"项目名称 *",agentType:"选择助手类型 *",agentTypePlaceholder:"选择一个助手类型",directory:"项目目录",directoryNote:"项目将在此目录下创建一个新文件夹",description:"项目描述",descriptionPlaceholder:"简单描述这个项目的用途...",save:"保存",cancel:"取消"},actions:{open:"打开",openInNewTab:"在新标签页打开",edit:"编辑",delete:"删除"},status:{active:"活跃",inactive:"未活跃",never:"从未"},errors:{createFailed:"创建项目失败",updateFailed:"更新项目失败",deleteFailed:"删除项目失败",loadFailed:"加载项目失败"},deleteConfirm:"确定要删除项目吗?",deleteNote:"注意:这只会从列表中移除项目,不会删除实际的文件目录。",deleteSuccess:"项目已删除"},Bw={title:"对话",inputPlaceholder:"输入消息...",aiTyping:"AI正在输入中",newSession:"新对话",sessionHistory:"历史会话",loading:"正在加载智能助手...",agentNotFound:"助手未找到",agentNotFoundDesc:"无法找到指定的智能助手,可能已被删除或禁用。",agentDisabled:"助手已禁用",agentDisabledDesc:'智能助手 "{{name}}" 目前已被禁用,无法使用。',closePage:"关闭页面",tabNotification:{working:"🤖 正在工作",completed:"✅ 已完成",error:"❌ 发生错误"}},Hw={title:"首页",welcome:{title:"让我们开始工作吧",subtitle:"选择一个项目,开始与 AI 协作完成任务"},defaultProjectName:"默认工作空间",loading:"加载中...",creatingDefaultProject:"正在创建默认工作空间...",noAgentsEnabled:"没有可用的 Agent,请先启用一个 Agent",goToAgents:"前往 Agent 管理",selectProject:"选择项目",noProjects:"暂无项目",createNewProject:"创建新项目",noProjectsHint:{title:"还没有项目",description:"创建一个项目来开始与 AI 协作",createButton:"一键创建默认项目",creating:"创建中..."},projectCreated:{title:"项目创建成功",message:"已经为您创建项目:{{name}},你现在可以开始与 Agent 工作了。"},quickLinks:{title:"快捷入口",projects:"项目管理",modelSettings:"模型供应商",scheduledTasks:"定时任务",customAgents:"自定义 Agent"},sessions:{title:"活跃会话",clearAll:"清除全部",close:"关闭会话",closed:"会话已关闭",closedMessage:"会话已成功关闭",closeFailed:"关闭失败",closeError:"无法关闭会话",allCleared:"全部清除",allClearedMessage:"已清除 {{count}} 个会话",clearFailed:"清除失败",clearError:"无法清除会话",confirmed:"已确认",pending:"等待中",idle:"空闲",heartbeatTimeout:"心跳超时",session:"会话"},selectProjectToStart:"请选择一个项目开始聊天",stats:{agentManagement:"Agent管理",workProjects:"工作项目",slashCommands:"Slash命令",activeSessions:"活跃会话"},recentAgents:{title:"常用助手",viewAll:"查看全部",types:{slides:"演示文稿","claude-code":"Claude Code"},noAgents:"暂无可用助手",goEnable:"去启用助手"},quickActions:{title:"快速操作",createProject:{title:"创建新项目",description:"选择助手类型创建工作项目"},createAgent:{title:"创建新助手",description:"配置自定义AI助手"},addMcp:{title:"添加MCP服务",description:"连接新的MCP服务器"},viewAnalytics:{title:"查看统计",description:"分析使用情况和性能"}},overview:"概览",statistics:"统计信息",recentActivity:"最近活动",templates:{organizeFiles:"整理文件",analyzeFiles:"文件分析",writeDoc:"写一份文档",codeReview:"代码审查",checkWeather:"查深圳天气",quickTask:"自由提问"}},qw={title:"设置",general:{title:"外观设置",description:"配置界面主题和语言",interfaceSettings:"外观设置",theme:{label:"主题",description:"选择界面主题模式",auto:"跟随系统",light:"浅色模式",dark:"深色模式"},language:{label:"语言",description:"选择界面语言"},password:{title:"访问密码",checking:"正在检查...",currentlySet:"当前已设置访问密码",currentlyNotSet:"当前未设置密码,可免密登录",description:"设置密码后,登录时需要输入密码。留空并保存可清除密码,启用免密登录。",newPassword:"新密码",newPasswordPlaceholder:"输入新密码(留空则清除密码)",confirmPassword:"确认密码",confirmPasswordPlaceholder:"再次输入密码",save:"保存密码",clear:"清除密码",mismatch:"两次输入的密码不一致",tooShort:"密码长度至少为4位",setSuccess:"密码设置成功,下次登录时生效",clearSuccess:"密码已清除,系统现在可以免密登录",saveFailed:"保存密码失败",clearFailed:"清除密码失败"}},api:"API服务器设置",memory:"全局记忆",memorySettings:{title:"全局记忆设置",description:"全局记忆是所有AI助手共享的背景信息,包含您的工作偏好、项目信息等",fileSourceInfo:"内容来自用户目录下的 ~/.claude/CLAUDE.md 文件。",memoryContent:"记忆内容",edit:"编辑",cancelEdit:"取消编辑",refresh:"刷新",refreshing:"刷新中...",placeholder:"在这里编写您的全局记忆内容...",cancel:"取消",saveMemory:"保存记忆",loading:"正在加载全局记忆...",noMemory:"暂无全局记忆内容",clickEditToStart:'点击"编辑"按钮开始添加',infoAutoLoad:"全局记忆将在每次对话时自动加载,为AI提供背景信息",infoSuggestions:"建议包含:工作偏好、项目背景、个人信息等",infoFileLocation:"文件位置:~/.claude/CLAUDE.md",saveSuccess:"全局记忆已保存",saveFailed:"保存失败,请重试"},supplier:{title:"供应商管理",subtitle:"管理多个模型供应商,指定可执行路径、别名和环境变量",addSupplier:"添加供应商",noSuppliers:"还没有配置模型供应商",clickToAddFirst:'点击"添加供应商"来配置第一个模型供应商',systemLabel:"系统",defaultLabel:"默认",pathLabel:"路径",envVarsLabel:"环境变量",modelsLabel:"支持的模型",setAsDefault:"设为默认",copyCommand:"复制命令",edit:"编辑",delete:"删除",confirmDelete:'确定要删除供应商 "{{alias}}" 吗?',currentSupplier:{title:"当前供应商",checking:"检查中...",checkVersion:"检查供应商",claudeDesc:"AI编程助手",updating:"更新中...",update:"更新",willUse:"将使用",toUpdate:"更新",nodejsDesc:"JavaScript运行环境",preferred:"推荐",packageManager:"包管理器",lastChecked:"最后检查时间",clickToCheck:'点击"检查供应商"获取供应商信息',updateSuccess:"更新成功",updateFailed:"更新失败",info1:"Claude Code 是 AI 编程助手,支持代码生成、编辑和项目管理",info2:"Node.js 是系统运行的基础环境",info3:"支持多种包管理器:npm、pnpm、yarn(优先级:pnpm > yarn > npm)",info4:"系统会自动选择推荐的包管理器进行更新操作",info5:"建议保持 Claude Code 为最新版本以获得最佳体验"},templates:{title:"供应商快速配置模板",description:"选择预设模板快速配置第三方API供应商,自动填充环境变量配置",providers:{glm:{name:"GLM (智谱AI)",description:"使用智谱AI的GLM模型服务,兼容Anthropic API"},deepseek:{name:"DeepSeek",description:"使用DeepSeek的高性能模型服务"},kimi:{name:"Kimi K2 (月之暗面)",description:"使用Kimi K2模型服务,支持Anthropic API兼容"},minimax:{name:"MiniMax",description:"使用MiniMax的高性能模型服务,支持Anthropic API兼容"}}},form:{createTitle:"添加新供应商",editTitle:"编辑供应商",supplierName:"供应商名称",supplierNamePlaceholder:"例如: Claude Code v1.2.3",alias:"别名",aliasPlaceholder:"例如: claude-1.2.3",description:"描述",descriptionPlaceholder:"供应商描述(可选)",executablePath:"可执行文件路径",executablePathPlaceholder:"不指定则使用系统默认路径",browseFile:"浏览文件",envVars:"环境变量",varName:"变量名",varValue:"变量值",emptyValue:"未设置",getApiKey:"获取密钥",models:"模型配置",modelId:"模型ID",modelName:"模型名称",visionModel:"视觉模型",addModel:"添加模型",cancel:"取消",saving:"保存中...",update:"更新",create:"创建",selectExecutable:"选择Claude可执行文件"},errors:{requiredFields:"请填写所有必填字段",saveFailed:"保存失败",deleteFailed:"删除失败",setDefaultFailed:"设置默认供应商失败",cannotDeleteSystem:"不能删除系统供应商",copyFailed:"复制失败,请手动复制以下命令:"},success:{createVersion:"供应商创建成功",updateVersion:"供应商更新成功",deleteVersion:"供应商删除成功",setDefault:'已将 "{{alias}}" 设置为默认供应商',copyCommand:"命令已复制到剪贴板"}},cloudflare:{title:"Cloudflare Tunnel",description:"一键启用外网访问,通过 Cloudflare Tunnel 将本地服务暴露到公网",wizard:{showGuide:"显示设置向导",steps:{intro:"介绍",credentials:"配置凭证",create:"创建隧道",start:"启动服务",done:"完成"},intro:{title:"欢迎使用 Cloudflare Tunnel",description:"Cloudflare Tunnel 可以让你无需公网 IP,就能将本地运行的 AgentStudio 暴露到公网,实现随时随地访问。",benefit1:"无需公网 IP 或路由器配置",benefit2:"自动 HTTPS 加密,安全可靠",benefit3:"利用 Cloudflare 全球 CDN 加速",benefit4:"免费使用,快速部署",requirements:"前置要求",req1:"一个 Cloudflare 免费账号",req2:"Python 3 环境(用于调用 API)",req3:"Docker 或 cloudflared CLI(用于启动隧道)",getStarted:"开始设置"},credentials:{howToGet:"如何获取 Cloudflare 凭证?",step1:"访问 Cloudflare Dashboard 创建 API Token",step2:"配置权限:Cloudflare Tunnel - Edit",step3:"复制 Account ID 和 API Token",openDashboard:"打开 Cloudflare Dashboard",saveAndContinue:"保存并继续"},create:{description:"现在可以创建你的第一个 Tunnel 了。你可以自定义子域名前缀,或者留空让系统自动生成。",createButton:"一键创建 Tunnel"},start:{tunnelCreated:"Tunnel 创建成功!",nextStep:"现在需要启动 cloudflared 客户端来建立连接。",yourPublicUrl:"你的公网访问地址",importantNote:"重要提示",needToStartClient:"Tunnel 已创建,但还需要启动 cloudflared 客户端才能真正建立连接。请按照下方步骤操作。",howToStart:"如何启动 Tunnel?",option1:"方式一:使用 Docker",option2:"方式二:使用 cloudflared CLI",recommended:"推荐",copy:"复制",copied:"已复制",installCloudfared:"安装 cloudflared",runCommand:"运行命令",finishSetup:"完成设置"},done:{title:"设置完成!",description:"你的 AgentStudio 现在可以通过公网访问了",deleteTunnel:"删除 Tunnel",reminder:"温馨提示",keepClientRunning:"请保持 cloudflared 客户端运行,关闭后将无法访问公网地址。"}},credentials:{title:"Cloudflare 凭证配置",configured:"凭证已配置",update:"更新凭证",apiToken:"API Token",accountId:"Account ID",save:"保存",saving:"保存中...",cancel:"取消",help:"获取 API Token 和 Account ID,请访问"},tunnel:{title:"Tunnel 管理",active:"当前激活的 Tunnel",publicUrl:"公网访问地址",name:"Tunnel 名称",localPort:"本地端口",createdAt:"创建时间",subdomain:"子域名前缀(可选)",subdomainPlaceholder:"留空自动生成随机子域名",subdomainHelp:"留空将自动生成一个随机子域名",create:"一键启用外网访问",creating:"创建中...",details:"Tunnel 详情",token:"Tunnel Token",cliCommand:"CLI 启动命令"},credentialsSaved:"Cloudflare 凭证保存成功",tunnelCreated:"Tunnel 创建成功!现在可以通过公网 URL 访问",tunnelDeleted:"Tunnel 已删除",confirmDelete:"确定要删除这个 Tunnel 吗?",errors:{credentialsRequired:"请填写 API Token 和 Account ID"}},language:"语言设置",subagents:{title:"Subagent 管理",subtitle:"管理专门的 AI 子代理",loading:"正在加载 Subagents...",loadFailed:"加载失败",loadFailedMessage:"无法加载 Subagents 列表",retry:"重试",searchPlaceholder:"搜索 Subagents...",createButton:"新建 Subagent",noSubagents:"还没有 Subagents",noSubagentsSearch:"未找到匹配的 Subagents",adjustSearch:"尝试调整搜索条件",createFirst:"创建你的第一个专门的 AI 子代理来处理特定任务",table:{subagent:"Subagent",tools:"工具",createdAt:"创建时间",actions:"操作",toolsCount:"{{count}} 个工具",inheritSettings:"继承对话设置"},actions:{edit:"编辑",view:"查看",editTitle:"编辑 Subagent",viewTitle:"查看 Subagent",deleteTitle:"删除 Subagent"},source:{local:"本地",plugin:"插件"},deleteConfirm:{title:"确认删除",message:'确定要删除 Subagent "{{name}}" 吗?',warning:"此操作无法撤销。",cancel:"取消",delete:"删除"}},mcpAdmin:{title:"MCP Admin Server",subtitle:"配置 MCP Admin API,允许外部 AI 工具管理您的 AgentStudio",refresh:"刷新",serverStatus:"服务器状态",status:{status:"状态",active:"运行中",version:"版本",tools:"可用工具",activeKeys:"活跃密钥",unavailable:"服务不可用"},endpoint:"端点",apiKeys:"API 密钥",createKey:"创建密钥",noKeys:"暂无 API 密钥",noKeysHint:"创建一个 API 密钥以允许外部工具访问",createdAt:"创建于",lastUsed:"最后使用",revoked:"已撤销",revokeKey:"撤销密钥",confirmRevoke:"确定要撤销此 API 密钥吗?此操作无法撤销。",availableTools:"可用管理工具",createKeyTitle:"创建 API 密钥",keyDescription:"密钥描述",keyDescriptionPlaceholder:"例如:Cursor MCP 连接",fullPermissions:"此密钥将拥有完整管理权限",cancel:"取消",create:"创建",creating:"创建中...",keyCreated:"API 密钥已创建!",configTitle:"MCP 配置",saveKeyWarning:"请立即保存此密钥!它只会显示这一次,无法再次查看。",yourApiKey:"您的 API 密钥",configFile:"配置文件",copyConfig:"复制配置",done:"完成",showKey:"显示密钥",hideKey:"隐藏密钥",copyKey:"复制密钥",viewConfig:"查看配置",limitTools:"限制可用工具",selectAll:"全选",deselectAll:"取消全选",selectedToolsCount:"已选择 {{count}} 个工具",limitedTools:"限制 {{count}} 个工具",allToolsAccess:"所有工具",disabled:"已停用",enableKey:"启用密钥",disableKey:"停用密钥",editKey:"编辑密钥",editKeyTitle:"编辑 API 密钥",save:"保存",saving:"保存中...",toolParams:"参数",noParams:"无参数",success:{copied:"已复制到剪贴板",keyRevoked:"API 密钥已撤销",keyUpdated:"API 密钥已更新",keyEnabled:"API 密钥已启用",keyDisabled:"API 密钥已停用"},errors:{configFetch:"获取配置失败",createFailed:"创建密钥失败",revokeFailed:"撤销密钥失败",copyFailed:"复制失败",descriptionRequired:"请输入密钥描述",updateFailed:"更新密钥失败",toggleFailed:"切换密钥状态失败"},help:{button:"使用帮助",title:"MCP Admin Server 使用帮助",whatIs:"什么是 MCP Admin Server?",whatIsDesc:"MCP Admin Server 是一个标准的 MCP(Model Context Protocol)服务器,允许其他 AI 工具(如 Cursor、Claude Desktop)通过 MCP 协议远程管理您的 AgentStudio。通过这个接口,您可以在其他 AI 工具中直接查询和管理 AgentStudio 的项目、智能体、MCP 服务器等。",howToUse:"如何使用?",step1:"在本页面创建一个 Admin API 密钥",step2:"点击「查看配置」获取配置代码片段",step3:"将配置添加到 Cursor 或 Claude Desktop 的 MCP 配置文件中",step4:"重启 Cursor/Claude Desktop,然后就可以在对话中使用管理工具了",availableTools:"可用工具示例",toolListProjects:"列出所有项目",toolGetProject:"获取项目详情",toolListAgents:"列出所有智能体",toolGetAgent:"获取智能体详情",toolHealthCheck:"系统健康检查",examples:"使用示例",examplePrompt:"在 Cursor 中,你可以直接对 AI 说:"}},apiSettings:{title:"API服务器设置",hostLabel:"API服务器地址",hostPlaceholder:"http://localhost:4936 或 https://your-domain.com",testConnection:"测试连接",quickSelect:"快捷选择:",connectionStatus:"连接状态",status:{success:"连接成功",error:"连接失败",untested:"未测试"},serverError:"服务器响应错误: {{status}} {{statusText}}",connectionFailed:"连接失败: {{message}}",connectionUnknownError:"连接失败: 未知错误",enterApiHost:"请输入API服务器地址",settingsSavedRefresh:"设置已保存,页面将刷新以应用新设置",usage:{title:"使用说明:",localDev:"在本地开发时,使用",production:"在生产环境中,使用您的服务器域名,如",cors:"确保服务器支持CORS访问,允许前端域名访问",refresh:"修改后需要刷新页面才能生效"},resetToDefault:"重置为默认",saveSettings:"保存设置"}},Vw={title:"数据分析",usage:"使用统计",performance:"性能指标"},Gw={title:"MCP服务",subtitle:"管理和监控Model Context Protocol服务器",loading:"正在加载MCP配置...",searchPlaceholder:"搜索配置名称、命令或参数...",addServer:"添加服务",noServers:"还没有MCP服务配置",noResults:"未找到匹配的配置",adjustSearch:"尝试调整搜索条件",addFirstServer:"添加你的第一个MCP服务配置",confirmDelete:'确定要删除 "{{name}}" 配置吗?',validateAll:"验证全部",stats:{total:"总计",active:"活动",error:"错误",validating:"验证中",tools:"工具"},import:{button:"从Claude Code导入",importing:"导入中...",noConfigFound:"没有找到Claude Code的MCP配置(从 ~/.claude.json 读取)",success:"成功导入 {{imported}} 个MCP服务器配置{{skipped, select, 0{} other{,跳过 {{skipped}} 个已存在的配置}}",allExist:"所有配置都已存在,没有导入新的配置"},table:{server:"服务",type:"类型",status:"状态",tools:"可用工具",actions:"操作",toolsCount:"{{count}} 个工具",noTools:"无工具"},status:{active:"可用",error:"错误",validating:"验证中",unvalidated:"未验证"},actions:{validate:"重新验证",copyCommand:"复制命令",edit:"编辑",view:"查看",delete:"删除配置"},source:{local:"本地",plugin:"插件"},modal:{addTitle:"添加MCP服务配置",editTitle:"编辑MCP服务配置",saving:"保存中...",saveConfig:"保存配置",addConfig:"添加配置"},form:{serverName:"服务名称 *",serverNamePlaceholder:"例如:playwright",nameNotEditable:"服务名称不可修改",nameRequired:"请输入服务名称",mcpType:"MCP 类型 *",stdioOption:"Stdio (本地进程)",httpOption:"HTTP (远程服务)",selectConnectionType:"选择 MCP 服务器的连接类型",configuration:"配置 * (JSON格式)",configInvalid:"配置格式不正确,请确保包含必需的 {{fields}} 字段,并且格式正确",configFormatError:"⚠️ 配置格式不正确,请确保包含必需的 {{fields}} 字段",requiredFields:"必需字段:",requiredFieldsStdio:"type, command 和 args",requiredFieldsHttp:"type 和 url",optionalFields:"可选字段:",typeField:'字符串,MCP 类型("stdio" 或 "http")',commandField:'字符串,执行命令(如 "npx", "uvx")',argsField:"数组,命令参数",urlField:"字符串,HTTP MCP 服务器的 URL",timeoutField:"数字,超时时间(毫秒)",autoApproveField:"数组,自动批准的操作"},errors:{validationFailed:"验证失败",networkError:"网络错误或服务不可用",deleteFailed:"删除配置失败",importFailed:"导入失败",saveFailed:"保存配置失败",copyFailed:"复制失败"},commandCopied:"命令已复制到剪贴板"},Iw={title:"自定义命令",subtitle:"管理 Slash Commands",loading:"加载命令中...",searchPlaceholder:"搜索命令...",createButton:"新建命令",error:{loadFailed:"加载失败",cannotLoadCommands:"无法加载自定义命令",retry:"重试"},empty:{noCommands:"还没有自定义命令",noMatchingCommands:"未找到匹配的命令",adjustSearch:"尝试调整搜索条件或筛选器",createFirst:"创建你的第一个自定义 Slash Command"},table:{command:"命令",model:"模型",tools:"工具",createdAt:"创建时间",actions:"操作",inheritSettings:"继承对话设置",toolsCount:"{{count}} 个工具"},actions:{edit:"编辑",view:"查看",editCommand:"编辑命令",deleteCommand:"删除命令"},source:{local:"本地",plugin:"插件"},delete:{title:"删除命令",confirmMessage:'确定要删除命令 "/{{name}}" 吗?此操作无法撤销。',cancel:"取消",delete:"删除",deleting:"删除中..."}},Kw={title:"插件管理",subtitle:"管理插件市场和已安装插件",tabs:{marketplaces:"插件市场",browse:"浏览插件",installed:"已安装插件"},marketplaces:{title:"插件市场",subtitle:"管理插件市场源",addButton:"添加市场",searchPlaceholder:"搜索市场...",noMarketplaces:"还没有配置插件市场",addFirst:"添加你的第一个插件市场",table:{marketplace:"市场",type:"类型",plugins:"插件数",lastSync:"最后同步",actions:"操作"},types:{git:"Git 仓库",github:"GitHub",local:"本地目录"},actions:{sync:"同步",syncing:"同步中...",edit:"编辑",delete:"删除"},addModal:{title:"添加市场",editTitle:"编辑市场",name:"市场名称",namePlaceholder:"例如:official-plugins",type:"来源类型",typePlaceholder:"选择来源类型",source:"来源",sourcePlaceholderGit:"Git 仓库 URL",sourcePlaceholderGithub:"owner/repo 或完整 URL",sourcePlaceholderLocal:"本地目录路径",branch:"分支(可选)",branchPlaceholder:"main",description:"描述(可选)",descriptionPlaceholder:"市场描述",cancel:"取消",add:"添加",adding:"添加中...",save:"保存",saving:"保存中..."},confirmDelete:'确定要删除市场 "{{name}}" 吗?该市场的所有插件都会被卸载。'},browse:{title:"浏览插件",subtitle:"从市场发现和安装插件",searchPlaceholder:"搜索插件...",filters:{allMarketplaces:"所有市场",allTypes:"所有类型",showOnlyInstalled:"只显示已安装"},noPlugins:"没有可用插件",noMarketplaces:"还没有添加市场",goAddMarketplace:"添加市场以浏览插件",noResults:"未找到插件",adjustSearch:"尝试调整搜索条件",card:{from:"来自",version:"v{{version}}",by:"作者",installed:"已安装",install:"安装",installing:"安装中...",viewDetails:"查看详情"},actions:{details:"详情",install:"安装",uninstall:"卸载"},confirmUninstall:'确定要卸载插件 "{{name}}" 吗?',components:{commands:"{{count}} 个命令",agents:"{{count}} 个 Agent",skills:"{{count}} 个技能",hooks:"{{count}} 个钩子",mcpServers:"{{count}} 个 MCP 服务"},detailModal:{title:"插件详情",version:"版本",author:"作者",marketplace:"市场",updated:"最后更新",components:"组件",files:"文件",readme:"说明文档",noReadme:"无说明文档",install:"安装插件",installing:"安装中...",installed:"已安装",close:"关闭"}},installed:{title:"已安装插件",subtitle:"管理已安装的插件",searchPlaceholder:"搜索已安装插件...",filters:{all:"全部",enabled:"已启用",disabled:"已禁用",allMarketplaces:"所有市场"},noPlugins:"还没有安装插件",goBrowse:"浏览插件以安装",noResults:"未找到匹配的插件",table:{plugin:"插件",marketplace:"市场",version:"版本",status:"状态",components:"组件",actions:"操作"},status:{enabled:"已启用",disabled:"已禁用"},actions:{details:"详情",viewDetails:"查看详情",enable:"启用",enabling:"启用中...",disable:"禁用",disabling:"禁用中...",uninstall:"卸载"},confirmUninstall:'确定要卸载插件 "{{name}}" 吗?',detailModal:{title:"插件详情",basicInfo:"基本信息",version:"版本",author:"作者",marketplace:"市场",installedAt:"安装时间",status:"状态",components:"组件",commands:"命令",agents:"Agents",skills:"技能",hooks:"钩子",mcpServers:"MCP 服务",none:"无",files:"插件文件",viewFile:"查看文件",close:"关闭",enable:"启用",disable:"禁用",uninstall:"卸载"},fileViewer:{title:"文件查看器",loading:"加载中...",error:"加载文件失败",close:"关闭"}},messages:{installSuccess:"插件安装成功,请刷新以使用新插件",installError:"安装插件失败",enableSuccess:"插件启用成功,请刷新以使用该插件",enableError:"启用插件失败",disableSuccess:"插件已成功禁用",disableError:"禁用插件失败",uninstallSuccess:"插件已成功卸载",uninstallError:"卸载插件失败",marketplaceAddSuccess:"市场添加成功",marketplaceAddError:"添加市场失败",marketplaceSyncSuccess:"市场同步成功",marketplaceSyncError:"同步市场失败",marketplaceRemoveSuccess:"市场移除成功",marketplaceRemoveError:"移除市场失败"},detail:{back:"返回",root:"根目录",noDescription:"无描述",version:"版本",author:"作者",license:"许可证",components:"组件",type:"类型",name:"名称",description:"描述",actions:"操作",viewEntryFile:"查看入口文件",browseDirectory:"浏览目录",noComponents:"未找到组件",loadFailed:"加载插件详情失败",componentTypes:{command:"命令",agent:"Agent",skill:"技能",hook:"钩子",mcp:"MCP 服务"}}},Yw={title:"技能管理",subtitle:"管理你的专业技能库",loading:"加载技能中...",searchPlaceholder:"搜索技能...",createButton:"创建新技能",noSkills:"还没有技能",noSkillsSearch:"未找到匹配的技能",createFirst:"创建你的第一个专业技能",adjustSearch:"尝试调整搜索条件",card:{viewDetails:"查看详情",tools:"{{count}} 个工具",editSkill:"编辑技能",deleteSkill:"删除技能"},form:{name:"技能名称",namePlaceholder:"例如:网页开发专家",nameRequired:"请输入技能名称",description:"技能描述",descriptionPlaceholder:"描述这个技能的作用和适用场景...",systemPrompt:"系统提示词",systemPromptPlaceholder:"定义AI助手在启用此技能时的行为和专业知识...",tags:"标签",tagsPlaceholder:"添加相关标签,用逗号分隔",enabledTools:"启用的工具",selectTools:"选择工具",tools:"工具",allTools:"所有工具",save:"保存技能",cancel:"取消",saving:"保存中...",preview:{title:"预览",name:"技能名称",description:"技能描述",tools:"可用工具"}},modal:{createTitle:"创建新技能",editTitle:"编辑技能",saveSkill:"保存技能",updateSkill:"更新技能",close:"关闭"},delete:{title:"删除技能",confirmMessage:'确定要删除技能 "{{name}}" 吗?此操作无法撤销。',cancel:"取消",delete:"删除",deleting:"删除中..."},errors:{createFailed:"创建技能失败",updateFailed:"更新技能失败",deleteFailed:"删除技能失败",loadFailed:"加载技能失败"},success:{create:"技能创建成功",update:"技能更新成功",delete:"技能删除成功"},editor:{title:"技能编辑器",files:{title:"技能文件",addFile:"添加文件",createFile:"新建文件",uploadFile:"上传文件",noFiles:"还没有技能文件",fileActions:"文件操作",deleteFile:"删除文件",renameFile:"重命名文件",saveFile:"保存文件"},manifest:{title:"技能清单",name:"技能名称",description:"描述",version:"版本",author:"作者",license:"许可证",tags:"标签"},validation:{invalidYaml:"YAML 格式错误",missingFields:"缺少必需字段",invalidSkillName:"技能名称无效"}}},Qw={title:"A2A Protocol 管理",subtitle:"管理 Agent-to-Agent 通信协议",tabs:{overview:"概览",keys:"API密钥",external:"外部Agent",tasks:"任务监控"},overview:{agentIdentity:"Agent Identity",a2aAgentId:"A2A Agent ID",copy:"复制",projectId:"项目ID",agentType:"Agent类型",notEnabled:"此项目尚未启用A2A功能",enableHint:"创建API密钥后自动启用",agentCard:"Agent Card",quickStats:"快速统计",apiKeys:"API密钥",externalAgents:"外部Agent",activeTasks:"活跃任务"},keys:{title:"API密钥管理",createButton:"创建密钥",noKeys:"还没有API密钥",createFirst:"创建第一个API密钥",active:"Active",description:"描述",createdAt:"创建时间",lastUsed:"最后使用",usageCount:"使用次数",show:"显示",hide:"隐藏",delete:"删除",deleteConfirm:"确定要删除这个API密钥吗?此操作不可撤销。",createModal:{title:"创建API密钥",descriptionLabel:"描述 *",descriptionPlaceholder:"例如:生产环境密钥",descriptionHint:"用于标识此API密钥的用途,最多100个字符",descriptionRequired:"描述不能为空",descriptionTooLong:"描述不能超过100个字符",importantNote:"重要提示:",importantHint:"API密钥创建后只会完整显示一次,请妥善保存。",cancel:"取消",creating:"创建中...",createKey:"创建密钥"},copySuccess:"已复制到剪贴板",copyFailed:"复制失败"},external:{title:"外部Agent配置",addButton:"添加Agent",noAgents:"还没有配置外部Agent",addFirst:"添加第一个外部Agent",name:"Agent名称",url:"URL",apiKey:"API密钥",description:"描述",enabled:"启用",disabled:"禁用",enable:"启用",disable:"禁用",edit:"编辑",delete:"删除",deleteConfirm:"确定要删除这个外部Agent吗?此操作不可撤销。",addModal:{title:"添加外部Agent",editTitle:"编辑外部Agent",nameLabel:"Agent名称 *",namePlaceholder:"例如:数据分析Agent",nameRequired:"Agent名称不能为空",nameTooLong:"Agent名称不能超过50个字符",urlLabel:"URL *",urlPlaceholder:"https://agent.example.com/a2a/uuid",urlRequired:"URL不能为空",urlInvalid:"URL格式无效",urlHint:"必须是完整的HTTP或HTTPS URL",apiKeyLabel:"API密钥 *",apiKeyRequired:"API密钥不能为空",apiKeyPlaceholder:"agt_proj_external_key_here",descriptionLabel:"描述",descriptionPlaceholder:"可选的Agent功能描述",enabledLabel:"启用此Agent",cancel:"取消",addAgent:"添加Agent",saveChanges:"保存修改"},errors:{createFailed:"创建外部Agent失败",updateFailed:"更新外部Agent失败",deleteFailed:"删除外部Agent失败"},success:{create:"外部Agent创建成功",update:"外部Agent更新成功",delete:"外部Agent删除成功"}},tasks:{title:"任务监控",noTasks:"还没有任务记录",notEnabled:"需要先启用A2A功能",refresh:"刷新",status:{pending:"等待中",running:"运行中",completed:"已完成",failed:"失败",canceled:"已取消"},taskId:"任务ID",createdAt:"创建时间",startedAt:"开始时间",completedAt:"完成时间",cancel:"取消任务",cancelConfirm:"确定要取消这个任务吗?",cancelSuccess:"任务已取消",cancelFailed:"取消任务失败"},errors:{createKeyFailed:"创建API密钥失败",deleteKeyFailed:"删除API密钥失败",loadConfigFailed:"加载A2A配置失败",updateConfigFailed:"更新A2A配置失败",loadMappingFailed:"加载Agent映射失败",loadCardFailed:"加载Agent Card失败",loadTasksFailed:"加载任务列表失败"},success:{createKey:"API密钥创建成功",deleteKey:"API密钥删除成功",updateConfig:"A2A配置更新成功"}},Xw={docs:Pw,nav:Ow,footer:zw,login:Lw,landing:Uw,agents:_w,projects:Fw,chat:Bw,dashboard:Hw,settings:qw,analytics:Vw,mcp:Gw,commands:Iw,plugins:Kw,skills:Yw,a2a:Qw},Zw="AgentStudio",$w="选择一个智能助手开始工作",Jw="正在加载...",Ww="可用的智能助手",eC="已禁用的助手",tC="共 {{count}} 个助手",aC="创建自定义助手",nC="自定义助手功能即将推出!",lC="还没有可用的智能助手",oC="启用一些内置助手或创建自己的自定义助手开始使用",iC="管理智能助手",sC="开始使用",rC="编辑助手",cC="禁用助手",uC="启用助手",dC="已禁用",fC="启用助手",mC={slides:"幻灯片",chat:"对话","claude-code":"Claude Code"},pC={toggleFailed:"操作失败,请重试"},gC={title:Zw,subtitle:$w,loading:Jw,availableAgents:Ww,disabledAgents:eC,agentCount:tC,createCustomAgent:aC,customAgentComingSoon:nC,noAgentsTitle:lC,noAgentsDescription:oC,manageAgents:iC,startUsing:sC,editAgent:rC,disableAgent:cC,enableAgent:uC,disabledStatus:dC,enableAgentButton:fC,componentTypes:mC,errors:pC},hC={enabled:"已启用",disabled:"已禁用"},yC={name:"项目名称",nameRequired:"项目名称 *",namePlaceholder:"输入项目名称",description:"项目描述",descriptionPlaceholder:"简单描述这个项目的用途...",directory:"项目目录",directoryNote:"项目将在此目录下创建一个新文件夹",agentType:"选择助手类型 *",agentTypePlaceholder:"选择一个助手类型"},vC={name:"助手名称",namePlaceholder:"输入助手名称",description:"助手描述",descriptionPlaceholder:"描述这个助手的功能...",systemPrompt:"系统提示",systemPromptPlaceholder:"输入系统提示词...",tools:"可用工具",selectTools:"选择工具"},bC={editTitle:"编辑命令",createTitle:"新建命令",formMode:"表单",codeMode:"代码",saveChanges:"保存更改",createCommand:"创建命令",nameLabel:"命令名称",nameHint:"只能包含字母、数字、下划线和短划线",modelLabel:"指定模型",inheritModel:"继承对话设置",modelHint:"为此命令指定特定的 AI 模型。",namespaceLabel:"命名空间",namespaceHint:"用于组织命令,可以包含 / 分隔符",argumentHintLabel:"参数提示",argumentHintHint:"在自动完成时显示的参数提示",descriptionLabel:"描述",descriptionPlaceholder:"优化代码性能和可读性",descriptionHint:"命令的简短描述,如果不填写将使用内容的第一行",allowedToolsLabel:"允许的工具",selectTools:"选择工具",regularToolsCount:"常规工具 {{count}} 个",mcpToolsCount:"MCP工具 {{count}} 个",allowedToolsHint:"留空则继承对话权限",contentLabel:"命令内容",contentPlaceholder:`分析这段代码的性能问题并提供优化建议:
86
86
 
87
87
  使用参数:$ARGUMENTS
88
88
  使用第一个参数:$1
@@ -94,7 +94,7 @@ description: 优化代码性能和可读性
94
94
  argument-hint: [filename] [options]
95
95
  namespace: frontend
96
96
  allowed-tools: Read, Write, Edit
97
- model: claude-3-5-sonnet-20241022
97
+ model: sonnet
98
98
  ---
99
99
 
100
100
  分析这段代码的性能问题并提供优化建议:
@@ -183,9 +183,9 @@ tools: read_file, write, search_replace
183
183
 
184
184
  连接服务器超时,请稍后重试。`,connectionError:"连接错误",cannotConnectRetry:"无法连接到AI服务,请稍后重试。",contextWindowError:`📏 **超过上下文窗口限制**
185
185
 
186
- 对话过长。请新建会话或使用 /compact 命令减少上下文。`,checkBudget:"检查预算设置和成本限制",increaseMaxTurns:"在代理设置中增加最大轮次"}},dA={title:"已压缩上下文",expand:"展开查看",collapse:"收起"},fA={title:"最近活动",empty:"暂无最近活动",time:{justNow:"刚刚",minutesAgo:"{{count}} 分钟前",hoursAgo:"{{count}} 小时前",daysAgo:"{{count}} 天前"}},mA={title:"后端服务",noService:"无服务",namePlaceholder:"服务名称",urlPlaceholder:"服务地址",add:"添加",save:"保存",cancel:"取消",edit:"编辑",delete:"删除",addNew:"添加新服务",testingConnection:"正在测试连接...",connectionWarning:{title:"无法连接到服务",message:'无法连接到服务 "{{name}}" ({{url}})。',consequence:"如果继续切换,您将无法登录或使用该服务,但可以在登录页面中重新配置服务地址。",cancel:"取消",continue:"仍然切换"}},pA={checking:"检查中...",connected:"已连接",disconnected:"未连接",manageServices:"管理服务",quickSwitch:"快速切换服务",version:"版本",backendName:"后端名称",status:"状态",clickToSwitch:"点击服务名快速切换",clickToManage:"点击齿轮图标管理服务"},gA={title:"服务管理",noService:"无服务",servicesList:"服务列表",addService:"添加服务",current:"当前",testConnection:"测试连接",switchToService:"切换到此服务",editService:"编辑服务",removeService:"删除服务",refreshStatus:"刷新状态",servicesOnline:"个服务在线",close:"关闭",namePlaceholder:"服务名称",urlPlaceholder:"服务地址 (如: http://localhost:4936)",version:"版本",add:"添加",save:"保存",cancel:"取消",addNewService:"添加新服务",switchSuccess:"已切换到服务: {{name}}",addSuccess:"服务添加成功",updateSuccess:"服务更新成功",removeSuccess:"服务删除成功",logoutService:"退出登录此服务",logoutSuccess:"已成功退出登录",managePassword:"管理密码",password:{title:"访问密码管理",description:"设置密码后,登录时需要输入密码。留空并保存可清除密码,启用免密登录。",checking:"正在检查...",currentlySet:"当前已设置访问密码",currentlyNotSet:"当前未设置密码,可免密登录",newPassword:"新密码",newPasswordPlaceholder:"输入新密码(留空则清除密码)",confirmPassword:"确认密码",confirmPasswordPlaceholder:"再次输入密码",save:"保存密码",mismatch:"两次输入的密码不一致",tooShort:"密码长度至少为4位",setSuccess:"密码设置成功,下次登录时生效",clearSuccess:"密码已清除,系统现在可以免密登录",saveFailed:"保存密码失败"},connectionTest:{success:"连接测试成功",failed:"连接测试失败",error:"连接测试出错"},switchWarning:{title:"服务连接警告",message:'服务 "{{name}}" ({{url}}) 无法连接。',consequence:"如果继续切换,您可能无法正常使用某些功能。",cancel:"取消",continue:"仍然切换"}},hA={detecting:{title:"正在检测 Claude CLI",description:"正在检测您的系统中是否安装了 Claude..."},selection:{title:"选择 Claude 版本",description:"我们检测到以下 Claude CLI 安装,请选择要使用的版本",userInstalled:"用户全局安装",systemInstalled:"系统 npm 包",path:"路径",version:"版本",packageManager:"包管理器",useUserInstalled:"使用用户安装的 Claude",useUserInstalledDesc:"使用您通过包管理器全局安装的 Claude CLI",useSystemPackage:"使用系统 npm 包",useSystemPackageDesc:"使用本项目 node_modules 中自带的 Claude CLI",noClaudeFound:"未检测到 Claude CLI",noClaudeFoundDesc:"请先安装 Claude CLI 或确保项目依赖已正确安装"},config:{title:"配置认证方式",description:"选择如何配置 Claude 的认证凭证",skipToken:"暂不配置(推荐)",skipTokenDesc:"跳过认证配置,效果与 Claude Pro 订阅用户一样",claudePro:"Claude Pro 订阅用户",claudeProDesc:"我是 Claude Pro 订阅用户,将在 CLI 中自行登录",enterToken:"手动输入 Token",enterTokenDesc:"手动输入 ANTHROPIC_AUTH_TOKEN 环境变量",tokenPlaceholder:"输入您的 ANTHROPIC_AUTH_TOKEN"},creating:{title:"正在创建系统版本",description:"正在为您配置 Claude 版本,请稍候..."},success:{title:"配置成功!",description:"Claude 版本已成功创建,即将返回控制台..."},actions:{skip:"跳过",next:"下一步",back:"上一步",create:"创建版本"}},yA={title:"A2A协议管理",project:"项目",selectedProject:"项目: {{project}}",noProjectSelected:"未选择项目",tabs:{overview:"概览",apiKeys:"API密钥",external:"外部Agent",tasks:"任务"},actions:{copy:"复制",createKey:"创建密钥",cancel:"取消",delete:"删除",edit:"编辑",enable:"启用",disable:"禁用",hide:"隐藏",show:"显示",addAgent:"添加Agent",importProjects:"导入项目",copyKey:"复制密钥",close:"关闭"},overview:{agentIdentity:"Agent身份",a2aAgentId:"A2A Agent ID",projectId:"项目ID",agentType:"Agent类型",agentCard:"Agent卡片",apiKeys:"API密钥",externalAgents:"外部Agent",activeTasks:"活跃任务",notEnabled:"此项目尚未启用A2A功能",enableAfterCreatingKey:"创建API密钥后自动启用"},agentCard:{context:"Agent上下文",skills:"可用技能",security:"安全认证"},apiKeys:{title:"API密钥管理",noKeys:"还没有API密钥",createFirstKey:"创建第一个API密钥",description:"描述",key:"密钥",createdAt:"创建时间",lastUsed:"最后使用",usageCount:"使用次数",actions:"操作",showKey:"显示密钥",hideKey:"隐藏密钥",keyCopied:"密钥已复制"},external:{title:"外部Agent配置",noAgents:"还没有配置外部Agent",addFirstAgent:"添加第一个外部Agent",enabled:"启用",disabled:"禁用",form:{name:"Agent名称",namePlaceholder:"例如:数据分析Agent",url:"URL",urlPlaceholder:"https://agent.example.com/a2a/uuid",apiKey:"API密钥",apiKeyPlaceholder:"agt_proj_external_key_here",description:"描述",descriptionPlaceholder:"可选的Agent功能描述",enableThisAgent:"启用此Agent",urlHelp:"必须是完整的HTTP或HTTPS URL"},modal:{addTitle:"添加外部Agent",editTitle:"编辑外部Agent",saveChanges:"保存修改",addAgent:"添加Agent"},importModal:{title:"导入项目",description:"选择要导入的项目,系统将自动为这些项目生成API密钥,并添加到当前项目的外部Agent列表中。",noProjects:"没有可导入的项目",selected:"已选择",import:"导入",importing:"导入中..."}},tasks:{title:"任务监控",needA2AEnabled:"需要先启用A2A功能",noTasks:"还没有任务记录",createdAt:"创建时间",startedAt:"开始时间",completedAt:"完成时间"},modals:{createKey:{title:"创建API密钥",description:"描述",descriptionPlaceholder:"例如:生产环境密钥",descriptionHelp:"用于标识此API密钥的用途,最多100个字符",important:"重要提示",securityNote:"API密钥创建后只会完整显示一次,请妥善保存。",creating:"创建中..."}},validation:{descriptionRequired:"描述不能为空",descriptionTooLong:"描述不能超过100个字符",agentNameRequired:"Agent名称不能为空",agentNameTooLong:"Agent名称不能超过50个字符",urlRequired:"URL不能为空",invalidUrl:"URL格式无效",apiKeyRequired:"API密钥不能为空",required:"此字段为必填项"},confirmations:{deleteApiKey:"确定要删除这个API密钥吗?此操作不可撤销。",deleteExternalAgent:"确定要删除这个外部Agent吗?此操作不可撤销。"}},vA={common:hC,projectForm:yC,agentForm:vC,commandForm:bC,fileExplorer:SC,sessionDropdown:xC,toolSelector:wC,languageSwitcher:CC,agentChat:AC,systemCommands:TC,projectMemory:kC,projectCommands:EC,projectSubAgents:NC,sessionsDashboard:MC,fileBrowser:jC,csvPreview:DC,jsonlPreview:RC,unifiedToolSelector:PC,subagentForm:OC,commandSelector:zC,apiSettingsModal:LC,projectCommandsModal:UC,projectSubAgentsModal:_C,projectSelector:FC,mcpTool:BC,bashTool:HC,readTool:qC,writeTool:VC,editTool:GC,globTool:IC,grepTool:KC,webFetchTool:YC,webSearchTool:QC,taskTool:XC,subAgentMessageFlow:ZC,skillTool:$C,todoWriteTool:JC,exitPlanModeTool:WC,notebookEditTool:eA,toolRenderer:tA,baseToolComponent:aA,bashOutputTool:nA,killBashTool:lA,lsTool:oA,timeMachineTool:iA,askUserQuestionTool:sA,multiEditTool:rA,notebookReadTool:cA,agentChatPanel:uA,compactSummary:dA,recentActivity:fA,backendServiceSwitcher:mA,serviceStatusIndicator:pA,serviceManagementModal:gA,claudeVersionSetup:hA,a2aManagement:yA},bA={connectionFailed:"网络连接错误,无法连接到AI服务",connectionFailedRetry:"网络连接错误,无法连接到AI服务,请检查网络连接后重试",timeout:"请求超时,请重试",serverError:"服务器错误,请稍后重试",unknownError:"未知错误,请重试"},SA={createFailed:"创建项目失败",deleteFailed:"删除项目失败",updateFailed:"更新项目失败",notFound:"未找到匹配的项目",loadFailed:"加载项目失败",nameRequired:"项目名称不能为空",nameInvalid:"项目名称包含非法字符"},xA={createFailed:"创建助手失败",deleteFailed:"删除助手失败",updateFailed:"更新助手失败",notFound:"无法找到指定的智能助手,可能已被删除或禁用",loadFailed:"加载助手失败",setFailed:"设置Agent失败",builtinCannotDelete:"内置助手无法删除,但可以禁用",nameRequired:"助手名称不能为空"},wA={uploadFailed:"上传文件失败",deleteFailed:"删除文件失败",downloadFailed:"下载文件失败",readFailed:"读取文件失败",writeFailed:"写入文件失败",notFound:"文件不存在",tooLarge:"文件过大"},CA={createFailed:"创建会话失败",deleteFailed:"删除会话失败",loadFailed:"加载会话失败",notFound:"会话不存在"},AA={executeFailed:"命令执行失败",notFound:"未找到匹配的命令",loadFailed:"无法加载自定义命令",invalidFormat:"命令格式错误"},TA={saveFailed:"保存失败,请重试",loadFailed:"加载失败",operationFailed:"操作失败,请重试",invalidInput:"输入内容无效",permissionDenied:"权限不足"},kA={network:bA,project:SA,agent:xA,file:wA,session:CA,command:AA,common:TA},EA={pptEditor:"PPT编辑助手",codeAssistant:"AI编程助手",documentWriter:"文档写作助手",generalChat:"通用对话助手",custom:"自定义助手"},NA={loading:"正在加载智能助手...",loadingProjects:"正在加载项目...",loadingMcp:"正在加载MCP配置...",loadingSubagents:"正在加载 Subagents...",loadingCommands:"加载命令中...",loadingSession:"加载会话信息...",creating:"正在创建项目...",notFound:"无法找到指定的智能助手",noAgents:"暂无智能助手"},MA={bash:"命令行工具",read:"文件读取",write:"文件写入",edit:"文件编辑",search:"代码搜索",webSearch:"网络搜索",webFetch:"网页抓取"},jA={active:"活跃",inactive:"未激活",running:"运行中",stopped:"已停止",error:"错误"},DA={createAgent:"创建助手",editAgent:"编辑助手",deleteAgent:"删除助手",enableAgent:"启用助手",disableAgent:"禁用助手",testAgent:"测试助手",configureAgent:"配置助手"},RA={taskCompleted:"✅ 任务完成",generationStopped:"⏹️ 生成已停止",sessionRestored:"🔄 会话已恢复",executionCompleted:"(执行完成)"},PA={title:"文档大纲",description:"文档结构和章节管理",createSection:"新建章节",featureTitle:"文档大纲功能",comingSoon:"即将推出...",chatManagement:"您可以通过聊天来管理文档内容"},OA={title:"代码浏览器",description:"代码文件和结构管理",projectWithPath:"项目: {{path}}",openFile:"打开文件",featureTitle:"代码浏览器功能",comingSoon:"即将推出...",chatManagement:"您可以通过聊天来管理代码文件"},zA={title:"幻灯片预览",refreshTitle:"刷新幻灯片",refresh:"刷新",slideCount:"共 {{count}} 张幻灯片",noSlides:"还没有幻灯片",createWithAI:"与AI聊天来创建幻灯片",loading:"加载中...",loadError:"加载失败,请刷新页面重试",tabs:{preview:"预览",code:"代码"},loadFailed:"加载失败",fileNotFound:"文件不存在",loadingCode:"加载代码中..."},LA={types:EA,messages:NA,tools:MA,status:jA,actions:DA,notifications:RA,documentOutline:PA,codeExplorer:OA,slidePreview:zA},UA={welcome:{title:"欢迎使用 AgentStudio",subtitle:"在开始之前,我们需要配置后端服务连接",features:{title:"后端服务负责:",ai:{title:"AI 模型调用",description:"连接 Claude 等 AI 模型进行智能对话"},storage:{title:"文件存储和管理",description:"保存您的工作内容和项目文件"},history:{title:"会话历史记录",description:"保存和管理您的对话历史"}}},detecting:{title:"检测后端服务",description:"正在检测本地后端服务..."},found:{title:"检测到本地后端服务",description:"我们在您的系统中发现了可用的后端服务",serviceAddress:"服务地址",status:"连接正常",useThisService:"使用此服务",addOtherService:"添加其他服务"},notFound:{title:"未检测到本地后端服务",description:"请选择以下方式之一来配置后端服务",tabs:{install:"本地安装",remote:"使用远程服务"},install:{title:"安装本地后端服务",description:"按照以下步骤在本地安装后端服务:",copyCommands:"复制安装命令",viewDocs:"查看完整文档",retry:"重新检测"},remote:{title:"使用远程后端服务",description:"如果您已有远程服务,可以在这里配置连接",serviceName:"服务名称",serviceNamePlaceholder:"例如:公司服务器",serviceUrl:"服务地址",testConnection:"测试连接",testing:"测试中...",success:"连接成功",failed:"连接失败",addService:"添加服务",commonServices:"常用服务:",official:"官方服务",local:"本地服务"}},complete:{title:"配置完成!",description:"已成功连接到后端服务",serviceName:"服务名称",serviceUrl:"服务地址",nextSteps:{title:"接下来",description:"请登录系统开始使用 AgentStudio"},goToLogin:"前往登录",manageServices:"管理服务"},skipConfirm:{title:"确定要跳过配置?",warning:"未配置后端服务可能导致:",consequences:{noAi:"无法连接 AI 服务",noStorage:"无法保存工作内容",noFeatures:"系统功能不可用"},reconfigure:"您可以随时在以下位置重新配置:",locations:{loginPage:"登录页面的服务管理",settingsPage:"设置页面的 API 配置"},back:"返回配置",skip:"仍要跳过"},addService:{title:"添加后端服务",description:"输入后端服务的地址和名称进行连接",installHelp:"安装帮助",installGuide:{title:"本地安装指南",description:"按照以下步骤在本地安装后端服务:",copyCommands:"复制命令",viewDocs:"查看文档"},serviceName:"服务名称",serviceNamePlaceholder:"例如:公司服务器",serviceUrl:"服务地址",testConnection:"测试连接",testing:"测试中...",success:"连接成功",failed:"连接失败",commonServices:"常用服务:",official:"官方服务",local:"本地服务",retry:"重新检测",addButton:"添加服务"},actions:{skip:"跳过",getStarted:"开始配置",next:"下一步",back:"上一步"}},_A={backend:UA},FA="技能管理",BA="创建和管理 Claude 助手技能,扩展 AI 功能",HA="创建技能",qA="搜索技能名称或描述...",VA={showDisabled:"显示已禁用技能"},GA="还没有创建任何技能",IA="没有找到匹配的技能",KA="创建第一个技能",YA={user:"用户技能"},QA={local:"本地",plugin:"插件"},XA={enabled:"已启用",disabled:"已禁用"},ZA={skill:"技能",tools:"工具",status:"状态",updated:"更新时间",actions:"操作"},$A="尝试调整搜索条件",JA={updated:"更新于",usage:"使用 {{count}} 次",actions:{edit:"编辑",view:"查看",browseFiles:"浏览文件",delete:"删除"}},WA={description:"描述",allowedTools:"允许的工具",additionalFiles:"附加文件",browseFiles:"浏览文件",files:"文件",back:"返回",close:"关闭"},eT='确定要删除技能 "{{name}}" 吗?此操作不可撤销。',tT={loadFailed:"加载技能失败",createFailed:"创建技能失败",updateFailed:"更新技能失败",deleteFailed:"删除技能失败"},aT={title:"创建新技能",subtitle:"配置新技能的基本信息和功能",tabs:{basic:"基本信息",manifest:"技能清单",files:"附件文件"},basic:{name:"技能名称",namePlaceholder:"输入技能名称",nameHint:"技能的显示名称,支持中英文和数字",description:"技能描述",descriptionPlaceholder:"详细描述这个技能的功能和用途",descriptionHint:"清晰的描述有助于理解技能的作用",allowedTools:"允许使用的工具",allowedToolsHint:"选择此技能可以使用的工具",noToolsSelected:"尚未选择任何工具",selectTools:"选择工具",unsavedChanges:"您有未保存的更改"},content:{skillManifest:"技能清单",additionalFiles:"附加文件",addFile:"添加文件",noFiles:"没有附加文件",noFilesHint:"点击上方按钮添加技能相关文件",fileName:"文件名",filePath:"文件路径",fileContent:"文件内容",fileType:{markdown:"Markdown",text:"文本",script:"脚本",template:"模板",other:"其他"}}},nT={title:"编辑技能",scope:{user:"用户级技能"},basic:{name:"技能名称",description:"技能描述",allowedTools:"允许使用的工具",allowedToolsHint:"选择此技能可以使用的工具",skillContent:"技能内容",unsavedChanges:"您有未保存的更改,按 Cmd+S 保存"},files:{title:"附加文件",addFile:"添加文件",noFiles:"没有附加文件",addFilesHint:"添加相关文件来支持技能功能"},errors:{validationErrors:"验证错误",saveFailed:"保存技能失败"}},lT={title:FA,subtitle:BA,createButton:HA,searchPlaceholder:qA,filter:VA,noSkills:GA,noSkillsSearch:IA,createFirst:KA,scope:YA,source:QA,status:XA,table:ZA,adjustSearch:$A,preview:JA,detail:WA,deleteConfirm:eT,errors:tT,create:aT,editor:nT},oT={create:"Create",delete:"Delete",save:"Save",cancel:"Cancel",confirm:"Confirm",edit:"Edit",close:"Close",back:"Back",next:"Next",refresh:"Refresh",submit:"Submit",reset:"Reset",search:"Search",add:"Add",remove:"Remove",update:"Update",upload:"Upload",download:"Download",export:"Export",import:"Import",copy:"Copy",paste:"Paste",cut:"Cut"},iT={loading:"Loading...",processing:"Processing...",success:"Success",failed:"Failed",saving:"Saving...",deleting:"Deleting...",uploading:"Uploading...",downloading:"Downloading...",completed:"Completed",pending:"Pending",active:"Active",inactive:"Inactive",enabled:"Enabled",disabled:"Disabled"},sT={yes:"Yes",no:"No",ok:"OK",all:"All",none:"None",or:"Or",and:"And",more:"More",less:"Less",unknown:"Unknown",optional:"Optional",required:"Required",default:"Default",custom:"Custom"},rT="Path",cT="Created",uT={init:{description:""},clear:{description:""},compact:{description:""},agents:{description:""},settings:{description:""},help:{description:""}},dT={sendImage:""},fT={chinese:"",english:""},mT={pageTitle:"",metaDescription:"",nav:{enterWorkspace:""},hero:{title:"",subtitle:"",description:"",startNow:"",viewSource:""},features:{title:"",subtitle:"",modernWeb:{title:"",description:""},multiModel:{title:"",description:""},agentSystem:{title:"",description:""},fileManagement:{title:"",description:""},professionalTools:{title:"",description:""},secureReliable:{title:"",description:""}},quickStart:{title:"",subtitle:"",endUserTitle:"",endUserDescription:"",developerTitle:"",developerDescription:""},cta:{title:"",subtitle:"",start:""},footer:{description:"",copyright:"",product:"",workspace:"",sourceCode:"",releases:"",support:"",documentation:"",issues:"",discussions:""}},pT={actions:oT,status:iT,common:sT,path:rT,createdAt:cT,systemCommands:uT,agentChat:dT,languageSwitcher:fT,landing:mT},gT={backToHome:"Back to Home",documentation:"Documentation"},hT={dashboard:"Dashboard",projects:"Projects",agents:"Agents",scheduledTasks:"Scheduled Tasks",skills:"Skills",plugins:"Plugins",mcp:"MCP Services",commands:"Commands",subagents:"Subagents",settings:"Settings",settingsSubmenu:{general:"Look & Feel",suppliers:"Suppliers",memory:"Memory",mcpAdmin:"MCP Admin",cloudflareTunnel:"Public Access"}},yT={version:"Version {{version}}",apiServerStatus:{connected:"API Server Settings - Connected",disconnected:"API Server Settings - Connection Failed",checking:"API Server Settings - Checking..."},serviceStatus:{normal:"Service Normal",unavailable:"Service Unavailable",checking:"Checking..."}},vT={title:"Sign In",subtitle:"Enter your password to continue",passwordLabel:"Password",passwordPlaceholder:"Enter password",loginButton:"Sign In",loggingIn:"Signing in...",footer:"Please contact your administrator if you forgot your password",manageServices:"Manage Backend Services",serviceName:"Service Name",serviceUrl:"Service URL",current:"Current",testConnection:"Test Connection",switchTo:"Switch to this service",edit:"Edit",delete:"Delete",save:"Save",cancel:"Cancel",add:"Add",addService:"Add New Service",rerunOnboarding:"Rerun Configuration Wizard",checkingConnection:"Checking connection...",autoLoggingIn:"Auto signing in...",noPasswordRequired:"No password required for this service",enterSystem:"Enter System"},bT={pageTitle:"AgentStudio - Agent Workspace | Powered by Claude Agent SDK",metaDescription:"Agent for Work - Your local Agent workspace powered by Claude Agent SDK. Fully private data, scheduled tasks, A2A protocol, and custom agents.",nav:{enterWorkspace:"Enter Workspace",docs:"Docs"},hero:{badge:"Powered by Claude Agent SDK",title:"Agent for Work",subtitle:"Your Local Agent Workspace",description:"A truly private AI assistant running on your computer. Your data stays local, with scheduled task automation and multi-agent collaboration.",startNow:"Get Started",viewSource:"View Source",copyCommand:"Copy Command",installHint:"Copy the command below and run it in your terminal to get started",copy:"Copy",copied:"Copied"},preview:{title:"Product Preview",subtitle:"Intuitive Web interface for efficient AI work",chatAlt:"Chat interface screenshot",chatCaption:"Chat Interface - Talk to Agent with visual tool execution",mcpAlt:"MCP service management screenshot",mcpCaption:"MCP Management - One-click import Claude Code config"},features:{title:"Core Features",subtitle:"A complete solution for AI work automation",localWorkspace:{title:"Local Agent Workspace",point1:"Runs on your computer - a true local workspace",point2:"Data is fully private, never uploaded to cloud",point3:"Files, code, and conversations under your control"},webExperience:{title:"Web-Based Experience",point1:"Say goodbye to CLI, embrace a friendly Web interface",point2:"Visual tool execution makes conversations come alive",point3:"Built-in file browser to view project files alongside chat"},sdkFeatures:{title:"Claude Agent SDK Full Suite",skills:"Skills",commands:"Commands",plugins:"Plugins",memory:"Memory",subagent:"Subagent",multiModel:"Multi-Model",anthropicCompat:"Supports Claude, GLM, DeepSeek, Kimi K2, MiniMax and other models compatible with Anthropic API"}},scheduler:{badge:"Scheduled Tasks",title:"Let Agents Run on Schedule",description:"True AI work automation! Set time rules and your Agent will automatically handle repetitive tasks, freeing up your time.",scenariosTitle:"Typical Use Cases",scenario1:{title:"Daily Progress Report",desc:"Every day at 9 AM, automatically generate project progress report"},scenario2:{title:"Auto Code Review",desc:"Check code repository every 2 hours, automatically submit review comments"},scenario3:{title:"Weekly Meeting Summary",desc:"Every Friday, automatically compile and archive weekly meeting notes"},scenario4:{title:"Monthly Data Analysis",desc:"On the 1st of each month, automatically generate business data analysis report"}},a2a:{badge:"A2A Protocol",title:"Agent Collaboration Network",description:"Connect multiple agents into a collaborative network. Local and remote agents work together, building your personal AI team.",scenariosTitle:"Typical Use Cases",scenario1:{title:"Secretary Agent Dispatch",desc:"A secretary Agent receives tasks and dispatches other project Agents to execute specific work"},scenario2:{title:"Local ↔ Remote Collaboration",desc:"Agents on your local machine and remote dev server communicate and collaborate on tasks"},scenario3:{title:"Mobile Access Anywhere",desc:"Interact with local Agents via mobile messaging, work from anywhere (Beta)"}},customAgent:{badge:"Custom Agents",title:"Build Your Own Agent",description:"No coding required - customize your Agent through the UI. Built-in Claude Code Agent ready to use, suitable for various work scenarios.",example1:"PPT Creator Agent",example2:"Secretary Agent",example3:"Doc Writer Agent",example4:"Code Review Agent"},comparison:{title:"AgentStudio vs Claude Code",subtitle:"Same Claude Agent SDK, friendlier experience",dimension:"Comparison",interface:"Interface",webInterface:"UI",cli:"Command Line (CLI)",targetUsers:"Target Users",everyone:"Everyone",developers:"Mainly Developers",toolDisplay:"Tool Display",visual:"Visual Rendering",textOnly:"Text Only",fileBrowser:"File Browser",agentCustom:"Agent Customization",scheduler:"Scheduled Tasks",a2a:"A2A Protocol",mobileAccess:"Mobile Access",beta:"Beta"},quickStart:{title:"Quick Start",subtitle:"Choose your preferred installation method and start using within minutes",endUserTitle:"End Users - One-Click Install",endUserDescription:"No configuration needed, auto-installs all dependencies, perfect for quick experience and daily use",developerTitle:"Developers - Source Deployment",developerDescription:"Full development environment, supports hot reload, perfect for custom development and feature extension"},cta:{title:"Ready to start your AI work automation?",subtitle:"One command to launch your local Agent workspace",start:"Get Started"},footer:{description:"Agent for Work - Your local Agent workspace powered by Claude Agent SDK.",copyright:"© 2026 AgentStudio. Apache 2.0 License.",product:"Product",workspace:"Workspace",sourceCode:"Source Code",releases:"Releases",support:"Support",documentation:"Documentation",issues:"Issues",discussions:"Discord Community"}},ST={title:"Agent Management",subtitle:"Manage Specialized AI Agents",createButton:"Create Assistant",editButton:"Edit Assistant",deleteButton:"Delete Assistant",enableButton:"Enable Assistant",disableButton:"Disable Assistant",useButton:"Use",startUsingButton:"Start using assistant",noAgents:"No assistants yet",noAgentsSearch:"No matching assistants found",searchPlaceholder:"Search assistants...",createFirst:"Create your first AI assistant",adjustSearch:"Try adjusting search criteria",loading:"Loading AI assistants...",filter:{all:"All",enabled:"Enabled",disabled:"Disabled"},table:{agent:"AI Assistant",type:"Type",config:"Configuration",tools:"Tools",status:"Status",actions:"Actions",maxTurns:"Max Turns",unlimited:"Unlimited",permission:"Permission",toolsCount:"{{count}} tools"},form:{create:"Create Assistant",edit:"Edit Assistant",name:"Name",description:"Description",maxTurns:"Max Turns",maxTurnsPlaceholder:"Unlimited",maxTurnsError:"Max turns must be between 1-100",maxTurnsExceeded:"Max turns cannot exceed {{maximum}}",permissionMode:"Permission Mode",icon:"Icon",primaryColor:"Primary Color",enabledTools:"Enabled Tools",selectTools:"Select Tools",toolsRegular:"{{count}} regular tools",toolsMcp:"{{count}} MCP tools",systemPrompt:"System Prompt",systemPromptPlaceholder:"Enter assistant's system prompt...",nameRequired:"Please enter assistant name",save:"Save",cancel:"Cancel"},permissions:{default:"Default",acceptEdits:"Auto-accept edits",bypassPermissions:"Bypass permission checks",plan:"Plan mode"},status:{enabled:"Enabled",disabled:"Disabled"},errors:{createFailed:"Failed to create, please try again.",saveFailed:"Failed to save, please try again.",deleteFailed:"Failed to delete, please try again.",toggleFailed:"Operation failed, please try again.",builtinCannotDelete:"Built-in assistants cannot be deleted, but can be disabled."},confirmDelete:`Are you sure you want to delete assistant "{{name}}"?
186
+ 对话过长。请新建会话或使用 /compact 命令减少上下文。`,checkBudget:"检查预算设置和成本限制",increaseMaxTurns:"在代理设置中增加最大轮次"}},dA={title:"已压缩上下文",expand:"展开查看",collapse:"收起"},fA={title:"最近活动",empty:"暂无最近活动",time:{justNow:"刚刚",minutesAgo:"{{count}} 分钟前",hoursAgo:"{{count}} 小时前",daysAgo:"{{count}} 天前"}},mA={title:"后端服务",noService:"无服务",namePlaceholder:"服务名称",urlPlaceholder:"服务地址",add:"添加",save:"保存",cancel:"取消",edit:"编辑",delete:"删除",addNew:"添加新服务",testingConnection:"正在测试连接...",connectionWarning:{title:"无法连接到服务",message:'无法连接到服务 "{{name}}" ({{url}})。',consequence:"如果继续切换,您将无法登录或使用该服务,但可以在登录页面中重新配置服务地址。",cancel:"取消",continue:"仍然切换"}},pA={checking:"检查中...",connected:"已连接",disconnected:"未连接",manageServices:"管理服务",quickSwitch:"快速切换服务",version:"版本",backendName:"后端名称",status:"状态",clickToSwitch:"点击服务名快速切换",clickToManage:"点击齿轮图标管理服务"},gA={title:"服务管理",noService:"无服务",servicesList:"服务列表",addService:"添加服务",current:"当前",testConnection:"测试连接",switchToService:"切换到此服务",editService:"编辑服务",removeService:"删除服务",refreshStatus:"刷新状态",servicesOnline:"个服务在线",close:"关闭",namePlaceholder:"服务名称",urlPlaceholder:"服务地址 (如: http://localhost:4936)",version:"版本",add:"添加",save:"保存",cancel:"取消",addNewService:"添加新服务",switchSuccess:"已切换到服务: {{name}}",addSuccess:"服务添加成功",updateSuccess:"服务更新成功",removeSuccess:"服务删除成功",logoutService:"退出登录此服务",logoutSuccess:"已成功退出登录",managePassword:"管理密码",password:{title:"访问密码管理",description:"设置密码后,登录时需要输入密码。留空并保存可清除密码,启用免密登录。",checking:"正在检查...",currentlySet:"当前已设置访问密码",currentlyNotSet:"当前未设置密码,可免密登录",newPassword:"新密码",newPasswordPlaceholder:"输入新密码(留空则清除密码)",confirmPassword:"确认密码",confirmPasswordPlaceholder:"再次输入密码",save:"保存密码",mismatch:"两次输入的密码不一致",tooShort:"密码长度至少为4位",setSuccess:"密码设置成功,下次登录时生效",clearSuccess:"密码已清除,系统现在可以免密登录",saveFailed:"保存密码失败"},connectionTest:{success:"连接测试成功",failed:"连接测试失败",error:"连接测试出错"},switchWarning:{title:"服务连接警告",message:'服务 "{{name}}" ({{url}}) 无法连接。',consequence:"如果继续切换,您可能无法正常使用某些功能。",cancel:"取消",continue:"仍然切换"}},hA={detecting:{title:"正在检测 Claude CLI",description:"正在检测您的系统中是否安装了 Claude..."},selection:{title:"选择 Claude 版本",description:"我们检测到以下 Claude CLI 安装,请选择要使用的版本",userInstalled:"用户全局安装",systemInstalled:"系统 npm 包",path:"路径",version:"版本",packageManager:"包管理器",useUserInstalled:"使用用户安装的 Claude",useUserInstalledDesc:"使用您通过包管理器全局安装的 Claude CLI",useSystemPackage:"使用系统 npm 包",useSystemPackageDesc:"使用本项目 node_modules 中自带的 Claude CLI",noClaudeFound:"未检测到 Claude CLI",noClaudeFoundDesc:"请先安装 Claude CLI 或确保项目依赖已正确安装"},config:{title:"配置认证方式",description:"选择如何配置 Claude 的认证凭证",skipToken:"暂不配置(推荐)",skipTokenDesc:"跳过认证配置,效果与 Claude Pro 订阅用户一样",claudePro:"Claude Pro 订阅用户",claudeProDesc:"我是 Claude Pro 订阅用户,将在 CLI 中自行登录",enterToken:"手动输入 Token",enterTokenDesc:"手动输入 ANTHROPIC_AUTH_TOKEN 环境变量",tokenPlaceholder:"输入您的 ANTHROPIC_AUTH_TOKEN"},creating:{title:"正在创建系统版本",description:"正在为您配置 Claude 版本,请稍候..."},success:{title:"配置成功!",description:"Claude 版本已成功创建,即将返回控制台..."},actions:{skip:"跳过",next:"下一步",back:"上一步",create:"创建版本"}},yA={title:"A2A协议管理",project:"项目",selectedProject:"项目: {{project}}",noProjectSelected:"未选择项目",tabs:{overview:"概览",apiKeys:"API密钥",external:"外部Agent",tasks:"任务"},actions:{copy:"复制",createKey:"创建密钥",cancel:"取消",delete:"删除",edit:"编辑",enable:"启用",disable:"禁用",hide:"隐藏",show:"显示",addAgent:"添加Agent",importProjects:"导入项目",copyKey:"复制密钥",close:"关闭"},overview:{agentIdentity:"Agent身份",a2aAgentId:"A2A Agent ID",projectId:"项目ID",agentType:"Agent类型",agentCard:"Agent卡片",apiKeys:"API密钥",externalAgents:"外部Agent",activeTasks:"活跃任务",notEnabled:"此项目尚未启用A2A功能",enableAfterCreatingKey:"创建API密钥后自动启用"},agentCard:{context:"Agent上下文",skills:"可用技能",security:"安全认证"},apiKeys:{title:"API密钥管理",noKeys:"还没有API密钥",createFirstKey:"创建第一个API密钥",description:"描述",key:"密钥",createdAt:"创建时间",lastUsed:"最后使用",usageCount:"使用次数",actions:"操作",showKey:"显示密钥",hideKey:"隐藏密钥",keyCopied:"密钥已复制"},external:{title:"外部Agent配置",noAgents:"还没有配置外部Agent",addFirstAgent:"添加第一个外部Agent",enabled:"启用",disabled:"禁用",form:{name:"Agent名称",namePlaceholder:"例如:数据分析Agent",url:"URL",urlPlaceholder:"https://agent.example.com/a2a/uuid",apiKey:"API密钥",apiKeyPlaceholder:"agt_proj_external_key_here",description:"描述",descriptionPlaceholder:"可选的Agent功能描述",enableThisAgent:"启用此Agent",urlHelp:"必须是完整的HTTP或HTTPS URL"},modal:{addTitle:"添加外部Agent",editTitle:"编辑外部Agent",saveChanges:"保存修改",addAgent:"添加Agent"},importModal:{title:"导入项目",description:"选择要导入的项目,系统将自动为这些项目生成API密钥,并添加到当前项目的外部Agent列表中。",noProjects:"没有可导入的项目",selected:"已选择",import:"导入",importing:"导入中..."}},tasks:{title:"任务监控",needA2AEnabled:"需要先启用A2A功能",noTasks:"还没有任务记录",createdAt:"创建时间",startedAt:"开始时间",completedAt:"完成时间"},modals:{createKey:{title:"创建API密钥",description:"描述",descriptionPlaceholder:"例如:生产环境密钥",descriptionHelp:"用于标识此API密钥的用途,最多100个字符",important:"重要提示",securityNote:"API密钥创建后只会完整显示一次,请妥善保存。",creating:"创建中..."}},validation:{descriptionRequired:"描述不能为空",descriptionTooLong:"描述不能超过100个字符",agentNameRequired:"Agent名称不能为空",agentNameTooLong:"Agent名称不能超过50个字符",urlRequired:"URL不能为空",invalidUrl:"URL格式无效",apiKeyRequired:"API密钥不能为空",required:"此字段为必填项"},confirmations:{deleteApiKey:"确定要删除这个API密钥吗?此操作不可撤销。",deleteExternalAgent:"确定要删除这个外部Agent吗?此操作不可撤销。"}},vA={common:hC,projectForm:yC,agentForm:vC,commandForm:bC,fileExplorer:SC,sessionDropdown:xC,toolSelector:wC,languageSwitcher:CC,agentChat:AC,systemCommands:TC,projectMemory:kC,projectCommands:EC,projectSubAgents:NC,sessionsDashboard:MC,fileBrowser:jC,csvPreview:DC,jsonlPreview:RC,unifiedToolSelector:PC,subagentForm:OC,commandSelector:zC,apiSettingsModal:LC,projectCommandsModal:UC,projectSubAgentsModal:_C,projectSelector:FC,mcpTool:BC,bashTool:HC,readTool:qC,writeTool:VC,editTool:GC,globTool:IC,grepTool:KC,webFetchTool:YC,webSearchTool:QC,taskTool:XC,subAgentMessageFlow:ZC,skillTool:$C,todoWriteTool:JC,exitPlanModeTool:WC,notebookEditTool:eA,toolRenderer:tA,baseToolComponent:aA,bashOutputTool:nA,killBashTool:lA,lsTool:oA,timeMachineTool:iA,askUserQuestionTool:sA,multiEditTool:rA,notebookReadTool:cA,agentChatPanel:uA,compactSummary:dA,recentActivity:fA,backendServiceSwitcher:mA,serviceStatusIndicator:pA,serviceManagementModal:gA,claudeVersionSetup:hA,a2aManagement:yA},bA={connectionFailed:"网络连接错误,无法连接到AI服务",connectionFailedRetry:"网络连接错误,无法连接到AI服务,请检查网络连接后重试",timeout:"请求超时,请重试",serverError:"服务器错误,请稍后重试",unknownError:"未知错误,请重试"},SA={createFailed:"创建项目失败",deleteFailed:"删除项目失败",updateFailed:"更新项目失败",notFound:"未找到匹配的项目",loadFailed:"加载项目失败",nameRequired:"项目名称不能为空",nameInvalid:"项目名称包含非法字符"},xA={createFailed:"创建助手失败",deleteFailed:"删除助手失败",updateFailed:"更新助手失败",notFound:"无法找到指定的智能助手,可能已被删除或禁用",loadFailed:"加载助手失败",setFailed:"设置Agent失败",builtinCannotDelete:"内置助手无法删除,但可以禁用",nameRequired:"助手名称不能为空"},wA={uploadFailed:"上传文件失败",deleteFailed:"删除文件失败",downloadFailed:"下载文件失败",readFailed:"读取文件失败",writeFailed:"写入文件失败",notFound:"文件不存在",tooLarge:"文件过大"},CA={createFailed:"创建会话失败",deleteFailed:"删除会话失败",loadFailed:"加载会话失败",notFound:"会话不存在"},AA={executeFailed:"命令执行失败",notFound:"未找到匹配的命令",loadFailed:"无法加载自定义命令",invalidFormat:"命令格式错误"},TA={saveFailed:"保存失败,请重试",loadFailed:"加载失败",operationFailed:"操作失败,请重试",invalidInput:"输入内容无效",permissionDenied:"权限不足"},kA={network:bA,project:SA,agent:xA,file:wA,session:CA,command:AA,common:TA},EA={pptEditor:"PPT编辑助手",codeAssistant:"AI编程助手",documentWriter:"文档写作助手",generalChat:"通用对话助手",custom:"自定义助手"},NA={loading:"正在加载智能助手...",loadingProjects:"正在加载项目...",loadingMcp:"正在加载MCP配置...",loadingSubagents:"正在加载 Subagents...",loadingCommands:"加载命令中...",loadingSession:"加载会话信息...",creating:"正在创建项目...",notFound:"无法找到指定的智能助手",noAgents:"暂无智能助手"},MA={bash:"命令行工具",read:"文件读取",write:"文件写入",edit:"文件编辑",search:"代码搜索",webSearch:"网络搜索",webFetch:"网页抓取"},jA={active:"活跃",inactive:"未激活",running:"运行中",stopped:"已停止",error:"错误"},DA={createAgent:"创建助手",editAgent:"编辑助手",deleteAgent:"删除助手",enableAgent:"启用助手",disableAgent:"禁用助手",testAgent:"测试助手",configureAgent:"配置助手"},RA={taskCompleted:"✅ 任务完成",generationStopped:"⏹️ 生成已停止",sessionRestored:"🔄 会话已恢复",executionCompleted:"(执行完成)"},PA={title:"文档大纲",description:"文档结构和章节管理",createSection:"新建章节",featureTitle:"文档大纲功能",comingSoon:"即将推出...",chatManagement:"您可以通过聊天来管理文档内容"},OA={title:"代码浏览器",description:"代码文件和结构管理",projectWithPath:"项目: {{path}}",openFile:"打开文件",featureTitle:"代码浏览器功能",comingSoon:"即将推出...",chatManagement:"您可以通过聊天来管理代码文件"},zA={title:"幻灯片预览",refreshTitle:"刷新幻灯片",refresh:"刷新",slideCount:"共 {{count}} 张幻灯片",noSlides:"还没有幻灯片",createWithAI:"与AI聊天来创建幻灯片",loading:"加载中...",loadError:"加载失败,请刷新页面重试",tabs:{preview:"预览",code:"代码"},loadFailed:"加载失败",fileNotFound:"文件不存在",loadingCode:"加载代码中..."},LA={types:EA,messages:NA,tools:MA,status:jA,actions:DA,notifications:RA,documentOutline:PA,codeExplorer:OA,slidePreview:zA},UA={welcome:{title:"欢迎使用 AgentStudio",subtitle:"在开始之前,我们需要配置后端服务连接",features:{title:"后端服务负责:",ai:{title:"AI 模型调用",description:"连接 Claude 等 AI 模型进行智能对话"},storage:{title:"文件存储和管理",description:"保存您的工作内容和项目文件"},history:{title:"会话历史记录",description:"保存和管理您的对话历史"}}},detecting:{title:"检测后端服务",description:"正在检测本地后端服务..."},found:{title:"检测到本地后端服务",description:"我们在您的系统中发现了可用的后端服务",serviceAddress:"服务地址",status:"连接正常",useThisService:"使用此服务",addOtherService:"添加其他服务"},notFound:{title:"未检测到本地后端服务",description:"请选择以下方式之一来配置后端服务",tabs:{install:"本地安装",remote:"使用远程服务"},install:{title:"安装本地后端服务",description:"按照以下步骤在本地安装后端服务:",copyCommands:"复制安装命令",viewDocs:"查看完整文档",retry:"重新检测"},remote:{title:"使用远程后端服务",description:"如果您已有远程服务,可以在这里配置连接",serviceName:"服务名称",serviceNamePlaceholder:"例如:公司服务器",serviceUrl:"服务地址",testConnection:"测试连接",testing:"测试中...",success:"连接成功",failed:"连接失败",addService:"添加服务",commonServices:"常用服务:",official:"官方服务",local:"本地服务"}},complete:{title:"配置完成!",description:"已成功连接到后端服务",serviceName:"服务名称",serviceUrl:"服务地址",nextSteps:{title:"接下来",description:"请登录系统开始使用 AgentStudio"},goToLogin:"前往登录",manageServices:"管理服务"},skipConfirm:{title:"确定要跳过配置?",warning:"未配置后端服务可能导致:",consequences:{noAi:"无法连接 AI 服务",noStorage:"无法保存工作内容",noFeatures:"系统功能不可用"},reconfigure:"您可以随时在以下位置重新配置:",locations:{loginPage:"登录页面的服务管理",settingsPage:"设置页面的 API 配置"},back:"返回配置",skip:"仍要跳过"},addService:{title:"添加后端服务",description:"输入后端服务的地址和名称进行连接",installHelp:"安装帮助",installGuide:{title:"本地安装指南",description:"按照以下步骤在本地安装后端服务:",copyCommands:"复制命令",viewDocs:"查看文档"},serviceName:"服务名称",serviceNamePlaceholder:"例如:公司服务器",serviceUrl:"服务地址",testConnection:"测试连接",testing:"测试中...",success:"连接成功",failed:"连接失败",commonServices:"常用服务:",official:"官方服务",local:"本地服务",retry:"重新检测",addButton:"添加服务"},actions:{skip:"跳过",getStarted:"开始配置",next:"下一步",back:"上一步"}},_A={backend:UA},FA="技能管理",BA="创建和管理 Claude 助手技能,扩展 AI 功能",HA="创建技能",qA="搜索技能名称或描述...",VA={showDisabled:"显示已禁用技能"},GA="还没有创建任何技能",IA="没有找到匹配的技能",KA="创建第一个技能",YA={user:"用户技能"},QA={local:"本地",plugin:"插件"},XA={enabled:"已启用",disabled:"已禁用"},ZA={skill:"技能",tools:"工具",status:"状态",updated:"更新时间",actions:"操作"},$A="尝试调整搜索条件",JA={updated:"更新于",usage:"使用 {{count}} 次",actions:{edit:"编辑",view:"查看",browseFiles:"浏览文件",delete:"删除"}},WA={description:"描述",allowedTools:"允许的工具",additionalFiles:"附加文件",browseFiles:"浏览文件",files:"文件",back:"返回",close:"关闭"},eT='确定要删除技能 "{{name}}" 吗?此操作不可撤销。',tT={loadFailed:"加载技能失败",createFailed:"创建技能失败",updateFailed:"更新技能失败",deleteFailed:"删除技能失败"},aT={title:"创建新技能",subtitle:"配置新技能的基本信息和功能",tabs:{basic:"基本信息",manifest:"技能清单",files:"附件文件"},basic:{name:"技能名称",namePlaceholder:"输入技能名称",nameHint:"技能的显示名称,支持中英文和数字",description:"技能描述",descriptionPlaceholder:"详细描述这个技能的功能和用途",descriptionHint:"清晰的描述有助于理解技能的作用",allowedTools:"允许使用的工具",allowedToolsHint:"选择此技能可以使用的工具",noToolsSelected:"尚未选择任何工具",selectTools:"选择工具",unsavedChanges:"您有未保存的更改"},content:{skillManifest:"技能清单",additionalFiles:"附加文件",addFile:"添加文件",noFiles:"没有附加文件",noFilesHint:"点击上方按钮添加技能相关文件",fileName:"文件名",filePath:"文件路径",fileContent:"文件内容",fileType:{markdown:"Markdown",text:"文本",script:"脚本",template:"模板",other:"其他"}}},nT={title:"编辑技能",scope:{user:"用户级技能"},basic:{name:"技能名称",description:"技能描述",allowedTools:"允许使用的工具",allowedToolsHint:"选择此技能可以使用的工具",skillContent:"技能内容",unsavedChanges:"您有未保存的更改,按 Cmd+S 保存"},files:{title:"附加文件",addFile:"添加文件",noFiles:"没有附加文件",addFilesHint:"添加相关文件来支持技能功能"},errors:{validationErrors:"验证错误",saveFailed:"保存技能失败"}},lT={title:FA,subtitle:BA,createButton:HA,searchPlaceholder:qA,filter:VA,noSkills:GA,noSkillsSearch:IA,createFirst:KA,scope:YA,source:QA,status:XA,table:ZA,adjustSearch:$A,preview:JA,detail:WA,deleteConfirm:eT,errors:tT,create:aT,editor:nT},oT={create:"Create",delete:"Delete",save:"Save",cancel:"Cancel",confirm:"Confirm",edit:"Edit",close:"Close",back:"Back",next:"Next",refresh:"Refresh",submit:"Submit",reset:"Reset",search:"Search",add:"Add",remove:"Remove",update:"Update",upload:"Upload",download:"Download",export:"Export",import:"Import",copy:"Copy",paste:"Paste",cut:"Cut"},iT={loading:"Loading...",processing:"Processing...",success:"Success",failed:"Failed",saving:"Saving...",deleting:"Deleting...",uploading:"Uploading...",downloading:"Downloading...",completed:"Completed",pending:"Pending",active:"Active",inactive:"Inactive",enabled:"Enabled",disabled:"Disabled"},sT={yes:"Yes",no:"No",ok:"OK",all:"All",none:"None",or:"Or",and:"And",more:"More",less:"Less",unknown:"Unknown",optional:"Optional",required:"Required",default:"Default",custom:"Custom"},rT="Path",cT="Created",uT={init:{description:""},clear:{description:""},compact:{description:""},agents:{description:""},settings:{description:""},help:{description:""}},dT={sendImage:""},fT={chinese:"",english:""},mT={pageTitle:"",metaDescription:"",nav:{enterWorkspace:""},hero:{title:"",subtitle:"",description:"",startNow:"",viewSource:""},features:{title:"",subtitle:"",modernWeb:{title:"",description:""},multiModel:{title:"",description:""},agentSystem:{title:"",description:""},fileManagement:{title:"",description:""},professionalTools:{title:"",description:""},secureReliable:{title:"",description:""}},quickStart:{title:"",subtitle:"",endUserTitle:"",endUserDescription:"",developerTitle:"",developerDescription:""},cta:{title:"",subtitle:"",start:""},footer:{description:"",copyright:"",product:"",workspace:"",sourceCode:"",releases:"",support:"",documentation:"",issues:"",discussions:""}},pT={actions:oT,status:iT,common:sT,path:rT,createdAt:cT,systemCommands:uT,agentChat:dT,languageSwitcher:fT,landing:mT},gT={backToHome:"Back to Home",documentation:"Documentation"},hT={dashboard:"Dashboard",projects:"Projects",agents:"Agents",scheduledTasks:"Scheduled Tasks",skills:"Skills",plugins:"Plugins",mcp:"MCP Services",commands:"Commands",subagents:"Subagents",settings:"Settings",settingsSubmenu:{general:"Look & Feel",suppliers:"Suppliers",memory:"Memory",mcpAdmin:"MCP Admin",cloudflareTunnel:"Public Access"}},yT={version:"Version {{version}}",apiServerStatus:{connected:"API Server Settings - Connected",disconnected:"API Server Settings - Connection Failed",checking:"API Server Settings - Checking..."},serviceStatus:{normal:"Service Normal",unavailable:"Service Unavailable",checking:"Checking..."}},vT={title:"Sign In",subtitle:"Enter your password to continue",passwordLabel:"Password",passwordPlaceholder:"Enter password",loginButton:"Sign In",loggingIn:"Signing in...",footer:"Please contact your administrator if you forgot your password",manageServices:"Manage Backend Services",serviceName:"Service Name",serviceUrl:"Service URL",current:"Current",testConnection:"Test Connection",switchTo:"Switch to this service",edit:"Edit",delete:"Delete",save:"Save",cancel:"Cancel",add:"Add",addService:"Add New Service",rerunOnboarding:"Rerun Configuration Wizard",checkingConnection:"Checking connection...",autoLoggingIn:"Auto signing in...",noPasswordRequired:"No password required for this service",enterSystem:"Enter System"},bT={pageTitle:"AgentStudio - Agent Workspace | Powered by Claude Agent SDK",metaDescription:"Agent for Work - Your local Agent workspace powered by Claude Agent SDK. Fully private data, scheduled tasks, A2A protocol, and custom agents.",nav:{enterWorkspace:"Enter Workspace",docs:"Docs",wechat:"WeChat"},hero:{badge:"Powered by Claude Agent SDK",title:"Agent for Work",subtitle:"Your Local Agent Workspace",description:"A truly private AI assistant running on your computer. Your data stays local, with scheduled task automation and multi-agent collaboration.",startNow:"Get Started",viewSource:"View Source",copyCommand:"Copy Command",installHint:"Copy the command below and run it in your terminal to get started",copy:"Copy",copied:"Copied"},preview:{title:"Product Preview",subtitle:"Intuitive Web interface for efficient AI work",chatAlt:"Chat interface screenshot",chatCaption:"Chat Interface - Talk to Agent with visual tool execution",mcpAlt:"MCP service management screenshot",mcpCaption:"MCP Management - One-click import Claude Code config"},features:{title:"Core Features",subtitle:"A complete solution for AI work automation",localWorkspace:{title:"Local Agent Workspace",point1:"Runs on your computer - a true local workspace",point2:"Data is fully private, never uploaded to cloud",point3:"Files, code, and conversations under your control"},webExperience:{title:"Web-Based Experience",point1:"Say goodbye to CLI, embrace a friendly Web interface",point2:"Visual tool execution makes conversations come alive",point3:"Built-in file browser to view project files alongside chat"},sdkFeatures:{title:"Claude Agent SDK Full Suite",skills:"Skills",commands:"Commands",plugins:"Plugins",memory:"Memory",subagent:"Subagent",multiModel:"Multi-Model",anthropicCompat:"Supports Claude, GLM, DeepSeek, Kimi K2, MiniMax and other models compatible with Anthropic API"}},scheduler:{badge:"Scheduled Tasks",title:"Let Agents Run on Schedule",description:"True AI work automation! Set time rules and your Agent will automatically handle repetitive tasks, freeing up your time.",scenariosTitle:"Typical Use Cases",scenario1:{title:"Daily Progress Report",desc:"Every day at 9 AM, automatically generate project progress report"},scenario2:{title:"Auto Code Review",desc:"Check code repository every 2 hours, automatically submit review comments"},scenario3:{title:"Weekly Meeting Summary",desc:"Every Friday, automatically compile and archive weekly meeting notes"},scenario4:{title:"Monthly Data Analysis",desc:"On the 1st of each month, automatically generate business data analysis report"}},a2a:{badge:"A2A Protocol",title:"Agent Collaboration Network",description:"Connect multiple agents into a collaborative network. Local and remote agents work together, building your personal AI team.",scenariosTitle:"Typical Use Cases",scenario1:{title:"Secretary Agent Dispatch",desc:"A secretary Agent receives tasks and dispatches other project Agents to execute specific work"},scenario2:{title:"Local ↔ Remote Collaboration",desc:"Agents on your local machine and remote dev server communicate and collaborate on tasks"},scenario3:{title:"Mobile Access Anywhere",desc:"Interact with local Agents via mobile messaging, work from anywhere (Beta)"}},customAgent:{badge:"Custom Agents",title:"Build Your Own Agent",description:"No coding required - customize your Agent through the UI. Built-in Claude Code Agent ready to use, suitable for various work scenarios.",example1:"PPT Creator Agent",example2:"Secretary Agent",example3:"Doc Writer Agent",example4:"Code Review Agent"},comparison:{title:"AgentStudio vs Claude Code",subtitle:"Same Claude Agent SDK, friendlier experience",dimension:"Comparison",interface:"Interface",webInterface:"UI",cli:"Command Line (CLI)",targetUsers:"Target Users",everyone:"Everyone",developers:"Mainly Developers",toolDisplay:"Tool Display",visual:"Visual Rendering",textOnly:"Text Only",fileBrowser:"File Browser",agentCustom:"Agent Customization",scheduler:"Scheduled Tasks",a2a:"A2A Protocol",mobileAccess:"Mobile Access",beta:"Beta"},quickStart:{title:"Quick Start",subtitle:"Choose your preferred installation method and start using within minutes",endUserTitle:"End Users - One-Click Install",endUserDescription:"No configuration needed, auto-installs all dependencies, perfect for quick experience and daily use",developerTitle:"Developers - Source Deployment",developerDescription:"Full development environment, supports hot reload, perfect for custom development and feature extension"},cta:{title:"Ready to start your AI work automation?",subtitle:"One command to launch your local Agent workspace",start:"Get Started"},footer:{description:"Agent for Work - Your local Agent workspace powered by Claude Agent SDK.",copyright:"© 2026 AgentStudio. GPL v3 License.",product:"Product",workspace:"Workspace",sourceCode:"Source Code",releases:"Releases",support:"Support",documentation:"Documentation",issues:"Issues",wechat:"WeChat Group"},wechat:{title:"Join WeChat Group",fallback:"QR code expired? Add WeChat ID:",wechatId:"talk4kong",tip:"Scan QR code or add WeChat ID to join the community"}},ST={title:"Agent Management",subtitle:"Manage Specialized AI Agents",createButton:"Create Assistant",editButton:"Edit Assistant",deleteButton:"Delete Assistant",enableButton:"Enable Assistant",disableButton:"Disable Assistant",useButton:"Use",startUsingButton:"Start using assistant",noAgents:"No assistants yet",noAgentsSearch:"No matching assistants found",searchPlaceholder:"Search assistants...",createFirst:"Create your first AI assistant",adjustSearch:"Try adjusting search criteria",loading:"Loading AI assistants...",filter:{all:"All",enabled:"Enabled",disabled:"Disabled"},table:{agent:"AI Assistant",type:"Type",config:"Configuration",tools:"Tools",status:"Status",actions:"Actions",maxTurns:"Max Turns",unlimited:"Unlimited",permission:"Permission",toolsCount:"{{count}} tools"},form:{create:"Create Assistant",edit:"Edit Assistant",name:"Name",description:"Description",maxTurns:"Max Turns",maxTurnsPlaceholder:"Unlimited",maxTurnsError:"Max turns must be between 1-100",maxTurnsExceeded:"Max turns cannot exceed {{maximum}}",permissionMode:"Permission Mode",icon:"Icon",primaryColor:"Primary Color",enabledTools:"Enabled Tools",selectTools:"Select Tools",toolsRegular:"{{count}} regular tools",toolsMcp:"{{count}} MCP tools",systemPrompt:"System Prompt",systemPromptPlaceholder:"Enter assistant's system prompt...",nameRequired:"Please enter assistant name",save:"Save",cancel:"Cancel"},permissions:{default:"Default",acceptEdits:"Auto-accept edits",bypassPermissions:"Bypass permission checks",plan:"Plan mode"},status:{enabled:"Enabled",disabled:"Disabled"},errors:{createFailed:"Failed to create, please try again.",saveFailed:"Failed to save, please try again.",deleteFailed:"Failed to delete, please try again.",toggleFailed:"Operation failed, please try again.",builtinCannotDelete:"Built-in assistants cannot be deleted, but can be disabled."},confirmDelete:`Are you sure you want to delete assistant "{{name}}"?
187
187
 
188
- This action cannot be undone, and all related sessions will also be deleted.`},xT={title:"Project Management",subtitle:"Manage All Your Work Projects",createButton:"Create New Project",selectType:"Select Assistant Type to Create Work Project",noProjects:"No projects yet",searchPlaceholder:"Search projects...",loading:"Loading projects...",filter:{all:"All",active:"Active",inactive:"Inactive"},table:{project:"Project",agent:"Assistant",lastActive:"Last Active",sessions:"Sessions",actions:"Actions",sessionsCount:"{{count}} sessions"},form:{create:"Create Project",edit:"Edit Project",name:"Project Name",namePlaceholder:"Enter project name",nameRequired:"Project Name *",agentType:"Select Assistant Type *",agentTypePlaceholder:"Choose an assistant type",directory:"Project Directory",directoryNote:"A new folder will be created under this directory",description:"Project Description",descriptionPlaceholder:"Briefly describe the purpose of this project...",save:"Save",cancel:"Cancel"},actions:{open:"Open",openInNewTab:"Open in new tab",edit:"Edit",delete:"Delete"},status:{active:"Active",inactive:"Inactive",never:"Never"},errors:{createFailed:"Failed to create project",updateFailed:"Failed to update project",deleteFailed:"Failed to delete project",loadFailed:"Failed to load projects"},deleteConfirm:"Are you sure you want to delete this project?",deleteNote:"Note: This will only remove the project from the list, not delete the actual file directory.",deleteSuccess:"Project deleted"},wT={title:"Chat",inputPlaceholder:"Type a message...",aiTyping:"AI is typing",newSession:"New Chat",sessionHistory:"Chat History",loading:"Loading AI assistant...",agentNotFound:"Assistant Not Found",agentNotFoundDesc:"Unable to find the specified AI assistant, it may have been deleted or disabled.",agentDisabled:"Assistant Disabled",agentDisabledDesc:'AI assistant "{{name}}" is currently disabled and cannot be used.',closePage:"Close Page",tabNotification:{working:"🤖 Working",completed:"✅ Completed",error:"❌ Error"}},CT={title:"Dashboard",welcome:"Welcome back to Claude Code workspace",defaultProjectName:"Default Workspace",loading:"Loading...",creatingDefaultProject:"Creating default workspace...",noAgentsEnabled:"No Agent available, please enable one first",goToAgents:"Go to Agent Management",selectProject:"Select Project",noProjects:"No projects",createNewProject:"Create New Project",selectProjectToStart:"Please select a project to start chatting",stats:{agentManagement:"Agent Management",workProjects:"Work Projects",slashCommands:"Slash Commands",activeSessions:"Active Sessions"},recentAgents:{title:"Frequently Used Assistants",viewAll:"View All",types:{slides:"Presentations","claude-code":"Claude Code"},noAgents:"No assistants available",goEnable:"Enable assistants"},quickActions:{title:"Quick Actions",createProject:{title:"Create New Project",description:"Select assistant type to create work project"},createAgent:{title:"Create New Assistant",description:"Configure custom AI assistant"},addMcp:{title:"Add MCP Service",description:"Connect new MCP server"},viewAnalytics:{title:"View Analytics",description:"Analyze usage and performance"}},overview:"Overview",statistics:"Statistics",recentActivity:"Recent Activity"},AT=JSON.parse(`{"title":"Settings","general":{"title":"Look and Feel","description":"Configure interface theme and language","interfaceSettings":"Look and Feel","theme":{"label":"Theme","description":"Select interface theme mode","auto":"Follow System","light":"Light Mode","dark":"Dark Mode"},"language":{"label":"Language","description":"Select interface language"},"password":{"title":"Access Password","checking":"Checking...","currentlySet":"Access password is currently set","currentlyNotSet":"No password set, passwordless login enabled","description":"Set a password to require authentication on login. Leave empty and save to clear the password and enable passwordless login.","newPassword":"New Password","newPasswordPlaceholder":"Enter new password (leave empty to clear)","confirmPassword":"Confirm Password","confirmPasswordPlaceholder":"Re-enter password","save":"Save Password","clear":"Clear Password","mismatch":"Passwords do not match","tooShort":"Password must be at least 4 characters","setSuccess":"Password set successfully. Takes effect on next login.","clearSuccess":"Password cleared. Passwordless login is now enabled.","saveFailed":"Failed to save password","clearFailed":"Failed to clear password"}},"api":"API Server Settings","memory":"Global Memory","memorySettings":{"title":"Global Memory Settings","description":"Global memory is shared background information for all AI assistants, including your work preferences, project information, etc.","fileSourceInfo":"Content is sourced from the ~/.claude/CLAUDE.md file in your user directory.","memoryContent":"Memory Content","edit":"Edit","cancelEdit":"Cancel Edit","refresh":"Refresh","refreshing":"Refreshing...","placeholder":"Write your global memory content here...","cancel":"Cancel","saveMemory":"Save Memory","loading":"Loading global memory...","noMemory":"No global memory content yet","clickEditToStart":"Click \\"Edit\\" button to start adding","infoAutoLoad":"Global memory will be automatically loaded in every conversation to provide background information for AI","infoSuggestions":"Recommended to include: work preferences, project background, personal information, etc.","infoFileLocation":"File location: ~/.claude/CLAUDE.md","saveSuccess":"Global memory saved successfully","saveFailed":"Failed to save, please try again"},"supplier":{"title":"Supplier Management","subtitle":"Manage multiple model suppliers, specify executable paths, aliases and environment variables","addSupplier":"Add Supplier","noSuppliers":"No model suppliers configured yet","clickToAddFirst":"Click \\"Add Supplier\\" to configure your first model supplier","systemLabel":"System","defaultLabel":"Default","pathLabel":"Path","envVarsLabel":"Environment Variables","modelsLabel":"Supported Models","setAsDefault":"Set as Default","copyCommand":"Copy Command","edit":"Edit","delete":"Delete","confirmDelete":"Are you sure you want to delete supplier \\"{{alias}}\\"?","currentSupplier":{"title":"Current Supplier","checking":"Checking...","checkVersion":"Check Supplier","claudeDesc":"AI Programming Assistant","updating":"Updating...","update":"Update","willUse":"Will use","toUpdate":"to update","nodejsDesc":"JavaScript Runtime Environment","preferred":"Preferred","packageManager":"Package Manager","lastChecked":"Last Checked","clickToCheck":"Click \\"Check Supplier\\" to get supplier info","updateSuccess":"Update Successful","updateFailed":"Update Failed","info1":"Claude Code is an AI programming assistant that supports code generation, editing and project management","info2":"Node.js is the fundamental runtime environment for the system","info3":"Supports multiple package managers: npm, pnpm, yarn (Priority: pnpm > yarn > npm)","info4":"The system will automatically select the preferred package manager for update operations","info5":"It is recommended to keep Claude Code up to date for the best experience"},"templates":{"title":"Quick Configuration Templates","description":"Select a preset template to quickly configure third-party API suppliers with auto-filled environment variables","providers":{"glm":{"name":"GLM (Zhipu AI)","description":"Use Zhipu AI's GLM model service, compatible with Anthropic API"},"deepseek":{"name":"DeepSeek","description":"Use DeepSeek's high-performance model service"},"kimi":{"name":"Kimi K2 (Moonshot AI)","description":"Use Kimi K2 model service, compatible with Anthropic API"},"minimax":{"name":"MiniMax","description":"Use MiniMax high-performance model service, compatible with Anthropic API"}}},"form":{"createTitle":"Add New Supplier","editTitle":"Edit Supplier","supplierName":"Supplier Name","supplierNamePlaceholder":"e.g., Claude Code v1.2.3","alias":"Alias","aliasPlaceholder":"e.g., claude-1.2.3","description":"Description","descriptionPlaceholder":"Supplier description (optional)","executablePath":"Executable Path","executablePathPlaceholder":"Leave empty to use system default path","browseFile":"Browse Files","envVars":"Environment Variables","varName":"Variable Name","varValue":"Variable Value","emptyValue":"Not set","getApiKey":"Get API Key","models":"Model Configuration","modelId":"Model ID","modelName":"Model Name","visionModel":"Vision Model","addModel":"Add Model","cancel":"Cancel","saving":"Saving...","update":"Update","create":"Create","selectExecutable":"Select Claude Executable"},"errors":{"requiredFields":"Please fill in all required fields","saveFailed":"Save failed","cannotDeleteSystem":"Cannot delete system supplier","deleteFailed":"Delete failed","setDefaultFailed":"Failed to set default supplier","copyFailed":"Copy failed, please manually copy the following command:"},"success":{"createVersion":"Supplier created successfully","updateVersion":"Supplier updated successfully","deleteVersion":"Supplier deleted successfully","setDefault":"Set \\"{{alias}}\\" as default supplier","copyCommand":"Command copied to clipboard"}},"cloudflare":{"title":"Cloudflare Tunnel","description":"Enable public internet access with one click using Cloudflare Tunnel","wizard":{"showGuide":"Show Setup Guide","steps":{"intro":"Intro","credentials":"Credentials","create":"Create","start":"Start","done":"Done"},"intro":{"title":"Welcome to Cloudflare Tunnel","description":"Cloudflare Tunnel allows you to expose your local AgentStudio to the internet without needing a public IP address.","benefit1":"No public IP or router configuration needed","benefit2":"Automatic HTTPS encryption for security","benefit3":"Powered by Cloudflare's global CDN","benefit4":"Free to use, quick to deploy","requirements":"Requirements","req1":"A free Cloudflare account","req2":"Python 3 environment (for API calls)","req3":"Docker or cloudflared CLI (to run the tunnel)","getStarted":"Get Started"},"credentials":{"howToGet":"How to get Cloudflare credentials?","step1":"Visit Cloudflare Dashboard to create an API Token","step2":"Configure permissions: Cloudflare Tunnel - Edit","step3":"Copy your Account ID and API Token","openDashboard":"Open Cloudflare Dashboard","saveAndContinue":"Save and Continue"},"create":{"description":"Now you can create your first Tunnel. You can customize the subdomain prefix or leave it empty for auto-generation.","createButton":"Create Tunnel with One Click"},"start":{"tunnelCreated":"Tunnel created successfully!","nextStep":"Now you need to start the cloudflared client to establish the connection.","yourPublicUrl":"Your Public URL","importantNote":"Important Note","needToStartClient":"Tunnel is created, but you still need to start the cloudflared client to establish the connection. Follow the steps below.","howToStart":"How to start the tunnel?","option1":"Option 1: Using Docker","option2":"Option 2: Using cloudflared CLI","recommended":"Recommended","copy":"Copy","copied":"Copied","installCloudfared":"Install cloudflared","runCommand":"Run command","finishSetup":"Finish Setup"},"done":{"title":"Setup Complete!","description":"Your AgentStudio is now accessible via the public internet","deleteTunnel":"Delete Tunnel","reminder":"Reminder","keepClientRunning":"Keep the cloudflared client running to maintain public access."}},"credentials":{"title":"Cloudflare Credentials","configured":"Credentials configured","update":"Update credentials","apiToken":"API Token","accountId":"Account ID","save":"Save","saving":"Saving...","cancel":"Cancel","help":"Get API Token and Account ID from"},"tunnel":{"title":"Tunnel Management","active":"Active Tunnel","publicUrl":"Public URL","name":"Tunnel Name","localPort":"Local Port","createdAt":"Created At","subdomain":"Subdomain Prefix (Optional)","subdomainPlaceholder":"Leave empty for random subdomain","subdomainHelp":"Leave empty to auto-generate a random subdomain","create":"Enable Public Access","creating":"Creating...","details":"Tunnel Details","token":"Tunnel Token","cliCommand":"CLI Command"},"credentialsSaved":"Cloudflare credentials saved successfully","tunnelCreated":"Tunnel created successfully! Now accessible via public URL","tunnelDeleted":"Tunnel deleted","confirmDelete":"Are you sure you want to delete this tunnel?","errors":{"credentialsRequired":"Please provide API Token and Account ID"}},"language":"Language Settings","subagents":{"title":"Subagent Management","subtitle":"Manage Specialized AI Subagents","loading":"Loading Subagents...","loadFailed":"Load Failed","loadFailedMessage":"Unable to load Subagents list","retry":"Retry","searchPlaceholder":"Search Subagents...","createButton":"New Subagent","noSubagents":"No Subagents Yet","noSubagentsSearch":"No Matching Subagents Found","adjustSearch":"Try adjusting search criteria","createFirst":"Create your first specialized AI subagent to handle specific tasks","table":{"subagent":"Subagent","tools":"Tools","createdAt":"Created At","actions":"Actions","toolsCount":"{{count}} tools","inheritSettings":"Inherit conversation settings"},"actions":{"edit":"Edit","view":"View","editTitle":"Edit Subagent","viewTitle":"View Subagent","deleteTitle":"Delete Subagent"},"source":{"local":"Local","plugin":"Plugin"},"deleteConfirm":{"title":"Confirm Delete","message":"Are you sure you want to delete Subagent \\"{{name}}\\"?","warning":"This action cannot be undone.","cancel":"Cancel","delete":"Delete"}},"mcpAdmin":{"title":"MCP Admin Server","subtitle":"Configure MCP Admin API to allow external AI tools to manage your AgentStudio","refresh":"Refresh","serverStatus":"Server Status","status":{"status":"Status","active":"Active","version":"Version","tools":"Available Tools","activeKeys":"Active Keys","unavailable":"Service Unavailable"},"endpoint":"Endpoint","apiKeys":"API Keys","createKey":"Create Key","noKeys":"No API keys yet","noKeysHint":"Create an API key to allow external tools to access","createdAt":"Created","lastUsed":"Last used","revoked":"Revoked","revokeKey":"Revoke key","confirmRevoke":"Are you sure you want to revoke this API key? This action cannot be undone.","availableTools":"Available Management Tools","createKeyTitle":"Create API Key","keyDescription":"Key Description","keyDescriptionPlaceholder":"e.g., Cursor MCP Connection","fullPermissions":"This key will have full admin permissions","cancel":"Cancel","create":"Create","creating":"Creating...","keyCreated":"API Key Created!","saveKeyWarning":"Save this key now! It will only be shown once and cannot be viewed again.","yourApiKey":"Your API Key","configFile":"Config File","copyConfig":"Copy Config","done":"Done","showKey":"Show Key","hideKey":"Hide Key","copyKey":"Copy Key","viewConfig":"View Config","limitTools":"Limit Available Tools","selectAll":"Select All","deselectAll":"Deselect All","selectedToolsCount":"{{count}} tools selected","limitedTools":"{{count}} tools limited","allToolsAccess":"All tools","disabled":"Disabled","enableKey":"Enable Key","disableKey":"Disable Key","editKey":"Edit Key","editKeyTitle":"Edit API Key","save":"Save","saving":"Saving...","toolParams":"Parameters","noParams":"No parameters","success":{"copied":"Copied to clipboard","keyRevoked":"API key revoked","keyUpdated":"API key updated","keyEnabled":"API key enabled","keyDisabled":"API key disabled"},"errors":{"configFetch":"Failed to fetch config","createFailed":"Failed to create key","revokeFailed":"Failed to revoke key","copyFailed":"Copy failed","descriptionRequired":"Please enter a key description","updateFailed":"Failed to update key","toggleFailed":"Failed to toggle key status"},"help":{"button":"Help","title":"MCP Admin Server Help","whatIs":"What is MCP Admin Server?","whatIsDesc":"MCP Admin Server is a standard MCP (Model Context Protocol) server that allows other AI tools (like Cursor, Claude Desktop) to remotely manage your AgentStudio via MCP protocol. Through this interface, you can directly query and manage AgentStudio's projects, agents, MCP servers, etc. from other AI tools.","howToUse":"How to use?","step1":"Create an Admin API key on this page","step2":"Click \\"View Config\\" to get the configuration snippet","step3":"Add the config to Cursor or Claude Desktop's MCP configuration file","step4":"Restart Cursor/Claude Desktop, then you can use the management tools in conversations","availableTools":"Available Tools Examples","toolListProjects":"List all projects","toolGetProject":"Get project details","toolListAgents":"List all agents","toolGetAgent":"Get agent details","toolHealthCheck":"System health check","examples":"Usage Examples","examplePrompt":"In Cursor, you can directly say to AI:"}},"apiSettings":{"title":"API Server Settings","hostLabel":"API Server Address","hostPlaceholder":"http://localhost:4936 or https://your-domain.com","testConnection":"Test Connection","quickSelect":"Quick Select:","connectionStatus":"Connection Status","status":{"success":"Connected","error":"Connection Failed","untested":"Not Tested"},"serverError":"Server error: {{status}} {{statusText}}","connectionFailed":"Connection failed: {{message}}","connectionUnknownError":"Connection failed: Unknown error","enterApiHost":"Please enter API server address","settingsSavedRefresh":"Settings saved. Page will refresh to apply new settings","usage":{"title":"Usage Instructions:","localDev":"For local development, use","production":"For production environment, use your server domain such as","cors":"Ensure the server supports CORS access and allows frontend domain access","refresh":"Page needs to be refreshed after modification to take effect"},"resetToDefault":"Reset to Default","saveSettings":"Save Settings"}}`),TT={title:"Analytics",usage:"Usage Statistics",performance:"Performance Metrics"},kT={title:"MCP Services",subtitle:"Manage and monitor Model Context Protocol servers",loading:"Loading MCP configurations...",searchPlaceholder:"Search by name, command or arguments...",addServer:"Add Service",noServers:"No MCP service configurations yet",noResults:"No matching configurations found",adjustSearch:"Try adjusting search criteria",addFirstServer:"Add your first MCP service configuration",confirmDelete:'Are you sure you want to delete configuration "{{name}}"?',validateAll:"Validate All",stats:{total:"Total",active:"Active",error:"Error",validating:"Validating",tools:"Tools"},import:{button:"Import from Claude Code",importing:"Importing...",noConfigFound:"No MCP configurations found in Claude Code (reading from ~/.claude.json)",success:"Successfully imported {{imported}} MCP server configuration(s){{skipped, select, 0{} other{, skipped {{skipped}} existing configuration(s)}}",allExist:"All configurations already exist, no new imports"},table:{server:"Server",type:"Type",status:"Status",tools:"Available Tools",actions:"Actions",toolsCount:"{{count}} tools",noTools:"No tools"},status:{active:"Active",error:"Error",validating:"Validating",unvalidated:"Unvalidated"},actions:{validate:"Re-validate",copyCommand:"Copy Command",edit:"Edit",view:"View",delete:"Delete configuration"},source:{local:"Local",plugin:"Plugin"},modal:{addTitle:"Add MCP Service Configuration",editTitle:"Edit MCP Service Configuration",saving:"Saving...",saveConfig:"Save Configuration",addConfig:"Add Configuration"},form:{serverName:"Service Name *",serverNamePlaceholder:"e.g., playwright",nameNotEditable:"Service name cannot be modified",nameRequired:"Please enter service name",mcpType:"MCP Type *",stdioOption:"Stdio (Local Process)",httpOption:"HTTP (Remote Service)",selectConnectionType:"Select MCP server connection type",configuration:"Configuration * (JSON format)",configInvalid:"Configuration format is incorrect, please ensure required {{fields}} fields are included and properly formatted",configFormatError:"⚠️ Configuration format is incorrect, please ensure required {{fields}} fields are included",requiredFields:"Required fields:",requiredFieldsStdio:"type, command and args",requiredFieldsHttp:"type and url",optionalFields:"Optional fields:",typeField:'String, MCP type ("stdio" or "http")',commandField:'String, execution command (e.g. "npx", "uvx")',argsField:"Array, command arguments",urlField:"String, HTTP MCP server URL",timeoutField:"Number, timeout in milliseconds",autoApproveField:"Array, auto-approve operations"},errors:{validationFailed:"Validation failed",networkError:"Network error or service unavailable",deleteFailed:"Failed to delete configuration",importFailed:"Import failed",saveFailed:"Failed to save configuration",copyFailed:"Failed to copy"},commandCopied:"Command copied to clipboard"},ET={title:"Custom Commands",subtitle:"Manage Slash Commands",loading:"Loading commands...",searchPlaceholder:"Search commands...",createButton:"New Command",error:{loadFailed:"Load Failed",cannotLoadCommands:"Unable to load custom commands",retry:"Retry"},empty:{noCommands:"No custom commands yet",noMatchingCommands:"No matching commands found",adjustSearch:"Try adjusting search criteria or filters",createFirst:"Create your first custom Slash Command"},table:{command:"Command",model:"Model",tools:"Tools",createdAt:"Created",actions:"Actions",inheritSettings:"Inherit conversation settings",toolsCount:"{{count}} tools"},actions:{edit:"Edit",view:"View",editCommand:"Edit command",deleteCommand:"Delete command"},source:{local:"Local",plugin:"Plugin"},delete:{title:"Delete Command",confirmMessage:'Are you sure you want to delete command "/{{name}}"? This action cannot be undone.',cancel:"Cancel",delete:"Delete",deleting:"Deleting..."}},NT={title:"Plugin Management",subtitle:"Manage plugin marketplaces and installed plugins",tabs:{marketplaces:"Marketplaces",browse:"Browse Plugins",installed:"Installed Plugins"},marketplaces:{title:"Plugin Marketplaces",subtitle:"Manage plugin marketplace sources",addButton:"Add Marketplace",searchPlaceholder:"Search marketplaces...",noMarketplaces:"No marketplaces configured yet",addFirst:"Add your first plugin marketplace",table:{marketplace:"Marketplace",type:"Type",plugins:"Plugins",lastSync:"Last Sync",actions:"Actions"},types:{git:"Git Repository",github:"GitHub",local:"Local Directory"},actions:{sync:"Sync",syncing:"Syncing...",edit:"Edit",delete:"Delete"},addModal:{title:"Add Marketplace",editTitle:"Edit Marketplace",name:"Marketplace Name",namePlaceholder:"e.g., official-plugins",type:"Source Type",typePlaceholder:"Select source type",source:"Source",sourcePlaceholderGit:"Git repository URL",sourcePlaceholderGithub:"owner/repo or full URL",sourcePlaceholderLocal:"Local directory path",branch:"Branch (Optional)",branchPlaceholder:"main",description:"Description (Optional)",descriptionPlaceholder:"Marketplace description",cancel:"Cancel",add:"Add",adding:"Adding...",save:"Save",saving:"Saving..."},confirmDelete:'Are you sure you want to delete marketplace "{{name}}"? All plugins from this marketplace will be uninstalled.'},browse:{title:"Browse Plugins",subtitle:"Discover and install plugins from marketplaces",searchPlaceholder:"Search plugins...",filters:{allMarketplaces:"All Marketplaces",allTypes:"All Types",showOnlyInstalled:"Show only installed"},noPlugins:"No plugins available",noMarketplaces:"No marketplaces added yet",goAddMarketplace:"Add a marketplace to browse plugins",noResults:"No plugins found",adjustSearch:"Try adjusting your search criteria",card:{from:"from",version:"v{{version}}",by:"by",installed:"Installed",install:"Install",installing:"Installing...",viewDetails:"View Details"},actions:{details:"Details",install:"Install",uninstall:"Uninstall"},confirmUninstall:'Are you sure you want to uninstall plugin "{{name}}"?',components:{commands:"{{count}} Command{{count, plural, one {} other{s}}}",agents:"{{count}} Agent{{count, plural, one {} other{s}}}",skills:"{{count}} Skill{{count, plural, one {} other{s}}}",hooks:"{{count}} Hook{{count, plural, one {} other{s}}}",mcpServers:"{{count}} MCP Server{{count, plural, one {} other{s}}}"},detailModal:{title:"Plugin Details",version:"Version",author:"Author",marketplace:"Marketplace",updated:"Last Updated",components:"Components",files:"Files",readme:"README",noReadme:"No README available",install:"Install Plugin",installing:"Installing...",installed:"Installed",close:"Close"}},installed:{title:"Installed Plugins",subtitle:"Manage your installed plugins",searchPlaceholder:"Search installed plugins...",filters:{all:"All",enabled:"Enabled",disabled:"Disabled",allMarketplaces:"All Marketplaces"},noPlugins:"No plugins installed yet",goBrowse:"Browse plugins to install",noResults:"No matching plugins found",table:{plugin:"Plugin",marketplace:"Marketplace",version:"Version",status:"Status",components:"Components",actions:"Actions"},status:{enabled:"Enabled",disabled:"Disabled"},actions:{details:"Details",viewDetails:"View Details",enable:"Enable",enabling:"Enabling...",disable:"Disable",disabling:"Disabling...",uninstall:"Uninstall"},confirmUninstall:'Are you sure you want to uninstall plugin "{{name}}"?',detailModal:{title:"Plugin Details",basicInfo:"Basic Information",version:"Version",author:"Author",marketplace:"Marketplace",installedAt:"Installed",status:"Status",components:"Components",commands:"Commands",agents:"Agents",skills:"Skills",hooks:"Hooks",mcpServers:"MCP Servers",none:"None",files:"Plugin Files",viewFile:"View File",close:"Close",enable:"Enable",disable:"Disable",uninstall:"Uninstall"},fileViewer:{title:"File Viewer",loading:"Loading...",error:"Failed to load file",close:"Close"}},messages:{installSuccess:"Plugin installed successfully. Please refresh to use the new plugin.",installError:"Failed to install plugin",enableSuccess:"Plugin enabled successfully. Please refresh to use the plugin.",enableError:"Failed to enable plugin",disableSuccess:"Plugin disabled successfully",disableError:"Failed to disable plugin",uninstallSuccess:"Plugin uninstalled successfully",uninstallError:"Failed to uninstall plugin",marketplaceAddSuccess:"Marketplace added successfully",marketplaceAddError:"Failed to add marketplace",marketplaceSyncSuccess:"Marketplace synced successfully",marketplaceSyncError:"Failed to sync marketplace",marketplaceRemoveSuccess:"Marketplace removed successfully",marketplaceRemoveError:"Failed to remove marketplace"},detail:{back:"Back",root:"Root",noDescription:"No description available",version:"Version",author:"Author",license:"License",components:"Components",type:"Type",name:"Name",description:"Description",actions:"Actions",viewEntryFile:"View entry file",browseDirectory:"Browse directory",noComponents:"No components found",loadFailed:"Failed to load plugin details",componentTypes:{command:"Command",agent:"Agent",skill:"Skill",hook:"Hook",mcp:"MCP Server"}}},MT={title:"Agent Skills",subtitle:"Manage and organize your agent capabilities",createButton:"Create Skill",noSkills:"No skills created yet",noSkillsSearch:"No skills found matching your filters",createFirst:"Create Your First Skill",searchPlaceholder:"Search skills...",filter:{showDisabled:"Show disabled"},scope:{user:"User",project:"Project"},status:{enabled:"Enabled",disabled:"Disabled"},create:{title:"Create New Skill",subtitle:"Define a new capability for your AI agents",steps:{basic:"Basic Info",content:"Content",preview:"Preview"},basic:{name:"Skill Name",namePlaceholder:"my-awesome-skill",nameHint:"Use lowercase letters, numbers, and hyphens only (max 64 characters)",description:"Description",descriptionPlaceholder:"Brief description of what this skill does and when to use it",descriptionHint:"Include both what the skill does and when Claude should use it (max 1024 characters)",allowedTools:"Allowed Tools",allowedToolsPlaceholder:"Read, Write, Grep (comma-separated)",allowedToolsHint:"Tools this skill can use without asking for permission. Leave empty for default behavior.",selectTools:"Select Tools",noToolsSelected:"No tools selected"},content:{skillManifest:"SKILL.md Content",additionalFiles:"Additional Files",addFile:"Add File",noFiles:"No additional files",noFilesHint:"Add files to extend your skill functionality",fileName:"File name",filePath:"Path/to/file",fileContent:"File content",fileType:{markdown:"Markdown",text:"Text",script:"Script",template:"Template",other:"Other"}},preview:{title:"Skill Preview",name:"Name:",description:"Description:",scope:"Scope:",allowedTools:"Allowed Tools:",additionalFiles:"Additional Files:",none:"None",fileCount:"{{count}} file(s)",previewContent:"SKILL.md Preview:",noContent:"(no content)"}},editor:{title:"Edit Skill",basic:{name:"Name",description:"Description",allowedTools:"Allowed Tools",allowedToolsHint:"Tools this skill can use without asking for permission. Leave empty for default behavior.",skillContent:"SKILL.md Content",validationErrors:"Validation Errors:",unsavedChanges:"You have unsaved changes. Press Cmd+S to save."},files:{title:"Additional Files",addFile:"Add File",noFiles:"No additional files",addFilesHint:"Add files to extend your skill functionality"},scope:{user:"User Skill"},errors:{validationErrors:"Validation Errors:",saveFailed:"Failed to save skill. Please try again."}},preview:{title:"Skill Content",usageStats:"Usage Statistics",usage:"Used {{count}} time{{count, plural, one {} other{s}}",lastUsed:"Last used",created:"Created:",updated:"Updated:",scope:"Scope:",userScopeDesc:"Personal (across all projects)",projectScopeDesc:"Project: Current",actions:{edit:"Edit",enable:"Enable",disable:"Disable",delete:"Delete"}},errors:{loadFailed:"Error loading skills",deleteFailed:"Failed to delete skill. Please try again.",toggleFailed:"Toggle functionality will be implemented in the API",createFailed:"Failed to create skill. Please try again."},deleteConfirm:'Are you sure you want to delete "{{name}}"?',usage:{customInstructions:"Custom instructions",toolPermissions:"Tool permissions"}},jT={docs:gT,nav:hT,footer:yT,login:vT,landing:bT,agents:ST,projects:xT,chat:wT,dashboard:CT,settings:AT,analytics:TT,mcp:kT,commands:ET,plugins:NT,skills:MT},DT="AgentStudio",RT="Select an AI assistant to start working",PT="Loading...",OT="Available Assistants",zT="Disabled Assistants",LT="{{count}} assistants",UT="Create Custom Assistant",_T="Custom assistant feature coming soon!",FT="No Available Assistants Yet",BT="Enable some built-in assistants or create your own custom assistants to get started",HT="Manage Assistants",qT="Start Using",VT="Edit Assistant",GT="Disable Assistant",IT="Enable Assistant",KT="Disabled",YT="Enable Assistant",QT={slides:"Slides",chat:"Chat","claude-code":"Claude Code"},XT={toggleFailed:"Operation failed, please try again"},ZT={title:DT,subtitle:RT,loading:PT,availableAgents:OT,disabledAgents:zT,agentCount:LT,createCustomAgent:UT,customAgentComingSoon:_T,noAgentsTitle:FT,noAgentsDescription:BT,manageAgents:HT,startUsing:qT,editAgent:VT,disableAgent:GT,enableAgent:IT,disabledStatus:KT,enableAgentButton:YT,componentTypes:QT,errors:XT},$T={enabled:"Enabled",disabled:"Disabled"},JT={name:"Project Name",nameRequired:"Project Name *",namePlaceholder:"Enter project name",description:"Project Description",descriptionPlaceholder:"Briefly describe the purpose of this project...",directory:"Project Directory",directoryNote:"A new folder will be created under this directory",agentType:"Select Assistant Type *",agentTypePlaceholder:"Choose an assistant type"},WT={name:"Assistant Name",namePlaceholder:"Enter assistant name",description:"Assistant Description",descriptionPlaceholder:"Describe the assistant's capabilities...",systemPrompt:"System Prompt",systemPromptPlaceholder:"Enter system prompt...",tools:"Available Tools",selectTools:"Select Tools"},ek={editTitle:"Edit Command",createTitle:"Create Command",formMode:"Form",codeMode:"Code",saveChanges:"Save Changes",createCommand:"Create Command",nameLabel:"Command Name",nameHint:"Can only contain letters, numbers, underscores, and hyphens",modelLabel:"Specify Model",inheritModel:"Inherit conversation settings",modelHint:"Specify a specific AI model for this command.",namespaceLabel:"Namespace",namespaceHint:"Used to organize commands, can include / separator",argumentHintLabel:"Argument Hint",argumentHintHint:"Argument hint displayed in autocomplete",descriptionLabel:"Description",descriptionPlaceholder:"Optimize code performance and readability",descriptionHint:"Brief description of the command, will use the first line of content if not provided",allowedToolsLabel:"Allowed Tools",selectTools:"Select Tools",regularToolsCount:"{{count}} regular tools",mcpToolsCount:"{{count}} MCP tools",allowedToolsHint:"Leave empty to inherit conversation permissions",contentLabel:"Command Content",contentPlaceholder:`Analyze performance issues in this code and provide optimization suggestions:
188
+ This action cannot be undone, and all related sessions will also be deleted.`},xT={title:"Project Management",subtitle:"Manage All Your Work Projects",createButton:"Create New Project",selectType:"Select Assistant Type to Create Work Project",noProjects:"No projects yet",searchPlaceholder:"Search projects...",loading:"Loading projects...",filter:{all:"All",active:"Active",inactive:"Inactive"},table:{project:"Project",agent:"Assistant",lastActive:"Last Active",sessions:"Sessions",actions:"Actions",sessionsCount:"{{count}} sessions"},form:{create:"Create Project",edit:"Edit Project",name:"Project Name",namePlaceholder:"Enter project name",nameRequired:"Project Name *",agentType:"Select Assistant Type *",agentTypePlaceholder:"Choose an assistant type",directory:"Project Directory",directoryNote:"A new folder will be created under this directory",description:"Project Description",descriptionPlaceholder:"Briefly describe the purpose of this project...",save:"Save",cancel:"Cancel"},actions:{open:"Open",openInNewTab:"Open in new tab",edit:"Edit",delete:"Delete"},status:{active:"Active",inactive:"Inactive",never:"Never"},errors:{createFailed:"Failed to create project",updateFailed:"Failed to update project",deleteFailed:"Failed to delete project",loadFailed:"Failed to load projects"},deleteConfirm:"Are you sure you want to delete this project?",deleteNote:"Note: This will only remove the project from the list, not delete the actual file directory.",deleteSuccess:"Project deleted"},wT={title:"Chat",inputPlaceholder:"Type a message...",aiTyping:"AI is typing",newSession:"New Chat",sessionHistory:"Chat History",loading:"Loading AI assistant...",agentNotFound:"Assistant Not Found",agentNotFoundDesc:"Unable to find the specified AI assistant, it may have been deleted or disabled.",agentDisabled:"Assistant Disabled",agentDisabledDesc:'AI assistant "{{name}}" is currently disabled and cannot be used.',closePage:"Close Page",tabNotification:{working:"🤖 Working",completed:"✅ Completed",error:"❌ Error"}},CT={title:"Dashboard",welcome:{title:"Let's Get Started",subtitle:"Select a project to start working with AI"},defaultProjectName:"Default Workspace",loading:"Loading...",creatingDefaultProject:"Creating default workspace...",noAgentsEnabled:"No Agent available, please enable one first",goToAgents:"Go to Agent Management",selectProject:"Select Project",noProjects:"No projects",createNewProject:"Create New Project",selectProjectToStart:"Please select a project to start chatting",stats:{agentManagement:"Agent Management",workProjects:"Work Projects",slashCommands:"Slash Commands",activeSessions:"Active Sessions"},recentAgents:{title:"Frequently Used Assistants",viewAll:"View All",types:{slides:"Presentations","claude-code":"Claude Code"},noAgents:"No assistants available",goEnable:"Enable assistants"},quickActions:{title:"Quick Actions",createProject:{title:"Create New Project",description:"Select assistant type to create work project"},createAgent:{title:"Create New Assistant",description:"Configure custom AI assistant"},addMcp:{title:"Add MCP Service",description:"Connect new MCP server"},viewAnalytics:{title:"View Analytics",description:"Analyze usage and performance"}},overview:"Overview",statistics:"Statistics",recentActivity:"Recent Activity",templates:{organizeFiles:"Organize Files",analyzeFiles:"Analyze Files",writeDoc:"Write a Doc",codeReview:"Code Review",checkWeather:"Check Shenzhen Weather",quickTask:"Free Ask"}},AT=JSON.parse(`{"title":"Settings","general":{"title":"Look and Feel","description":"Configure interface theme and language","interfaceSettings":"Look and Feel","theme":{"label":"Theme","description":"Select interface theme mode","auto":"Follow System","light":"Light Mode","dark":"Dark Mode"},"language":{"label":"Language","description":"Select interface language"},"password":{"title":"Access Password","checking":"Checking...","currentlySet":"Access password is currently set","currentlyNotSet":"No password set, passwordless login enabled","description":"Set a password to require authentication on login. Leave empty and save to clear the password and enable passwordless login.","newPassword":"New Password","newPasswordPlaceholder":"Enter new password (leave empty to clear)","confirmPassword":"Confirm Password","confirmPasswordPlaceholder":"Re-enter password","save":"Save Password","clear":"Clear Password","mismatch":"Passwords do not match","tooShort":"Password must be at least 4 characters","setSuccess":"Password set successfully. Takes effect on next login.","clearSuccess":"Password cleared. Passwordless login is now enabled.","saveFailed":"Failed to save password","clearFailed":"Failed to clear password"}},"api":"API Server Settings","memory":"Global Memory","memorySettings":{"title":"Global Memory Settings","description":"Global memory is shared background information for all AI assistants, including your work preferences, project information, etc.","fileSourceInfo":"Content is sourced from the ~/.claude/CLAUDE.md file in your user directory.","memoryContent":"Memory Content","edit":"Edit","cancelEdit":"Cancel Edit","refresh":"Refresh","refreshing":"Refreshing...","placeholder":"Write your global memory content here...","cancel":"Cancel","saveMemory":"Save Memory","loading":"Loading global memory...","noMemory":"No global memory content yet","clickEditToStart":"Click \\"Edit\\" button to start adding","infoAutoLoad":"Global memory will be automatically loaded in every conversation to provide background information for AI","infoSuggestions":"Recommended to include: work preferences, project background, personal information, etc.","infoFileLocation":"File location: ~/.claude/CLAUDE.md","saveSuccess":"Global memory saved successfully","saveFailed":"Failed to save, please try again"},"supplier":{"title":"Supplier Management","subtitle":"Manage multiple model suppliers, specify executable paths, aliases and environment variables","addSupplier":"Add Supplier","noSuppliers":"No model suppliers configured yet","clickToAddFirst":"Click \\"Add Supplier\\" to configure your first model supplier","systemLabel":"System","defaultLabel":"Default","pathLabel":"Path","envVarsLabel":"Environment Variables","modelsLabel":"Supported Models","setAsDefault":"Set as Default","copyCommand":"Copy Command","edit":"Edit","delete":"Delete","confirmDelete":"Are you sure you want to delete supplier \\"{{alias}}\\"?","currentSupplier":{"title":"Current Supplier","checking":"Checking...","checkVersion":"Check Supplier","claudeDesc":"AI Programming Assistant","updating":"Updating...","update":"Update","willUse":"Will use","toUpdate":"to update","nodejsDesc":"JavaScript Runtime Environment","preferred":"Preferred","packageManager":"Package Manager","lastChecked":"Last Checked","clickToCheck":"Click \\"Check Supplier\\" to get supplier info","updateSuccess":"Update Successful","updateFailed":"Update Failed","info1":"Claude Code is an AI programming assistant that supports code generation, editing and project management","info2":"Node.js is the fundamental runtime environment for the system","info3":"Supports multiple package managers: npm, pnpm, yarn (Priority: pnpm > yarn > npm)","info4":"The system will automatically select the preferred package manager for update operations","info5":"It is recommended to keep Claude Code up to date for the best experience"},"templates":{"title":"Quick Configuration Templates","description":"Select a preset template to quickly configure third-party API suppliers with auto-filled environment variables","providers":{"glm":{"name":"GLM (Zhipu AI)","description":"Use Zhipu AI's GLM model service, compatible with Anthropic API"},"deepseek":{"name":"DeepSeek","description":"Use DeepSeek's high-performance model service"},"kimi":{"name":"Kimi K2 (Moonshot AI)","description":"Use Kimi K2 model service, compatible with Anthropic API"},"minimax":{"name":"MiniMax","description":"Use MiniMax high-performance model service, compatible with Anthropic API"}}},"form":{"createTitle":"Add New Supplier","editTitle":"Edit Supplier","supplierName":"Supplier Name","supplierNamePlaceholder":"e.g., Claude Code v1.2.3","alias":"Alias","aliasPlaceholder":"e.g., claude-1.2.3","description":"Description","descriptionPlaceholder":"Supplier description (optional)","executablePath":"Executable Path","executablePathPlaceholder":"Leave empty to use system default path","browseFile":"Browse Files","envVars":"Environment Variables","varName":"Variable Name","varValue":"Variable Value","emptyValue":"Not set","getApiKey":"Get API Key","models":"Model Configuration","modelId":"Model ID","modelName":"Model Name","visionModel":"Vision Model","addModel":"Add Model","cancel":"Cancel","saving":"Saving...","update":"Update","create":"Create","selectExecutable":"Select Claude Executable"},"errors":{"requiredFields":"Please fill in all required fields","saveFailed":"Save failed","cannotDeleteSystem":"Cannot delete system supplier","deleteFailed":"Delete failed","setDefaultFailed":"Failed to set default supplier","copyFailed":"Copy failed, please manually copy the following command:"},"success":{"createVersion":"Supplier created successfully","updateVersion":"Supplier updated successfully","deleteVersion":"Supplier deleted successfully","setDefault":"Set \\"{{alias}}\\" as default supplier","copyCommand":"Command copied to clipboard"}},"cloudflare":{"title":"Cloudflare Tunnel","description":"Enable public internet access with one click using Cloudflare Tunnel","wizard":{"showGuide":"Show Setup Guide","steps":{"intro":"Intro","credentials":"Credentials","create":"Create","start":"Start","done":"Done"},"intro":{"title":"Welcome to Cloudflare Tunnel","description":"Cloudflare Tunnel allows you to expose your local AgentStudio to the internet without needing a public IP address.","benefit1":"No public IP or router configuration needed","benefit2":"Automatic HTTPS encryption for security","benefit3":"Powered by Cloudflare's global CDN","benefit4":"Free to use, quick to deploy","requirements":"Requirements","req1":"A free Cloudflare account","req2":"Python 3 environment (for API calls)","req3":"Docker or cloudflared CLI (to run the tunnel)","getStarted":"Get Started"},"credentials":{"howToGet":"How to get Cloudflare credentials?","step1":"Visit Cloudflare Dashboard to create an API Token","step2":"Configure permissions: Cloudflare Tunnel - Edit","step3":"Copy your Account ID and API Token","openDashboard":"Open Cloudflare Dashboard","saveAndContinue":"Save and Continue"},"create":{"description":"Now you can create your first Tunnel. You can customize the subdomain prefix or leave it empty for auto-generation.","createButton":"Create Tunnel with One Click"},"start":{"tunnelCreated":"Tunnel created successfully!","nextStep":"Now you need to start the cloudflared client to establish the connection.","yourPublicUrl":"Your Public URL","importantNote":"Important Note","needToStartClient":"Tunnel is created, but you still need to start the cloudflared client to establish the connection. Follow the steps below.","howToStart":"How to start the tunnel?","option1":"Option 1: Using Docker","option2":"Option 2: Using cloudflared CLI","recommended":"Recommended","copy":"Copy","copied":"Copied","installCloudfared":"Install cloudflared","runCommand":"Run command","finishSetup":"Finish Setup"},"done":{"title":"Setup Complete!","description":"Your AgentStudio is now accessible via the public internet","deleteTunnel":"Delete Tunnel","reminder":"Reminder","keepClientRunning":"Keep the cloudflared client running to maintain public access."}},"credentials":{"title":"Cloudflare Credentials","configured":"Credentials configured","update":"Update credentials","apiToken":"API Token","accountId":"Account ID","save":"Save","saving":"Saving...","cancel":"Cancel","help":"Get API Token and Account ID from"},"tunnel":{"title":"Tunnel Management","active":"Active Tunnel","publicUrl":"Public URL","name":"Tunnel Name","localPort":"Local Port","createdAt":"Created At","subdomain":"Subdomain Prefix (Optional)","subdomainPlaceholder":"Leave empty for random subdomain","subdomainHelp":"Leave empty to auto-generate a random subdomain","create":"Enable Public Access","creating":"Creating...","details":"Tunnel Details","token":"Tunnel Token","cliCommand":"CLI Command"},"credentialsSaved":"Cloudflare credentials saved successfully","tunnelCreated":"Tunnel created successfully! Now accessible via public URL","tunnelDeleted":"Tunnel deleted","confirmDelete":"Are you sure you want to delete this tunnel?","errors":{"credentialsRequired":"Please provide API Token and Account ID"}},"language":"Language Settings","subagents":{"title":"Subagent Management","subtitle":"Manage Specialized AI Subagents","loading":"Loading Subagents...","loadFailed":"Load Failed","loadFailedMessage":"Unable to load Subagents list","retry":"Retry","searchPlaceholder":"Search Subagents...","createButton":"New Subagent","noSubagents":"No Subagents Yet","noSubagentsSearch":"No Matching Subagents Found","adjustSearch":"Try adjusting search criteria","createFirst":"Create your first specialized AI subagent to handle specific tasks","table":{"subagent":"Subagent","tools":"Tools","createdAt":"Created At","actions":"Actions","toolsCount":"{{count}} tools","inheritSettings":"Inherit conversation settings"},"actions":{"edit":"Edit","view":"View","editTitle":"Edit Subagent","viewTitle":"View Subagent","deleteTitle":"Delete Subagent"},"source":{"local":"Local","plugin":"Plugin"},"deleteConfirm":{"title":"Confirm Delete","message":"Are you sure you want to delete Subagent \\"{{name}}\\"?","warning":"This action cannot be undone.","cancel":"Cancel","delete":"Delete"}},"mcpAdmin":{"title":"MCP Admin Server","subtitle":"Configure MCP Admin API to allow external AI tools to manage your AgentStudio","refresh":"Refresh","serverStatus":"Server Status","status":{"status":"Status","active":"Active","version":"Version","tools":"Available Tools","activeKeys":"Active Keys","unavailable":"Service Unavailable"},"endpoint":"Endpoint","apiKeys":"API Keys","createKey":"Create Key","noKeys":"No API keys yet","noKeysHint":"Create an API key to allow external tools to access","createdAt":"Created","lastUsed":"Last used","revoked":"Revoked","revokeKey":"Revoke key","confirmRevoke":"Are you sure you want to revoke this API key? This action cannot be undone.","availableTools":"Available Management Tools","createKeyTitle":"Create API Key","keyDescription":"Key Description","keyDescriptionPlaceholder":"e.g., Cursor MCP Connection","fullPermissions":"This key will have full admin permissions","cancel":"Cancel","create":"Create","creating":"Creating...","keyCreated":"API Key Created!","saveKeyWarning":"Save this key now! It will only be shown once and cannot be viewed again.","yourApiKey":"Your API Key","configFile":"Config File","copyConfig":"Copy Config","done":"Done","showKey":"Show Key","hideKey":"Hide Key","copyKey":"Copy Key","viewConfig":"View Config","limitTools":"Limit Available Tools","selectAll":"Select All","deselectAll":"Deselect All","selectedToolsCount":"{{count}} tools selected","limitedTools":"{{count}} tools limited","allToolsAccess":"All tools","disabled":"Disabled","enableKey":"Enable Key","disableKey":"Disable Key","editKey":"Edit Key","editKeyTitle":"Edit API Key","save":"Save","saving":"Saving...","toolParams":"Parameters","noParams":"No parameters","success":{"copied":"Copied to clipboard","keyRevoked":"API key revoked","keyUpdated":"API key updated","keyEnabled":"API key enabled","keyDisabled":"API key disabled"},"errors":{"configFetch":"Failed to fetch config","createFailed":"Failed to create key","revokeFailed":"Failed to revoke key","copyFailed":"Copy failed","descriptionRequired":"Please enter a key description","updateFailed":"Failed to update key","toggleFailed":"Failed to toggle key status"},"help":{"button":"Help","title":"MCP Admin Server Help","whatIs":"What is MCP Admin Server?","whatIsDesc":"MCP Admin Server is a standard MCP (Model Context Protocol) server that allows other AI tools (like Cursor, Claude Desktop) to remotely manage your AgentStudio via MCP protocol. Through this interface, you can directly query and manage AgentStudio's projects, agents, MCP servers, etc. from other AI tools.","howToUse":"How to use?","step1":"Create an Admin API key on this page","step2":"Click \\"View Config\\" to get the configuration snippet","step3":"Add the config to Cursor or Claude Desktop's MCP configuration file","step4":"Restart Cursor/Claude Desktop, then you can use the management tools in conversations","availableTools":"Available Tools Examples","toolListProjects":"List all projects","toolGetProject":"Get project details","toolListAgents":"List all agents","toolGetAgent":"Get agent details","toolHealthCheck":"System health check","examples":"Usage Examples","examplePrompt":"In Cursor, you can directly say to AI:"}},"apiSettings":{"title":"API Server Settings","hostLabel":"API Server Address","hostPlaceholder":"http://localhost:4936 or https://your-domain.com","testConnection":"Test Connection","quickSelect":"Quick Select:","connectionStatus":"Connection Status","status":{"success":"Connected","error":"Connection Failed","untested":"Not Tested"},"serverError":"Server error: {{status}} {{statusText}}","connectionFailed":"Connection failed: {{message}}","connectionUnknownError":"Connection failed: Unknown error","enterApiHost":"Please enter API server address","settingsSavedRefresh":"Settings saved. Page will refresh to apply new settings","usage":{"title":"Usage Instructions:","localDev":"For local development, use","production":"For production environment, use your server domain such as","cors":"Ensure the server supports CORS access and allows frontend domain access","refresh":"Page needs to be refreshed after modification to take effect"},"resetToDefault":"Reset to Default","saveSettings":"Save Settings"}}`),TT={title:"Analytics",usage:"Usage Statistics",performance:"Performance Metrics"},kT={title:"MCP Services",subtitle:"Manage and monitor Model Context Protocol servers",loading:"Loading MCP configurations...",searchPlaceholder:"Search by name, command or arguments...",addServer:"Add Service",noServers:"No MCP service configurations yet",noResults:"No matching configurations found",adjustSearch:"Try adjusting search criteria",addFirstServer:"Add your first MCP service configuration",confirmDelete:'Are you sure you want to delete configuration "{{name}}"?',validateAll:"Validate All",stats:{total:"Total",active:"Active",error:"Error",validating:"Validating",tools:"Tools"},import:{button:"Import from Claude Code",importing:"Importing...",noConfigFound:"No MCP configurations found in Claude Code (reading from ~/.claude.json)",success:"Successfully imported {{imported}} MCP server configuration(s){{skipped, select, 0{} other{, skipped {{skipped}} existing configuration(s)}}",allExist:"All configurations already exist, no new imports"},table:{server:"Server",type:"Type",status:"Status",tools:"Available Tools",actions:"Actions",toolsCount:"{{count}} tools",noTools:"No tools"},status:{active:"Active",error:"Error",validating:"Validating",unvalidated:"Unvalidated"},actions:{validate:"Re-validate",copyCommand:"Copy Command",edit:"Edit",view:"View",delete:"Delete configuration"},source:{local:"Local",plugin:"Plugin"},modal:{addTitle:"Add MCP Service Configuration",editTitle:"Edit MCP Service Configuration",saving:"Saving...",saveConfig:"Save Configuration",addConfig:"Add Configuration"},form:{serverName:"Service Name *",serverNamePlaceholder:"e.g., playwright",nameNotEditable:"Service name cannot be modified",nameRequired:"Please enter service name",mcpType:"MCP Type *",stdioOption:"Stdio (Local Process)",httpOption:"HTTP (Remote Service)",selectConnectionType:"Select MCP server connection type",configuration:"Configuration * (JSON format)",configInvalid:"Configuration format is incorrect, please ensure required {{fields}} fields are included and properly formatted",configFormatError:"⚠️ Configuration format is incorrect, please ensure required {{fields}} fields are included",requiredFields:"Required fields:",requiredFieldsStdio:"type, command and args",requiredFieldsHttp:"type and url",optionalFields:"Optional fields:",typeField:'String, MCP type ("stdio" or "http")',commandField:'String, execution command (e.g. "npx", "uvx")',argsField:"Array, command arguments",urlField:"String, HTTP MCP server URL",timeoutField:"Number, timeout in milliseconds",autoApproveField:"Array, auto-approve operations"},errors:{validationFailed:"Validation failed",networkError:"Network error or service unavailable",deleteFailed:"Failed to delete configuration",importFailed:"Import failed",saveFailed:"Failed to save configuration",copyFailed:"Failed to copy"},commandCopied:"Command copied to clipboard"},ET={title:"Custom Commands",subtitle:"Manage Slash Commands",loading:"Loading commands...",searchPlaceholder:"Search commands...",createButton:"New Command",error:{loadFailed:"Load Failed",cannotLoadCommands:"Unable to load custom commands",retry:"Retry"},empty:{noCommands:"No custom commands yet",noMatchingCommands:"No matching commands found",adjustSearch:"Try adjusting search criteria or filters",createFirst:"Create your first custom Slash Command"},table:{command:"Command",model:"Model",tools:"Tools",createdAt:"Created",actions:"Actions",inheritSettings:"Inherit conversation settings",toolsCount:"{{count}} tools"},actions:{edit:"Edit",view:"View",editCommand:"Edit command",deleteCommand:"Delete command"},source:{local:"Local",plugin:"Plugin"},delete:{title:"Delete Command",confirmMessage:'Are you sure you want to delete command "/{{name}}"? This action cannot be undone.',cancel:"Cancel",delete:"Delete",deleting:"Deleting..."}},NT={title:"Plugin Management",subtitle:"Manage plugin marketplaces and installed plugins",tabs:{marketplaces:"Marketplaces",browse:"Browse Plugins",installed:"Installed Plugins"},marketplaces:{title:"Plugin Marketplaces",subtitle:"Manage plugin marketplace sources",addButton:"Add Marketplace",searchPlaceholder:"Search marketplaces...",noMarketplaces:"No marketplaces configured yet",addFirst:"Add your first plugin marketplace",table:{marketplace:"Marketplace",type:"Type",plugins:"Plugins",lastSync:"Last Sync",actions:"Actions"},types:{git:"Git Repository",github:"GitHub",local:"Local Directory"},actions:{sync:"Sync",syncing:"Syncing...",edit:"Edit",delete:"Delete"},addModal:{title:"Add Marketplace",editTitle:"Edit Marketplace",name:"Marketplace Name",namePlaceholder:"e.g., official-plugins",type:"Source Type",typePlaceholder:"Select source type",source:"Source",sourcePlaceholderGit:"Git repository URL",sourcePlaceholderGithub:"owner/repo or full URL",sourcePlaceholderLocal:"Local directory path",branch:"Branch (Optional)",branchPlaceholder:"main",description:"Description (Optional)",descriptionPlaceholder:"Marketplace description",cancel:"Cancel",add:"Add",adding:"Adding...",save:"Save",saving:"Saving..."},confirmDelete:'Are you sure you want to delete marketplace "{{name}}"? All plugins from this marketplace will be uninstalled.'},browse:{title:"Browse Plugins",subtitle:"Discover and install plugins from marketplaces",searchPlaceholder:"Search plugins...",filters:{allMarketplaces:"All Marketplaces",allTypes:"All Types",showOnlyInstalled:"Show only installed"},noPlugins:"No plugins available",noMarketplaces:"No marketplaces added yet",goAddMarketplace:"Add a marketplace to browse plugins",noResults:"No plugins found",adjustSearch:"Try adjusting your search criteria",card:{from:"from",version:"v{{version}}",by:"by",installed:"Installed",install:"Install",installing:"Installing...",viewDetails:"View Details"},actions:{details:"Details",install:"Install",uninstall:"Uninstall"},confirmUninstall:'Are you sure you want to uninstall plugin "{{name}}"?',components:{commands:"{{count}} Command{{count, plural, one {} other{s}}}",agents:"{{count}} Agent{{count, plural, one {} other{s}}}",skills:"{{count}} Skill{{count, plural, one {} other{s}}}",hooks:"{{count}} Hook{{count, plural, one {} other{s}}}",mcpServers:"{{count}} MCP Server{{count, plural, one {} other{s}}}"},detailModal:{title:"Plugin Details",version:"Version",author:"Author",marketplace:"Marketplace",updated:"Last Updated",components:"Components",files:"Files",readme:"README",noReadme:"No README available",install:"Install Plugin",installing:"Installing...",installed:"Installed",close:"Close"}},installed:{title:"Installed Plugins",subtitle:"Manage your installed plugins",searchPlaceholder:"Search installed plugins...",filters:{all:"All",enabled:"Enabled",disabled:"Disabled",allMarketplaces:"All Marketplaces"},noPlugins:"No plugins installed yet",goBrowse:"Browse plugins to install",noResults:"No matching plugins found",table:{plugin:"Plugin",marketplace:"Marketplace",version:"Version",status:"Status",components:"Components",actions:"Actions"},status:{enabled:"Enabled",disabled:"Disabled"},actions:{details:"Details",viewDetails:"View Details",enable:"Enable",enabling:"Enabling...",disable:"Disable",disabling:"Disabling...",uninstall:"Uninstall"},confirmUninstall:'Are you sure you want to uninstall plugin "{{name}}"?',detailModal:{title:"Plugin Details",basicInfo:"Basic Information",version:"Version",author:"Author",marketplace:"Marketplace",installedAt:"Installed",status:"Status",components:"Components",commands:"Commands",agents:"Agents",skills:"Skills",hooks:"Hooks",mcpServers:"MCP Servers",none:"None",files:"Plugin Files",viewFile:"View File",close:"Close",enable:"Enable",disable:"Disable",uninstall:"Uninstall"},fileViewer:{title:"File Viewer",loading:"Loading...",error:"Failed to load file",close:"Close"}},messages:{installSuccess:"Plugin installed successfully. Please refresh to use the new plugin.",installError:"Failed to install plugin",enableSuccess:"Plugin enabled successfully. Please refresh to use the plugin.",enableError:"Failed to enable plugin",disableSuccess:"Plugin disabled successfully",disableError:"Failed to disable plugin",uninstallSuccess:"Plugin uninstalled successfully",uninstallError:"Failed to uninstall plugin",marketplaceAddSuccess:"Marketplace added successfully",marketplaceAddError:"Failed to add marketplace",marketplaceSyncSuccess:"Marketplace synced successfully",marketplaceSyncError:"Failed to sync marketplace",marketplaceRemoveSuccess:"Marketplace removed successfully",marketplaceRemoveError:"Failed to remove marketplace"},detail:{back:"Back",root:"Root",noDescription:"No description available",version:"Version",author:"Author",license:"License",components:"Components",type:"Type",name:"Name",description:"Description",actions:"Actions",viewEntryFile:"View entry file",browseDirectory:"Browse directory",noComponents:"No components found",loadFailed:"Failed to load plugin details",componentTypes:{command:"Command",agent:"Agent",skill:"Skill",hook:"Hook",mcp:"MCP Server"}}},MT={title:"Agent Skills",subtitle:"Manage and organize your agent capabilities",createButton:"Create Skill",noSkills:"No skills created yet",noSkillsSearch:"No skills found matching your filters",createFirst:"Create Your First Skill",searchPlaceholder:"Search skills...",filter:{showDisabled:"Show disabled"},scope:{user:"User",project:"Project"},status:{enabled:"Enabled",disabled:"Disabled"},create:{title:"Create New Skill",subtitle:"Define a new capability for your AI agents",steps:{basic:"Basic Info",content:"Content",preview:"Preview"},basic:{name:"Skill Name",namePlaceholder:"my-awesome-skill",nameHint:"Use lowercase letters, numbers, and hyphens only (max 64 characters)",description:"Description",descriptionPlaceholder:"Brief description of what this skill does and when to use it",descriptionHint:"Include both what the skill does and when Claude should use it (max 1024 characters)",allowedTools:"Allowed Tools",allowedToolsPlaceholder:"Read, Write, Grep (comma-separated)",allowedToolsHint:"Tools this skill can use without asking for permission. Leave empty for default behavior.",selectTools:"Select Tools",noToolsSelected:"No tools selected"},content:{skillManifest:"SKILL.md Content",additionalFiles:"Additional Files",addFile:"Add File",noFiles:"No additional files",noFilesHint:"Add files to extend your skill functionality",fileName:"File name",filePath:"Path/to/file",fileContent:"File content",fileType:{markdown:"Markdown",text:"Text",script:"Script",template:"Template",other:"Other"}},preview:{title:"Skill Preview",name:"Name:",description:"Description:",scope:"Scope:",allowedTools:"Allowed Tools:",additionalFiles:"Additional Files:",none:"None",fileCount:"{{count}} file(s)",previewContent:"SKILL.md Preview:",noContent:"(no content)"}},editor:{title:"Edit Skill",basic:{name:"Name",description:"Description",allowedTools:"Allowed Tools",allowedToolsHint:"Tools this skill can use without asking for permission. Leave empty for default behavior.",skillContent:"SKILL.md Content",validationErrors:"Validation Errors:",unsavedChanges:"You have unsaved changes. Press Cmd+S to save."},files:{title:"Additional Files",addFile:"Add File",noFiles:"No additional files",addFilesHint:"Add files to extend your skill functionality"},scope:{user:"User Skill"},errors:{validationErrors:"Validation Errors:",saveFailed:"Failed to save skill. Please try again."}},preview:{title:"Skill Content",usageStats:"Usage Statistics",usage:"Used {{count}} time{{count, plural, one {} other{s}}",lastUsed:"Last used",created:"Created:",updated:"Updated:",scope:"Scope:",userScopeDesc:"Personal (across all projects)",projectScopeDesc:"Project: Current",actions:{edit:"Edit",enable:"Enable",disable:"Disable",delete:"Delete"}},errors:{loadFailed:"Error loading skills",deleteFailed:"Failed to delete skill. Please try again.",toggleFailed:"Toggle functionality will be implemented in the API",createFailed:"Failed to create skill. Please try again."},deleteConfirm:'Are you sure you want to delete "{{name}}"?',usage:{customInstructions:"Custom instructions",toolPermissions:"Tool permissions"}},jT={docs:gT,nav:hT,footer:yT,login:vT,landing:bT,agents:ST,projects:xT,chat:wT,dashboard:CT,settings:AT,analytics:TT,mcp:kT,commands:ET,plugins:NT,skills:MT},DT="AgentStudio",RT="Select an AI assistant to start working",PT="Loading...",OT="Available Assistants",zT="Disabled Assistants",LT="{{count}} assistants",UT="Create Custom Assistant",_T="Custom assistant feature coming soon!",FT="No Available Assistants Yet",BT="Enable some built-in assistants or create your own custom assistants to get started",HT="Manage Assistants",qT="Start Using",VT="Edit Assistant",GT="Disable Assistant",IT="Enable Assistant",KT="Disabled",YT="Enable Assistant",QT={slides:"Slides",chat:"Chat","claude-code":"Claude Code"},XT={toggleFailed:"Operation failed, please try again"},ZT={title:DT,subtitle:RT,loading:PT,availableAgents:OT,disabledAgents:zT,agentCount:LT,createCustomAgent:UT,customAgentComingSoon:_T,noAgentsTitle:FT,noAgentsDescription:BT,manageAgents:HT,startUsing:qT,editAgent:VT,disableAgent:GT,enableAgent:IT,disabledStatus:KT,enableAgentButton:YT,componentTypes:QT,errors:XT},$T={enabled:"Enabled",disabled:"Disabled"},JT={name:"Project Name",nameRequired:"Project Name *",namePlaceholder:"Enter project name",description:"Project Description",descriptionPlaceholder:"Briefly describe the purpose of this project...",directory:"Project Directory",directoryNote:"A new folder will be created under this directory",agentType:"Select Assistant Type *",agentTypePlaceholder:"Choose an assistant type"},WT={name:"Assistant Name",namePlaceholder:"Enter assistant name",description:"Assistant Description",descriptionPlaceholder:"Describe the assistant's capabilities...",systemPrompt:"System Prompt",systemPromptPlaceholder:"Enter system prompt...",tools:"Available Tools",selectTools:"Select Tools"},ek={editTitle:"Edit Command",createTitle:"Create Command",formMode:"Form",codeMode:"Code",saveChanges:"Save Changes",createCommand:"Create Command",nameLabel:"Command Name",nameHint:"Can only contain letters, numbers, underscores, and hyphens",modelLabel:"Specify Model",inheritModel:"Inherit conversation settings",modelHint:"Specify a specific AI model for this command.",namespaceLabel:"Namespace",namespaceHint:"Used to organize commands, can include / separator",argumentHintLabel:"Argument Hint",argumentHintHint:"Argument hint displayed in autocomplete",descriptionLabel:"Description",descriptionPlaceholder:"Optimize code performance and readability",descriptionHint:"Brief description of the command, will use the first line of content if not provided",allowedToolsLabel:"Allowed Tools",selectTools:"Select Tools",regularToolsCount:"{{count}} regular tools",mcpToolsCount:"{{count}} MCP tools",allowedToolsHint:"Leave empty to inherit conversation permissions",contentLabel:"Command Content",contentPlaceholder:`Analyze performance issues in this code and provide optimization suggestions:
189
189
 
190
190
  Use arguments: $ARGUMENTS
191
191
  Use first argument: $1
@@ -197,7 +197,7 @@ description: Optimize code performance and readability
197
197
  argument-hint: [filename] [options]
198
198
  namespace: frontend
199
199
  allowed-tools: Read, Write, Edit
200
- model: claude-3-5-sonnet-20241022
200
+ model: sonnet
201
201
  ---
202
202
 
203
203
  Analyze performance issues in this code and provide optimization suggestions: