cc-viewer 1.6.199 → 1.6.201

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 (65) hide show
  1. package/dist/assets/App-B0Cfe4hA.js +1 -0
  2. package/dist/assets/{App-fG2r3jFq.css → App-DOYmReD4.css} +1 -1
  3. package/dist/assets/{AppHeader-pu5K74SB.css → AppHeader-auOOOaQm.css} +2 -2
  4. package/dist/assets/AppHeader.module-CDgQaFoO.js +2 -0
  5. package/dist/assets/{Mobile-DnvC6H2O.js → Mobile-CsKFJYE2.js} +1 -1
  6. package/dist/assets/{_baseUniq-Cnd-_Qe2.js → _baseUniq-C73FOqig.js} +1 -1
  7. package/dist/assets/{arc-CPVCmYmr.js → arc-DAWkd4Du.js} +1 -1
  8. package/dist/assets/{architectureDiagram-Q4EWVU46-CTmPWolC.js → architectureDiagram-Q4EWVU46-CXA8GRiC.js} +1 -1
  9. package/dist/assets/{blockDiagram-DXYQGD6D-BYUa2ljj.js → blockDiagram-DXYQGD6D-BH7SCCtR.js} +1 -1
  10. package/dist/assets/{c4Diagram-AHTNJAMY-BBfrYhDN.js → c4Diagram-AHTNJAMY-DjidAThD.js} +1 -1
  11. package/dist/assets/{channel-D1pwh2Yq.js → channel-fMMU54GK.js} +1 -1
  12. package/dist/assets/{chunk-4BX2VUAB-DYCV-6PI.js → chunk-4BX2VUAB-C7VtouVc.js} +1 -1
  13. package/dist/assets/{chunk-4TB4RGXK-DZWVouv1.js → chunk-4TB4RGXK-E8ZyU2MN.js} +1 -1
  14. package/dist/assets/{chunk-55IACEB6-BnetqbRo.js → chunk-55IACEB6-kKpXz88M.js} +1 -1
  15. package/dist/assets/{chunk-EDXVE4YY-CL4WCxSM.js → chunk-EDXVE4YY-DGxEwZ4m.js} +1 -1
  16. package/dist/assets/{chunk-FMBD7UC4-DLmQmJbs.js → chunk-FMBD7UC4-CD8bIwZQ.js} +1 -1
  17. package/dist/assets/{chunk-OYMX7WX6-B7jkMtrd.js → chunk-OYMX7WX6-gYD4Acaz.js} +1 -1
  18. package/dist/assets/{chunk-QZHKN3VN-tscrjv7L.js → chunk-QZHKN3VN-BjwG7rZm.js} +1 -1
  19. package/dist/assets/{chunk-YZCP3GAM-BreqZYYH.js → chunk-YZCP3GAM-QsYUvoBQ.js} +1 -1
  20. package/dist/assets/classDiagram-6PBFFD2Q-BIdWZE2B.js +1 -0
  21. package/dist/assets/classDiagram-v2-HSJHXN6E-BIdWZE2B.js +1 -0
  22. package/dist/assets/clone-DUPgDT2x.js +1 -0
  23. package/dist/assets/{cose-bilkent-S5V4N54A-BqETFkWe.js → cose-bilkent-S5V4N54A-9ctKMOYC.js} +1 -1
  24. package/dist/assets/{dagre-KV5264BT-C1fQhqsm.js → dagre-KV5264BT-By2HwLaW.js} +1 -1
  25. package/dist/assets/{diagram-5BDNPKRD-BQ_AArZ4.js → diagram-5BDNPKRD-BpgOHENA.js} +1 -1
  26. package/dist/assets/{diagram-G4DWMVQ6-ETR1atoi.js → diagram-G4DWMVQ6-B2x2muJb.js} +1 -1
  27. package/dist/assets/{diagram-MMDJMWI5-BS5YlnF7.js → diagram-MMDJMWI5-un9PMQTJ.js} +1 -1
  28. package/dist/assets/{diagram-TYMM5635-DgEDTcSl.js → diagram-TYMM5635-CoSUmrbF.js} +1 -1
  29. package/dist/assets/{erDiagram-SMLLAGMA-BfJzSJyz.js → erDiagram-SMLLAGMA-D9ycUUrR.js} +1 -1
  30. package/dist/assets/{flowDiagram-DWJPFMVM-CmZyhVxI.js → flowDiagram-DWJPFMVM-CMwSrS0j.js} +1 -1
  31. package/dist/assets/{ganttDiagram-T4ZO3ILL-CyCgF8EH.js → ganttDiagram-T4ZO3ILL-dNzPWJ2v.js} +1 -1
  32. package/dist/assets/{gitGraphDiagram-UUTBAWPF-Ch_lyUYI.js → gitGraphDiagram-UUTBAWPF-5jScxIeV.js} +1 -1
  33. package/dist/assets/{graph-DONA5GRX.js → graph-CSAV79cR.js} +1 -1
  34. package/dist/assets/{index-CP_dJQHF.js → index-BnE1kmli.js} +2 -2
  35. package/dist/assets/{infoDiagram-42DDH7IO-sWbLdJMA.js → infoDiagram-42DDH7IO-BBwe5zCb.js} +1 -1
  36. package/dist/assets/{ishikawaDiagram-UXIWVN3A-B1-Sul49.js → ishikawaDiagram-UXIWVN3A-DxpzhU4G.js} +1 -1
  37. package/dist/assets/{journeyDiagram-VCZTEJTY-B2GzVR2v.js → journeyDiagram-VCZTEJTY-BiLOryhx.js} +1 -1
  38. package/dist/assets/{kanban-definition-6JOO6SKY-BQ369gG9.js → kanban-definition-6JOO6SKY-BwMtkCnE.js} +1 -1
  39. package/dist/assets/{layout-Dg4txuWO.js → layout-DEZivYZo.js} +1 -1
  40. package/dist/assets/{linear-CB6_fADN.js → linear-8H25OaNu.js} +1 -1
  41. package/dist/assets/{mermaid.core-fx56L749.js → mermaid.core-O3WUNQR6.js} +2 -2
  42. package/dist/assets/{min-Cfm_qmEy.js → min-BDNYdllt.js} +1 -1
  43. package/dist/assets/{mindmap-definition-QFDTVHPH-CucfYr3R.js → mindmap-definition-QFDTVHPH-DLa1a2PT.js} +1 -1
  44. package/dist/assets/{pieDiagram-DEJITSTG-B1JuDmET.js → pieDiagram-DEJITSTG-C7a0wkId.js} +1 -1
  45. package/dist/assets/{quadrantDiagram-34T5L4WZ-D45nu4Jo.js → quadrantDiagram-34T5L4WZ-qaO4n-DR.js} +1 -1
  46. package/dist/assets/{requirementDiagram-MS252O5E-C4MR71jH.js → requirementDiagram-MS252O5E-B5elAix1.js} +1 -1
  47. package/dist/assets/{sankeyDiagram-XADWPNL6-BjN93eui.js → sankeyDiagram-XADWPNL6-BxAAO2OT.js} +1 -1
  48. package/dist/assets/{sequenceDiagram-FGHM5R23-DfNydjTE.js → sequenceDiagram-FGHM5R23-D4epWe89.js} +1 -1
  49. package/dist/assets/{stateDiagram-FHFEXIEX-Cth1bRU5.js → stateDiagram-FHFEXIEX-DgLET5fE.js} +1 -1
  50. package/dist/assets/{stateDiagram-v2-QKLJ7IA2-DRKS8TSe.js → stateDiagram-v2-QKLJ7IA2-Ci28Wp9J.js} +1 -1
  51. package/dist/assets/{timeline-definition-GMOUNBTQ-CGI0k2Go.js → timeline-definition-GMOUNBTQ-8JmSnBLT.js} +1 -1
  52. package/dist/assets/{vennDiagram-DHZGUBPP-C1-dVDob.js → vennDiagram-DHZGUBPP-DYVoEvAU.js} +1 -1
  53. package/dist/assets/{wardley-RL74JXVD-Cw6grnZ8.js → wardley-RL74JXVD-DS_huD5U.js} +1 -1
  54. package/dist/assets/{wardleyDiagram-NUSXRM2D-Dz6uGDTV.js → wardleyDiagram-NUSXRM2D-BldFmHzV.js} +1 -1
  55. package/dist/assets/{xychartDiagram-5P7HB3ND-B_Pl_Y8E.js → xychartDiagram-5P7HB3ND-DS97a-id.js} +1 -1
  56. package/dist/index.html +1 -1
  57. package/interceptor.js +141 -10
  58. package/package.json +1 -1
  59. package/proxy.js +8 -0
  60. package/server.js +20 -7
  61. package/dist/assets/App-P57OfZoY.js +0 -1
  62. package/dist/assets/AppHeader.module-BaWqwKOb.js +0 -2
  63. package/dist/assets/classDiagram-6PBFFD2Q-DNn_1CVl.js +0 -1
  64. package/dist/assets/classDiagram-v2-HSJHXN6E-DNn_1CVl.js +0 -1
  65. package/dist/assets/clone-6rNpdByw.js +0 -1
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mermaid.core-O3WUNQR6.js","assets/index-BnE1kmli.js","assets/vendor-codemirror-BiCbU51m.js","assets/vendor-antd-CAmbzFZk.js","assets/index-DFheg8PF.css","assets/vendor-markdown-Bpu4AByL.js"])))=>i.map(i=>d[i]);
2
+ var __defProp=Object.defineProperty,__publicField=(obj,key,value)=>((obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value)(obj,"symbol"!=typeof key?key+"":key,value);import{a as reactExports,I as Icon,b as _extends,K as Typography,W as RefIcon$7,d as Button,z as RefIcon$8,S as Spin,J as Empty,L as List,X as Card,Y as RefIcon$9,q as Space,Z as Popconfirm,e as RefIcon$a,s as staticMethods,M as Modal,$ as RefIcon$b,T as Tag,t as Input,R as React,V as Checkbox,P as Popover,j as RefIcon$c,F as ForwardTable,C as ConfigProvider,a0 as theme,A as Tooltip,u as RefIcon$d,c as ao,o as Collapse,D as Dropdown,g as getDefaultExportFromCjs,a1 as Divider}from"./vendor-antd-CAmbzFZk.js";import{j as jsxRuntimeExports,E as EditorView,k as keymap,s as showMinimap,R as ReactCodeMirror,a as syntaxHighlighting,b as sql$1,c as css$1,m as markdown$1,y as yaml$1,d as json$1,x as xml$1,p as php$1,r as rust$1,g as go$1,e as cpp$1,f as java$1,h as python$1,i as javascript$2,H as HighlightStyle,t as tags}from"./vendor-codemirror-BiCbU51m.js";import{_ as __vitePreload,b as isMobile,a as isPad,i as isIOS}from"./index-BnE1kmli.js";import{p as purify,g}from"./vendor-markdown-Bpu4AByL.js";import{D as Dl,o,L,K as Ke,x as xr}from"./vendor-xterm-DckPrCx1.js";import{r as requireCore}from"./vendor-highlight-IFTJ9nxW.js";import{q as qr}from"./vendor-virtuoso-DfOWZHqr.js";var ArrowUpOutlined$1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M868 545.5L536.1 163a31.96 31.96 0 00-48.3 0L156 545.5a7.97 7.97 0 006 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z"}}]},name:"arrow-up",theme:"outlined"},ArrowUpOutlined=function(props,ref){return reactExports.createElement(Icon,_extends({},props,{ref:ref,icon:ArrowUpOutlined$1}))},RefIcon$6=reactExports.forwardRef(ArrowUpOutlined),BranchesOutlined$1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M740 161c-61.8 0-112 50.2-112 112 0 50.1 33.1 92.6 78.5 106.9v95.9L320 602.4V318.1c44.2-15 76-56.9 76-106.1 0-61.8-50.2-112-112-112s-112 50.2-112 112c0 49.2 31.8 91 76 106.1V706c-44.2 15-76 56.9-76 106.1 0 61.8 50.2 112 112 112s112-50.2 112-112c0-49.2-31.8-91-76-106.1v-27.8l423.5-138.7a50.52 50.52 0 0034.9-48.2V378.2c42.9-15.8 73.6-57 73.6-105.2 0-61.8-50.2-112-112-112zm-504 51a48.01 48.01 0 0196 0 48.01 48.01 0 01-96 0zm96 600a48.01 48.01 0 01-96 0 48.01 48.01 0 0196 0zm408-491a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"branches",theme:"outlined"},BranchesOutlined=function(props,ref){return reactExports.createElement(Icon,_extends({},props,{ref:ref,icon:BranchesOutlined$1}))},RefIcon$5=reactExports.forwardRef(BranchesOutlined),CameraOutlined$1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M864 248H728l-32.4-90.8a32.07 32.07 0 00-30.2-21.2H358.6c-13.5 0-25.6 8.5-30.1 21.2L296 248H160c-44.2 0-80 35.8-80 80v456c0 44.2 35.8 80 80 80h704c44.2 0 80-35.8 80-80V328c0-44.2-35.8-80-80-80zm8 536c0 4.4-3.6 8-8 8H160c-4.4 0-8-3.6-8-8V328c0-4.4 3.6-8 8-8h186.7l17.1-47.8 22.9-64.2h250.5l22.9 64.2 17.1 47.8H864c4.4 0 8 3.6 8 8v456zM512 384c-88.4 0-160 71.6-160 160s71.6 160 160 160 160-71.6 160-160-71.6-160-160-160zm0 256c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96z"}}]},name:"camera",theme:"outlined"},CameraOutlined=function(props,ref){return reactExports.createElement(Icon,_extends({},props,{ref:ref,icon:CameraOutlined$1}))},RefIcon$4=reactExports.forwardRef(CameraOutlined),DatabaseOutlined$1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M832 64H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V96c0-17.7-14.3-32-32-32zm-600 72h560v208H232V136zm560 480H232V408h560v208zm0 272H232V680h560v208zM304 240a40 40 0 1080 0 40 40 0 10-80 0zm0 272a40 40 0 1080 0 40 40 0 10-80 0zm0 272a40 40 0 1080 0 40 40 0 10-80 0z"}}]},name:"database",theme:"outlined"},DatabaseOutlined=function(props,ref){return reactExports.createElement(Icon,_extends({},props,{ref:ref,icon:DatabaseOutlined$1}))},RefIcon$3=reactExports.forwardRef(DatabaseOutlined),RocketOutlined$1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M864 736c0-111.6-65.4-208-160-252.9V317.3c0-15.1-5.3-29.7-15.1-41.2L536.5 95.4C530.1 87.8 521 84 512 84s-18.1 3.8-24.5 11.4L335.1 276.1a63.97 63.97 0 00-15.1 41.2v165.8C225.4 528 160 624.4 160 736h156.5c-2.3 7.2-3.5 15-3.5 23.8 0 22.1 7.6 43.7 21.4 60.8a97.2 97.2 0 0043.1 30.6c23.1 54 75.6 88.8 134.5 88.8 29.1 0 57.3-8.6 81.4-24.8 23.6-15.8 41.9-37.9 53-64a97 97 0 0043.1-30.5 97.52 97.52 0 0021.4-60.8c0-8.4-1.1-16.4-3.1-23.8H864zM762.3 621.4c9.4 14.6 17 30.3 22.5 46.6H700V558.7a211.6 211.6 0 0162.3 62.7zM388 483.1V318.8l124-147 124 147V668H388V483.1zM239.2 668c5.5-16.3 13.1-32 22.5-46.6 16.3-25.2 37.5-46.5 62.3-62.7V668h-84.8zm388.9 116.2c-5.2 3-11.2 4.2-17.1 3.4l-19.5-2.4-2.8 19.4c-5.4 37.9-38.4 66.5-76.7 66.5-38.3 0-71.3-28.6-76.7-66.5l-2.8-19.5-19.5 2.5a27.7 27.7 0 01-17.1-3.5c-8.7-5-14.1-14.3-14.1-24.4 0-10.6 5.9-19.4 14.6-23.8h231.3c8.8 4.5 14.6 13.3 14.6 23.8-.1 10.2-5.5 19.6-14.2 24.5zM464 400a48 48 0 1096 0 48 48 0 10-96 0z"}}]},name:"rocket",theme:"outlined"},RocketOutlined=function(props,ref){return reactExports.createElement(Icon,_extends({},props,{ref:ref,icon:RocketOutlined$1}))},RefIcon$2=reactExports.forwardRef(RocketOutlined),SaveOutlined$1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M893.3 293.3L730.7 130.7c-7.5-7.5-16.7-13-26.7-16V112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V338.5c0-17-6.7-33.2-18.7-45.2zM384 184h256v104H384V184zm456 656H184V184h136v136c0 17.7 14.3 32 32 32h320c17.7 0 32-14.3 32-32V205.8l136 136V840zM512 442c-79.5 0-144 64.5-144 144s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144zm0 224c-44.2 0-80-35.8-80-80s35.8-80 80-80 80 35.8 80 80-35.8 80-80 80z"}}]},name:"save",theme:"outlined"},SaveOutlined=function(props,ref){return reactExports.createElement(Icon,_extends({},props,{ref:ref,icon:SaveOutlined$1}))},RefIcon$1=reactExports.forwardRef(SaveOutlined),UploadOutlined$1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"upload",theme:"outlined"},UploadOutlined=function(props,ref){return reactExports.createElement(Icon,_extends({},props,{ref:ref,icon:UploadOutlined$1}))},RefIcon=reactExports.forwardRef(UploadOutlined);const i18nData={"ui.guide.title":{zh:"欢迎使用 CC Viewer",en:"Welcome to CC Viewer","zh-TW":"歡迎使用 CC Viewer",ko:"CC Viewer에 오신 것을 환영합니다",ja:"CC Viewer へようこそ",de:"Willkommen bei CC Viewer",es:"Bienvenido a CC Viewer",fr:"Bienvenue sur CC Viewer",it:"Benvenuto in CC Viewer",da:"Velkommen til CC Viewer",pl:"Witamy w CC Viewer",ru:"Добро пожаловать в CC Viewer",ar:"مرحبًا بك في CC Viewer",no:"Velkommen til CC Viewer","pt-BR":"Bem-vindo ao CC Viewer",th:"ยินดีต้อนรับสู่ CC Viewer",tr:"CC Viewer'a hoş geldiniz",uk:"Ласкаво просимо до CC Viewer"},"ui.guide.step1":{zh:"你可以先尝试在 Claude 中发起一轮对话。不知道说什么?可以问问:",en:"Try starting a conversation in Claude. Not sure what to say? Try asking:","zh-TW":"你可以先嘗試在 Claude 中發起一輪對話。不知道說什麼?可以問問:",ko:"Claude에서 대화를 시작해 보세요. 무슨 말을 해야 할지 모르겠다면:",ja:"まず Claude で会話を始めてみましょう。何を言えばいいかわからない場合:",de:"Starten Sie ein Gespräch in Claude. Nicht sicher, was Sie sagen sollen? Fragen Sie:",es:"Intenta iniciar una conversación en Claude. ¿No sabes qué decir? Prueba preguntar:",fr:"Essayez de lancer une conversation dans Claude. Vous ne savez pas quoi dire ? Demandez :",it:"Prova ad avviare una conversazione in Claude. Non sai cosa dire? Prova a chiedere:",da:"Prøv at starte en samtale i Claude. Ikke sikker på hvad du skal sige? Prøv at spørge:",pl:"Spróbuj rozpocząć rozmowę w Claude. Nie wiesz co powiedzieć? Zapytaj:",ru:"Попробуйте начать разговор в Claude. Не знаете, что сказать? Спросите:",ar:"جرّب بدء محادثة في Claude. لا تعرف ماذا تقول؟ جرّب أن تسأل:",no:"Prøv å starte en samtale i Claude. Usikker på hva du skal si? Prøv å spørre:","pt-BR":"Tente iniciar uma conversa no Claude. Não sabe o que dizer? Pergunte:",th:"ลองเริ่มบทสนทนาใน Claude ไม่รู้จะพูดอะไร? ลองถามว่า:",tr:"Claude'da bir sohbet başlatmayı deneyin. Ne söyleyeceğinizi bilmiyor musunuz? Şunu sorun:",uk:"Спробуйте розпочати розмову в Claude. Не знаєте, що сказати? Запитайте:"},"ui.guide.exampleQuestion":{zh:"看看我现在有多少 skill",en:"How many skills do I have right now?","zh-TW":"看看我現在有多少 skill",ko:"지금 내가 가진 skill이 몇 개인지 확인해줘",ja:"今いくつの skill があるか見てみて",de:"Wie viele Skills habe ich gerade?",es:"¿Cuántos skills tengo ahora mismo?",fr:"Combien de skills ai-je en ce moment ?",it:"Quanti skill ho in questo momento?",da:"Hvor mange skills har jeg lige nu?",pl:"Ile mam teraz skills?",ru:"Сколько у меня сейчас skills?",ar:"كم عدد الـ skills لديّ الآن؟",no:"Hvor mange skills har jeg nå?","pt-BR":"Quantos skills eu tenho agora?",th:"ตอนนี้ฉันมีกี่ skill?",tr:"Şu anda kaç tane skill'im var?",uk:"Скільки у мене зараз skills?"},"ui.guide.step2":{zh:"你能看到这段文字,说明服务已经启动。如果 Claude 有响应但这里没有变化,可以让 Claude 帮你排查:",en:"If you can see this, the service is running. If Claude responds but nothing shows here, ask Claude to help troubleshoot:","zh-TW":"你能看到這段文字,說明服務已經啟動。如果 Claude 有回應但這裡沒有變化,可以讓 Claude 幫你排查:",ko:"이 텍스트가 보이면 서비스가 실행 중입니다. Claude가 응답하지만 여기에 변화가 없다면 Claude에게 문제 해결을 요청하세요:",ja:"このテキストが見えていればサービスは起動しています。Claude が応答しているのにここに変化がない場合、Claude にトラブルシューティングを依頼してください:",de:"Wenn Sie diesen Text sehen, läuft der Dienst. Wenn Claude antwortet, aber hier nichts angezeigt wird, bitten Sie Claude um Hilfe:",es:"Si puedes ver este texto, el servicio está funcionando. Si Claude responde pero aquí no cambia nada, pide a Claude que te ayude:",fr:"Si vous voyez ce texte, le service fonctionne. Si Claude répond mais rien ne s'affiche ici, demandez à Claude de vous aider :",it:"Se puoi vedere questo testo, il servizio è in esecuzione. Se Claude risponde ma qui non cambia nulla, chiedi a Claude di aiutarti:",da:"Hvis du kan se denne tekst, kører tjenesten. Hvis Claude svarer, men intet vises her, bed Claude om hjælp:",pl:"Jeśli widzisz ten tekst, usługa działa. Jeśli Claude odpowiada, ale tutaj nic się nie zmienia, poproś Claude o pomoc:",ru:"Если вы видите этот текст, сервис запущен. Если Claude отвечает, но здесь ничего не меняется, попросите Claude помочь:",ar:"إذا كنت ترى هذا النص، فالخدمة تعمل. إذا كان Claude يستجيب ولكن لا شيء يظهر هنا، اطلب من Claude المساعدة:",no:"Hvis du kan se denne teksten, kjører tjenesten. Hvis Claude svarer men ingenting vises her, be Claude om hjelp:","pt-BR":"Se você pode ver este texto, o serviço está rodando. Se o Claude responde mas nada aparece aqui, peça ao Claude para ajudar:",th:"ถ้าคุณเห็นข้อความนี้ แสดงว่าบริการกำลังทำงาน หาก Claude ตอบกลับแต่ที่นี่ไม่มีการเปลี่ยนแปลง ให้ขอให้ Claude ช่วยแก้ไข:",tr:"Bu metni görebiliyorsanız, hizmet çalışıyor. Claude yanıt veriyor ama burada bir değişiklik olmuyorsa, Claude'dan yardım isteyin:",uk:"Якщо ви бачите цей текст, сервіс працює. Якщо Claude відповідає, але тут нічого не змінюється, попросіть Claude допомогти:"},"ui.guide.troubleshootCmd":{zh:"我已经启动了 cc-viewer,但是无法看到 cc-viewer 的请求,检查 npm 包中 cc-viewer 的实现,检查问题,并修复",en:"I've started cc-viewer but can't see any requests. Check the cc-viewer npm package implementation, find the issue, and fix it","zh-TW":"我已經啟動了 cc-viewer,但是無法看到 cc-viewer 的請求,檢查 npm 包中 cc-viewer 的實現,檢查問題,並修復",ko:"cc-viewer를 시작했지만 요청을 볼 수 없습니다. cc-viewer npm 패키지 구현을 확인하고 문제를 찾아 수정해 주세요",ja:"cc-viewer を起動しましたがリクエストが表示されません。cc-viewer npm パッケージの実装を確認し、問題を見つけて修正してください",de:"Ich habe cc-viewer gestartet, kann aber keine Anfragen sehen. Überprüfen Sie die cc-viewer npm-Paket-Implementierung, finden Sie das Problem und beheben Sie es",es:"He iniciado cc-viewer pero no puedo ver las solicitudes. Revisa la implementación del paquete npm cc-viewer, encuentra el problema y corrígelo",fr:"J'ai démarré cc-viewer mais je ne vois aucune requête. Vérifiez l'implémentation du package npm cc-viewer, trouvez le problème et corrigez-le",it:"Ho avviato cc-viewer ma non riesco a vedere le richieste. Controlla l'implementazione del pacchetto npm cc-viewer, trova il problema e risolvilo",da:"Jeg har startet cc-viewer, men kan ikke se nogen forespørgsler. Tjek cc-viewer npm-pakkens implementering, find problemet og ret det",pl:"Uruchomiłem cc-viewer, ale nie widzę żadnych żądań. Sprawdź implementację pakietu npm cc-viewer, znajdź problem i napraw go",ru:"Я запустил cc-viewer, но не вижу запросов. Проверьте реализацию npm-пакета cc-viewer, найдите проблему и исправьте её",ar:"لقد قمت بتشغيل cc-viewer ولكن لا أستطيع رؤية أي طلبات. تحقق من تنفيذ حزمة npm الخاصة بـ cc-viewer، وابحث عن المشكلة وأصلحها",no:"Jeg har startet cc-viewer, men kan ikke se noen forespørsler. Sjekk cc-viewer npm-pakkens implementering, finn problemet og fiks det","pt-BR":"Iniciei o cc-viewer mas não consigo ver as requisições. Verifique a implementação do pacote npm cc-viewer, encontre o problema e corrija",th:"ฉันเริ่ม cc-viewer แล้วแต่ไม่เห็นคำขอใดๆ ตรวจสอบการใช้งานแพ็กเกจ npm ของ cc-viewer หาปัญหาและแก้ไข",tr:"cc-viewer'ı başlattım ama istekleri göremiyorum. cc-viewer npm paketinin uygulamasını kontrol edin, sorunu bulun ve düzeltin",uk:"Я запустив cc-viewer, але не бачу жодних запитів. Перевірте реалізацію npm-пакету cc-viewer, знайдіть проблему та виправте її"},"ui.guide.step3":{zh:"在极端情况下,native 版本的 Claude 无法拦截。你可以尝试切回 npm 版本:",en:"In extreme cases, the native version of Claude cannot be intercepted. You can try switching back to the npm version:","zh-TW":"在極端情況下,native 版本的 Claude 無法攔截。你可以嘗試切回 npm 版本:",ko:"극단적인 경우 native 버전의 Claude는 가로챌 수 없습니다. npm 버전으로 전환해 보세요:",ja:"極端な場合、ネイティブ版の Claude はインターセプトできません。npm 版に切り替えてみてください:",de:"In extremen Fällen kann die native Version von Claude nicht abgefangen werden. Versuchen Sie, zur npm-Version zu wechseln:",es:"En casos extremos, la versión nativa de Claude no puede ser interceptada. Puedes intentar volver a la versión npm:",fr:"Dans les cas extrêmes, la version native de Claude ne peut pas être interceptée. Essayez de revenir à la version npm :",it:"In casi estremi, la versione nativa di Claude non può essere intercettata. Puoi provare a tornare alla versione npm:",da:"I ekstreme tilfælde kan den native version af Claude ikke opsnappes. Du kan prøve at skifte tilbage til npm-versionen:",pl:"W skrajnych przypadkach natywna wersja Claude nie może być przechwycona. Możesz spróbować przełączyć się na wersję npm:",ru:"В крайних случаях нативная версия Claude не может быть перехвачена. Попробуйте переключиться на npm-версию:",ar:"في الحالات القصوى، لا يمكن اعتراض النسخة الأصلية من Claude. يمكنك محاولة العودة إلى نسخة npm:",no:"I ekstreme tilfeller kan den native versjonen av Claude ikke fanges opp. Du kan prøve å bytte tilbake til npm-versjonen:","pt-BR":"Em casos extremos, a versão nativa do Claude não pode ser interceptada. Você pode tentar voltar para a versão npm:",th:"ในกรณีสุดขีด เวอร์ชัน native ของ Claude ไม่สามารถดักจับได้ คุณสามารถลองเปลี่ยนกลับไปใช้เวอร์ชัน npm:",tr:"Aşırı durumlarda, Claude'un native sürümü yakalanamaz. npm sürümüne geri dönmeyi deneyebilirsiniz:",uk:"У крайніх випадках нативну версію Claude неможливо перехопити. Спробуйте переключитися на npm-версію:"},"ui.requestList":{zh:"请求列表",en:"Requests","zh-TW":"請求列表",ko:"요청 목록",ja:"リクエスト一覧",de:"Anfragen",es:"Solicitudes",fr:"Requêtes",it:"Richieste",da:"Forespørgsler",pl:"Żądania",ru:"Запросы",ar:"الطلبات",no:"Forespørsler","pt-BR":"Requisições",th:"รายการคำขอ",tr:"İstekler",uk:"Запити"},"ui.totalRequests":{zh:"总请求数: {count}",en:"Total: {count}","zh-TW":"總請求數: {count}",ko:"총 요청 수: {count}",ja:"合計: {count}",de:"Gesamt: {count}",es:"Total: {count}",fr:"Total : {count}",it:"Totale: {count}",da:"Total: {count}",pl:"Łącznie: {count}",ru:"Всего: {count}",ar:"الإجمالي: {count}",no:"Totalt: {count}","pt-BR":"Total: {count}",th:"ทั้งหมด: {count}",tr:"Toplam: {count}",uk:"Всього: {count}"},"ui.waitingRequests":{zh:"等待请求...",en:"Waiting for requests...","zh-TW":"等待請求...",ko:"요청 대기 중...",ja:"リクエスト待機中...",de:"Warte auf Anfragen...",es:"Esperando solicitudes...",fr:"En attente de requêtes...",it:"In attesa di richieste...",da:"Venter på forespørgsler...",pl:"Oczekiwanie na żądania...",ru:"Ожидание запросов...",ar:"في انتظار الطلبات...",no:"Venter på forespørsler...","pt-BR":"Aguardando requisições...",th:"รอคำขอ...",tr:"İstekler bekleniyor...",uk:"Очікування запитів..."},"ui.importLocalLogs":{zh:"日志管理工具",en:"Log Management","zh-TW":"日誌管理工具",ko:"로그 관리 도구",ja:"ログ管理ツール",de:"Log-Verwaltung",es:"Gestión de logs",fr:"Gestion des logs",it:"Gestione log",da:"Loghåndtering",pl:"Zarządzanie logami",ru:"Управление логами",ar:"إدارة السجلات",no:"Loggadministrasjon","pt-BR":"Gerenciamento de logs",th:"จัดการบันทึก",tr:"Log yönetimi",uk:"Керування логами"},"ui.openLogDir":{zh:"打开日志文件夹",en:"Open log folder","zh-TW":"開啟日誌資料夾",ko:"로그 폴더 열기",ja:"ログフォルダを開く",de:"Log-Ordner öffnen",es:"Abrir carpeta de logs",fr:"Ouvrir le dossier de logs",it:"Apri cartella log",da:"Åbn logmappe",pl:"Otwórz folder logów",ru:"Открыть папку логов",ar:"فتح مجلد السجلات",no:"Åpne loggmappe","pt-BR":"Abrir pasta de logs",th:"เปิดโฟลเดอร์บันทึก",tr:"Log klasörünü aç",uk:"Відкрити теку логів"},"ui.openProjectDir":{zh:"在系统中打开项目文件夹",en:"Open project folder","zh-TW":"在系統中開啟專案資料夾",ko:"프로젝트 폴더 열기",ja:"プロジェクトフォルダを開く",de:"Projektordner öffnen",es:"Abrir carpeta del proyecto",fr:"Ouvrir le dossier du projet",it:"Apri cartella progetto",da:"Åbn projektmappe",pl:"Otwórz folder projektu",ru:"Открыть папку проекта",ar:"فتح مجلد المشروع",no:"Åpne prosjektmappe","pt-BR":"Abrir pasta do projeto",th:"เปิดโฟลเดอร์โปรเจกต์",tr:"Proje klasörünü aç",uk:"Відкрити теку проєкту"},"ui.loadLocalJsonl":{zh:"上传日志并解析",en:"Upload and parse log","zh-TW":"上傳日誌並解析",ko:"로그 업로드 및 분석",ja:"ログをアップロードして解析",de:"Log hochladen und analysieren",es:"Subir y analizar registro",fr:"Télécharger et analyser le journal",it:"Carica e analizza il log",da:"Upload og analysér log",pl:"Prześlij i przeanalizuj log",ru:"Загрузить и разобрать журнал",ar:"تحميل وتحليل السجل",no:"Last opp og analyser logg","pt-BR":"Enviar e analisar log",th:"อัปโหลดและวิเคราะห์ล็อก",tr:"Günlüğü yükle ve ayrıştır",uk:"Завантажити та проаналізувати журнал"},"ui.fileTooLarge":{zh:"文件大小不能超过 500MB",en:"File size cannot exceed 500MB","zh-TW":"檔案大小不能超過 500MB",ko:"파일 크기는 500MB를 초과할 수 없습니다",ja:"ファイルサイズは500MBを超えることはできません",de:"Dateigröße darf 500MB nicht überschreiten",es:"El tamaño del archivo no puede superar 500MB",fr:"La taille du fichier ne peut pas dépasser 500 Mo",it:"La dimensione del file non può superare 500MB",da:"Filstørrelsen må ikke overstige 500MB",pl:"Rozmiar pliku nie może przekraczać 500MB",ru:"Размер файла не может превышать 500МБ",ar:"حجم الملف لا يمكن أن يتجاوز 500 ميجابايت",no:"Filstørrelsen kan ikke overstige 500MB","pt-BR":"O tamanho do arquivo não pode exceder 500MB",th:"ขนาดไฟล์ต้องไม่เกิน 500MB",tr:"Dosya boyutu 500MB'ı aşamaz",uk:"Розмір файлу не може перевищувати 500МБ"},"ui.claudeMissing.title":{zh:"未检测到 Claude Code CLI",en:"Claude Code CLI not found","zh-TW":"未偵測到 Claude Code CLI",ko:"Claude Code CLI를 찾을 수 없습니다",ja:"Claude Code CLI が見つかりません",de:"Claude Code CLI nicht gefunden",es:"Claude Code CLI no encontrado",fr:"Claude Code CLI introuvable",it:"Claude Code CLI non trovato",da:"Claude Code CLI ikke fundet",pl:"Nie znaleziono Claude Code CLI",ru:"Claude Code CLI не найден",ar:"لم يتم العثور على Claude Code CLI",no:"Claude Code CLI ikke funnet","pt-BR":"Claude Code CLI não encontrado",th:"ไม่พบ Claude Code CLI",tr:"Claude Code CLI bulunamadı",uk:"Claude Code CLI не знайдено"},"ui.claudeMissing.desc":{zh:"请先安装 Claude Code 才能使用本应用:",en:"Please install Claude Code first:","zh-TW":"請先安裝 Claude Code 才能使用本應用:",ko:"먼저 Claude Code를 설치해주세요:",ja:"まず Claude Code をインストールしてください:",de:"Bitte installieren Sie zuerst Claude Code:",es:"Instale Claude Code primero:",fr:"Veuillez d'abord installer Claude Code :",it:"Installa prima Claude Code:",da:"Installér venligst Claude Code først:",pl:"Najpierw zainstaluj Claude Code:",ru:"Сначала установите Claude Code:",ar:"يرجى تثبيت Claude Code أولاً:",no:"Vennligst installer Claude Code først:","pt-BR":"Instale o Claude Code primeiro:",th:"กรุณาติดตั้ง Claude Code ก่อน:",tr:"Lütfen önce Claude Code'u yükleyin:",uk:"Спочатку встановіть Claude Code:"},"ui.claudeMissing.or":{zh:"或",en:"or","zh-TW":"或",ko:"또는",ja:"または",de:"oder",es:"o",fr:"ou",it:"o",da:"eller",pl:"lub",ru:"или",ar:"أو",no:"eller","pt-BR":"ou",th:"หรือ",tr:"veya",uk:"або"},"ui.claudeMissing.native":{zh:"下载 Claude Code 桌面版",en:"Download Claude Code Desktop","zh-TW":"下載 Claude Code 桌面版",ko:"Claude Code 데스크톱 다운로드",ja:"Claude Code デスクトップをダウンロード",de:"Claude Code Desktop herunterladen",es:"Descargar Claude Code Desktop",fr:"Télécharger Claude Code Desktop",it:"Scarica Claude Code Desktop",da:"Download Claude Code Desktop",pl:"Pobierz Claude Code Desktop",ru:"Скачать Claude Code Desktop",ar:"تحميل Claude Code Desktop",no:"Last ned Claude Code Desktop","pt-BR":"Baixar Claude Code Desktop",th:"ดาวน์โหลด Claude Code Desktop",tr:"Claude Code Desktop İndir",uk:"Завантажити Claude Code Desktop"},"ui.dragDropHint":{zh:"拖放文件到此处上传",en:"Drop files here to upload","zh-TW":"拖放檔案到此處上傳",ko:"파일을 여기에 놓아 업로드",ja:"ファイルをここにドロップしてアップロード",de:"Dateien hierher ziehen zum Hochladen",es:"Suelta archivos aquí para subir",fr:"Déposez les fichiers ici pour télécharger",it:"Trascina i file qui per caricare",da:"Slip filer her for at uploade",pl:"Upuść pliki tutaj, aby przesłać",ru:"Перетащите файлы сюда для загрузки",ar:"أسقط الملفات هنا للتحميل",no:"Slipp filer her for å laste opp","pt-BR":"Solte arquivos aqui para enviar",th:"วางไฟล์ที่นี่เพื่ออัปโหลด",tr:"Dosyaları yüklemek için buraya bırakın",uk:"Перетягніть файли сюди для завантаження"},"ui.importToProject":{zh:"拖放文件到此处导入项目",en:"Drop files here to import","zh-TW":"拖放檔案到此處匯入專案",ko:"여기에 파일을 놓아 가져오기",ja:"ファイルをここにドロップしてインポート",de:"Dateien hier ablegen zum Importieren",es:"Suelta archivos aquí para importar",fr:"Déposez les fichiers ici pour importer",it:"Rilascia file qui per importare",da:"Slip filer her for at importere",pl:"Upuść pliki tutaj, aby zaimportować",ru:"Перетащите файлы сюда для импорта",ar:"أسقط الملفات هنا للاستيراد",no:"Slipp filer her for å importere","pt-BR":"Solte arquivos aqui para importar",th:"วางไฟล์ที่นี่เพื่อนำเข้า",tr:"Dosyaları içe aktarmak için buraya bırakın",uk:"Перетягніть файли сюди для імпорту"},"ui.fileImported":{zh:"已导入文件: {name}",en:"File imported: {name}","zh-TW":"已匯入檔案: {name}",ko:"파일 가져옴: {name}",ja:"ファイルをインポートしました: {name}",de:"Datei importiert: {name}",es:"Archivo importado: {name}",fr:"Fichier importé : {name}",it:"File importato: {name}",da:"Fil importeret: {name}",pl:"Zaimportowano plik: {name}",ru:"Файл импортирован: {name}",ar:"تم استيراد الملف: {name}",no:"Fil importert: {name}","pt-BR":"Arquivo importado: {name}",th:"นำเข้าไฟล์แล้ว: {name}",tr:"Dosya içe aktarıldı: {name}",uk:"Файл імпортовано: {name}"},"ui.filesImported":{zh:"已导入 {count} 个文件",en:"{count} files imported","zh-TW":"已匯入 {count} 個檔案",ko:"{count}개 파일 가져옴",ja:"{count} 件のファイルをインポートしました",de:"{count} Dateien importiert",es:"{count} archivos importados",fr:"{count} fichiers importés",it:"{count} file importati",da:"{count} filer importeret",pl:"Zaimportowano {count} plików",ru:"{count} файлов импортировано",ar:"تم استيراد {count} ملفات",no:"{count} filer importert","pt-BR":"{count} arquivos importados",th:"นำเข้า {count} ไฟล์แล้ว",tr:"{count} dosya içe aktarıldı",uk:"Імпортовано {count} файлів"},"ui.importScanning":{zh:"正在扫描文件夹...",en:"Scanning folders...","zh-TW":"正在掃描資料夾...",ko:"폴더 스캔 중...",ja:"フォルダをスキャン中...",de:"Ordner werden gescannt...",es:"Escaneando carpetas...",fr:"Analyse des dossiers...",it:"Scansione delle cartelle...",da:"Scanner mapper...",pl:"Skanowanie folderów...",ru:"Сканирование папок...",ar:"جارٍ فحص المجلدات...",no:"Skanner mapper...","pt-BR":"Escaneando pastas...",th:"กำลังสแกนโฟลเดอร์...",tr:"Klasörler taranıyor...",uk:"Сканування папок..."},"ui.importingProgress":{zh:"正在导入 {total} 个文件...",en:"Importing {total} files...","zh-TW":"正在匯入 {total} 個檔案...",ko:"{total}개 파일 가져오는 중...",ja:"{total} 件のファイルをインポート中...",de:"{total} Dateien werden importiert...",es:"Importando {total} archivos...",fr:"Importation de {total} fichiers...",it:"Importazione di {total} file...",da:"Importerer {total} filer...",pl:"Importowanie {total} plików...",ru:"Импорт {total} файлов...",ar:"جارٍ استيراد {total} ملفات...",no:"Importerer {total} filer...","pt-BR":"Importando {total} arquivos...",th:"กำลังนำเข้า {total} ไฟล์...",tr:"{total} dosya içe aktarılıyor...",uk:"Імпорт {total} файлів..."},"ui.importConfirmLarge":{zh:"即将导入 {count} 个文件,可能需要较长时间,是否继续?",en:"About to import {count} files, this may take a while. Continue?","zh-TW":"即將匯入 {count} 個檔案,可能需要較長時間,是否繼續?",ko:"{count}개 파일을 가져옵니다. 시간이 걸릴 수 있습니다. 계속할까요?",ja:"{count} 件のファイルをインポートします。時間がかかる場合があります。続行しますか?",de:"{count} Dateien werden importiert, das kann eine Weile dauern. Fortfahren?",es:"Se importarán {count} archivos, esto puede tardar. ¿Continuar?",fr:"{count} fichiers vont être importés, cela peut prendre du temps. Continuer ?",it:"Stai per importare {count} file, potrebbe richiedere tempo. Continuare?",da:"Importerer {count} filer, dette kan tage tid. Fortsæt?",pl:"Zaimportujesz {count} plików, może to chwilę potrwać. Kontynuować?",ru:"Будет импортировано {count} файлов, это может занять время. Продолжить?",ar:"على وشك استيراد {count} ملفات، قد يستغرق بعض الوقت. هل تريد المتابعة؟",no:"Importerer {count} filer, dette kan ta tid. Fortsette?","pt-BR":"Serão importados {count} arquivos, pode demorar. Continuar?",th:"กำลังจะนำเข้า {count} ไฟล์ อาจใช้เวลาสักครู่ ดำเนินการต่อ?",tr:"{count} dosya içe aktarılacak, biraz zaman alabilir. Devam edilsin mi?",uk:"Буде імпортовано {count} файлів, це може зайняти час. Продовжити?"},"ui.importPartialFailed":{zh:"成功导入 {ok} 个,失败 {failed} 个:{names}",en:"Imported {ok}, {failed} failed: {names}","zh-TW":"成功匯入 {ok} 個,失敗 {failed} 個:{names}",ko:"{ok}개 성공, {failed}개 실패: {names}",ja:"{ok} 件成功、{failed} 件失敗: {names}",de:"{ok} importiert, {failed} fehlgeschlagen: {names}",es:"{ok} importados, {failed} fallidos: {names}",fr:"{ok} importés, {failed} échoués : {names}",it:"{ok} importati, {failed} falliti: {names}",da:"{ok} importeret, {failed} mislykkedes: {names}",pl:"Zaimportowano {ok}, nie powiodło się {failed}: {names}",ru:"Импортировано {ok}, не удалось {failed}: {names}",ar:"تم استيراد {ok}، فشل {failed}: {names}",no:"{ok} importert, {failed} mislyktes: {names}","pt-BR":"{ok} importados, {failed} falharam: {names}",th:"นำเข้าสำเร็จ {ok} ล้มเหลว {failed}: {names}",tr:"{ok} içe aktarıldı, {failed} başarısız: {names}",uk:"Імпортовано {ok}, не вдалося {failed}: {names}"},"ui.importNoFiles":{zh:"未发现可导入的文件",en:"No importable files found","zh-TW":"未發現可匯入的檔案",ko:"가져올 파일을 찾을 수 없습니다",ja:"インポート可能なファイルがありません",de:"Keine importierbaren Dateien gefunden",es:"No se encontraron archivos para importar",fr:"Aucun fichier importable trouvé",it:"Nessun file importabile trovato",da:"Ingen filer at importere",pl:"Nie znaleziono plików do zaimportowania",ru:"Нет файлов для импорта",ar:"لم يتم العثور على ملفات قابلة للاستيراد",no:"Ingen filer å importere","pt-BR":"Nenhum arquivo importável encontrado",th:"ไม่พบไฟล์ที่นำเข้าได้",tr:"İçe aktarılacak dosya bulunamadı",uk:"Немає файлів для імпорту"},"ui.importAllFailed":{zh:"全部导入失败({failed} 个):{names}",en:"All imports failed ({failed}): {names}","zh-TW":"全部匯入失敗({failed} 個):{names}",ko:"모두 실패 ({failed}개): {names}",ja:"すべて失敗しました({failed} 件): {names}",de:"Alle Importe fehlgeschlagen ({failed}): {names}",es:"Todas las importaciones fallaron ({failed}): {names}",fr:"Toutes les importations ont échoué ({failed}) : {names}",it:"Tutte le importazioni fallite ({failed}): {names}",da:"Alle importer mislykkedes ({failed}): {names}",pl:"Wszystkie importy nie powiodły się ({failed}): {names}",ru:"Все импорты не удались ({failed}): {names}",ar:"فشلت جميع عمليات الاستيراد ({failed}): {names}",no:"Alle importer mislyktes ({failed}): {names}","pt-BR":"Todas as importações falharam ({failed}): {names}",th:"นำเข้าล้มเหลวทั้งหมด ({failed}): {names}",tr:"Tüm içe aktarmalar başarısız ({failed}): {names}",uk:"Усі імпорти не вдалися ({failed}): {names}"},"ui.exportPrompts":{zh:"查看用户 Prompt",en:"Export user prompts","zh-TW":"匯出用戶 Prompt",ko:"사용자 Prompt 내보내기",ja:"ユーザー Prompt をエクスポート",de:"Benutzer-Prompts exportieren",es:"Exportar prompts de usuario",fr:"Exporter les prompts utilisateur",it:"Esporta prompt utente",da:"Eksportér bruger-prompts",pl:"Eksportuj prompty użytkownika",ru:"Экспорт пользовательских Prompt",ar:"تصدير Prompt المستخدم",no:"Eksporter bruker-prompts","pt-BR":"Exportar prompts do usuário",th:"ส่งออก Prompt ผู้ใช้",tr:"Kullanıcı Prompt'larını dışa aktar",uk:"Експорт Prompt користувача"},"ui.exportPromptsTxt":{zh:"导出到本地 .txt",en:"Export to local .txt","zh-TW":"匯出到本地 .txt",ko:"로컬 .txt로 내보내기",ja:"ローカル .txt にエクスポート",de:"Als lokale .txt exportieren",es:"Exportar a .txt local",fr:"Exporter en .txt local",it:"Esporta in .txt locale",da:"Eksportér til lokal .txt",pl:"Eksportuj do lokalnego .txt",ru:"Экспорт в локальный .txt",ar:"تصدير إلى ملف .txt محلي",no:"Eksporter til lokal .txt","pt-BR":"Exportar para .txt local",th:"ส่งออกเป็นไฟล์ .txt ในเครื่อง",tr:"Yerel .txt olarak dışa aktar",uk:"Експорт у локальний .txt"},"ui.pluginManagement":{zh:"插件管理",en:"Plugin Management","zh-TW":"外掛管理",ko:"플러그인 관리",ja:"プラグイン管理",de:"Plugin-Verwaltung",es:"Gestión de plugins",fr:"Gestion des plugins",it:"Gestione plugin",da:"Plugin-styring",pl:"Zarządzanie wtyczkami",ru:"Управление плагинами",ar:"إدارة الإضافات",no:"Plugin-administrasjon","pt-BR":"Gerenciamento de plugins",th:"จัดการปลั๊กอิน",tr:"Eklenti yönetimi",uk:"Керування плагінами"},"ui.switchWorkspace":{zh:"切换工作区",en:"Switch Workspace","zh-TW":"切換工作區",ko:"워크스페이스 전환",ja:"ワークスペース切替",de:"Arbeitsbereich wechseln",es:"Cambiar espacio",fr:"Changer d'espace",it:"Cambia area",da:"Skift område",pl:"Zmień obszar",ru:"Сменить пространство",ar:"تبديل المساحة",no:"Bytt område","pt-BR":"Trocar área",th:"สลับเวิร์กสเปซ",tr:"Alan değiştir",uk:"Змінити простір"},"ui.plugins.empty":{zh:"暂无插件",en:"No plugins installed"},"ui.plugins.emptyHint":{zh:"将 .js 文件放入插件目录即可加载",en:"Place .js files in the plugins directory to load"},"ui.plugins.delete":{zh:"删除",en:"Delete"},"ui.plugins.deleteConfirm":{zh:"确认删除插件「{name}」?此操作不可恢复。",en:'Delete plugin "{name}"? This cannot be undone.'},"ui.plugins.reload":{zh:"重新加载",en:"Reload"},"ui.plugins.pluginsDir":{zh:"插件目录",en:"Plugin directory"},"ui.plugins.add":{zh:"本地安装",en:"Local Install"},"ui.plugins.invalidFile":{zh:"请选择 .js 或 .mjs 文件",en:"Please select .js or .mjs files"},"ui.plugins.addSuccess":{zh:"插件添加成功",en:"Plugin added successfully"},"ui.plugins.addFailed":{zh:"添加插件失败:{reason}",en:"Failed to add plugin: {reason}"},"ui.plugins.serverError":{zh:"服务端错误({status}),请检查服务是否正常运行",en:"Server error ({status}), please check if the server is running properly"},"ui.plugins.cdnInstall":{zh:"在线安装",en:"Install from URL","zh-TW":"線上安裝",ko:"URL에서 설치",ja:"URLからインストール",de:"Von URL installieren",es:"Instalar desde URL",fr:"Installer depuis une URL",it:"Installa da URL",da:"Installer fra URL",pl:"Zainstaluj z URL",ru:"Установить по URL",ar:"تثبيت من عنوان URL",no:"Installer fra URL","pt-BR":"Instalar a partir de URL",th:"ติดตั้งจาก URL",tr:"URL'den yükle",uk:"Встановити з URL"},"ui.plugins.cdnUrl":{zh:"CDN 地址",en:"CDN URL","zh-TW":"CDN 地址",ko:"CDN URL",ja:"CDN URL",de:"CDN-URL",es:"URL de CDN",fr:"URL CDN",it:"URL CDN",da:"CDN URL",pl:"URL CDN",ru:"URL CDN",ar:"عنوان CDN",no:"CDN URL","pt-BR":"URL do CDN",th:"URL ของ CDN",tr:"CDN URL'si",uk:"URL CDN"},"ui.plugins.cdnUrlPlaceholder":{zh:"请输入插件的 CDN 地址(如 https://cdn.example.com/plugin.js)",en:"Enter plugin CDN URL (e.g. https://cdn.example.com/plugin.js)","zh-TW":"請輸入插件的 CDN 地址(如 https://cdn.example.com/plugin.js)",ko:"플러그인 CDN URL을 입력하세요 (예: https://cdn.example.com/plugin.js)",ja:"プラグインのCDN URLを入力してください(例: https://cdn.example.com/plugin.js)",de:"Plugin-CDN-URL eingeben (z.B. https://cdn.example.com/plugin.js)",es:"Ingrese la URL CDN del plugin (ej. https://cdn.example.com/plugin.js)",fr:"Entrez l'URL CDN du plugin (ex. https://cdn.example.com/plugin.js)",it:"Inserisci l'URL CDN del plugin (es. https://cdn.example.com/plugin.js)",da:"Indtast plugin CDN URL (f.eks. https://cdn.example.com/plugin.js)",pl:"Wprowadź URL CDN wtyczki (np. https://cdn.example.com/plugin.js)",ru:"Введите URL CDN плагина (напр. https://cdn.example.com/plugin.js)",ar:"أدخل عنوان CDN للإضافة (مثال: https://cdn.example.com/plugin.js)",no:"Skriv inn plugin CDN URL (f.eks. https://cdn.example.com/plugin.js)","pt-BR":"Insira a URL CDN do plugin (ex. https://cdn.example.com/plugin.js)",th:"ป้อน URL CDN ของปลั๊กอิน (เช่น https://cdn.example.com/plugin.js)",tr:"Eklenti CDN URL'sini girin (ör. https://cdn.example.com/plugin.js)",uk:"Введіть URL CDN плагіна (напр. https://cdn.example.com/plugin.js)"},"ui.plugins.cdnName":{zh:"插件名称",en:"Plugin Name","zh-TW":"插件名稱",ko:"플러그인 이름",ja:"プラグイン名",de:"Plugin-Name",es:"Nombre del plugin",fr:"Nom du plugin",it:"Nome del plugin",da:"Plugin-navn",pl:"Nazwa wtyczki",ru:"Имя плагина",ar:"اسم الإضافة",no:"Plugin-navn","pt-BR":"Nome do plugin",th:"ชื่อปลั๊กอิน",tr:"Eklenti adı",uk:"Назва плагіна"},"ui.plugins.cdnNamePlaceholder":{zh:"请输入插件保存名称(如 my-plugin.js)",en:"Enter plugin save name (e.g. my-plugin.js)","zh-TW":"請輸入插件儲存名稱(如 my-plugin.js)",ko:"플러그인 저장 이름을 입력하세요 (예: my-plugin.js)",ja:"プラグインの保存名を入力してください(例: my-plugin.js)",de:"Plugin-Speichernamen eingeben (z.B. my-plugin.js)",es:"Ingrese el nombre para guardar el plugin (ej. my-plugin.js)",fr:"Entrez le nom de sauvegarde du plugin (ex. my-plugin.js)",it:"Inserisci il nome di salvataggio del plugin (es. my-plugin.js)",da:"Indtast plugin-gemmenavn (f.eks. my-plugin.js)",pl:"Wprowadź nazwę zapisu wtyczki (np. my-plugin.js)",ru:"Введите имя для сохранения плагина (напр. my-plugin.js)",ar:"أدخل اسم حفظ الإضافة (مثال: my-plugin.js)",no:"Skriv inn plugin-lagringsnavn (f.eks. my-plugin.js)","pt-BR":"Insira o nome de salvamento do plugin (ex. my-plugin.js)",th:"ป้อนชื่อบันทึกปลั๊กอิน (เช่น my-plugin.js)",tr:"Eklenti kayıt adını girin (ör. my-plugin.js)",uk:"Введіть ім'я збереження плагіна (напр. my-plugin.js)"},"ui.plugins.cdnUrlRequired":{zh:"请输入 CDN 地址",en:"Please enter CDN URL","zh-TW":"請輸入 CDN 地址",ko:"CDN URL을 입력해 주세요",ja:"CDN URLを入力してください",de:"Bitte CDN-URL eingeben",es:"Por favor ingrese la URL de CDN",fr:"Veuillez entrer l'URL CDN",it:"Inserisci l'URL CDN",da:"Indtast venligst CDN URL",pl:"Proszę wprowadzić URL CDN",ru:"Пожалуйста, введите URL CDN",ar:"يرجى إدخال عنوان CDN",no:"Vennligst skriv inn CDN URL","pt-BR":"Por favor, insira a URL do CDN",th:"กรุณาป้อน URL ของ CDN",tr:"Lütfen CDN URL'sini girin",uk:"Будь ласка, введіть URL CDN"},"ui.plugins.cdnNameRequired":{zh:"请输入插件名称",en:"Please enter plugin name","zh-TW":"請輸入插件名稱",ko:"플러그인 이름을 입력해 주세요",ja:"プラグイン名を入力してください",de:"Bitte Plugin-Namen eingeben",es:"Por favor ingrese el nombre del plugin",fr:"Veuillez entrer le nom du plugin",it:"Inserisci il nome del plugin",da:"Indtast venligst plugin-navn",pl:"Proszę wprowadzić nazwę wtyczki",ru:"Пожалуйста, введите имя плагина",ar:"يرجى إدخال اسم الإضافة",no:"Vennligst skriv inn plugin-navn","pt-BR":"Por favor, insira o nome do plugin",th:"กรุณาป้อนชื่อปลั๊กอิน",tr:"Lütfen eklenti adını girin",uk:"Будь ласка, введіть назву плагіна"},"ui.plugins.cdnInvalidUrl":{zh:"请输入有效的 URL 地址",en:"Please enter a valid URL","zh-TW":"請輸入有效的 URL 地址",ko:"유효한 URL을 입력해 주세요",ja:"有効なURLを入力してください",de:"Bitte eine gültige URL eingeben",es:"Por favor ingrese una URL válida",fr:"Veuillez entrer une URL valide",it:"Inserisci un URL valido",da:"Indtast venligst en gyldig URL",pl:"Proszę wprowadzić prawidłowy URL",ru:"Пожалуйста, введите действительный URL",ar:"يرجى إدخال عنوان URL صالح",no:"Vennligst skriv inn en gyldig URL","pt-BR":"Por favor, insira uma URL válida",th:"กรุณาป้อน URL ที่ถูกต้อง",tr:"Lütfen geçerli bir URL girin",uk:"Будь ласка, введіть дійсну URL-адресу"},"ui.plugins.cdnInstallBtn":{zh:"安装",en:"Install","zh-TW":"安裝",ko:"설치",ja:"インストール",de:"Installieren",es:"Instalar",fr:"Installer",it:"Installa",da:"Installer",pl:"Zainstaluj",ru:"Установить",ar:"تثبيت",no:"Installer","pt-BR":"Instalar",th:"ติดตั้ง",tr:"Yükle",uk:"Встановити"},"ui.plugins.cdnInstallSuccess":{zh:"插件安装成功",en:"Plugin installed successfully","zh-TW":"插件安裝成功",ko:"플러그인이 성공적으로 설치되었습니다",ja:"プラグインのインストールに成功しました",de:"Plugin erfolgreich installiert",es:"Plugin instalado correctamente",fr:"Plugin installé avec succès",it:"Plugin installato con successo",da:"Plugin installeret succesfuldt",pl:"Wtyczka zainstalowana pomyślnie",ru:"Плагин успешно установлен",ar:"تم تثبيت الإضافة بنجاح",no:"Plugin installert vellykket","pt-BR":"Plugin instalado com sucesso",th:"ติดตั้งปลั๊กอินสำเร็จ",tr:"Eklenti başarıyla yüklendi",uk:"Плагін успішно встановлено"},"ui.plugins.cdnInstallFailed":{zh:"安装插件失败:{reason}",en:"Failed to install plugin: {reason}","zh-TW":"安裝插件失敗:{reason}",ko:"플러그인 설치 실패: {reason}",ja:"プラグインのインストールに失敗しました:{reason}",de:"Plugin-Installation fehlgeschlagen: {reason}",es:"Error al instalar el plugin: {reason}",fr:"Échec de l'installation du plugin : {reason}",it:"Installazione del plugin fallita: {reason}",da:"Plugin-installation mislykkedes: {reason}",pl:"Instalacja wtyczki nie powiodła się: {reason}",ru:"Не удалось установить плагин: {reason}",ar:"فشل تثبيت الإضافة: {reason}",no:"Plugin-installasjon mislyktes: {reason}","pt-BR":"Falha ao instalar o plugin: {reason}",th:"ติดตั้งปลั๊กอินล���มเหลว: {reason}",tr:"Eklenti yüklenemedi: {reason}",uk:"Не вдалося встановити плагін: {reason}"},"ui.plugins.cdnFetching":{zh:"正在下载插件...",en:"Downloading plugin...","zh-TW":"正在下載插件...",ko:"플러그인 다운로드 중...",ja:"プラグインをダウンロード中...",de:"Plugin wird heruntergeladen...",es:"Descargando plugin...",fr:"Téléchargement du plugin...",it:"Download del plugin in corso...",da:"Downloader plugin...",pl:"Pobieranie wtyczki...",ru:"Загрузка плагина...",ar:"جارٍ تنزيل الإضافة...",no:"Laster ned plugin...","pt-BR":"Baixando plugin...",th:"กำลังดาวน์โหลดปลั๊กอิน...",tr:"Eklenti indiriliyor...",uk:"Завантаження плагіна..."},"ui.tokenStats":{zh:"数据统计",en:"Data Stats","zh-TW":"數據統計",ko:"데이터 통계",ja:"データ統計",de:"Datenstatistik",es:"Estadísticas de datos",fr:"Statistiques de données",it:"Statistiche dati",da:"Datastatistik",pl:"Statystyki danych",ru:"Статистика данных",ar:"إحصائيات البيانات",no:"Datastatistikk","pt-BR":"Estatísticas de dados",th:"สถิติข้อมูล",tr:"Veri İstatistikleri",uk:"Статистика даних"},"ui.liveMonitoring":{zh:"当前项目",en:"Project","zh-TW":"當前專案",ko:"현재 프로젝트",ja:"現在のプロジェクト",de:"Projekt",es:"Proyecto",fr:"Projet",it:"Progetto",da:"Projekt",pl:"Projekt",ru:"Проект",ar:"المشروع",no:"Prosjekt","pt-BR":"Projeto",th:"โปรเจกต์",tr:"Proje",uk:"Проєкт"},"ui.loadingChat":{zh:"加载对话中",en:"Loading chat","zh-TW":"載入對話中",ko:"대화 로딩 중",ja:"チャット読み込み中",de:"Chat wird geladen",es:"Cargando chat",fr:"Chargement du chat",it:"Caricamento chat",da:"Indlæser chat",pl:"Ładowanie czatu",ru:"Загрузка чата",ar:"جارٍ تحميل المحادثة",no:"Laster chat","pt-BR":"Carregando chat",th:"กำลังโหลดแชท",tr:"Sohbet yükleniyor",uk:"Завантаження чату"},"ui.mobileChatBrowse":{zh:"对话浏览",en:"Chat Browse","zh-TW":"對話瀏覽",ko:"대화 찾아보기",ja:"チャット閲覧",de:"Chat durchsuchen",es:"Ver chat",fr:"Parcourir le chat",it:"Sfoglia chat",da:"Gennemse chat",pl:"Przeglądaj czat",ru:"Просмотр чата",ar:"تصفح المحادثة",no:"Bla gjennom chat","pt-BR":"Navegar chat",th:"ดูแชท",tr:"Sohbet Gözat",uk:"Перегляд чату"},"ui.mobileChatExit":{zh:"退出对话",en:"Exit Chat","zh-TW":"退出對話",ko:"채팅 종료",ja:"チャット終了",de:"Chat beenden",es:"Salir del chat",fr:"Quitter le chat",it:"Esci dalla chat",da:"Afslut chat",pl:"Zamknij czat",ru:"Выйти из чата",ar:"الخروج من المحادثة",no:"Avslutt chat","pt-BR":"Sair do chat",th:"ออกจากแชท",tr:"Sohbetten Çık",uk:"Вийти з чату"},"ui.mobileTerminalBrowse":{zh:"打开终端",en:"Terminal","zh-TW":"開啟終端",ko:"터미널 열기",ja:"ターミナルを開く",de:"Terminal öffnen",es:"Abrir terminal",fr:"Ouvrir le terminal",it:"Apri terminale",da:"Åbn terminal",pl:"Otwórz terminal",ru:"Открыть терминал",ar:"فتح الطرفية",no:"Åpne terminal","pt-BR":"Abrir terminal",th:"เปิดเทอร์มินัล",tr:"Terminal Aç",uk:"Відкрити термінал"},"ui.mobileTerminalExit":{zh:"退出终端",en:"Exit Terminal","zh-TW":"退出終端",ko:"터미널 종료",ja:"ターミナル終了",de:"Terminal beenden",es:"Salir del terminal",fr:"Quitter le terminal",it:"Esci dal terminale",da:"Afslut terminal",pl:"Zamknij terminal",ru:"Выйти из терминала",ar:"الخروج من الطرفية",no:"Avslutt terminal","pt-BR":"Sair do terminal",th:"ออกจากเทอร์มินัล",tr:"Terminalden Çık",uk:"Вийти з терміналу"},"ui.mobileGitDiffBrowse":{zh:"Git Diff",en:"Git Diff","zh-TW":"Git Diff",ko:"Git Diff",ja:"Git Diff",de:"Git Diff",es:"Git Diff",fr:"Git Diff",it:"Git Diff",da:"Git Diff",pl:"Git Diff",ru:"Git Diff",ar:"Git Diff",no:"Git Diff","pt-BR":"Git Diff",th:"Git Diff",tr:"Git Diff",uk:"Git Diff"},"ui.mobileGitDiffExit":{zh:"退出Diff",en:"Exit Diff","zh-TW":"退出Diff",ko:"Diff 종료",ja:"Diff終了",de:"Diff beenden",es:"Salir de Diff",fr:"Quitter Diff",it:"Esci da Diff",da:"Afslut Diff",pl:"Zamknij Diff",ru:"Выйти из Diff",ar:"الخروج من Diff",no:"Avslutt Diff","pt-BR":"Sair do Diff",th:"ออกจาก Diff",tr:"Diff'ten Çık",uk:"Вийти з Diff"},"ui.mobileGoBack":{zh:"回退",en:"Back","zh-TW":"返回",ko:"뒤로",ja:"戻る",de:"Zurück",es:"Volver",fr:"Retour",it:"Indietro",da:"Tilbage",pl:"Wstecz",ru:"Назад",ar:"رجوع",no:"Tilbake","pt-BR":"Voltar",th:"ย้อนกลับ",tr:"Geri",uk:"Назад"},"ui.mobileGitDiffHint":{zh:"选择文件查看变更",en:"Select a file to view changes","zh-TW":"選擇檔案查看變更",ko:"파일을 선택하여 변경사항 보기",ja:"ファイルを選択して変更を表示",de:"Datei auswählen, um Änderungen anzuzeigen",es:"Seleccione un archivo para ver los cambios",fr:"Sélectionnez un fichier pour voir les modifications",it:"Seleziona un file per visualizzare le modifiche",da:"Vælg en fil for at se ændringer",pl:"Wybierz plik, aby zobaczyć zmiany",ru:"Выберите файл для просмотра изменений",ar:"اختر ملفًا لعرض التغييرات",no:"Velg en fil for å se endringer","pt-BR":"Selecione um arquivo para ver as alterações",th:"เลือกไฟล์เพื่อดูการเปลี่ยนแปลง",tr:"Değişiklikleri görmek için bir dosya seçin",uk:"Виберіть файл для перегляду змін"},"ui.projectFolder":{zh:"项目文件夹",en:"Project Folder","zh-TW":"專案資料夾",ko:"프로젝트 폴더",ja:"プロジェクトフォルダ",de:"Projektordner",es:"Carpeta del proyecto",fr:"Dossier du projet",it:"Cartella progetto",da:"Projektmappe",pl:"Folder projektu",ru:"Папка проекта",ar:"مجلد المشروع",no:"Prosjektmappe","pt-BR":"Pasta do projeto",th:"โฟลเดอร์โปรเจกต์",tr:"Proje Klasörü",uk:"Папка проєкту"},"ui.mobileFileExplorerHint":{zh:"选择文件查看内容",en:"Select a file to view content","zh-TW":"選擇檔案查看內容",ko:"파일을 선택하여 내용 보기",ja:"ファイルを選択して内容を表示",de:"Datei auswählen, um Inhalt anzuzeigen",es:"Seleccione un archivo para ver el contenido",fr:"Sélectionnez un fichier pour voir le contenu",it:"Seleziona un file per visualizzare il contenuto",da:"Vælg en fil for at se indholdet",pl:"Wybierz plik, aby zobaczyć zawartość",ru:"Выберите файл для просмотра содержимого",ar:"اختر ملفًا لعرض المحتوى",no:"Velg en fil for å se innholdet","pt-BR":"Selecione um arquivo para ver o conteúdo",th:"เลือกไฟล์เพื่อดูเนื้อหา",tr:"İçeriği görmek için bir dosya seçin",uk:"Виберіть файл для перегляду вмісту"},"ui.modeSwitchTitle":{zh:"视图切换",en:"Switch View","zh-TW":"檢視切換",ko:"보기 전환",ja:"ビュー切替",de:"Ansicht wechseln",es:"Cambiar vista",fr:"Changer de vue",it:"Cambia vista",da:"Skift visning",pl:"Zmień widok",ru:"Переключить вид",ar:"تبديل العرض",no:"Bytt visning","pt-BR":"Trocar visualização",th:"สลับมุมมอง",tr:"Görünümü Değiştir",uk:"Змінити вигляд"},"ui.modeSwitchToSidebar":{zh:"当前窗口较窄,是否切换到侧边栏模式?",en:"Window is narrow. Switch to sidebar mode?","zh-TW":"目前視窗較窄,是否切換到側邊欄模式?",ko:"창이 좁습니다. 사이드바 모드로 전환할까요?",ja:"ウィンドウが狭いです。サイドバーモードに切り替えますか?",de:"Fenster ist schmal. In den Seitenleistenmodus wechseln?",es:"La ventana es estrecha. ¿Cambiar al modo barra lateral?",fr:"La fenêtre est étroite. Passer en mode barre latérale ?",it:"La finestra è stretta. Passare alla modalità barra laterale?",da:"Vinduet er smalt. Skift til sidebjælketilstand?",pl:"Okno jest wąskie. Przełączyć na tryb paska bocznego?",ru:"Окно слишком узкое. Переключить на режим боковой панели?",ar:"النافذة ضيقة. هل تريد التبديل إلى وضع الشريط الجانبي؟",no:"Vinduet er smalt. Bytt til sidefeltmodus?","pt-BR":"Janela estreita. Mudar para modo barra lateral?",th:"หน้าต่างแคบ สลับเป็นโหมดแถบข้าง?",tr:"Pencere dar. Kenar çubuğu moduna geçilsin mi?",uk:"Вікно вузьке. Перемкнути на режим бічної панелі?"},"ui.modeSwitchToFullView":{zh:"当前窗口较宽,是否切换到全览模式?",en:"Window is wide. Switch to full view mode?","zh-TW":"目前視窗較寬,是否切換到全覽模式?",ko:"창이 넓습니다. 전체 보기 모드로 전환할까요?",ja:"ウィンドウが広いです。フルビューモードに切り替えますか?",de:"Fenster ist breit. In den Vollansichtsmodus wechseln?",es:"La ventana es ancha. ¿Cambiar al modo vista completa?",fr:"La fenêtre est large. Passer en mode vue complète ?",it:"La finestra è larga. Passare alla modalità vista completa?",da:"Vinduet er bredt. Skift til fuld visningstilstand?",pl:"Okno jest szerokie. Przełączyć na tryb pełnego widoku?",ru:"Окно широкое. Переключить на полный режим просмотра?",ar:"النافذة واسعة. هل تريد التبديل إلى وضع العرض الكامل؟",no:"Vinduet er bredt. Bytt til fullvisningsmodus?","pt-BR":"Janela larga. Mudar para modo visualização completa?",th:"หน้าต่างกว้าง สลับเป็นโหมดเต็มจอ?",tr:"Pencere geniş. Tam görünüm moduna geçilsin mi?",uk:"Вікно широке. Перемкнути на повний режим перегляду?"},"ui.sendFailed":{zh:"发送失败,请重试",en:"Send failed, please try again","zh-TW":"傳送失敗,請重試",ko:"전송 실패, 다시 시도해주세요",ja:"送信に失敗しました。もう一度お試しください",de:"Senden fehlgeschlagen, bitte erneut versuchen",es:"Error al enviar, inténtelo de nuevo",fr:"Échec de l'envoi, veuillez réessayer",it:"Invio fallito, riprova",da:"Afsendelse mislykkedes, prøv igen",pl:"Wysyłanie nie powiodło się, spróbuj ponownie",ru:"Отправка не удалась, попробуйте снова",ar:"فشل الإرسال، يرجى المحاولة مرة أخرى",no:"Sending mislyktes, prøv igjen","pt-BR":"Falha ao enviar, tente novamente",th:"ส่งไม่สำเร็จ กรุณาลองอีกครั้ง",tr:"Gönderme başarısız, lütfen tekrar deneyin",uk:"Надсилання не вдалося, спробуйте ще раз"},"ui.mobileMenu":{zh:"菜单",en:"Menu","zh-TW":"選單",ko:"메뉴",ja:"メニュー",de:"Menü",es:"Menú",fr:"Menu",it:"Menu",da:"Menu",pl:"Menu",ru:"Меню",ar:"القائمة",no:"Meny","pt-BR":"Menu",th:"เมนู",tr:"Menü",uk:"Меню"},"ui.logManagement":{zh:"日志管理",en:"Log Management","zh-TW":"日誌管理",ko:"로그 관리",ja:"ログ管理",de:"Protokollverwaltung",es:"Gestión de registros",fr:"Gestion des journaux",it:"Gestione log",da:"Logstyring",pl:"Zarządzanie logami",ru:"Управление журналами",ar:"إدارة السجلات",no:"Logghåndtering","pt-BR":"Gerenciamento de logs",th:"จัดการบันทึก",tr:"Günlük Yönetimi",uk:"Керування журналами"},"ui.inflightRequests":{zh:"在途请求",en:"Inflight Requests","zh-TW":"在途請求",ko:"진행 중인 요청",ja:"処理中のリクエスト",de:"Laufende Anfragen",es:"Solicitudes en curso",fr:"Requêtes en cours",it:"Richieste in corso",da:"Igangværende forespørgsler",pl:"Trwające żądania",ru:"Текущие запросы",ar:"الطلبات الجارية",no:"Pågående forespørsler","pt-BR":"Requisições em andamento",th:"คำขอที่กำลังดำเนินการ",tr:"Devam Eden İstekler",uk:"Поточні запити"},"ui.noInflightRequests":{zh:"暂无在途请求",en:"No inflight requests","zh-TW":"暫無在途請求",ko:"진행 중인 요청 없음",ja:"処理中のリクエストなし",de:"Keine laufenden Anfragen",es:"Sin solicitudes en curso",fr:"Aucune requête en cours",it:"Nessuna richiesta in corso",da:"Ingen igangværende forespørgsler",pl:"Brak trwających żądań",ru:"Нет текущих запросов",ar:"لا توجد طلبات جارية",no:"Ingen pågående forespørsler","pt-BR":"Nenhuma requisição em andamento",th:"ไม่มีคำขอที่กำลังดำเนินการ",tr:"Devam eden istek yok",uk:"Немає поточних запитів"},"ui.historyLog":{zh:"历史日志: {file}",en:"History: {file}","zh-TW":"歷史日誌: {file}",ko:"기록: {file}",ja:"履歴: {file}",de:"Verlauf: {file}",es:"Historial: {file}",fr:"Historique : {file}",it:"Cronologia: {file}",da:"Historik: {file}",pl:"Historia: {file}",ru:"История: {file}",ar:"السجل: {file}",no:"Historikk: {file}","pt-BR":"Histórico: {file}",th:"ประวัติ: {file}",tr:"Geçmiş: {file}",uk:"Історія: {file}"},"ui.chatMode":{zh:"对话模式",en:"Chat mode","zh-TW":"對話模式",ko:"대화 모드",ja:"チャットモード",de:"Chat-Modus",es:"Modo chat",fr:"Mode conversation",it:"Modalità chat",da:"Chat-tilstand",pl:"Tryb czatu",ru:"Режим чата",ar:"وضع المحادثة",no:"Chat-modus","pt-BR":"Modo chat",th:"โหมดแชท",tr:"Sohbet modu",uk:"Режим чату"},"ui.rawMode":{zh:"网络报文",en:"Network Packets","zh-TW":"網路封包",ko:"네트워크 패킷",ja:"ネットワークパケット",de:"Netzwerkpakete",es:"Paquetes de red",fr:"Paquets réseau",it:"Pacchetti di rete",da:"Netværkspakker",pl:"Pakiety sieciowe",ru:"Сетевые пакеты",ar:"حزم الشبكة",no:"Nettverkspakker","pt-BR":"Pacotes de rede",th:"แพ็กเก็ตเครือข่าย",tr:"Ağ paketleri",uk:"Мережеві пакети"},"ui.viewRequest":{zh:"查看请求",en:"View Request","zh-TW":"查看請求",ko:"요청 보기",ja:"リクエストを表示",de:"Anfrage anzeigen",es:"Ver solicitud",fr:"Voir la requête",it:"Visualizza richiesta",da:"Vis forespørgsel",pl:"Zobacz żądanie",ru:"Просмотр запроса",ar:"عرض الطلب",no:"Vis forespørsel","pt-BR":"Ver requisição",th:"ดูคำขอ",tr:"İsteği görüntüle",uk:"Переглянути запит"},"ui.cannotMap":{zh:"无法映射到对话",en:"Cannot map to conversation","zh-TW":"無法映射到對話",ko:"대화에 매핑할 수 없습니다",ja:"会話にマッピングできません",de:"Kann nicht zur Konversation zugeordnet werden",es:"No se puede mapear a la conversación",fr:"Impossible de mapper à la conversation",it:"Impossibile mappare alla conversazione",da:"Kan ikke mappe til samtale",pl:"Nie można zmapować do rozmowy",ru:"Невозможно сопоставить с диалогом",ar:"لا يمكن الربط بالمحادثة",no:"Kan ikke tilordne til samtale","pt-BR":"Não é possível mapear para a conversa",th:"ไม่สามารถแมปไปยังการสนทนาได้",tr:"Konuşmaya eşlenemedi",uk:"Неможливо зіставити з діалогом"},"ui.cacheExpired":{zh:"已失效",en:"Expired","zh-TW":"已失效",ko:"만료됨",ja:"期限切れ",de:"Abgelaufen",es:"Expirado",fr:"Expiré",it:"Scaduto",da:"Udløbet",pl:"Wygasło",ru:"Истёк",ar:"منتهي الصلاحية",no:"Utløpt","pt-BR":"Expirado",th:"หมดอายุ",tr:"Süresi doldu",uk:"Закінчився"},"ui.cacheCountdown":{zh:"MainAgent 缓存{type}失效倒计时:",en:"MainAgent cache{type} expires in: ","zh-TW":"MainAgent 快取{type}失效倒數:",ko:"MainAgent cache{type} 만료 카운트다운: ",ja:"MainAgent cache{type} 期限切れまで: ",de:"MainAgent Cache{type} läuft ab in: ",es:"Cache{type} de MainAgent expira en: ",fr:"Cache{type} MainAgent expire dans : ",it:"Cache{type} MainAgent scade tra: ",da:"MainAgent cache{type} udløber om: ",pl:"Cache{type} MainAgent wygasa za: ",ru:"Cache{type} MainAgent истекает через: ",ar:"ينتهي cache{type} لـ MainAgent خلال: ",no:"MainAgent cache{type} utløper om: ","pt-BR":"Cache{type} do MainAgent expira em: ",th:"Cache{type} ของ MainAgent หมดอายุใน: ",tr:"MainAgent cache{type} süresi doluyor: ",uk:"Cache{type} MainAgent закінчується через: "},"ui.minuteSecond":{zh:"{m}分{s}秒",en:"{m}m{s}s","zh-TW":"{m}分{s}秒",ko:"{m}분{s}초",ja:"{m}分{s}秒",de:"{m}m{s}s",es:"{m}m{s}s",fr:"{m}m{s}s",it:"{m}m{s}s",da:"{m}m{s}s",pl:"{m}m{s}s",ru:"{m}м{s}с",ar:"{m}د{s}ث",no:"{m}m{s}s","pt-BR":"{m}m{s}s",th:"{m}นาที{s}วินาที",tr:"{m}dk{s}sn",uk:"{m}хв{s}с"},"ui.second":{zh:"{s}秒",en:"{s}s","zh-TW":"{s}秒",ko:"{s}초",ja:"{s}秒",de:"{s}s",es:"{s}s",fr:"{s}s",it:"{s}s",da:"{s}s",pl:"{s}s",ru:"{s}с",ar:"{s}ث",no:"{s}s","pt-BR":"{s}s",th:"{s}วินาที",tr:"{s}sn",uk:"{s}с"},"ui.hitRate":{zh:"命中率",en:"Hit rate","zh-TW":"命中率",ko:"적중률",ja:"ヒット率",de:"Trefferquote",es:"Tasa de aciertos",fr:"Taux de succès",it:"Tasso di successo",da:"Hitrate",pl:"Współczynnik trafień",ru:"Процент попаданий",ar:"معدل الإصابة",no:"Treffrate","pt-BR":"Taxa de acerto",th:"อัตราการเข้าถึง",tr:"İsabet oranı",uk:"Відсоток влучень"},"ui.userPrompt":{zh:"用户 Prompt",en:"User Prompt","zh-TW":"用戶 Prompt",ko:"사용자 Prompt",ja:"ユーザー Prompt",de:"Benutzer-Prompt",es:"Prompt de usuario",fr:"Prompt utilisateur",it:"Prompt utente",da:"Bruger-Prompt",pl:"Prompt użytkownika",ru:"Prompt пользователя",ar:"Prompt المستخدم",no:"Bruker-Prompt","pt-BR":"Prompt do usuário",th:"Prompt ผู้ใช้",tr:"Kullanıcı Prompt",uk:"Prompt користувача"},"ui.noPrompt":{zh:"暂无用户 Prompt",en:"No user prompts yet","zh-TW":"暫無用戶 Prompt",ko:"사용자 Prompt 없음",ja:"ユーザー Prompt はまだありません",de:"Noch keine Benutzer-Prompts",es:"Sin prompts de usuario aún",fr:"Aucun prompt utilisateur",it:"Nessun prompt utente",da:"Ingen bruger-prompts endnu",pl:"Brak promptów użytkownika",ru:"Нет пользовательских Prompt",ar:"لا توجد Prompt للمستخدم بعد",no:"Ingen bruker-prompts ennå","pt-BR":"Nenhum prompt de usuário ainda",th:"ยังไม่มี Prompt ผู้ใช้",tr:"Henüz kullanıcı Prompt'u yok",uk:"Немає Prompt користувача"},"ui.promptCountUnit":{zh:"条",en:"","zh-TW":"條",ko:"개",ja:"件",de:"",es:"",fr:"",it:"",da:"",pl:"",ru:"",ar:"",no:"","pt-BR":"",th:"",tr:"",uk:""},"ui.promptModeOriginal":{zh:"原文模式",en:"Original"},"ui.promptModeContext":{zh:"上下文模式",en:"Context"},"ui.promptModeText":{zh:"Text模式",en:"Text"},"ui.unknownTime":{zh:"未知时间",en:"Unknown time","zh-TW":"未知時間",ko:"알 수 없는 시간",ja:"不明な時刻",de:"Unbekannte Zeit",es:"Hora desconocida",fr:"Heure inconnue",it:"Ora sconosciuta",da:"Ukendt tid",pl:"Nieznany czas",ru:"Неизвестное время",ar:"وقت غير معروف",no:"Ukjent tid","pt-BR":"Hora desconhecida",th:"เวลาไม่ทราบ",tr:"Bilinmeyen zaman",uk:"Невідомий час"},"ui.noLogs":{zh:"暂无日志文件",en:"No log files","zh-TW":"暫無日誌檔案",ko:"로그 파일 없음",ja:"ログファイルなし",de:"Keine Log-Dateien",es:"Sin archivos de log",fr:"Aucun fichier de log",it:"Nessun file di log",da:"Ingen logfiler",pl:"Brak plików logów",ru:"Нет файлов логов",ar:"لا توجد ملفات سجلات",no:"Ingen loggfiler","pt-BR":"Nenhum arquivo de log",th:"ไม่มีไฟล์บันทึก",tr:"Log dosyası yok",uk:"Немає файлів логів"},"ui.toolReturn":{zh:"工具返回",en:"Tool result","zh-TW":"工具返回",ko:"도구 결과",ja:"ツール結果",de:"Tool-Ergebnis",es:"Resultado de herramienta",fr:"Résultat d'outil",it:"Risultato strumento",da:"Værktøjsresultat",pl:"Wynik narzędzia",ru:"Результат инструмента",ar:"نتيجة الأداة",no:"Verktøyresultat","pt-BR":"Resultado da ferramenta",th:"ผลลัพธ์เครื่องมือ",tr:"Araç sonucu",uk:"Результат інструменту"},"ui.toolReturnNamed":{zh:"{name} 返回",en:"{name} result","zh-TW":"{name} 返回",ko:"{name} 결과",ja:"{name} 結果",de:"{name}-Ergebnis",es:"Resultado de {name}",fr:"Résultat de {name}",it:"Risultato di {name}",da:"{name}-resultat",pl:"Wynik {name}",ru:"Результат {name}",ar:"نتيجة {name}",no:"{name}-resultat","pt-BR":"Resultado de {name}",th:"ผลลัพธ์ {name}",tr:"{name} sonucu",uk:"Результат {name}"},"ui.lastResponse":{zh:"Last Response",en:"Last Response","zh-TW":"Last Response",ko:"Last Response",ja:"Last Response",de:"Last Response",es:"Last Response",fr:"Last Response",it:"Last Response",da:"Last Response",pl:"Last Response",ru:"Last Response",ar:"Last Response",no:"Last Response","pt-BR":"Last Response",th:"Last Response",tr:"Last Response",uk:"Last Response"},"ui.copySuccess":{zh:"复制成功",en:"Copied","zh-TW":"複製成功",ko:"복사됨",ja:"コピーしました",de:"Kopiert",es:"Copiado",fr:"Copié",it:"Copiato",da:"Kopieret",pl:"Skopiowano",ru:"Скопировано",ar:"تم النسخ",no:"Kopiert","pt-BR":"Copiado",th:"คัดลอกแล้ว",tr:"Kopyalandı",uk:"Скопійовано"},"ui.copy":{zh:"复制",en:"Copy","zh-TW":"複製",ko:"복사",ja:"コピー",de:"Kopieren",es:"Copiar",fr:"Copier",it:"Copia",da:"Kopiér",pl:"Kopiuj",ru:"Копировать",ar:"نسخ",no:"Kopier","pt-BR":"Copiar",th:"คัดลอก",tr:"Kopyala",uk:"Копіювати"},"ui.saveAs":{zh:"另存为",en:"Save As","zh-TW":"另存為",ko:"다른 이름으로 저장",ja:"名前を付けて保存",de:"Speichern unter",es:"Guardar como",fr:"Enregistrer sous",it:"Salva con nome",da:"Gem som",pl:"Zapisz jako",ru:"Сохранить как",ar:"حفظ باسم",no:"Lagre som","pt-BR":"Salvar como",th:"บันทึกเป็น",tr:"Farklı Kaydet",uk:"Зберегти як"},"ui.saveAsMd":{zh:"Markdown 文件",en:"Markdown File","zh-TW":"Markdown 檔案",ko:"Markdown 파일",ja:"Markdown ファイル",de:"Markdown-Datei",es:"Archivo Markdown",fr:"Fichier Markdown",it:"File Markdown",da:"Markdown-fil",pl:"Plik Markdown",ru:"Файл Markdown",ar:"ملف Markdown",no:"Markdown-fil","pt-BR":"Arquivo Markdown",th:"ไฟล์ Markdown",tr:"Markdown Dosyası",uk:"Файл Markdown"},"ui.copyTextContent":{zh:"复制文本内容",en:"Copy Text Content","zh-TW":"複製文字內容",ko:"텍스트 내용 복사",ja:"テキスト内容をコピー",de:"Textinhalt kopieren",es:"Copiar contenido de texto",fr:"Copier le contenu texte",it:"Copia contenuto testo",da:"Kopiér tekstindhold",pl:"Kopiuj treść tekstową",ru:"Копировать текст",ar:"نسخ محتوى النص",no:"Kopier tekstinnhold","pt-BR":"Copiar conteúdo de texto",th:"คัดลอกเนื้อหาข้อความ",tr:"Metin içeriğini kopyala",uk:"Копіювати текстовий вміст"},"ui.saveToProject":{zh:"保存到项目",en:"Save to Project","zh-TW":"儲存到專案",ko:"프로젝트에 저장",ja:"プロジェクトに保存",de:"Im Projekt speichern",es:"Guardar en proyecto",fr:"Enregistrer dans le projet",it:"Salva nel progetto",da:"Gem i projekt",pl:"Zapisz w projekcie",ru:"Сохранить в проект",ar:"حفظ في المشروع",no:"Lagre i prosjekt","pt-BR":"Salvar no projeto",th:"บันทึกลงโปรเจกต์",tr:"Projeye Kaydet",uk:"Зберегти в проект"},"ui.saveToProject.prompt":{zh:"输入文件名(保存到项目根目录):",en:"Enter filename (save to project root):","zh-TW":"輸入檔名(儲存到專案根目錄):",ko:"파일 이름 입력 (프로젝트 루트에 저장):",ja:"ファイル名を入力(プロジェクトルートに保存):",de:"Dateiname eingeben (im Projektstamm speichern):",es:"Ingrese nombre de archivo (guardar en raíz del proyecto):",fr:"Entrez le nom du fichier (enregistrer à la racine du projet) :",it:"Inserisci nome file (salva nella root del progetto):",da:"Indtast filnavn (gem i projektrod):",pl:"Wpisz nazwę pliku (zapisz w katalogu głównym projektu):",ru:"Введите имя файла (сохранить в корне проекта):",ar:"أدخل اسم الملف (حفظ في جذر المشروع):",no:"Skriv inn filnavn (lagre i prosjektrot):","pt-BR":"Digite o nome do arquivo (salvar na raiz do projeto):",th:"กรอกชื่อไฟล์ (บันทึกที่รากโปรเจกต์):",tr:"Dosya adı girin (proje kök dizinine kaydet):",uk:"Введіть ім'я файлу (зберегти в корені проекту):"},"ui.saveToProject.success":{zh:"已保存: {{name}}",en:"Saved: {{name}}","zh-TW":"已儲存: {{name}}",ko:"저장됨: {{name}}",ja:"保存しました: {{name}}",de:"Gespeichert: {{name}}",es:"Guardado: {{name}}",fr:"Enregistré : {{name}}",it:"Salvato: {{name}}",da:"Gemt: {{name}}",pl:"Zapisano: {{name}}",ru:"Сохранено: {{name}}",ar:"تم الحفظ: {{name}}",no:"Lagret: {{name}}","pt-BR":"Salvo: {{name}}",th:"บันทึกแล้ว: {{name}}",tr:"Kaydedildi: {{name}}",uk:"Збережено: {{name}}"},"ui.saveAsImage":{zh:"保存为图片",en:"Save as Image","zh-TW":"儲存為圖片",ko:"이미지로 저장",ja:"画像として保存",de:"Als Bild speichern",es:"Guardar como imagen",fr:"Enregistrer comme image",it:"Salva come immagine",da:"Gem som billede",pl:"Zapisz jako obraz",ru:"Сохранить как изображение",ar:"حفظ كصورة",no:"Lagre som bilde","pt-BR":"Salvar como imagem",th:"บันทึกเป็นรูปภาพ",tr:"Resim olarak kaydet",uk:"Зберегти як зображення"},"ui.saveAsImageHintMd":{zh:"请先切换到 Markdown 预览模式",en:"Switch to Markdown preview first","zh-TW":"請先切換至 Markdown 預覽模式",ko:"먼저 Markdown 미리보기로 전환하세요",ja:"先に Markdown プレビューに切り替えてください",de:"Zuerst zur Markdown-Vorschau wechseln",es:"Primero cambia a la vista previa de Markdown",fr:"Passez d'abord à l'aperçu Markdown",it:"Passa prima all'anteprima Markdown",da:"Skift først til Markdown-forhåndsvisning",pl:"Najpierw przełącz na podgląd Markdown",ru:"Сначала переключитесь на предпросмотр Markdown",ar:"قم بالتبديل إلى معاينة Markdown أولاً",no:"Bytt til Markdown-forhåndsvisning først","pt-BR":"Mude para a prévia Markdown primeiro",th:"สลับไปที่ตัวอย่าง Markdown ก่อน",tr:"Önce Markdown önizlemesine geçin",uk:"Спершу перейдіть у попередній перегляд Markdown"},"ui.saveFailed":{zh:"保存失败",en:"Save failed","zh-TW":"儲存失敗",ko:"저장 실패",ja:"保存に失敗しました",de:"Speichern fehlgeschlagen",es:"Error al guardar",fr:"Échec de l'enregistrement",it:"Salvataggio non riuscito",da:"Gem mislykket",pl:"Zapisywanie nie powiodło się",ru:"Ошибка сохранения",ar:"فشل الحفظ",no:"Lagring mislyktes","pt-BR":"Falha ao salvar",th:"บันทึกไม่สำเร็จ",tr:"Kaydedilemedi",uk:"Помилка збереження"},"ui.contextMenu.revealInExplorer":{zh:"在系统中展示",en:"Reveal in Explorer","zh-TW":"在系統中顯示",ko:"탐색기에서 표시",ja:"エクスプローラーで表示",de:"Im Explorer anzeigen",es:"Mostrar en explorador",fr:"Afficher dans l'explorateur",it:"Mostra nel Finder",da:"Vis i Finder",pl:"Pokaż w eksploratorze",ru:"Показать в проводнике",ar:"عرض في المستكشف",no:"Vis i Finder","pt-BR":"Mostrar no explorador",th:"แสดงในตัวจัดการไฟล์",tr:"Dosya yöneticisinde göster",uk:"Показати у провіднику"},"ui.contextMenu.copyPath":{zh:"复制路径",en:"Copy Path","zh-TW":"複製路徑",ko:"경로 복사",ja:"パスをコピー",de:"Pfad kopieren",es:"Copiar ruta",fr:"Copier le chemin",it:"Copia percorso",da:"Kopiér sti",pl:"Kopiuj ścieżkę",ru:"Копировать путь",ar:"نسخ المسار",no:"Kopier sti","pt-BR":"Copiar caminho",th:"คัดลอกเส้นทาง",tr:"Yolu kopyala",uk:"Копіювати шлях"},"ui.contextMenu.copyRelativePath":{zh:"复制相对路径",en:"Copy Relative Path","zh-TW":"複製相對路徑",ko:"상대 경로 복사",ja:"相対パスをコピー",de:"Relativen Pfad kopieren",es:"Copiar ruta relativa",fr:"Copier le chemin relatif",it:"Copia percorso relativo",da:"Kopiér relativ sti",pl:"Kopiuj ścieżkę względną",ru:"Копировать относительный путь",ar:"نسخ المسار النسبي",no:"Kopier relativ sti","pt-BR":"Copiar caminho relativo",th:"คัดลอกเส้นทางสัมพัทธ์",tr:"Göreli yolu kopyala",uk:"Копіювати відносний шлях"},"ui.contextMenu.rename":{zh:"重命名",en:"Rename","zh-TW":"重新命名",ko:"이름 바꾸기",ja:"名前を変更",de:"Umbenennen",es:"Renombrar",fr:"Renommer",it:"Rinomina",da:"Omdøb",pl:"Zmień nazwę",ru:"Переименовать",ar:"إعادة تسمية",no:"Gi nytt navn","pt-BR":"Renomear",th:"เปลี่ยนชื่อ",tr:"Yeniden adlandır",uk:"Перейменувати"},"ui.contextMenu.attachToChat":{zh:"以附件形式载入对话",en:"Attach to chat","zh-TW":"以附件形式載入對話",ko:"대화에 첨부",ja:"チャットに添付",de:"An Chat anhängen",es:"Adjuntar al chat",fr:"Joindre au chat",it:"Allega alla chat",da:"Vedhæft til chat",pl:"Dołącz do czatu",ru:"Прикрепить к чату",ar:"إرفاق بالمحادثة",no:"Legg ved i chat","pt-BR":"Anexar ao chat",th:"แนบไปยังแชท",tr:"Sohbete ekle",uk:"Прикріпити до чату"},"ui.contextMenu.insertPathToChat":{zh:"以路径形式载入对话",en:"Insert path to chat","zh-TW":"以路徑形式載入對話",ko:"경로를 대화에 삽입",ja:"パスをチャットに挿入",de:"Pfad in Chat einfügen",es:"Insertar ruta en el chat",fr:"Insérer le chemin dans le chat",it:"Inserisci percorso nella chat",da:"Indsæt sti i chat",pl:"Wstaw ścieżkę do czatu",ru:"Вставить путь в чат",ar:"إدراج المسار في المحادثة",no:"Sett inn bane i chat","pt-BR":"Inserir caminho no chat",th:"แทรกเส้นทางไปยังแชท",tr:"Yolu sohbete ekle",uk:"Вставити шлях у чат"},"ui.contextMenu.delete":{zh:"删除",en:"Delete","zh-TW":"刪除",ko:"삭제",ja:"削除",de:"Löschen",es:"Eliminar",fr:"Supprimer",it:"Elimina",da:"Slet",pl:"Usuń",ru:"Удалить",ar:"حذف",no:"Slett","pt-BR":"Excluir",th:"ลบ",tr:"Sil",uk:"Видалити"},"ui.contextMenu.deleteConfirm":{zh:"确定要删除 {name} 吗?",en:"Are you sure you want to delete {name}?","zh-TW":"確定要刪除 {name} 嗎?",ko:"{name}을(를) 삭제하시겠습니까?",ja:"{name} を削除しますか?",de:"Möchten Sie {name} wirklich löschen?",es:"¿Está seguro de que desea eliminar {name}?",fr:"Voulez-vous vraiment supprimer {name} ?",it:"Sei sicuro di voler eliminare {name}?",da:"Er du sikker på, at du vil slette {name}?",pl:"Czy na pewno chcesz usunąć {name}?",ru:"Вы уверены, что хотите удалить {name}?",ar:"هل أنت متأكد من حذف {name}؟",no:"Er du sikker på at du vil slette {name}?","pt-BR":"Tem certeza de que deseja excluir {name}?",th:"คุณแน่ใจหรือว่าต้องการลบ {name}?",tr:"{name} silinsin mi?",uk:"Ви впевнені, що хочете видалити {name}?"},"ui.contextMenu.newFile":{zh:"新建文件",en:"New File","zh-TW":"新建檔案",ko:"새 파일",ja:"新規ファイル",de:"Neue Datei",es:"Nuevo archivo",fr:"Nouveau fichier",it:"Nuovo file",da:"Ny fil",pl:"Nowy plik",ru:"Новый файл",ar:"ملف جديد",no:"Ny fil","pt-BR":"Novo arquivo",th:"ไฟล์ใหม่",tr:"Yeni dosya",uk:"Новий файл"},"ui.contextMenu.newDir":{zh:"新建文件夹",en:"New Folder","zh-TW":"新建資料夾",ko:"새 폴더",ja:"新規フォルダ",de:"Neuer Ordner",es:"Nueva carpeta",fr:"Nouveau dossier",it:"Nuova cartella",da:"Ny mappe",pl:"Nowy folder",ru:"Новая папка",ar:"مجلد جديد",no:"Ny mappe","pt-BR":"Nova pasta",th:"โฟลเดอร์ใหม่",tr:"Yeni klasör",uk:"Нова папка"},"ui.contextMenu.openTerminal":{zh:"在终端中打开",en:"Open in Terminal","zh-TW":"在終端機中開啟",ko:"터미널에서 열기",ja:"ターミナルで開く",de:"Im Terminal öffnen",es:"Abrir en terminal",fr:"Ouvrir dans le terminal",it:"Apri nel terminale",da:"Åbn i terminal",pl:"Otwórz w terminalu",ru:"Открыть в терминале",ar:"فتح في الطرفية",no:"Åpne i terminal","pt-BR":"Abrir no terminal",th:"เปิดในเทอร์มินัล",tr:"Terminalde aç",uk:"Відкрити в терміналі"},"ui.contextMenu.deleteDirConfirm":{zh:"确定要删除文件夹 {name} 及其所有内容吗?",en:"Delete folder {name} and all its contents?","zh-TW":"確定要刪除資料夾 {name} 及其所有內容嗎?",ko:"폴더 {name}과(와) 모든 내용을 삭제하시겠습니까?",ja:"フォルダ {name} とその中身をすべて削除しますか?",de:"Ordner {name} und gesamten Inhalt löschen?",es:"¿Eliminar la carpeta {name} y todo su contenido?",fr:"Supprimer le dossier {name} et tout son contenu ?",it:"Eliminare la cartella {name} e tutto il suo contenuto?",da:"Slet mappen {name} og alt indhold?",pl:"Usunąć folder {name} i całą jego zawartość?",ru:"Удалить папку {name} и всё её содержимое?",ar:"حذف المجلد {name} وجميع محتوياته؟",no:"Slette mappen {name} og alt innhold?","pt-BR":"Excluir a pasta {name} e todo o seu conteúdo?",th:"ลบโฟลเดอร์ {name} และเนื้อหาทั้งหมด?",tr:"{name} klasörü ve tüm içeriği silinsin mi?",uk:"Видалити папку {name} та весь її вміст?"},"ui.noHeaders":{zh:"无 Headers",en:"No Headers","zh-TW":"無 Headers",ko:"Headers 없음",ja:"Headers なし",de:"Keine Headers",es:"Sin Headers",fr:"Pas de Headers",it:"Nessun Header",da:"Ingen Headers",pl:"Brak Headers",ru:"Нет Headers",ar:"لا يوجد Headers",no:"Ingen Headers","pt-BR":"Sem Headers",th:"ไม่มี Headers",tr:"Header yok",uk:"Немає Headers"},"ui.noBody":{zh:"无 Body",en:"No Body","zh-TW":"無 Body",ko:"Body 없음",ja:"Body なし",de:"Kein Body",es:"Sin Body",fr:"Pas de Body",it:"Nessun Body",da:"Ingen Body",pl:"Brak Body",ru:"Нет Body",ar:"لا يوجد Body",no:"Ingen Body","pt-BR":"Sem Body",th:"ไม่มี Body",tr:"Body yok",uk:"Немає Body"},"ui.streamingResponse":{zh:"⚡ 流式响应 — 此请求使用了 SSE 流式传输,响应内容无法完整捕获。",en:"⚡ Streaming response — This request used SSE streaming, response content cannot be fully captured.","zh-TW":"⚡ 串流回應 — 此請求使用了 SSE 串流傳輸,回應內容無法完整擷取。",ko:"⚡ 스트리밍 응답 — 이 요청은 SSE 스트리밍을 사용하여 응답 내용을 완전히 캡처할 수 없습니다.",ja:"⚡ ストリーミングレスポンス — このリクエストは SSE ストリーミングを使用しており、レスポンス内容を完全にキャプチャできませんでした。",de:"⚡ Streaming-Antwort — Diese Anfrage nutzte SSE-Streaming, der Antwortinhalt konnte nicht vollständig erfasst werden.",es:"⚡ Respuesta en streaming — Esta solicitud usó streaming SSE, el contenido de la respuesta no se pudo capturar completamente.",fr:"⚡ Réponse en streaming — Cette requête a utilisé le streaming SSE, le contenu de la réponse n'a pas pu être entièrement capturé.",it:"⚡ Risposta in streaming — Questa richiesta ha utilizzato lo streaming SSE, il contenuto della risposta non può essere catturato completamente.",da:"⚡ Streaming-svar — Denne forespørgsel brugte SSE-streaming, svarindholdet kunne ikke fuldt indfanges.",pl:"⚡ Odpowiedź strumieniowa — To żądanie użyło strumieniowania SSE, treść odpowiedzi nie mogła zostać w pełni przechwycona.",ru:"⚡ Потоковый ответ — Этот запрос использовал SSE-потоковую передачу, содержимое ответа не может быть полностью захвачено.",ar:"⚡ استجابة متدفقة — استخدم هذا الطلب بث SSE، لا يمكن التقاط محتوى الاستجابة بالكامل.",no:"⚡ Strømmesvar — Denne forespørselen brukte SSE-strømming, svarinnholdet kunne ikke fanges fullstendig.","pt-BR":"⚡ Resposta em streaming — Esta requisição usou streaming SSE, o conteúdo da resposta não pôde ser totalmente capturado.",th:"⚡ การตอบกลับแบบสตรีม — คำขอนี้ใช้ SSE streaming เนื้อหาการตอบกลับไม่สามารถจับได้ทั้งหมด",tr:"⚡ Akış yanıtı — Bu istek SSE akışı kullandı, yanıt içeriği tam olarak yakalanamadı.",uk:"⚡ Потокова відповідь — Цей запит використовував SSE-потокову передачу, вміст відповіді не може бути повністю захоплений."},"ui.responseNotCaptured":{zh:"响应数据未捕获",en:"Response not captured","zh-TW":"回應資料未擷取",ko:"응답 데이터 미캡처",ja:"レスポンスデータ未キャプチャ",de:"Antwortdaten nicht erfasst",es:"Datos de respuesta no capturados",fr:"Données de réponse non capturées",it:"Dati di risposta non catturati",da:"Svardata ikke indfanget",pl:"Dane odpowiedzi nie przechwycone",ru:"Данные ответа не захвачены",ar:"لم يتم التقاط بيانات الاستجابة",no:"Svardata ikke fanget","pt-BR":"Dados de resposta não capturados",th:"ไม่ได้จับข้อมูลการตอบกลับ",tr:"Yanıt verileri yakalanamadı",uk:"Дані відповіді не захоплені"},"ui.expand":{zh:"▶ 展开",en:"▶ Expand","zh-TW":"▶ 展開",ko:"▶ 펼치기",ja:"▶ 展開",de:"▶ Aufklappen",es:"▶ Expandir",fr:"▶ Déplier",it:"▶ Espandi",da:"▶ Udvid",pl:"▶ Rozwiń",ru:"▶ Развернуть",ar:"▶ توسيع",no:"▶ Utvid","pt-BR":"▶ Expandir",th:"▶ ขยาย",tr:"▶ Genişlet",uk:"▶ Розгорнути"},"ui.collapse":{zh:"▼ 收起",en:"▼ Collapse","zh-TW":"▼ 收起",ko:"▼ 접기",ja:"▼ 折りたたむ",de:"▼ Zuklappen",es:"▼ Contraer",fr:"▼ Replier",it:"▼ Comprimi",da:"▼ Fold sammen",pl:"▼ Zwiń",ru:"▼ Свернуть",ar:"▼ طي",no:"▼ Skjul","pt-BR":"▼ Recolher",th:"▼ ย่อ",tr:"▼ Daralt",uk:"▼ Згорнути"},"ui.noChat":{zh:"暂无 MainAgent 对话数据",en:"No MainAgent conversation data","zh-TW":"暫無 MainAgent 對話資料",ko:"MainAgent 대화 데이터 없음",ja:"MainAgent の会話データがありません",de:"Keine MainAgent-Gesprächsdaten",es:"Sin datos de conversación de MainAgent",fr:"Aucune donnée de conversation MainAgent",it:"Nessun dato di conversazione MainAgent",da:"Ingen MainAgent samtaledata",pl:"Brak danych rozmowy MainAgent",ru:"Нет данных диалога MainAgent",ar:"لا توجد بيانات محادثة MainAgent",no:"Ingen MainAgent samtaledata","pt-BR":"Sem dados de conversa do MainAgent",th:"ไม่มีข้อมูลการสนทนา MainAgent",tr:"MainAgent konuşma verisi yok",uk:"Немає даних діалогу MainAgent"},"ui.fileExplorer":{zh:"文件浏览器",en:"File Explorer","zh-TW":"檔案瀏覽器",ko:"파일 탐색기",ja:"ファイルエクスプローラー",de:"Datei-Explorer",es:"Explorador de archivos",fr:"Explorateur de fichiers",it:"Esplora file",da:"Filstifinder",pl:"Eksplorator plików",ru:"Проводник",ar:"مستكشف الملفات",no:"Filutforsker","pt-BR":"Explorador de arquivos",th:"ตัวสำรวจไฟล์",tr:"Dosya Gezgini",uk:"Провідник файлів"},"ui.teamSessions":{zh:"Team 会话",en:"Team Sessions","zh-TW":"Team 會話",ko:"Team 세션",ja:"Team セッション",de:"Team-Sitzungen",es:"Sesiones de Team",fr:"Sessions d'équipe",it:"Sessioni Team",da:"Team-sessioner",pl:"Sesje Team",ru:"Сессии команды",ar:"جلسات الفريق",no:"Team-økter","pt-BR":"Sessões de equipe",th:"เซสชัน Team",tr:"Takım oturumları",uk:"Сесії команди"},"ui.teamSession.status.active":{zh:"进行中",en:"Active","zh-TW":"進行中",ko:"활성",ja:"実行中",de:"Aktiv",es:"Activo",fr:"Actif",it:"Attivo",da:"Aktiv",pl:"Aktywny",ru:"Активен",ar:"نشط",no:"Aktiv","pt-BR":"Ativo",th:"กำลังทำงาน",tr:"Etkin",uk:"Активний"},"ui.teamSession.status.done":{zh:"已完成",en:"Done","zh-TW":"已完成",ko:"완료",ja:"完了",de:"Fertig",es:"Completado",fr:"Terminé",it:"Completato",da:"Færdig",pl:"Zakończone",ru:"Завершено",ar:"مكتمل",no:"Fullført","pt-BR":"Concluído",th:"เสร็จสิ้น",tr:"Tamamlandı",uk:"Завершено"},"ui.teamSession.status.successorCreate":{zh:"Lead 已切换到新 team",en:"Lead switched to a new team","zh-TW":"Lead 已切換到新 team",ko:"Lead가 새 팀으로 전환됨",ja:"Lead が新しい team に切り替えました",de:"Lead hat zu einem neuen Team gewechselt",es:"Lead cambió a un nuevo team",fr:"Le lead est passé à une nouvelle équipe",it:"Lead è passato a un nuovo team",da:"Lead skiftede til et nyt team",pl:"Lead przeszedł do nowego zespołu",ru:"Лид перешёл в новую команду",ar:"انتقل القائد إلى فريق جديد",no:"Lead byttet til et nytt team","pt-BR":"Lead trocou para um novo team",th:"Lead เปลี่ยนไปทีมใหม่",tr:"Lead yeni bir takıma geçti",uk:"Лід перейшов до нової команди"},"ui.teamSession.status.converged":{zh:"已收敛(运行时已确认退出)",en:"Converged (runtime verified)","zh-TW":"已收斂(執行時已確認退出)",ko:"수렴됨 (런타임 확인)",ja:"収束しました(ランタイムで確認済み)",de:"Konvergiert (Laufzeit bestätigt)",es:"Convergido (verificado en tiempo de ejecución)",fr:"Convergé (vérifié à l'exécution)",it:"Convergente (verificato al runtime)",da:"Konvergeret (runtime bekræftet)",pl:"Zbieżne (zweryfikowane w czasie wykonywania)",ru:"Сошлось (подтверждено во время выполнения)",ar:"تقارب (تم التحقق في وقت التشغيل)",no:"Konvergert (kjøretid bekreftet)","pt-BR":"Convergido (verificado em runtime)",th:"บรรจบแล้ว (ยืนยันที่รันไทม์)",tr:"Yakınsadı (çalışma zamanında doğrulandı)",uk:"Сходиться (підтверджено під час виконання)"},"ui.teamSession.status.residue":{zh:"目录残留 — 可手动清理",en:"Directory residue — safe to remove","zh-TW":"目錄殘留 — 可手動清理",ko:"디렉토리 잔여물 — 제거 가능",ja:"ディレクトリ残留 — 削除可能",de:"Verzeichnisrest — kann entfernt werden",es:"Residuo de directorio — se puede eliminar",fr:"Résidu de répertoire — peut être supprimé",it:"Residuo di directory — rimuovibile",da:"Mapperester — kan fjernes",pl:"Pozostałości katalogu — można usunąć",ru:"Остаток каталога — можно удалить",ar:"بقايا في المجلد — يمكن إزالتها بأمان",no:"Katalogrester — kan fjernes","pt-BR":"Resíduo de diretório — pode remover",th:"ไดเรกทอรีคงค้าง — สามารถลบได้",tr:"Dizin kalıntısı — kaldırılabilir",uk:"Залишок каталогу — можна видалити"},"ui.teamSession.status.pending":{zh:"推断结束(运行时检测中)",en:"End inferred, runtime check pending","zh-TW":"推斷結束(執行時檢測中)",ko:"종료 추론됨, 런타임 확인 중",ja:"終了を推測(ランタイム確認中)",de:"Ende abgeleitet, Laufzeit-Prüfung ausstehend",es:"Fin inferido, verificación en ejecución pendiente",fr:"Fin inférée, vérification en cours",it:"Fine dedotta, controllo runtime in sospeso",da:"Slut udledt, runtime-tjek afventer",pl:"Zakończenie wywnioskowane, sprawdzanie w toku",ru:"Конец выведен, проверка выполняется",ar:"تم استنتاج النهاية، فحص وقت التشغيل معلق",no:"Slutt utledet, kjøretidssjekk venter","pt-BR":"Fim inferido, verificação em runtime pendente",th:"สรุปการสิ้นสุด กำลังตรวจสอบที่รันไทม์",tr:"Son çıkarsandı, çalışma zamanı kontrolü bekliyor",uk:"Кінець виведено, очікує перевірку під час виконання"},"ui.teamSession.status.possiblyAlive":{zh:"可能仍在活动",en:"May still be active","zh-TW":"可能仍在活動",ko:"아직 활성 상태일 수 있음",ja:"まだ活動中の可能性",de:"Möglicherweise noch aktiv",es:"Puede seguir activo",fr:"Peut-être encore actif",it:"Potrebbe essere ancora attivo",da:"Kan stadig være aktiv",pl:"Może nadal być aktywny",ru:"Возможно, всё ещё активен",ar:"قد يكون لا يزال نشطًا",no:"Kan fortsatt være aktiv","pt-BR":"Pode ainda estar ativo",th:"อาจยังทำงานอยู่",tr:"Hâlâ etkin olabilir",uk:"Можливо, все ще активний"},"ui.teamSession.status.reused":{zh:"疑似同名 team 被其他 session 占用",en:"Same name possibly reused by another session","zh-TW":"疑似同名 team 被其他 session 佔用",ko:"같은 이름이 다른 세션에서 재사용될 수 있음",ja:"同名が他のセッションで再利用されている可能性",de:"Derselbe Name wird möglicherweise von einer anderen Sitzung verwendet",es:"El mismo nombre posiblemente reutilizado por otra sesión",fr:"Nom possiblement réutilisé par une autre session",it:"Stesso nome potenzialmente riutilizzato da un'altra sessione",da:"Samme navn muligvis genbrugt af en anden session",pl:"Ta sama nazwa mogła zostać ponownie użyta przez inną sesję",ru:"То же имя, возможно, повторно используется другой сессией",ar:"قد يكون الاسم نفسه معاد استخدامه من جلسة أخرى",no:"Samme navn muligens gjenbrukt av en annen økt","pt-BR":"Mesmo nome possivelmente reutilizado por outra sessão",th:"ชื่อเดียวกันอาจถูกใช้ซ้ำโดยเซสชันอื่น",tr:"Aynı ad başka bir oturum tarafından tekrar kullanılıyor olabilir",uk:"Таке ж ім'я, можливо, повторно використовується іншою сесією"},"ui.exportTimelinePng":{zh:"导出为 PNG",en:"Export as PNG","zh-TW":"匯出為 PNG",ko:"PNG로 내보내기",ja:"PNGとして書き出し",de:"Als PNG exportieren",es:"Exportar como PNG",fr:"Exporter en PNG",it:"Esporta come PNG",da:"Eksporter som PNG",pl:"Eksportuj jako PNG",ru:"Экспорт в PNG",ar:"تصدير كـ PNG",no:"Eksporter som PNG","pt-BR":"Exportar como PNG",th:"ส่งออกเป็น PNG",tr:"PNG olarak dışa aktar",uk:"Експорт у PNG"},"ui.gitChanges":{zh:"Git 变更",en:"Git Changes","zh-TW":"Git 變更",ko:"Git 변경사항",ja:"Git 変更",de:"Git-Änderungen",es:"Cambios de Git",fr:"Modifications Git",it:"Modifiche Git",da:"Git-ændringer",pl:"Zmiany Git",ru:"Изменения Git",ar:"تغييرات Git",no:"Git-endringer","pt-BR":"Alterações do Git",th:"การเปลี่ยนแปลง Git",tr:"Git Değişiklikleri",uk:"Зміни Git"},"ui.gitChanges.openFile":{zh:"打开文件",en:"Open File","zh-TW":"開啟檔案",ko:"파일 열기",ja:"ファイルを開く",de:"Datei öffnen",es:"Abrir archivo",fr:"Ouvrir le fichier",it:"Apri file",da:"Åbn fil",pl:"Otwórz plik",ru:"Открыть файл",ar:"فتح الملف",no:"Åpne fil","pt-BR":"Abrir arquivo",th:"เปิดไฟล์",tr:"Dosyayı aç",uk:"Відкрити файл"},"ui.gitChanges.restoreFile":{zh:"撤销变更",en:"Discard Changes","zh-TW":"撤銷變更",ko:"변경 취소",ja:"変更を破棄",de:"Änderungen verwerfen",es:"Descartar cambios",fr:"Annuler les modifications",it:"Annulla modifiche",da:"Forkast ændringer",pl:"Odrzuć zmiany",ru:"Отменить изменения",ar:"تجاهل التغييرات",no:"Forkast endringer","pt-BR":"Descartar alterações",th:"ยกเลิกการเปลี่ยนแปลง",tr:"Değişiklikleri geri al",uk:"Скасувати зміни"},"ui.gitChanges.restoreConfirm":{zh:"确定要撤销 {name} 的所有变更吗?此操作不可恢复。",en:"Discard all changes to {name}? This cannot be undone.","zh-TW":"確定要撤銷 {name} 的所有變更嗎?此操作不可恢復。",ko:"{name}의 모든 변경 사항을 취소하시겠습니까? 이 작업은 되돌릴 수 없습니다.",ja:"{name} のすべての変更を破棄しますか?この操作は元に戻せません。",de:"Alle Änderungen an {name} verwerfen? Dies kann nicht rückgängig gemacht werden.",es:"¿Descartar todos los cambios en {name}? Esta acción no se puede deshacer.",fr:"Annuler toutes les modifications de {name} ? Cette action est irréversible.",it:"Annullare tutte le modifiche a {name}? Questa azione non può essere annullata.",da:"Forkast alle ændringer i {name}? Dette kan ikke fortrydes.",pl:"Odrzucić wszystkie zmiany w {name}? Tej operacji nie można cofnąć.",ru:"Отменить все изменения в {name}? Это действие необратимо.",ar:"تجاهل جميع التغييرات في {name}؟ لا يمكن التراجع عن هذا الإجراء.",no:"Forkaste alle endringer i {name}? Dette kan ikke angres.","pt-BR":"Descartar todas as alterações em {name}? Esta ação não pode ser desfeita.",th:"ยกเลิกการเปลี่ยนแปลงทั้งหมดของ {name}? การดำเนินการนี้ไม่สามารถเลิกทำได้",tr:"{name} dosyasındaki tüm değişiklikler geri alınsın mı? Bu işlem geri alınamaz.",uk:"Скасувати всі зміни в {name}? Цю дію неможливо скасувати."},"ui.roleFilter":{zh:"角色筛选",en:"Role Filter","zh-TW":"角色篩選",ko:"역할 필터",ja:"ロールフィルター",de:"Rollenfilter",es:"Filtro de roles",fr:"Filtre de rôles",it:"Filtro ruoli",da:"Rollefilter",pl:"Filtr ról",ru:"Фильтр ролей",ar:"تصفية الأدوار",no:"Rollefilter","pt-BR":"Filtro de papéis",th:"ตัวกรองบทบาท",tr:"Rol Filtresi",uk:"Фільтр ролей"},"ui.binaryFileNotice":{zh:"二进制文件(无法显示差异)",en:"Binary file (cannot show diff)","zh-TW":"二進位檔案(無法顯示差異)",ko:"바이너리 파일 (차이점 표시 불가)",ja:"バイナリファイル(差分を表示できません)",de:"Binärdatei (Diff kann nicht angezeigt werden)",es:"Archivo binario (no se puede mostrar diff)",fr:"Fichier binaire (impossible d'afficher les différences)",it:"File binario (impossibile mostrare diff)",da:"Binær fil (kan ikke vise diff)",pl:"Plik binarny (nie można pokazać różnic)",ru:"Двоичный файл (невозможно показать различия)",ar:"ملف ثنائي (لا يمكن عرض الفروقات)",no:"Binær fil (kan ikke vise diff)","pt-BR":"Arquivo binário (não é possível mostrar diff)",th:"ไฟล์ไบนารี (ไม่สามารถแสดง diff)",tr:"İkili dosya (diff gösterilemiyor)",uk:"Двійковий файл (неможливо показати різниці)"},"ui.largeFileWarning":{zh:"文件过大(超过 5MB),无法显示差异",en:"File too large (over 5MB), cannot show diff","zh-TW":"檔案過大(超過 5MB),無法顯示差異",ko:"파일이 너무 큽니다 (5MB 초과), 차이점 표시 불가",ja:"ファイルが大きすぎます(5MB超)、差分を表示できません",de:"Datei zu groß (über 5MB), Diff kann nicht angezeigt werden",es:"Archivo demasiado grande (más de 5MB), no se puede mostrar diff",fr:"Fichier trop volumineux (plus de 5 Mo), impossible d'afficher les différences",it:"File troppo grande (oltre 5MB), impossibile mostrare diff",da:"Fil for stor (over 5MB), kan ikke vise diff",pl:"Plik zbyt duży (ponad 5MB), nie można pokazać różnic",ru:"Файл слишком большой (более 5 МБ), невозможно показать различия",ar:"الملف كبير جدًا (أكثر من 5 ميجابايت)، لا يمكن عرض الفروقات",no:"Fil for stor (over 5MB), kan ikke vise diff","pt-BR":"Arquivo muito grande (mais de 5MB), não é possível mostrar diff",th:"ไฟล์ใหญ่เกินไป (เกิน 5MB) ไม่สามารถแสดง diff",tr:"Dosya çok büyük (5MB üzeri), diff gösterilemiyor",uk:"Файл занадто великий (понад 5 МБ), неможливо показати різниці"},"ui.fileSize":{zh:"文件大小",en:"File size","zh-TW":"檔案大小",ko:"파일 크기",ja:"ファイルサイズ",de:"Dateigröße",es:"Tamaño del archivo",fr:"Taille du fichier",it:"Dimensione file",da:"Filstørrelse",pl:"Rozmiar pliku",ru:"Размер файла",ar:"حجم الملف",no:"Filstørrelse","pt-BR":"Tamanho do arquivo",th:"ขนาดไฟล์",tr:"Dosya boyutu",uk:"Розмір файлу"},"ui.fileLoadError":{zh:"文件加载失败",en:"Failed to load file","zh-TW":"檔案載入失敗",ko:"파일 로드 실패",ja:"ファイルの読み込みに失敗しました",de:"Datei konnte nicht geladen werden",es:"Error al cargar el archivo",fr:"Échec du chargement du fichier",it:"Impossibile caricare il file",da:"Kunne ikke indlæse fil",pl:"Nie udało się załadować pliku",ru:"Не удалось загрузить файл",ar:"فشل تحميل الملف",no:"Kunne ikke laste inn fil","pt-BR":"Falha ao carregar arquivo",th:"โหลดไฟล์ล้มเหลว",tr:"Dosya yüklenemedi",uk:"Не вдалося завантажити файл"},"ui.renameFailed":{zh:"重命名失败:{error}",en:"Rename failed: {error}","zh-TW":"重新命名失敗:{error}",ko:"이름 변경 실패: {error}",ja:"名前の変更に失敗しました:{error}",de:"Umbenennung fehlgeschlagen: {error}",es:"Error al renombrar: {error}",fr:"Échec du renommage : {error}",it:"Rinomina non riuscita: {error}",da:"Omdøbning mislykkedes: {error}",pl:"Zmiana nazwy nie powiodła się: {error}",ru:"Не удалось переименовать: {error}",ar:"فشل إعادة التسمية: {error}",no:"Kunne ikke gi nytt navn: {error}","pt-BR":"Falha ao renomear: {error}",th:"เปลี่ยนชื่อล้มเหลว: {error}",tr:"Yeniden adlandırma başarısız: {error}",uk:"Не вдалося перейменувати: {error}"},"ui.targetExists":{zh:"目标文件已存在",en:"Target already exists","zh-TW":"目標檔案已存在",ko:"대상이 이미 존재합니다",ja:"対象はすでに存在します",de:"Ziel existiert bereits",es:"El destino ya existe",fr:"La cible existe déjà",it:"La destinazione esiste già",da:"Destinationen eksisterer allerede",pl:"Cel już istnieje",ru:"Цель уже существует",ar:"الهدف موجود بالفعل",no:"Målet finnes allerede","pt-BR":"O destino já existe",th:"เป้าหมายมีอยู่แล้ว",tr:"Hedef zaten mevcut",uk:"Ціль вже існує"},"ui.backToChat":{zh:"返回对话",en:"Back to chat","zh-TW":"返回對話",ko:"채팅으로 돌아가기",ja:"チャットに戻る",de:"Zurück zum Chat",es:"Volver al chat",fr:"Retour au chat",it:"Torna alla chat",da:"Tilbage til chat",pl:"Powrót do czatu",ru:"Вернуться к чату",ar:"العودة إلى الدردشة",no:"Tilbake til chat","pt-BR":"Voltar ao chat",th:"กลับไปที่แชท",tr:"Sohbete dön",uk:"Повернутися до чату"},"ui.imageViewer.zoomIn":{zh:"放大",en:"Zoom in","zh-TW":"放大",ko:"확대",ja:"拡大",de:"Vergrößern",es:"Acercar",fr:"Zoom avant",it:"Ingrandisci",da:"Zoom ind",pl:"Powiększ",ru:"Увеличить",ar:"تكبير",no:"Zoom inn","pt-BR":"Aumentar zoom",th:"ซูมเข้า",tr:"Yakınlaştır",uk:"Збільшити"},"ui.imageViewer.zoomOut":{zh:"缩小",en:"Zoom out","zh-TW":"縮小",ko:"축소",ja:"縮小",de:"Verkleinern",es:"Alejar",fr:"Zoom arrière",it:"Riduci",da:"Zoom ud",pl:"Pomniejsz",ru:"Уменьшить",ar:"تصغير",no:"Zoom ut","pt-BR":"Diminuir zoom",th:"ซูมออก",tr:"Uzaklaştır",uk:"Зменшити"},"ui.imageViewer.resetZoom":{zh:"重置缩放",en:"Reset zoom","zh-TW":"重置縮放",ko:"확대/축소 초기화",ja:"ズームをリセット",de:"Zoom zurücksetzen",es:"Restablecer zoom",fr:"Réinitialiser le zoom",it:"Reimposta zoom",da:"Nulstil zoom",pl:"Resetuj zoom",ru:"Сбросить масштаб",ar:"إعادة تعيين التكبير",no:"Tilbakestill zoom","pt-BR":"Redefinir zoom",th:"รีเซ็ตการซูม",tr:"Yakınlaştırmayı sıfırla",uk:"Скинути масштаб"},"ui.imageViewer.fitToWindow":{zh:"适应窗口",en:"Fit to window","zh-TW":"適應視窗",ko:"창에 맞추기",ja:"ウィンドウに合わせる",de:"An Fenster anpassen",es:"Ajustar a ventana",fr:"Ajuster à la fenêtre",it:"Adatta alla finestra",da:"Tilpas til vindue",pl:"Dopasuj do okna",ru:"По размеру окна",ar:"ملاءمة النافذة",no:"Tilpass til vindu","pt-BR":"Ajustar à janela",th:"พอดีกับหน้าต่าง",tr:"Pencereye sığdır",uk:"Вписати у вікно"},"ui.imageLightbox.close":{zh:"关闭",en:"Close","zh-TW":"關閉",ko:"닫기",ja:"閉じる",de:"Schließen",es:"Cerrar",fr:"Fermer",it:"Chiudi",da:"Luk",pl:"Zamknij",ru:"Закрыть",ar:"إغلاق",no:"Lukk","pt-BR":"Fechar",th:"ปิด",tr:"Kapat",uk:"Закрити"},"ui.loading":{zh:"加载中...",en:"Loading...","zh-TW":"載入中...",ko:"로딩 중...",ja:"読み込み中...",de:"Lädt...",es:"Cargando...",fr:"Chargement...",it:"Caricamento...",da:"Indlæser...",pl:"Ładowanie...",ru:"Загрузка...",ar:"جارٍ التحميل...",no:"Laster...","pt-BR":"Carregando...",th:"กำลังโหลด...",tr:"Yükleniyor...",uk:"Завантаження..."},"ui.save":{zh:"保存",en:"Save","zh-TW":"儲存",ko:"저장",ja:"保存",de:"Speichern",es:"Guardar",fr:"Enregistrer",it:"Salva",da:"Gem",pl:"Zapisz",ru:"Сохранить",ar:"حفظ",no:"Lagre","pt-BR":"Salvar",th:"บันทึก",tr:"Kaydet",uk:"Зберегти"},"ui.saving":{zh:"保存中...",en:"Saving...","zh-TW":"儲存中...",ko:"저장 중...",ja:"保存中...",de:"Speichert...",es:"Guardando...",fr:"Enregistrement...",it:"Salvataggio...",da:"Gemmer...",pl:"Zapisywanie...",ru:"Сохранение...",ar:"جارٍ الحفظ...",no:"Lagrer...","pt-BR":"Salvando...",th:"กำลังบันทึก...",tr:"Kaydediliyor...",uk:"Збереження..."},"ui.saved":{zh:"已保存",en:"Saved","zh-TW":"已儲存",ko:"저장됨",ja:"保存済み",de:"Gespeichert",es:"Guardado",fr:"Enregistré",it:"Salvato",da:"Gemt",pl:"Zapisano",ru:"Сохранено",ar:"تم الحفظ",no:"Lagret","pt-BR":"Salvo",th:"บันทึกแล้ว",tr:"Kaydedildi",uk:"Збережен��"},"ui.saveFailed":{zh:"保存失败",en:"Save failed","zh-TW":"儲存失敗",ko:"저장 실패",ja:"保存失敗",de:"Speichern fehlgeschlagen",es:"Error al guardar",fr:"Échec de l'enregistrement",it:"Salvataggio fallito",da:"Gem mislykkedes",pl:"Zapis nieudany",ru:"Ошибка сохранения",ar:"فشل الحفظ",no:"Lagring mislyktes","pt-BR":"Falha ao salvar",th:"บันทึกล้มเหลว",tr:"Kaydetme başarısız",uk:"Помилка збереження"},"ui.viewMarkdown":{zh:"Markdown",en:"Markdown","zh-TW":"Markdown",ko:"Markdown",ja:"Markdown",de:"Markdown",es:"Markdown",fr:"Markdown",it:"Markdown",da:"Markdown",pl:"Markdown",ru:"Markdown",ar:"Markdown",no:"Markdown","pt-BR":"Markdown",th:"Markdown",tr:"Markdown",uk:"Markdown"},"ui.viewText":{zh:"文本编辑",en:"Edit Text","zh-TW":"文字編輯",ko:"텍스트 편집",ja:"テキスト編集",de:"Text bearbeiten",es:"Editar texto",fr:"Éditer le texte",it:"Modifica testo",da:"Rediger tekst",pl:"Edytuj tekst",ru:"Редактировать",ar:"تحرير النص",no:"Rediger tekst","pt-BR":"Editar texto",th:"แก้ไขข้อความ",tr:"Metni düzenle",uk:"Редагувати"},"ui.unsavedChanges":{zh:"未保存的更改",en:"Unsaved changes","zh-TW":"未儲存的變更",ko:"저장되지 않은 변경사항",ja:"未保存の変更",de:"Nicht gespeicherte Änderungen",es:"Cambios sin guardar",fr:"Modifications non enregistrées",it:"Modifiche non salvate",da:"Ikke-gemte ændringer",pl:"Niezapisane zmiany",ru:"Несохранённые изменения",ar:"تغييرات غير محفوظة",no:"Ulagrede endringer","pt-BR":"Alterações não salvas",th:"การเปลี่ยนแปลงที่ยังไม่ได้บันทึก",tr:"Kaydedilmemiş değişiklikler",uk:"Незбережені зміни"},"ui.terminal.exited":{zh:"[进程已退出,退出码: {code}]",en:"[Process exited with code {code}]","zh-TW":"[程序已退出,退出碼: {code}]",ko:"[프로세스가 코드 {code}(으)로 종료되었습니다]",ja:"[プロセスがコード {code} で終了しました]",de:"[Prozess mit Code {code} beendet]",es:"[Proceso finalizado con código {code}]",fr:"[Processus terminé avec le code {code}]",it:"[Processo terminato con codice {code}]",da:"[Proces afsluttet med kode {code}]",pl:"[Proces zakończony z kodem {code}]",ru:"[Процесс завершился с кодом {code}]",ar:"[انتهت العملية برمز {code}]",no:"[Prosess avsluttet med kode {code}]","pt-BR":"[Processo encerrado com código {code}]",th:"[กระบวนการออกด้วยรหัส {code}]",tr:"[İşlem {code} koduyla çıkış yaptı]",uk:"[Процес завершився з кодом {code}]"},"ui.terminal.pressEnterForShell":{zh:"按 Enter 键启动新的 Shell 会话",en:"Press Enter to start a new shell session","zh-TW":"按 Enter 鍵啟動新的 Shell 會話",ko:"Enter를 눌러 새 셸 세션을 시작하세요",ja:"Enter キーを押して新しいシェルセッションを開始",de:"Drücken Sie Enter, um eine neue Shell-Sitzung zu starten",es:"Presione Enter para iniciar una nueva sesión de shell",fr:"Appuyez sur Entrée pour démarrer une nouvelle session shell",it:"Premi Invio per avviare una nuova sessione shell",da:"Tryk Enter for at starte en ny shell-session",pl:"Naciśnij Enter, aby uruchomić nową sesję powłoki",ru:"Нажмите Enter, чтобы запустить новую сессию оболочки",ar:"اضغط Enter لبدء جلسة shell جديدة",no:"Trykk Enter for å starte en ny shell-økt","pt-BR":"Pressione Enter para iniciar uma nova sessão de shell",th:"กด Enter เพื่อเริ่มเซสชัน Shell ใหม่",tr:"Yeni bir kabuk oturumu başlatmak için Enter'a basın",uk:"Натисніть Enter, щоб розпочати нову сесію оболонки"},"ui.diffSessionChanged":{zh:"请求体大小减小,可能使用了 /clear、/compact 或 session 发生了变化",en:"Request body size decreased, possibly due to /clear, /compact, or session change","zh-TW":"請求體大小減小,可能使用了 /clear、/compact 或 session 發生了變化",ko:"요청 본문 크기가 줄었습니다. /clear, /compact 또는 세션 변경이 있었을 수 있습니다",ja:"リクエストボディのサイズが減少しました。/clear、/compact、またはセッション変更の可能性があります",de:"Anfragekörper wurde kleiner, möglicherweise durch /clear, /compact oder Sitzungswechsel",es:"El tamaño del cuerpo de la solicitud disminuyó, posiblemente debido a /clear, /compact o cambio de sesión",fr:"La taille du corps de la requête a diminué, possiblement dû à /clear, /compact ou un changement de session",it:"La dimensione del corpo della richiesta è diminuita, probabilmente a causa di /clear, /compact o cambio di sessione",da:"Anmodningens størrelse er reduceret, muligvis på grund af /clear, /compact eller sessionsændring",pl:"Rozmiar treści żądania zmniejszył się, prawdopodobnie z powodu /clear, /compact lub zmiany sesji",ru:"Размер тела запроса уменьшился, возможно из-за /clear, /compact или смены сессии",ar:"حجم نص الطلب انخفض، ربما بسبب /clear أو /compact أو تغيير الجلسة",no:"Forespørselens størrelse ble redusert, muligens på grunn av /clear, /compact eller sesjonsendring","pt-BR":"O tamanho do corpo da requisição diminuiu, possivelmente devido a /clear, /compact ou mudança de sessão",th:"ขนาดเนื้อหาคำขอลดลง อาจเกิดจาก /clear, /compact หรือการเปลี่ยนเซสชัน",tr:"İstek gövdesi boyutu küçüldü, muhtemelen /clear, /compact veya oturum değişikliği nedeniyle",uk:"Розмір тіла запиту зменшився, можливо через /clear, /compact або зміну сесії"},"ui.resume.title":{zh:"检测到近期日志",en:"Recent Log Detected","zh-TW":"偵測到近期日誌",ko:"최근 로그 감지됨",ja:"最近のログを検出",de:"Kürzliches Log erkannt",es:"Log reciente detectado",fr:"Log récent détecté",it:"Log recente rilevato",da:"Nylig log fundet",pl:"Wykryto ostatni log",ru:"Обнаружен недавний лог",ar:"تم اكتشاف سجل حديث",no:"Nylig logg oppdaget","pt-BR":"Log recente detectado",th:"ตรวจพบล็อกล่าสุด",tr:"Son günlük tespit edildi",uk:"Виявлено нещодавній лог"},"ui.resume.message":{zh:"检测到1小时内的日志: {file},是否继续?",en:"Recent log found (within 1 hour): {file}. Continue?","zh-TW":"偵測到1小時內的日誌: {file},是否繼續?",ko:"1시간 이내 로그 감지: {file}. 계속하시겠습니까?",ja:"1時間以内のログを検出: {file}。続行しますか?",de:"Kürzliches Log gefunden (innerhalb 1 Stunde): {file}. Fortsetzen?",es:"Log reciente encontrado (dentro de 1 hora): {file}. ¿Continuar?",fr:"Log récent trouvé (moins d'1 heure): {file}. Continuer ?",it:"Log recente trovato (entro 1 ora): {file}. Continuare?",da:"Nylig log fundet (inden for 1 time): {file}. Fortsæt?",pl:"Znaleziono ostatni log (w ciągu 1 godziny): {file}. Kontynuować?",ru:"Обнаружен недавний лог (менее 1 часа): {file}. Продолжить?",ar:"تم العثور على سجل حديث (خلال ساعة واحدة): {file}. هل تريد المتابعة؟",no:"Nylig logg funnet (innen 1 time): {file}. Fortsette?","pt-BR":"Log recente encontrado (dentro de 1 hora): {file}. Continuar?",th:"พบล็อกล่าสุด (ภายใน 1 ชั่วโมง): {file} ต้องการดำเนินการต่อหรือไม่?",tr:"Son günlük bulundu (1 saat içinde): {file}. Devam edilsin mi?",uk:"Знайдено нещодавній лог (менше 1 години): {file}. Продовжити?"},"ui.resume.continue":{zh:"继续上次",en:"Continue","zh-TW":"繼續上次",ko:"이어서 계속",ja:"前回の続き",de:"Fortsetzen",es:"Continuar",fr:"Continuer",it:"Continua",da:"Fortsæt",pl:"Kontynuuj",ru:"Продолжить",ar:"متابعة",no:"Fortsett","pt-BR":"Continuar",th:"ดำเนินการต่อ",tr:"Devam et",uk:"Продовжити"},"ui.resume.new":{zh:"新开日志",en:"Start New","zh-TW":"新開日誌",ko:"새 로그 시작",ja:"新規ログ",de:"Neues Log",es:"Nuevo log",fr:"Nouveau log",it:"Nuovo log",da:"Ny log",pl:"Nowy log",ru:"Новый лог",ar:"سجل جديد",no:"Ny logg","pt-BR":"Novo log",th:"ล็อกใหม่",tr:"Yeni günlük",uk:"Новий лог"},"ui.resume.remember":{zh:"记住我的选择,下次默认跳过弹窗",en:"Remember my choice and skip this dialog next time","zh-TW":"記住我的選擇,下次預設跳過彈窗",ko:"내 선택을 기억하고 다음에 이 대화 상자 건너뛰기",ja:"選択を記憶し、次回このダイアログをスキップ",de:"Meine Wahl merken und diesen Dialog beim nächsten Mal überspringen",es:"Recordar mi elección y omitir este diálogo la próxima vez",fr:"Mémoriser mon choix et ignorer cette boîte de dialogue la prochaine fois",it:"Ricorda la mia scelta e salta questa finestra la prossima volta",da:"Husk mit valg og spring denne dialog over næste gang",pl:"Zapamiętaj mój wybór i pomiń to okno następnym razem",ru:"Запомнить мой выбор и пропустить этот диалог в следующий раз",ar:"تذكر اختياري وتخطي هذا الحوار في المرة القادمة",no:"Husk mitt valg og hopp over denne dialogen neste gang","pt-BR":"Lembrar minha escolha e pular este diálogo na próxima vez",th:"จำตัวเลือกของฉันและข้ามหน้าต่างนี้ในครั้งถัดไป",tr:"Seçimimi hatırla ve bir dahaki sefere bu pencereyi atla",uk:"Запам'ятати мій вибір і пропустити це вікно наступного разу"},"ui.userPreferences":{zh:"用户偏好",en:"User Preferences","zh-TW":"使用者偏好",ko:"사용자 환경설정",ja:"ユーザー設定",de:"Benutzereinstellungen",es:"Preferencias de usuario",fr:"Préférences utilisateur",it:"Preferenze utente",da:"Brugerpræferencer",pl:"Preferencje użytkownika",ru:"Пользовательские настройки",ar:"تفضيلات المستخدم",no:"Brukerinnstillinger","pt-BR":"Preferências do usuário",th:"การตั้งค่าผู้ใช้",tr:"Kullanıcı tercihleri",uk:"Налаштування користувача"},"ui.resumeAutoChoice":{zh:"是否继承默认日志",en:"Default log resume behavior","zh-TW":"是否繼承預設日誌",ko:"기본 로그 재개 동작",ja:"デフォルトのログ再開動作",de:"Standard-Log-Wiederaufnahme",es:"Comportamiento predeterminado de reanudación de log",fr:"Comportement par défaut de reprise du log",it:"Comportamento predefinito di ripresa del log",da:"Standard log-genoptagelsesadfærd",pl:"Domyślne zachowanie wznowienia logu",ru:"Поведение возобновления лога по умолчанию",ar:"سلوك استئناف السجل الافتراضي",no:"Standard logg-gjenopptakelsesatferd","pt-BR":"Comportamento padrão de retomada do log",th:"พฤติกรรมการดำเนินการต่อล็อกเริ่มต้น",tr:"Varsayılan günlük devam davranışı",uk:"Поведінка відновлення логу за замовчуванням"},"ui.resumeAutoChoice.continue":{zh:"默认继承",en:"Resume previous log","zh-TW":"預設繼承",ko:"이전 로그 이어서",ja:"前回のログを継続",de:"Vorheriges Log fortsetzen",es:"Reanudar log anterior",fr:"Reprendre le log précédent",it:"Riprendi log precedente",da:"Genoptag forrige log",pl:"Wznów poprzedni log",ru:"Продолжить предыдущий лог",ar:"استئناف السجل السابق",no:"Gjenoppta forrige logg","pt-BR":"Retomar log anterior",th:"ดำเนินการต่อจากล็อกก่อนหน้า",tr:"Önceki günlüğe devam et",uk:"Продовжити попередній лог"},"ui.resumeAutoChoice.new":{zh:"默认新开日志",en:"Start new log","zh-TW":"預設新開日誌",ko:"새 로그 시작",ja:"新規ログを開始",de:"Neues Log starten",es:"Iniciar nuevo log",fr:"Démarrer un nouveau log",it:"Avvia nuovo log",da:"Start ny log",pl:"Rozpocznij nowy log",ru:"Начать новый лог",ar:"بدء سجل جديد",no:"Start ny logg","pt-BR":"Iniciar novo log",th:"เริ่มล็อกใหม่",tr:"Yeni günlük başlat",uk:"Почати новий лог"},"ui.themeColor":{zh:"主题色",en:"Theme","zh-TW":"主題色",ko:"테마 색상",ja:"テーマカラー",de:"Farbschema",es:"Color del tema",fr:"Couleur du thème",it:"Colore del tema",da:"Temafarve",pl:"Kolor tematu",ru:"Цвет темы",ar:"لون المظهر",no:"Temafarge","pt-BR":"Cor do tema",th:"สีธีม",tr:"Tema Rengi",uk:"Колір теми"},"ui.themeColor.dark":{zh:"耀石黑",en:"Obsidian Dark","zh-TW":"耀石黑",ko:"옵시디언 다크",ja:"オブシディアンダーク",de:"Obsidian Dunkel",es:"Obsidiana Oscuro",fr:"Obsidienne Sombre",it:"Ossidiana Scuro",da:"Obsidian Mørk",pl:"Obsydian Ciemny",ru:"Обсидиан тёмная",ar:"أوبسيديان داكن",no:"Obsidian Mørk","pt-BR":"Obsidiana Escuro",th:"ออบซิเดียนมืด",tr:"Obsidyen Koyu",uk:"Обсидіан темна"},"ui.themeColor.light":{zh:"雪山白",en:"Snow White","zh-TW":"雪山白",ko:"스노우 화이트",ja:"スノーホワイト",de:"Schneeweiß",es:"Blanco Nieve",fr:"Blanc Neige",it:"Bianco Neve",da:"Snehvid",pl:"Śnieżna Biel",ru:"Снежная белая",ar:"أبيض ثلجي",no:"Snøhvit","pt-BR":"Branco Neve",th:"สโนว์ไวท์",tr:"Kar Beyazı",uk:"Сніжна біла"},"ui.settings":{zh:"偏好设置",en:"Preferences","zh-TW":"偏好設定",ko:"환경설정",ja:"環境設定",de:"Einstellungen",es:"Preferencias",fr:"Préférences",it:"Preferenze",da:"Indstillinger",pl:"Preferencje",ru:"Настройки",ar:"التفضيلات",no:"Innstillinger","pt-BR":"Preferências",th:"การตั้งค่า",tr:"Tercihler",uk:"Налаштування"},"ui.collapseToolResults":{zh:"折叠工具返回内容",en:"Collapse tool results","zh-TW":"摺疊工具回傳內容",ko:"도구 결과 접기",ja:"ツール結果を折りたたむ",de:"Werkzeugergebnisse einklappen",es:"Contraer resultados de herramientas",fr:"Réduire les résultats des outils",it:"Comprimi risultati strumenti",da:"Skjul værktøjsresultater",pl:"Zwiń wyniki narzędzi",ru:"Свернуть результаты инструментов",ar:"طي نتائج الأدوات",no:"Skjul verktøyresultater","pt-BR":"Recolher resultados de ferramentas",th:"ย่อผลลัพธ์เครื่องมือ",tr:"Araç sonuçlarını daralt",uk:"Згорнути результати інструментів"},"ui.expandThinking":{zh:'展开"思考过程"',en:'Expand "Thinking"',"zh-TW":'展開"思考過程"',ko:'"사고 과정" 펼치기',ja:'"思考プロセス"を展開',de:'"Denkprozess" aufklappen',es:'Expandir "Proceso de pensamiento"',fr:'Développer "Processus de réflexion"',it:'Espandi "Processo di pensiero"',da:'Udvid "Tænkeproces"',pl:'Rozwiń "Proces myślenia"',ru:'Развернуть "Процесс мышления"',ar:'توسيع "عملية التفكير"',no:'Utvid "Tenkeprosess"',"pt-BR":'Expandir "Processo de pensamento"',th:'ขยาย "กระบวนการคิด"',tr:'"Düşünce süreci"ni genişlet',uk:'Розгорнути "Процес мислення"'},"ui.showFullToolContent":{zh:"完整展示所有内容",en:"Show full tool content","zh-TW":"完整展示所有內容",ko:"모든 내용 전체 표시",ja:"すべての内容を完全に表示",de:"Alle Inhalte vollständig anzeigen",es:"Mostrar todo el contenido completo",fr:"Afficher tout le contenu en entier",it:"Mostra tutto il contenuto completo",da:"Vis alt indhold fuldt ud",pl:"Pokaż pełną treść wszystkiego",ru:"Показать всё содержимое полностью",ar:"عرض كل المحتوى بالكامل",no:"Vis alt innhold fullstendig","pt-BR":"Exibir todo o conteúdo completo",th:"แสดงเนื้อหาทั้งหมดแบบเต็ม",tr:"Tüm içeriği tam olarak göster",uk:"Показати весь вміст повністю"},"ui.toolsUsed":{zh:"调用工具: ",en:"Tools used: ","zh-TW":"調用工具: ",ko:"사용한 도구: ",ja:"使用ツール: ",de:"Verwendete Tools: ",es:"Herramientas usadas: ",fr:"Outils utilisés : ",it:"Strumenti usati: ",da:"Brugte værktøjer: ",pl:"Użyte narzędzia: ",ru:"Инструменты: ",ar:"الأدوات المستخدمة: ",no:"Brukte verktøy: ","pt-BR":"Ferramentas usadas: ",th:"เครื่องมือที่ใช้: ",tr:"Kullanılan araçlar: ",uk:"Використані інструменти: "},"ui.diffSummary":{zh:"+{added} -{removed}",en:"+{added} -{removed}","zh-TW":"+{added} -{removed}",ko:"+{added} -{removed}",ja:"+{added} -{removed}",de:"+{added} -{removed}",es:"+{added} -{removed}",fr:"+{added} -{removed}",it:"+{added} -{removed}",da:"+{added} -{removed}",pl:"+{added} -{removed}",ru:"+{added} -{removed}",ar:"+{added} -{removed}",no:"+{added} -{removed}","pt-BR":"+{added} -{removed}",th:"+{added} -{removed}",tr:"+{added} -{removed}",uk:"+{added} -{removed}"},"ui.expandDiff":{zh:"默认展开 Body Diff JSON",en:"Expand Body Diff JSON by default","zh-TW":"預設展開 Body Diff JSON",ko:"Body Diff JSON 기본 펼치기",ja:"Body Diff JSON をデフォルトで展開",de:"Body Diff JSON standardmäßig aufklappen",es:"Expandir Body Diff JSON por defecto",fr:"Développer Body Diff JSON par défaut",it:"Espandi Body Diff JSON per impostazione predefinita",da:"Udvid Body Diff JSON som standard",pl:"Domyślnie rozwiń Body Diff JSON",ru:"Разворачивать Body Diff JSON по умолчанию",ar:"توسيع Body Diff JSON افتراضيًا",no:"Utvid Body Diff JSON som standard","pt-BR":"Expandir Body Diff JSON por padrão",th:"ขยาย Body Diff JSON เป็นค่าเริ่มต้น",tr:"Body Diff JSON'u varsayılan olarak genişlet",uk:"Розгортати Body Diff JSON за замовчуванням"},"ui.logDirTitle":{zh:"日志目录设置",en:"Log directory","zh-TW":"日誌目錄設定",ko:"로그 디렉토리 설정",ja:"ログディレクトリ設定",de:"Protokollverzeichnis",es:"Directorio de registros",fr:"Répertoire de journaux",it:"Directory dei log",da:"Logmappe",pl:"Katalog logów",ru:"Каталог журналов",ar:"دليل السجلات",no:"Loggkatalog","pt-BR":"Diretório de logs",th:"ไดเรกทอรีบันทึก",tr:"Günlük dizini",uk:"Каталог журналів"},"ui.globalSettings":{zh:"全局设置",en:"Global Settings","zh-TW":"全域設定",ko:"전역 설정",ja:"グローバル設定",de:"Globale Einstellungen",es:"Configuración global",fr:"Paramètres globaux",it:"Impostazioni globali",da:"Globale indstillinger",pl:"Ustawienia globalne",ru:"Глобальные настройки",ar:"الإعدادات العامة",no:"Globale innstillinger","pt-BR":"Configurações globais",th:"ตั้งค่าทั่วไป",tr:"Genel ayarlar",uk:"Глобальні налаштування"},"ui.languageSettings":{zh:"语言设置",en:"Language","zh-TW":"語言設定",ko:"언어 설정",ja:"言語設定",de:"Sprache",es:"Idioma",fr:"Langue",it:"Lingua",da:"Sprog",pl:"Język",ru:"Язык",ar:"اللغة",no:"Språk","pt-BR":"Idioma",th:"ภาษา",tr:"Dil",uk:"Мова"},"ui.scanToCoding":{zh:"手机扫码编程",en:"Scan to Code","zh-TW":"手機掃碼編程",ko:"스캔하여 코딩",ja:"スキャンしてコーディング",de:"Scannen zum Programmieren",es:"Escanear para programar",fr:"Scanner pour coder",it:"Scansiona per programmare",da:"Scan for at kode",pl:"Skanuj, aby kodować",ru:"Сканируйте для кодирования",ar:"امسح للبرمجة",no:"Skann for å kode","pt-BR":"Escaneie para programar",th:"สแกนเพื่อเขียนโค้ด",tr:"Kodlamak için tarayın",uk:"Скануйте для кодування"},"ui.copyAllCacheText":{zh:"点击复制全部 KV-Cache 文本",en:"Click to copy all KV-Cache text","zh-TW":"點擊複製全部 KV-Cache 文字",ko:"KV-Cache 텍스트 전체 복사",ja:"KV-Cache テキストをすべてコピー",de:"Gesamten KV-Cache-Text kopieren",es:"Copiar todo el texto KV-Cache",fr:"Copier tout le texte KV-Cache",it:"Copia tutto il testo KV-Cache",da:"Kopiér al KV-Cache tekst",pl:"Skopiuj cały tekst KV-Cache",ru:"Скопировать весь текст KV-Cache",ar:"نسخ كل نص KV-Cache",no:"Kopier all KV-Cache tekst","pt-BR":"Copiar todo o texto KV-Cache",th:"คัดลอกข้อความ KV-Cache ทั้งหมด",tr:"Tüm KV-Cache metnini kopyala",uk:"Скопіювати весь текст KV-Cache"},"ui.copied":{zh:"已复制",en:"Copied","zh-TW":"已複製",ko:"복사됨",ja:"コピーしました",de:"Kopiert",es:"Copiado",fr:"Copié",it:"Copiato",da:"Kopieret",pl:"Skopiowano",ru:"Скопировано",ar:"تم النسخ",no:"Kopiert","pt-BR":"Copiado",th:"คัดลอกแล้ว",tr:"Kopyalandı",uk:"Скопійовано"},"ui.chatDisplaySwitches":{zh:"对话内容展示开关",en:"Chat Display Switches","zh-TW":"對話內容顯示開關",ko:"대화 표시 스위치",ja:"チャット表示スイッチ",de:"Chat-Anzeigeoptionen",es:"Opciones de visualización del chat",fr:"Options d'affichage du chat",it:"Opzioni di visualizzazione chat",da:"Chat-visningsindstillinger",pl:"Przełączniki wyświetlania czatu",ru:"Переключатели отображения чата",ar:"مفاتيح عرض المحادثة",no:"Chat-visningsbrytere","pt-BR":"Opções de exibição do chat",th:"สวิตช์การแสดงแชท",tr:"Sohbet görüntüleme ayarları",uk:"Перемикачі відображення чату"},"ui.filterIrrelevant":{zh:"过滤无关请求",en:"Filter irrelevant requests","zh-TW":"過濾無關請求",ko:"무관한 요청 필터링",ja:"無関係なリクエストをフィルタ",de:"Irrelevante Anfragen filtern",es:"Filtrar solicitudes irrelevantes",fr:"Filtrer les requêtes non pertinentes",it:"Filtra richieste irrilevanti",da:"Filtrer irrelevante forespørgsler",pl:"Filtruj nieistotne żądania",ru:"Фильтровать нерелевантные запросы",ar:"تصفية الطلبات غير ذات الصلة",no:"Filtrer irrelevante forespørsler","pt-BR":"Filtrar solicitações irrelevantes",th:"กรองคำขอที่ไม่เกี่ยวข้อง",tr:"İlgisiz istekleri filtrele",uk:"Фільтрувати нерелевантні запити"},"ui.thinking":{zh:"思考过程",en:"Thinking","zh-TW":"思考過程",ko:"사고 과정",ja:"思考プロセス",de:"Denkprozess",es:"Proceso de pensamiento",fr:"Processus de réflexion",it:"Processo di pensiero",da:"Tænkeproces",pl:"Proces myślenia",ru:"Процесс мышления",ar:"عملية التفكير",no:"Tenkeprosess","pt-BR":"Processo de pensamento",th:"กระบวนการคิด",tr:"Düşünce süreci",uk:"Процес мислення"},"ui.thinkingEmpty":{zh:"思考内容未显示(thinking 为加密摘要)",en:"Thinking content not displayed (encrypted summary)","zh-TW":"思考內容未顯示(thinking 為加密摘要)",ko:"사고 내용이 표시되지 않음 (암호화된 요약)",ja:"思考内容が表示されません(暗号化されたサマリー)",de:"Denkinhalt nicht angezeigt (verschlüsselte Zusammenfassung)",es:"Contenido de pensamiento no mostrado (resumen cifrado)",fr:"Contenu de réflexion non affiché (résumé chiffré)",it:"Contenuto di pensiero non visualizzato (riepilogo crittografato)",da:"Tænkeindhold ikke vist (krypteret resumé)",pl:"Treść myślenia nie wyświetlana (zaszyfrowane podsumowanie)",ru:"Содержимое мышления не отображается (зашифрованная сводка)",ar:"محتوى التفكير غير معروض (ملخص مشفر)",no:"Tenkeinnhold ikke vist (kryptert sammendrag)","pt-BR":"Conteúdo de pensamento não exibido (resumo criptografado)",th:"เนื้อหาการคิดไม่แสดง (สรุปที่เข้ารหัส)",tr:"Düşünce içeriği görüntülenmiyor (şifreli özet)",uk:"Вміст мислення не відображається (зашифрований підсумок)"},"ui.enableThinkingSummaries":{zh:"启用明文 Thinking",en:"Enable Thinking Summaries","zh-TW":"啟用明文 Thinking",ko:"Thinking 요약 활성화",ja:"Thinking サマリーを有効化",de:"Thinking-Zusammenfassungen aktivieren",es:"Habilitar resúmenes de Thinking",fr:"Activer les résumés de Thinking",it:"Abilita riepiloghi Thinking",da:"Aktivér Thinking-resuméer",pl:"Włącz podsumowania Thinking",ru:"Включить сводки Thinking",ar:"تفعيل ملخصات Thinking",no:"Aktiver Thinking-sammendrag","pt-BR":"Ativar resumos de Thinking",th:"เปิดใช้สรุป Thinking",tr:"Thinking özetlerini etkinleştir",uk:"Увімкнути підсумки Thinking"},"ui.enableThinkingSummariesTip":{zh:"在 {configDir}/settings.json 中设置 showThinkingSummaries 后,思考过程将以明文显示(需重启 Claude Code)",en:"Sets showThinkingSummaries in {configDir}/settings.json so thinking is displayed in plaintext (requires Claude Code restart)","zh-TW":"在 {configDir}/settings.json 中設定 showThinkingSummaries 後,思考過程將以明文顯示(需重啟 Claude Code)",ko:"{configDir}/settings.json에 showThinkingSummaries를 설정하면 사고 과정이 평문으로 표시됩니다 (Claude Code 재시작 필요)",ja:"{configDir}/settings.json に showThinkingSummaries を設定すると、思考がプレーンテキストで表示されます(Claude Code の再起動が必要)",de:"Setzt showThinkingSummaries in {configDir}/settings.json, damit Thinking als Klartext angezeigt wird (Claude Code Neustart erforderlich)",es:"Configura showThinkingSummaries en {configDir}/settings.json para mostrar el pensamiento en texto plano (requiere reiniciar Claude Code)",fr:"Définit showThinkingSummaries dans {configDir}/settings.json pour afficher la réflexion en texte brut (redémarrage de Claude Code requis)",it:"Imposta showThinkingSummaries in {configDir}/settings.json per visualizzare il pensiero in testo semplice (richiede riavvio di Claude Code)",da:"Sætter showThinkingSummaries i {configDir}/settings.json så tænkning vises i klartekst (kræver genstart af Claude Code)",pl:"Ustawia showThinkingSummaries w {configDir}/settings.json, aby myślenie wyświetlało się w postaci zwykłego tekstu (wymaga restartu Claude Code)",ru:"Устанавливает showThinkingSummaries в {configDir}/settings.json для отображения мышления открытым текстом (требуется перезапуск Claude Code)",ar:"يضبط showThinkingSummaries في {configDir}/settings.json لعرض التفكير كنص عادي (يتطلب إعادة تشغيل Claude Code)",no:"Setter showThinkingSummaries i {configDir}/settings.json slik at tenkning vises i klartekst (krever omstart av Claude Code)","pt-BR":"Define showThinkingSummaries em {configDir}/settings.json para exibir pensamento em texto simples (requer reinicialização do Claude Code)",th:"ตั้งค่า showThinkingSummaries ใน {configDir}/settings.json เพื่อแสดงการคิดเป็นข้อความธรรมดา (ต้องรีสตาร์ท Claude Code)",tr:"Düşünmenin düz metin olarak görüntülenmesi için {configDir}/settings.json'da showThinkingSummaries ayarını yapar (Claude Code yeniden başlatması gerekir)",uk:"Встановлює showThinkingSummaries в {configDir}/settings.json для відображення мислення відкритим текстом (потрібен перезапуск Claude Code)"},"ui.bashCommand":{zh:"Bash 命令",en:"Bash Command","zh-TW":"Bash 命令",ko:"Bash 명령",ja:"Bash コマンド",de:"Bash-Befehl",es:"Comando Bash",fr:"Commande Bash",it:"Comando Bash",da:"Bash-kommando",pl:"Polecenie Bash",ru:"Команда Bash",ar:"أمر Bash",no:"Bash-kommando","pt-BR":"Comando Bash",th:"คำสั่ง Bash",tr:"Bash Komutu",uk:"Команда Bash"},"ui.lines":{zh:"行",en:"lines","zh-TW":"行",ko:"줄",ja:"行",de:"Zeilen",es:"líneas",fr:"lignes",it:"righe",da:"linjer",pl:"wierszy",ru:"строк",ar:"أسطر",no:"linjer","pt-BR":"linhas",th:"บรรทัด",tr:"satır",uk:"рядків"},"ui.skillLoaded":{zh:"Skill 已加载",en:"Skill Loaded","zh-TW":"Skill 已載入",ko:"Skill 로드됨",ja:"Skill 読み込み済み",de:"Skill geladen",es:"Skill cargado",fr:"Skill chargé",it:"Skill caricato",da:"Skill indlæst",pl:"Skill załadowany",ru:"Skill загружен",ar:"تم تحميل Skill",no:"Skill lastet","pt-BR":"Skill carregado",th:"โหลด Skill แล้ว",tr:"Skill yüklendi",uk:"Skill завантажено"},"ui.cacheLoss.ttl":{zh:"缓存丢失:距上次 MainAgent 请求超过 5 分钟,缓存已过期",en:"Cache miss: over 5 minutes since last MainAgent request, cache expired","zh-TW":"快取遺失:距上次 MainAgent 請求超過 5 分鐘,快取已過期",ko:"캐시 손실: 마지막 MainAgent 요청 후 5분 초과, 캐시 만료",ja:"キャッシュミス:前回の MainAgent リクエストから5分以上経過、キャッシュ期限切れ",de:"Cache-Verlust: Über 5 Minuten seit letzter MainAgent-Anfrage, Cache abgelaufen",es:"Pérdida de caché: más de 5 minutos desde la última solicitud MainAgent, caché expirada",fr:"Perte de cache : plus de 5 minutes depuis la dernière requête MainAgent, cache expiré",it:"Cache persa: oltre 5 minuti dall'ultima richiesta MainAgent, cache scaduta",da:"Cache-tab: over 5 minutter siden sidste MainAgent-forespørgsel, cache udløbet",pl:"Utrata cache: ponad 5 minut od ostatniego żądania MainAgent, cache wygasł",ru:"Потеря кэша: прошло более 5 минут с последнего запроса MainAgent, кэш истёк",ar:"فقدان التخزين المؤقت: مرور أكثر من 5 دقائق منذ آخر طلب MainAgent، انتهت صلاحية التخزين المؤقت",no:"Cache-tap: over 5 minutter siden siste MainAgent-forespørsel, cache utløpt","pt-BR":"Perda de cache: mais de 5 minutos desde a última requisição MainAgent, cache expirado",th:"แคชหาย: เกิน 5 นาทีจากคำขอ MainAgent ล่าสุด แคชหมดอายุ",tr:"Önbellek kaybı: Son MainAgent isteğinden 5 dakikadan fazla geçti, önbellek süresi doldu",uk:"Втрата кешу: минуло понад 5 хвилин з останнього запиту MainAgent, кеш закінчився"},"ui.cacheLoss.systemChange":{zh:"缓存重建:system prompt 发生变更",en:"Cache rebuild: system prompt changed","zh-TW":"快取重建:system prompt 發生變更",ko:"캐시 재생성: 시스템 프롬프트 변경",ja:"キャッシュ再構築:システムプロンプトが変更されました",de:"Cache-Neuaufbau: System-Prompt geändert",es:"Reconstrucción de caché: el prompt del sistema cambió",fr:"Reconstruction du cache : le prompt système a changé",it:"Ricostruzione cache: il prompt di sistema è cambiato",da:"Cache-genopbygning: systemprompt ændret",pl:"Odbudowa cache: prompt systemowy zmieniony",ru:"Перестройка кэша: системный промпт изменён",ar:"إعادة بناء التخزين المؤقت: تم تغيير موجه النظام",no:"Cache-gjenoppbygging: systemprompt endret","pt-BR":"Reconstrução de cache: prompt do sistema alterado",th:"สร้างแคชใหม่: system prompt เปลี่ยนแปลง",tr:"Önbellek yeniden oluşturma: sistem istemi değişti",uk:"Перебудова кешу: системний промпт змінено"},"ui.cacheLoss.toolsChange":{zh:"缓存重建:工具定义发生变更",en:"Cache rebuild: tool definitions changed","zh-TW":"快取重建:工具定義發生變更",ko:"캐시 재생성: 도구 정의 변경",ja:"キャッシュ再構築:ツール定義が変更されました",de:"Cache-Neuaufbau: Tool-Definitionen geändert",es:"Reconstrucción de caché: las definiciones de herramientas cambiaron",fr:"Reconstruction du cache : les définitions d'outils ont changé",it:"Ricostruzione cache: le definizioni degli strumenti sono cambiate",da:"Cache-genopbygning: værktøjsdefinitioner ændret",pl:"Odbudowa cache: definicje narzędzi zmienione",ru:"Перестройка кэша: определения инструментов изменены",ar:"إعادة بناء التخزين المؤقت: تم تغيير تعريفات الأدوات",no:"Cache-gjenoppbygging: verktøydefinisjoner endret","pt-BR":"Reconstrução de cache: definições de ferramentas alteradas",th:"สร้างแคชใหม่: คำจำกัดความเครื่องมือเปลี่ยนแปลง",tr:"Önbellek yeniden oluşturma: araç tanımları değişti",uk:"Перебудова кешу: визначення інструментів змінено"},"ui.cacheLoss.modelChange":{zh:"缓存重建:模型切换",en:"Cache rebuild: model switched","zh-TW":"快取重建:模型切換",ko:"캐시 재생성: 모델 전환",ja:"キャッシュ再構築:モデルが切り替わりました",de:"Cache-Neuaufbau: Modell gewechselt",es:"Reconstrucción de caché: modelo cambiado",fr:"Reconstruction du cache : modèle changé",it:"Ricostruzione cache: modello cambiato",da:"Cache-genopbygning: model skiftet",pl:"Odbudowa cache: model zmieniony",ru:"Перестройка кэша: модель переключена",ar:"إعادة بناء التخزين المؤقت: تم تبديل النموذج",no:"Cache-gjenoppbygging: modell byttet","pt-BR":"Reconstrução de cache: modelo alterado",th:"สร้างแคชใหม่: เปลี่ยนโมเดล",tr:"Önbellek yeniden oluşturma: model değiştirildi",uk:"Перебудова кешу: модель переключено"},"ui.cacheLoss.msgTruncated":{zh:"缓存重建:消息栈被截断(上下文窗口溢出)",en:"Cache rebuild: message stack truncated (context window overflow)","zh-TW":"快取重建:訊息堆疊被截斷(上下文視窗溢出)",ko:"캐시 재생성: 메시지 스택 잘림 (컨텍스트 윈도우 오버플로)",ja:"キャッシュ再構築:メッセージスタックが切り詰められました(コンテキストウィンドウオーバーフロー)",de:"Cache-Neuaufbau: Nachrichtenstapel gekürzt (Kontextfenster-Überlauf)",es:"Reconstrucción de caché: pila de mensajes truncada (desbordamiento de ventana de contexto)",fr:"Reconstruction du cache : pile de messages tronquée (dépassement de la fenêtre de contexte)",it:"Ricostruzione cache: stack messaggi troncato (overflow finestra di contesto)",da:"Cache-genopbygning: beskedstakken afkortet (kontekstvindue-overløb)",pl:"Odbudowa cache: stos wiadomości obcięty (przepełnienie okna kontekstu)",ru:"Перестройка кэша: стек сообщений усечён (переполнение контекстного окна)",ar:"إعادة بناء التخزين المؤقت: تم اقتطاع مكدس الرسائل (تجاوز نافذة السياق)",no:"Cache-gjenoppbygging: meldingsstakken avkortet (kontekstvindu-overflyt)","pt-BR":"Reconstrução de cache: pilha de mensagens truncada (estouro da janela de contexto)",th:"สร้างแคชใหม่: สแต็กข้อความถูกตัด (context window ล้น)",tr:"Önbellek yeniden oluşturma: mesaj yığını kesildi (bağlam penceresi taşması)",uk:"Перебудова кешу: стек повідомлень обрізано (переповнення контекстного вікна)"},"ui.cacheLoss.msgModified":{zh:"缓存重建:历史消息内容被修改",en:"Cache rebuild: historical message content modified","zh-TW":"快取重建:歷史訊息內容被修改",ko:"캐시 재생성: 이전 메시지 내용 수정됨",ja:"キャッシュ再構築:過去のメッセージ内容が変更されました",de:"Cache-Neuaufbau: Historische Nachrichteninhalte geändert",es:"Reconstrucción de caché: contenido de mensajes históricos modificado",fr:"Reconstruction du cache : contenu des messages historiques modifié",it:"Ricostruzione cache: contenuto dei messaggi storici modificato",da:"Cache-genopbygning: historisk beskedindhold ændret",pl:"Odbudowa cache: treść historycznych wiadomości zmodyfikowana",ru:"Перестройка кэша: содержимое исторических сообщений изменено",ar:"إعادة بناء التخزين المؤقت: تم تعديل محتوى الرسائل السابقة",no:"Cache-gjenoppbygging: historisk meldingsinnhold endret","pt-BR":"Reconstrução de cache: conteúdo de mensagens históricas modificado",th:"สร้างแคชใหม่: เนื้อหาข้อความในประวัติถูกแก้ไข",tr:"Önbellek yeniden oluşturma: geçmiş mesaj içeriği değiştirildi",uk:"Перебудова кешу: вміст історичних повідомлень змінено"},"ui.cacheLoss.keyChange":{zh:"缓存重建:缓存键变更(原因未知)",en:"Cache rebuild: cache key changed (unknown reason)","zh-TW":"快取重建:快取鍵變更(原因未知)",ko:"캐시 재생성: 캐시 키 변경 (원인 불명)",ja:"キャッシュ再構築:キャッシュキーが変更されました(原因不明)",de:"Cache-Neuaufbau: Cache-Schlüssel geändert (Grund unbekannt)",es:"Reconstrucción de caché: clave de caché cambiada (razón desconocida)",fr:"Reconstruction du cache : clé de cache modifiée (raison inconnue)",it:"Ricostruzione cache: chiave cache cambiata (motivo sconosciuto)",da:"Cache-genopbygning: cache-nøgle ændret (ukendt årsag)",pl:"Odbudowa cache: klucz cache zmieniony (nieznana przyczyna)",ru:"Перестройка кэша: ключ кэша изменён (причина неизвестна)",ar:"إعادة بناء التخزين المؤقت: تم تغيير مفتاح التخزين المؤقت (سبب غير معروف)",no:"Cache-gjenoppbygging: cache-nøkkel endret (ukjent årsak)","pt-BR":"Reconstrução de cache: chave de cache alterada (motivo desconhecido)",th:"สร้างแคชใหม่: คีย์แคชเปลี่ยนแปลง (ไม่ทราบสาเหตุ)",tr:"Önbellek yeniden oluşturma: önbellek anahtarı değişti (bilinmeyen neden)",uk:"Перебудова кешу: ключ кешу змінено (причина невідома)"},"ui.cacheRebuildStats":{zh:"缓存重建统计",en:"Cache Rebuild Stats","zh-TW":"快取重建統計",ko:"캐시 재구축 통계",ja:"キャッシュ再構築統計",de:"Cache-Neuaufbau-Statistik",es:"Estadísticas de reconstrucción de caché",fr:"Statistiques de reconstruction du cache",it:"Statistiche ricostruzione cache",da:"Cache-genopbygningsstatistik",pl:"Statystyki przebudowy cache",ru:"Статистика перестройки кеша",ar:"إحصائيات إعادة بناء ذاكرة التخزين المؤقت",no:"Cache-gjenoppbyggingsstatistikk","pt-BR":"Estatísticas de reconstrução de cache",th:"สถิติการสร้างแคชใหม่",tr:"Önbellek Yeniden Oluşturma İstatistikleri",uk:"Статистика перебудови кешу"},"ui.cacheRebuild.reason":{zh:"原因",en:"Reason","zh-TW":"原因",ko:"원인",ja:"原因",de:"Ursache",es:"Razón",fr:"Raison",it:"Motivo",da:"Årsag",pl:"Przyczyna",ru:"Причина",ar:"السبب",no:"Årsak","pt-BR":"Razão",th:"สาเหตุ",tr:"Neden",uk:"Причина"},"ui.cacheRebuild.count":{zh:"次数",en:"Count","zh-TW":"次數",ko:"횟수",ja:"回数",de:"Anzahl",es:"Veces",fr:"Nombre",it:"Volte",da:"Antal",pl:"Liczba",ru:"Кол-во",ar:"العدد",no:"Antall","pt-BR":"Vezes",th:"จำนวน",tr:"Sayı",uk:"Кількість"},"ui.cacheRebuild.cacheCreate":{zh:"重建缓存量",en:"Cache Created","zh-TW":"重建快取量",ko:"재구축 캐시량",ja:"再構築キャッシュ量",de:"Cache erstellt",es:"Caché creado",fr:"Cache créé",it:"Cache creata",da:"Cache oprettet",pl:"Utworzony cache",ru:"Создано кеша",ar:"الذاكرة المؤقتة المُنشأة",no:"Cache opprettet","pt-BR":"Cache criado",th:"แคชที่สร้าง",tr:"Oluşturulan önbellek",uk:"Створено кешу"},"ui.skillUsageStats":{zh:"Skill 使用统计",en:"Skill Usage Stats","zh-TW":"Skill 使用統計",ko:"Skill 사용 통계",ja:"Skill 使用統計",de:"Skill-Nutzungsstatistik",es:"Estadísticas de uso de Skills",fr:"Statistiques d'utilisation des Skills",it:"Statistiche utilizzo Skill",da:"Skill-brugsstatistik",pl:"Statystyki użycia Skill",ru:"Статистика использования Skill",ar:"إحصائيات استخدام Skill",no:"Skill-bruksstatistikk","pt-BR":"Estatísticas de uso de Skills",th:"สถิติการใช้ Skill",tr:"Skill Kullanım İstatistikleri",uk:"Статистика використання Skill"},"ui.toolUsageStats":{zh:"工具使用统计",en:"Tool Usage Stats","zh-TW":"工具使用統計",ko:"도구 사용 통계",ja:"ツール使用統計",de:"Tool-Nutzungsstatistik",es:"Estadísticas de uso de herramientas",fr:"Statistiques d'utilisation des outils",it:"Statistiche utilizzo strumenti",da:"Værktøjsbrugsstatistik",pl:"Statystyki użycia narzędzi",ru:"Статистика использования инструментов",ar:"إحصائيات استخدام الأدوات",no:"Verktøybruksstatistikk","pt-BR":"Estatísticas de uso de ferramentas",th:"สถิติการใช้เครื่องมือ",tr:"Araç Kullanım İstatistikleri",uk:"Статистика використання інструментів"},"ui.subAgentStats":{zh:"SubAgent 调用统计",en:"SubAgent Call Stats","zh-TW":"SubAgent 調用統計",ko:"SubAgent 호출 통계",ja:"SubAgent 呼び出し統計",de:"SubAgent-Aufrufstatistik",es:"Estadísticas de llamadas SubAgent",fr:"Statistiques d'appels SubAgent",it:"Statistiche chiamate SubAgent",da:"SubAgent-kaldsstatistik",pl:"Statystyki wywołań SubAgent",ru:"Статистика вызовов SubAgent",ar:"إحصائيات استدعاء SubAgent",no:"SubAgent-anropsstatistikk","pt-BR":"Estatísticas de chamadas SubAgent",th:"สถิติการเรียก SubAgent",tr:"SubAgent Çağrı İstatistikleri",uk:"Статистика викликів SubAgent"},"ui.mergeLogs":{zh:"合并日志",en:"Merge Logs","zh-TW":"合併日誌",ko:"로그 병합",ja:"ログを結合",de:"Logs zusammenführen",es:"Fusionar logs",fr:"Fusionner les logs",it:"Unisci log",da:"Flet logs",pl:"Scal logi",ru:"Объединить логи",ar:"دمج السجلات",no:"Slå sammen logger","pt-BR":"Mesclar logs",th:"รวมบันทึก",tr:"Logları birleştir",uk:"Об'єднати логи"},"ui.deleteLogs":{zh:"删除日志",en:"Delete Logs","zh-TW":"刪除日誌",ko:"로그 삭제",ja:"ログを削除",de:"Logs löschen",es:"Eliminar logs",fr:"Supprimer les logs",it:"Elimina log",da:"Slet logs",pl:"Usuń logi",ru:"Удалить логи",ar:"حذف السجلات",no:"Slett logger","pt-BR":"Excluir logs",th:"ลบบันทึก",tr:"Logları sil",uk:"Видалити логи"},"ui.refreshStats":{zh:"刷新",en:"Refresh","zh-TW":"重新整理",ko:"새로고침",ja:"更新",de:"Aktualisieren",es:"Actualizar",fr:"Actualiser",it:"Aggiorna",da:"Opdater",pl:"Odśwież",ru:"Обновить",ar:"تحديث",no:"Oppdater","pt-BR":"Atualizar",th:"รีเฟรช",tr:"Yenile",uk:"Оновити"},"ui.refreshStatsSuccess":{zh:"统计数据已刷新",en:"Stats refreshed","zh-TW":"統計資料已重新整理",ko:"통계가 새로고침되었습니다",ja:"統計が更新されました",de:"Statistiken aktualisiert",es:"Estadísticas actualizadas",fr:"Statistiques actualisées",it:"Statistiche aggiornate",da:"Statistik opdateret",pl:"Statystyki odświeżone",ru:"Статистика обновлена",ar:"تم تحديث الإحصائيات",no:"Statistikk oppdatert","pt-BR":"Estatísticas atualizadas",th:"รีเฟรชสถิติแล้ว",tr:"İstatistikler yenilendi",uk:"Статистику оновлено"},"ui.refreshStatsFailed":{zh:"刷新统计失败",en:"Failed to refresh stats","zh-TW":"重新整理統計失敗",ko:"통계 새로고침 실패",ja:"統計の更新に失敗しました",de:"Statistiken konnten nicht aktualisiert werden",es:"Error al actualizar estadísticas",fr:"Échec de l'actualisation des statistiques",it:"Aggiornamento statistiche fallito",da:"Kunne ikke opdatere statistik",pl:"Nie udało się odświeżyć statystyk",ru:"Не удалось обновить статистику",ar:"فشل تحديث الإحصائيات",no:"Kunne ikke oppdatere statistikk","pt-BR":"Falha ao atualizar estatísticas",th:"รีเฟรชสถิติล้มเหลว",tr:"İstatistikler yenilenemedi",uk:"Не вдалося оновити статистику"},"ui.deleteLogsConfirm":{zh:"确定要删除选中的 {count} 个日志文件吗?此操作不可撤销。",en:"Are you sure you want to delete {count} selected log file(s)? This action cannot be undone.","zh-TW":"確定要刪除選中的 {count} 個日誌檔案嗎?此操作無法復原。",ko:"선택한 {count}개의 로그 파일을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",ja:"選択した {count} 件のログファイルを削除しますか?この操作は元に戻せません。",de:"Möchten Sie die {count} ausgewählten Logdateien wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.",es:"¿Está seguro de que desea eliminar {count} archivo(s) de registro seleccionado(s)? Esta acción no se puede deshacer.",fr:"Êtes-vous sûr de vouloir supprimer {count} fichier(s) journal sélectionné(s) ? Cette action est irréversible.",it:"Sei sicuro di voler eliminare {count} file di log selezionati? Questa azione non può essere annullata.",da:"Er du sikker på, at du vil slette {count} valgte logfil(er)? Denne handling kan ikke fortrydes.",pl:"Czy na pewno chcesz usunąć {count} wybranych plików logów? Tej operacji nie można cofnąć.",ru:"Вы уверены, что хотите удалить {count} выбранных файлов журнала? Это действие необратимо.",ar:"هل أنت متأكد من حذف {count} ملف(ات) سجل محدد؟ لا يمكن التراجع عن هذا الإجراء.",no:"Er du sikker på at du vil slette {count} valgte loggfil(er)? Denne handlingen kan ikke angres.","pt-BR":"Tem certeza de que deseja excluir {count} arquivo(s) de log selecionado(s)? Esta ação não pode ser desfeita.",th:"คุณแน่ใจหรือไม่ว่าต้องการลบ {count} ไฟล์บันทึกที่เลือก? การดำเนินการนี้ไม่สามารถย้อนกลับได้",tr:"Seçili {count} günlük dosyasını silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.",uk:"Ви впевнені, що хочете видалити {count} вибраних файлів журналу? Цю дію не можна скасувати."},"ui.openLog":{zh:"打开",en:"Open","zh-TW":"開啟",ko:"열기",ja:"開く",de:"Öffnen",es:"Abrir",fr:"Ouvrir",it:"Apri",da:"Åbn",pl:"Otwórz",ru:"Открыть",ar:"فتح",no:"Åpne","pt-BR":"Abrir",th:"เปิด",tr:"Aç",uk:"Відкрити"},"ui.downloadLog":{zh:"下载",en:"Download","zh-TW":"下載",ko:"다운로드",ja:"ダウンロード",de:"Herunterladen",es:"Descargar",fr:"Télécharger",it:"Scarica",da:"Download",pl:"Pobierz",ru:"Скачать",ar:"تنزيل",no:"Last ned","pt-BR":"Baixar",th:"ดาวน์โหลด",tr:"İndir",uk:"Завантажити"},"ui.logPreview":{zh:"概览",en:"Preview","zh-TW":"概覽",ko:"미리보기",ja:"プレビュー",de:"Vorschau",es:"Vista previa",fr:"Aperçu",it:"Anteprima",da:"Forhåndsvisning",pl:"Podgląd",ru:"Обзор",ar:"معاينة",no:"Forhåndsvisning","pt-BR":"Prévia",th:"ตัวอย่าง",tr:"Önizleme",uk:"Огляд"},"ui.logTime":{zh:"时间",en:"Time","zh-TW":"時間",ko:"시간",ja:"時間",de:"Zeit",es:"Hora",fr:"Heure",it:"Ora",da:"Tid",pl:"Czas",ru:"Время",ar:"الوقت",no:"Tid","pt-BR":"Hora",th:"เวลา",tr:"Zaman",uk:"Час"},"ui.logSize":{zh:"大小",en:"Size","zh-TW":"大小",ko:"크기",ja:"サイズ",de:"Größe",es:"Tamaño",fr:"Taille",it:"Dimensione",da:"Størrelse",pl:"Rozmiar",ru:"Размер",ar:"الحجم",no:"Størrelse","pt-BR":"Tamanho",th:"ขนาด",tr:"Boyut",uk:"Розмір"},"ui.logTurns":{zh:"对话轮次",en:"Turns","zh-TW":"對話輪次",ko:"대화 턴",ja:"対話ターン",de:"Dialogrunden",es:"Turnos de diálogo",fr:"Tours de dialogue",it:"Turni di dialogo",da:"Dialogrunder",pl:"Tury dialogu",ru:"Раунды диалога",ar:"جولات الحوار",no:"Dialogrunder","pt-BR":"Turnos de diálogo",th:"รอบการสนทนา",tr:"Diyalog turları",uk:"Раунди діалогу"},"ui.logActions":{zh:"操作",en:"Actions","zh-TW":"操作",ko:"작업",ja:"操作",de:"Aktionen",es:"Acciones",fr:"Actions",it:"Azioni",da:"Handlinger",pl:"Akcje",ru:"Действия",ar:"الإجراءات",no:"Handlinger","pt-BR":"Ações",th:"การดำเนินการ",tr:"İşlemler",uk:"Дії"},"ui.turns":{zh:"轮",en:"turns","zh-TW":"輪",ko:"턴",ja:"ターン",de:"Runden",es:"turnos",fr:"tours",it:"turni",da:"runder",pl:"tur",ru:"ходов",ar:"جولات",no:"runder","pt-BR":"turnos",th:"รอบ",tr:"tur",uk:"ходів"},"ui.mergeNotConsecutive":{zh:"请选择连续的日志文件",en:"Please select consecutive log files","zh-TW":"請選擇連續的日誌檔案",ko:"연속된 로그 파일을 선택하세요",ja:"連続したログファイルを選択してください",de:"Bitte wählen Sie aufeinanderfolgende Log-Dateien",es:"Seleccione archivos de log consecutivos",fr:"Veuillez sélectionner des fichiers de log consécutifs",it:"Seleziona file di log consecutivi",da:"Vælg venligst sammenhængende logfiler",pl:"Wybierz kolejne pliki logów",ru:"Выберите последовательные файлы логов",ar:"يرجى اختيار ملفات سجلات متتالية",no:"Velg sammenhengende loggfiler","pt-BR":"Selecione arquivos de log consecutivos",th:"กรุณาเลือกไฟล์บันทึกที่ต่อเนื่องกัน",tr:"Lütfen ardışık log dosyalarını seçin",uk:"Виберіть послідовні файли логів"},"ui.mergeTooLarge":{zh:"选中的日志文件总大小超过 500MB",en:"Selected log files exceed 500MB","zh-TW":"選中的日誌檔案總大小超過 500MB",ko:"선택한 로그 파일의 총 크기가 500MB를 초과합니다",ja:"選択したログファイルの合計サイズが 500MB を超えています",de:"Ausgewählte Log-Dateien überschreiten 500MB",es:"Los archivos de log seleccionados superan los 500MB",fr:"Les fichiers de log sélectionnés dépassent 500 Mo",it:"I file di log selezionati superano i 500MB",da:"Valgte logfiler overstiger 500MB",pl:"Wybrane pliki logów przekraczają 500MB",ru:"Выбранные файлы логов превышают 500МБ",ar:"ملفات السجلات المحددة تتجاوز 500 ميجابايت",no:"Valgte loggfiler overstiger 500MB","pt-BR":"Arquivos de log selecionados excedem 500MB",th:"ไฟล์บันทึกที่เลือกมีขนาดรวมเกิน 500MB",tr:"Seçilen log dosyaları 500MB'ı aşıyor",uk:"Вибрані файли логів перевищують 500МБ"},"ui.mergeSuccess":{zh:"日志合并成功",en:"Logs merged successfully","zh-TW":"日誌合併成功",ko:"로그 병합 성공",ja:"ログの結合に成功しました",de:"Logs erfolgreich zusammengeführt",es:"Logs fusionados correctamente",fr:"Logs fusionnés avec succès",it:"Log uniti con successo",da:"Logs flettet",pl:"Logi scalone pomyślnie",ru:"Логи успешно объединены",ar:"تم دمج السجلات بنجاح",no:"Logger slått sammen","pt-BR":"Logs mesclados com sucesso",th:"รวมบันทึกสำเร็จ",tr:"Loglar başarıyla birleştirildi",uk:"Логи успішно об'єднано"},"ui.deleteSuccess":{zh:"已成功删除 {count} 个日志文件",en:"{count} log file(s) deleted successfully","zh-TW":"已成功刪除 {count} 個日誌檔案",ko:"{count}개의 로그 파일이 삭제되었습니다",ja:"{count} 件のログファイルを削除しました",de:"{count} Logdatei(en) erfolgreich gelöscht",es:"{count} archivo(s) de registro eliminado(s) correctamente",fr:"{count} fichier(s) journal supprimé(s) avec succès",it:"{count} file di log eliminati con successo",da:"{count} logfil(er) slettet",pl:"Pomyślnie usunięto {count} plików logów",ru:"Успешно удалено {count} файлов журнала",ar:"تم حذف {count} ملف(ات) سجل بنجاح",no:"{count} loggfil(er) slettet","pt-BR":"{count} arquivo(s) de log excluído(s) com sucesso",th:"ลบ {count} ไฟล์บันทึกสำเร็จ",tr:"{count} günlük dosyası başarıyla silindi",uk:"Успішно видалено {count} файлів журналу"},"ui.deleteFailed":{zh:"{count} 个文件删除失败",en:"{count} file(s) failed to delete","zh-TW":"{count} 個檔案刪除失敗",ko:"{count}개 파일 삭제 실패",ja:"{count} 件のファイルの削除に失敗しました",de:"{count} Datei(en) konnten nicht gelöscht werden",es:"Error al eliminar {count} archivo(s)",fr:"Échec de la suppression de {count} fichier(s)",it:"Eliminazione di {count} file fallita",da:"{count} fil(er) kunne ikke slettes",pl:"Nie udało się usunąć {count} plików",ru:"Не удалось удалить {count} файлов",ar:"فشل حذف {count} ملف(ات)",no:"{count} fil(er) kunne ikke slettes","pt-BR":"Falha ao excluir {count} arquivo(s)",th:"ลบ {count} ไฟล์ไม่สำเร็จ",tr:"{count} dosya silinemedi",uk:"Не вдалося видалити {count} файлів"},"ui.cancel":{zh:"取消",en:"Cancel","zh-TW":"取消",ko:"취소",ja:"キャンセル",de:"Abbrechen",es:"Cancelar",fr:"Annuler",it:"Annulla",da:"Annuller",pl:"Anuluj",ru:"Отмена",ar:"إلغاء",no:"Avbryt","pt-BR":"Cancelar",th:"ยกเลิก",tr:"İptal",uk:"Скасувати"},"ui.mergeLatestNotAllowed":{zh:"最新的日志文件不允许被合并,以避免当前窗口日志丢失",en:"The latest log file cannot be merged to avoid losing the current session","zh-TW":"最新的日誌檔案不允許被合併,以避免當前視窗日誌遺失",ko:"현재 세션 손실을 방지하기 위해 최신 로그 파일은 병합할 수 없습니다",ja:"現在のセッションの損失を防ぐため、最新のログファイルは結合できません",de:"Die neueste Logdatei kann nicht zusammengeführt werden, um den Verlust der aktuellen Sitzung zu vermeiden",es:"El archivo de log más reciente no se puede fusionar para evitar perder la sesión actual",fr:"Le fichier de log le plus récent ne peut pas être fusionné pour éviter la perte de la session en cours",it:"Il file di log più recente non può essere unito per evitare la perdita della sessione corrente",da:"Den nyeste logfil kan ikke flettes for at undgå tab af den aktuelle session",pl:"Najnowszy plik logów nie może być scalony, aby uniknąć utraty bieżącej sesji",ru:"Последний файл логов не может быть объединён, чтобы избежать потери текущей сессии",ar:"لا يمكن دمج أحدث ملف سجل لتجنب فقدان الجلسة الحالية",no:"Den nyeste loggfilen kan ikke slås sammen for å unngå tap av gjeldende økt","pt-BR":"O arquivo de log mais recente não pode ser mesclado para evitar perda da sessão atual",th:"ไม่สามารถรวมไฟล์บันทึกล่าสุดเพื่อหลีกเลี่ยงการสูญเสียเซสชันปัจจุบัน",tr:"Mevcut oturumun kaybını önlemek için en son günlük dosyası birleştirilemez",uk:"Найновіший файл логів не може бути об'єднаний, щоб уникнути втрати поточної сесії"},"ui.projectStats":{zh:"项目统计",en:"Project Stats","zh-TW":"專案統計",ko:"프로젝트 통계",ja:"プロジェクト統計",de:"Projektstatistik",es:"Estadísticas del proyecto",fr:"Statistiques du projet",it:"Statistiche progetto",da:"Projektstatistik",pl:"Statystyki projektu",ru:"Статистика проекта",ar:"إحصائيات المشروع",no:"Prosjektstatistikk","pt-BR":"Estatísticas do projeto",th:"สถิติโปรเจกต์",tr:"Proje İstatistikleri",uk:"Статистика проєкту"},"ui.projectStats.totalRequests":{zh:"总请求数",en:"Total Requests","zh-TW":"總請求數",ko:"총 요청 수",ja:"リクエスト総数",de:"Gesamtanfragen",es:"Total de solicitudes",fr:"Total des requêtes",it:"Richieste totali",da:"Samlede forespørgsler",pl:"Łączna liczba żądań",ru:"Всего запросов",ar:"إجمالي الطلبات",no:"Totale forespørsler","pt-BR":"Total de requisições",th:"คำขอทั้งหมด",tr:"Toplam İstekler",uk:"Всього запитів"},"ui.projectStats.sessionCount":{zh:"会话轮次",en:"Sessions","zh-TW":"會話輪次",ko:"세션 수",ja:"セッション数",de:"Sitzungen",es:"Sesiones",fr:"Sessions",it:"Sessioni",da:"Sessioner",pl:"Sesje",ru:"Сессий",ar:"الجلسات",no:"Sesjoner","pt-BR":"Sessões",th:"เซสชัน",tr:"Oturumlar",uk:"Сесії"},"ui.projectStats.turnCount":{zh:"对话轮次",en:"Turns","zh-TW":"對話輪次",ko:"대화 턴",ja:"ターン数",de:"Gesprächsrunden",es:"Turnos",fr:"Tours",it:"Turni",da:"Ture",pl:"Tury",ru:"Ходов",ar:"الأدوار",no:"Turer","pt-BR":"Turnos",th:"เทิร์น",tr:"Turlar",uk:"Ходів"},"ui.projectStats.totalFiles":{zh:"会话文件数",en:"Session Files","zh-TW":"會話檔案數",ko:"세션 파일 수",ja:"セッションファイル数",de:"Sitzungsdateien",es:"Archivos de sesión",fr:"Fichiers de session",it:"File di sessione",da:"Sessionsfiler",pl:"Pliki sesji",ru:"Файлов сессий",ar:"ملفات الجلسات",no:"Sesjonsfiler","pt-BR":"Arquivos de sessão",th:"ไฟล์เซสชัน",tr:"Oturum Dosyaları",uk:"Файли сесій"},"ui.projectStats.modelUsage":{zh:"模型使用统计",en:"Model Usage","zh-TW":"模型使用統計",ko:"모델 사용 통계",ja:"モデル使用統計",de:"Modellnutzung",es:"Uso de modelos",fr:"Utilisation des modèles",it:"Utilizzo modelli",da:"Modelbrug",pl:"Użycie modeli",ru:"Использование моделей",ar:"استخدام النماذج",no:"Modellbruk","pt-BR":"Uso de modelos",th:"การใช้โมเดล",tr:"Model Kullanımı",uk:"Використання моделей"},"ui.projectStats.noData":{zh:"暂无统计数据",en:"No stats available","zh-TW":"暫無統計資料",ko:"통계 데이터 없음",ja:"統計データなし",de:"Keine Statistiken verfügbar",es:"Sin estadísticas disponibles",fr:"Aucune statistique disponible",it:"Nessuna statistica disponibile",da:"Ingen statistik tilgængelig",pl:"Brak dostępnych statystyk",ru:"Статистика недоступна",ar:"لا توجد إحصائيات متاحة",no:"Ingen statistikk tilgjengelig","pt-BR":"Sem estatísticas disponíveis",th:"ไม่มีข้อมูลสถิติ",tr:"İstatistik mevcut değil",uk:"Статистика недоступна"},"ui.projectStats.updatedAt":{zh:"更新于 {time}",en:"Updated at {time}","zh-TW":"更新於 {time}",ko:"{time}에 업데이트됨",ja:"{time} に更新",de:"Aktualisiert um {time}",es:"Actualizado a las {time}",fr:"Mis à jour à {time}",it:"Aggiornato alle {time}",da:"Opdateret {time}",pl:"Zaktualizowano {time}",ru:"Обновлено в {time}",ar:"تم التحديث في {time}",no:"Oppdatert {time}","pt-BR":"Atualizado em {time}",th:"อัปเดตเมื่อ {time}",tr:"{time} tarihinde güncellendi",uk:"Оновлено о {time}"},"ui.update.title":{zh:"版本信息",en:"Version Info","zh-TW":"版本資訊",ko:"버전 정보",ja:"バージョン情報",de:"Versionsinformationen",es:"Información de versión",fr:"Informations de version",it:"Informazioni versione",da:"Versionsinfo",pl:"Informacje o wersji",ru:"Информация о версии",ar:"معلومات الإصدار",no:"Versjonsinformasjon","pt-BR":"Informações da versão",th:"ข้อมูลเวอร์ชัน",tr:"Sürüm bilgisi",uk:"Інформація про версію"},"ui.update.current":{zh:"当前版本",en:"Current version","zh-TW":"目前版本",ko:"현재 버전",ja:"現在のバージョン",de:"Aktuelle Version",es:"Versión actual",fr:"Version actuelle",it:"Versione corrente",da:"Nuværende version",pl:"Bieżąca wersja",ru:"Текущая версия",ar:"الإصدار الحالي",no:"Gjeldende versjon","pt-BR":"Versão atual",th:"เวอร์ชันปัจจุบัน",tr:"Mevcut sürüm",uk:"Поточна версія"},"ui.update.latest":{zh:"最新版本",en:"Latest version","zh-TW":"最新版本",ko:"최신 버전",ja:"最新バージョン",de:"Neueste Version",es:"Última versión",fr:"Dernière version",it:"Ultima versione",da:"Seneste version",pl:"Najnowsza wersja",ru:"Последняя версия",ar:"أحدث إصدار",no:"Nyeste versjon","pt-BR":"Versão mais recente",th:"เวอร์ชันล่าสุด",tr:"Son sürüm",uk:"Остання версія"},"ui.update.npm":{zh:"npm 版本更新",en:"Update via npm","zh-TW":"npm 版本更新",ko:"npm으로 업데이트",ja:"npm で更新",de:"Über npm aktualisieren",es:"Actualizar vía npm",fr:"Mettre à jour via npm",it:"Aggiorna via npm",da:"Opdater via npm",pl:"Aktualizuj przez npm",ru:"Обновить через npm",ar:"التحديث عبر npm",no:"Oppdater via npm","pt-BR":"Atualizar via npm",th:"อัปเดตผ่าน npm",tr:"npm ile güncelle",uk:"Оновити через npm"},"ui.update.electron":{zh:"Electron 桌面版更新",en:"Update Electron Desktop","zh-TW":"Electron 桌面版更新",ko:"Electron 데스크톱 업데이트",ja:"Electron デスクトップ更新",de:"Electron Desktop aktualisieren",es:"Actualizar Electron Desktop",fr:"Mettre à jour Electron Desktop",it:"Aggiorna Electron Desktop",da:"Opdater Electron Desktop",pl:"Aktualizuj Electron Desktop",ru:"Обновить Electron Desktop",ar:"تحديث Electron Desktop",no:"Oppdater Electron Desktop","pt-BR":"Atualizar Electron Desktop",th:"อัปเดต Electron Desktop",tr:"Electron Desktop Güncelle",uk:"Оновити Electron Desktop"},"ui.update.electronDesc":{zh:"请从 GitHub Releases 下载最新版本的安装包。",en:"Download the latest installer from GitHub Releases.","zh-TW":"請從 GitHub Releases 下載最新版本的安裝包。",ko:"GitHub Releases에서 최신 설치 프로그램을 다운로드하세요.",ja:"GitHub Releases から最新のインストーラーをダウンロードしてください。",de:"Laden Sie das neueste Installationsprogramm von GitHub Releases herunter.",es:"Descargue el instalador más reciente de GitHub Releases.",fr:"Téléchargez le dernier installeur depuis GitHub Releases.",it:"Scarica l'ultimo installer da GitHub Releases.",da:"Download det nyeste installationsprogram fra GitHub Releases.",pl:"Pobierz najnowszy instalator z GitHub Releases.",ru:"Скачайте последний установщик из GitHub Releases.",ar:"قم بتنزيل أحدث مثبت من GitHub Releases.",no:"Last ned det nyeste installasjonsprogrammet fra GitHub Releases.","pt-BR":"Baixe o instalador mais recente do GitHub Releases.",th:"ดาวน์โหลดตัวติดตั้งล่าสุดจาก GitHub Releases",tr:"GitHub Releases'dan en son yükleyiciyi indirin.",uk:"Завантажте останній інсталятор з GitHub Releases."},"ui.update.step1":{zh:"点击下方按钮进入 GitHub Releases 页面",en:"Click the button below to open GitHub Releases","zh-TW":"點擊下方按鈕進入 GitHub Releases 頁面",ko:"아래 버튼을 클릭하여 GitHub Releases 페이지로 이동",ja:"下のボタンをクリックして GitHub Releases ページを開く",de:"Klicken Sie auf die Schaltfläche unten, um GitHub Releases zu öffnen",es:"Haga clic en el botón para abrir GitHub Releases",fr:"Cliquez sur le bouton ci-dessous pour ouvrir GitHub Releases",it:"Clicca il pulsante sotto per aprire GitHub Releases",da:"Klik på knappen nedenfor for at åbne GitHub Releases",pl:"Kliknij przycisk poniżej, aby otworzyć GitHub Releases",ru:"Нажмите кнопку ниже, чтобы открыть GitHub Releases",ar:"انقر على الزر أدناه لفتح GitHub Releases",no:"Klikk på knappen nedenfor for å åpne GitHub Releases","pt-BR":"Clique no botão abaixo para abrir o GitHub Releases",th:"คลิกปุ่มด้านล่างเพื่อเปิด GitHub Releases",tr:"GitHub Releases'ı açmak için aşağıdaki düğmeye tıklayın",uk:"Натисніть кнопку нижче, щоб відкрити GitHub Releases"},"ui.update.step2":{zh:"下载对应系统的安装包(.dmg / .exe / .AppImage)",en:"Download the installer for your OS (.dmg / .exe / .AppImage)","zh-TW":"下載對應系統的安裝包(.dmg / .exe / .AppImage)",ko:"사용 중인 OS에 맞는 설치 파일 다운로드 (.dmg / .exe / .AppImage)",ja:"お使いの OS 用のインストーラーをダウンロード(.dmg / .exe / .AppImage)",de:"Laden Sie das Installationsprogramm für Ihr OS herunter (.dmg / .exe / .AppImage)",es:"Descargue el instalador para su sistema (.dmg / .exe / .AppImage)",fr:"Téléchargez l'installeur pour votre OS (.dmg / .exe / .AppImage)",it:"Scarica l'installer per il tuo OS (.dmg / .exe / .AppImage)",da:"Download installationsprogrammet til dit OS (.dmg / .exe / .AppImage)",pl:"Pobierz instalator dla swojego systemu (.dmg / .exe / .AppImage)",ru:"Скачайте установщик для вашей ОС (.dmg / .exe / .AppImage)",ar:"قم بتنزيل المثبت لنظامك (.dmg / .exe / .AppImage)",no:"Last ned installasjonsprogrammet for ditt OS (.dmg / .exe / .AppImage)","pt-BR":"Baixe o instalador para seu SO (.dmg / .exe / .AppImage)",th:"ดาวน์โหลดตัวติดตั้งสำหรับระบบของคุณ (.dmg / .exe / .AppImage)",tr:"İşletim sisteminiz için yükleyiciyi indirin (.dmg / .exe / .AppImage)",uk:"Завантажте інсталятор для вашої ОС (.dmg / .exe / .AppImage)"},"ui.update.step3":{zh:"安装后替换旧版本即可",en:"Install to replace the old version","zh-TW":"安裝後替換舊版本即可",ko:"설치하여 이전 버전을 교체",ja:"インストールして旧バージョンを置き換え",de:"Installieren, um die alte Version zu ersetzen",es:"Instale para reemplazar la versión anterior",fr:"Installez pour remplacer l'ancienne version",it:"Installa per sostituire la vecchia versione",da:"Installér for at erstatte den gamle version",pl:"Zainstaluj, aby zastąpić starą wersję",ru:"Установите для замены старой версии",ar:"قم بالتثبيت لاستبدال الإصدار القديم",no:"Installer for å erstatte den gamle versjonen","pt-BR":"Instale para substituir a versão antiga",th:"ติดตั้งเพื่อแทนที่เวอร์ชันเก่า",tr:"Eski sürümü değiştirmek için yükleyin",uk:"Встановіть для заміни старої версії"},"ui.update.goReleases":{zh:"前往 GitHub Releases",en:"Go to GitHub Releases","zh-TW":"前往 GitHub Releases",ko:"GitHub Releases로 이동",ja:"GitHub Releases へ",de:"Zu GitHub Releases",es:"Ir a GitHub Releases",fr:"Aller sur GitHub Releases",it:"Vai a GitHub Releases",da:"Gå til GitHub Releases",pl:"Przejdź do GitHub Releases",ru:"Перейти к GitHub Releases",ar:"انتقل إلى GitHub Releases",no:"Gå til GitHub Releases","pt-BR":"Ir para GitHub Releases",th:"ไปที่ GitHub Releases",tr:"GitHub Releases'a git",uk:"Перейти до GitHub Releases"},"ui.update.completed":{zh:"已更新到 v{version},下次启动生效",en:"Updated to v{version}, effective on next restart","zh-TW":"已更新到 v{version},下次啟動生效",ko:"v{version}으로 업데이트됨, 다음 시작 시 적용",ja:"v{version} に更新済み、次回起動時に有効",de:"Auf v{version} aktualisiert, wirksam beim nächsten Neustart",es:"Actualizado a v{version}, efectivo en el próximo reinicio",fr:"Mis à jour vers v{version}, effectif au prochain redémarrage",it:"Aggiornato a v{version}, effettivo al prossimo riavvio",da:"Opdateret til v{version}, træder i kraft ved næste genstart",pl:"Zaktualizowano do v{version}, obowiązuje po ponownym uruchomieniu",ru:"Обновлено до v{version}, вступит в силу при следующем запуске",ar:"تم التحديث إلى v{version}، سيسري عند إعادة التشغيل التالية",no:"Oppdatert til v{version}, trer i kraft ved neste omstart","pt-BR":"Atualizado para v{version}, efetivo na próxima reinicialização",th:"อัปเดตเป็น v{version} แล้ว มีผลเมื่อเริ่มใหม่",tr:"v{version} sürümüne güncellendi, bir sonraki başlatmada geçerli",uk:"Оновлено до v{version}, набуде чинності при наступному запуску"},"ui.update.majorAvailable":{zh:"新大版本 v{version} 可用,请手动更新: npm i -g cc-viewer@latest",en:"Major version v{version} available, update manually: npm i -g cc-viewer@latest","zh-TW":"新大版本 v{version} 可用,請手動更新: npm i -g cc-viewer@latest",ko:"새 메이저 버전 v{version} 사용 가능, 수동 업데이트: npm i -g cc-viewer@latest",ja:"メジャーバージョン v{version} が利用可能、手動更新: npm i -g cc-viewer@latest",de:"Hauptversion v{version} verfügbar, manuell aktualisieren: npm i -g cc-viewer@latest",es:"Versión principal v{version} disponible, actualice: npm i -g cc-viewer@latest",fr:"Version majeure v{version} disponible, mettez à jour : npm i -g cc-viewer@latest",it:"Versione principale v{version} disponibile, aggiornare: npm i -g cc-viewer@latest",da:"Hovedversion v{version} tilgængelig, opdater manuelt: npm i -g cc-viewer@latest",pl:"Główna wersja v{version} dostępna, zaktualizuj: npm i -g cc-viewer@latest",ru:"Доступна основная версия v{version}, обновите: npm i -g cc-viewer@latest",ar:"الإصدار الرئيسي v{version} متاح، حدّث يدويًا: npm i -g cc-viewer@latest",no:"Hovedversjon v{version} tilgjengelig, oppdater manuelt: npm i -g cc-viewer@latest","pt-BR":"Versão principal v{version} disponível, atualize: npm i -g cc-viewer@latest",th:"เวอร์ชันหลัก v{version} พร้อมใช้งาน อัปเดตด้วยตนเอง: npm i -g cc-viewer@latest",tr:"Ana sürüm v{version} mevcut, manuel güncelleyin: npm i -g cc-viewer@latest",uk:"Доступна основна версія v{version}, оновіть: npm i -g cc-viewer@latest"},"ui.chatInput.placeholder":{zh:"输入消息发送给 Claude...",en:"Type a message to Claude...","zh-TW":"輸入訊息傳送給 Claude...",ko:"Claude에게 메시지를 입력하세요...",ja:"Claudeにメッセージを入力...",de:"Nachricht an Claude eingeben...",es:"Escribe un mensaje para Claude...",fr:"Tapez un message pour Claude...",it:"Scrivi un messaggio per Claude...",da:"Skriv en besked til Claude...",pl:"Wpisz wiadomość do Claude...",ru:"Введите сообщение для Claude...",ar:"اكتب رسالة إلى Claude...",no:"Skriv en melding til Claude...","pt-BR":"Digite uma mensagem para o Claude...",th:"พิมพ์ข้อความถึง Claude...",tr:"Claude'a mesaj yazın...",uk:"Введіть повідомлення для Claude..."},"ui.chatInput.removeImage":{zh:"移除图片",en:"Remove image","zh-TW":"移除圖片",ko:"이미지 제거",ja:"画像を削除",de:"Bild entfernen",es:"Eliminar imagen",fr:"Supprimer l'image",it:"Rimuovi immagine",da:"Fjern billede",pl:"Usuń obraz",ru:"Удалить изображение",ar:"إزالة الصورة",no:"Fjern bilde","pt-BR":"Remover imagem",th:"ลบรูปภาพ",tr:"Resmi kaldır",uk:"Видалити зображення"},"ui.chatInput.confirmRemoveImage":{zh:"确定移除此图片?",en:"Remove this image?","zh-TW":"確定移除此圖片?",ko:"이 이미지를 제거하시겠습니까?",ja:"この画像を削除しますか?",de:"Dieses Bild entfernen?",es:"¿Eliminar esta imagen?",fr:"Supprimer cette image ?",it:"Rimuovere questa immagine?",da:"Fjern dette billede?",pl:"Usunąć ten obraz?",ru:"Удалить это изображение?",ar:"إزالة هذه الصورة؟",no:"Fjerne dette bildet?","pt-BR":"Remover esta imagem?",th:"ลบรูปภาพนี้?",tr:"Bu resim kaldırılsın mı?",uk:"Видалити це зображення?"},"ui.chatInput.confirmRemoveFile":{zh:"确定移除此文件?",en:"Remove this file?","zh-TW":"確定移除此檔案?",ko:"이 파일을 제거하시겠습니까?",ja:"このファイルを削除しますか?",de:"Diese Datei entfernen?",es:"¿Eliminar este archivo?",fr:"Supprimer ce fichier ?",it:"Rimuovere questo file?",da:"Fjern denne fil?",pl:"Usunąć ten plik?",ru:"Удалить этот файл?",ar:"إزالة هذا الملف؟",no:"Fjerne denne filen?","pt-BR":"Remover este arquivo?",th:"ลบไฟล์นี้?",tr:"Bu dosya kaldırılsın mı?",uk:"Видалити цей файл?"},"ui.common.confirmYes":{zh:"确定",en:"Yes","zh-TW":"確定",ko:"예",ja:"はい",de:"Ja",es:"Sí",fr:"Oui",it:"Sì",da:"Ja",pl:"Tak",ru:"Да",ar:"نعم",no:"Ja","pt-BR":"Sim",th:"ใช่",tr:"Evet",uk:"Так"},"ui.common.confirmCancel":{zh:"取消",en:"Cancel","zh-TW":"取消",ko:"취소",ja:"キャンセル",de:"Abbrechen",es:"Cancelar",fr:"Annuler",it:"Annulla",da:"Annuller",pl:"Anuluj",ru:"Отмена",ar:"إلغاء",no:"Avbryt","pt-BR":"Cancelar",th:"ยกเลิก",tr:"İptal",uk:"Скасувати"},"ui.chatInput.more":{zh:"更多",en:"More","zh-TW":"更多",ko:"더보기",ja:"もっと見る",de:"Mehr",es:"Más",fr:"Plus",it:"Altro",da:"Mere",pl:"Więcej",ru:"Ещё",ar:"المزيد",no:"Mer","pt-BR":"Mais",th:"เพิ่มเติม",tr:"Daha fazla",uk:"Ще"},"ui.chatInput.send":{zh:"发送",en:"Send","zh-TW":"傳送",ko:"보내기",ja:"送信",de:"Senden",es:"Enviar",fr:"Envoyer",it:"Invia",da:"Send",pl:"Wyślij",ru:"Отправить",ar:"إرسال",no:"Send","pt-BR":"Enviar",th:"ส่ง",tr:"Gönder",uk:"Надіслати"},"ui.chatInput.stop":{zh:"停止",en:"Stop","zh-TW":"停止",ko:"중지",ja:"停止",de:"Stopp",es:"Detener",fr:"Arrêter",it:"Ferma",da:"Stop",pl:"Zatrzymaj",ru:"Стоп",ar:"إيقاف",no:"Stopp","pt-BR":"Parar",th:"หยุด",tr:"Durdur",uk:"Зупинити"},"ui.chatInput.hintEnter":{zh:"Enter 发送,Shift+Enter 换行",en:"Enter to send, Shift+Enter for new line","zh-TW":"Enter 傳送,Shift+Enter 換行",ko:"Enter로 전송, Shift+Enter로 줄바꿈",ja:"Enterで送信、Shift+Enterで改行",de:"Enter zum Senden, Shift+Enter für neue Zeile",es:"Enter para enviar, Shift+Enter para nueva línea",fr:"Entrée pour envoyer, Shift+Entrée pour nouvelle ligne",it:"Invio per inviare, Shift+Invio per nuova riga",da:"Enter for at sende, Shift+Enter for ny linje",pl:"Enter aby wysłać, Shift+Enter nowa linia",ru:"Enter — отправить, Shift+Enter — новая строка",ar:"Enter للإرسال، Shift+Enter لسطر جديد",no:"Enter for å sende, Shift+Enter for ny linje","pt-BR":"Enter para enviar, Shift+Enter para nova linha",th:"Enter ส่ง, Shift+Enter ขึ้นบรรทัดใหม่",tr:"Enter gönder, Shift+Enter yeni satır",uk:"Enter — надіслати, Shift+Enter — новий рядок"},"ui.chatInput.hintTab":{zh:"Tab 接受建议",en:"Tab to accept suggestion","zh-TW":"Tab 接受建議",ko:"Tab으로 제안 수락",ja:"Tabで提案を受け入れ",de:"Tab zum Akzeptieren des Vorschlags",es:"Tab para aceptar sugerencia",fr:"Tab pour accepter la suggestion",it:"Tab per accettare il suggerimento",da:"Tab for at acceptere forslag",pl:"Tab aby zaakceptować sugestię",ru:"Tab — принять предложение",ar:"Tab لقبول الاقتراح",no:"Tab for å akseptere forslag","pt-BR":"Tab para aceitar sugestão",th:"Tab ยอมรับคำแนะนำ",tr:"Tab ile öneriyi kabul et",uk:"Tab — прийняти пропозицію"},"ui.terminal":{zh:"终端",en:"Terminal","zh-TW":"終端機",ko:"터미널",ja:"ターミナル",de:"Terminal",es:"Terminal",fr:"Terminal",it:"Terminale",da:"Terminal",pl:"Terminal",ru:"Терминал",ar:"طرفية",no:"Terminal","pt-BR":"Terminal",th:"เทอร์มินัล",tr:"Terminal",uk:"Термінал"},"ui.collapseTerminal":{zh:"收起终端",en:"Collapse terminal","zh-TW":"收起終端機",ko:"터미널 접기",ja:"ターミナルを閉じる",de:"Terminal einklappen",es:"Contraer terminal",fr:"Réduire le terminal",it:"Comprimi terminale",da:"Skjul terminal",pl:"Zwiń terminal",ru:"Свернуть терминал",ar:"طي الطرفية",no:"Skjul terminal","pt-BR":"Recolher terminal",th:"ย่อเทอร์มินัล",tr:"Terminali daralt",uk:"Згорнути термінал"},"ui.expandTerminal":{zh:"展开终端",en:"Expand terminal","zh-TW":"展開終端機",ko:"터미널 펼치기",ja:"ターミナルを開く",de:"Terminal ausklappen",es:"Expandir terminal",fr:"Développer le terminal",it:"Espandi terminale",da:"Vis terminal",pl:"Rozwiń terminal",ru:"Развернуть терминал",ar:"توسيع الطرفية",no:"Vis terminal","pt-BR":"Expandir terminal",th:"ขยายเทอร์มินัล",tr:"Terminali genişlet",uk:"Розгорнути термінал"},"ui.stickyBottom":{zh:"保持吸底",en:"Stick to bottom","zh-TW":"保持置底",ko:"하단 고정",ja:"下部に固定",de:"Unten fixieren",es:"Fijar al fondo",fr:"Fixer en bas",it:"Fissa in basso",da:"Fastgør i bunden",pl:"Przypnij na dole",ru:"Прикрепить внизу",ar:"تثبيت في الأسفل",no:"Fest til bunnen","pt-BR":"Fixar no fundo",th:"ตรึงด้านล่าง",tr:"Alta sabitle",uk:"Закріпити внизу"},"ui.enterPlanMode":{zh:"进入计划模式",en:"Entering Plan Mode","zh-TW":"進入計劃模式",ko:"계획 모드 진입",ja:"プランモードに入ります",de:"Planungsmodus wird gestartet",es:"Entrando en modo de planificación",fr:"Entrée en mode planification",it:"Accesso alla modalità pianificazione",da:"Går ind i planlægningstilstand",pl:"Wchodzenie w tryb planowania",ru:"Вход в режим планирования",ar:"الدخول في وضع التخطيط",no:"Går inn i planleggingsmodus","pt-BR":"Entrando no modo de planejamento",th:"เข้าสู่โหมดวางแผน",tr:"Plan moduna giriliyor",uk:"Вхід у режим планування"},"ui.exitPlanMode":{zh:"计划就绪,等待审批",en:"Plan Ready for Approval","zh-TW":"計劃就緒,等待審批",ko:"계획 준비 완료, 승인 대기",ja:"プラン準備完了、承認待ち",de:"Plan bereit zur Genehmigung",es:"Plan listo para aprobación",fr:"Plan prêt pour approbation",it:"Piano pronto per l'approvazione",da:"Plan klar til godkendelse",pl:"Plan gotowy do zatwierdzenia",ru:"План готов к утверждению",ar:"الخطة جاهزة للموافقة",no:"Plan klar for godkjenning","pt-BR":"Plano pronto para aprovação",th:"แผนพร้อมรอการอนุมัติ",tr:"Plan onaya hazır",uk:"План готовий до затвердження"},"ui.exitPlanModeResolved":{zh:"计划审批",en:"Plan Approval","zh-TW":"計劃審批",ko:"계획 승인",ja:"プラン承認",de:"Plangenehmigung",es:"Aprobación del plan",fr:"Approbation du plan",it:"Approvazione piano",da:"Plangodkendelse",pl:"Zatwierdzenie planu",ru:"Утверждение плана",ar:"الموافقة على الخطة",no:"Plangodkjenning","pt-BR":"Aprovação do plano",th:"การอนุมัติแผน",tr:"Plan onayı",uk:"Затвердження плану"},"ui.allowedPrompts":{zh:"请求的权限",en:"Requested Permissions","zh-TW":"請求的權限",ko:"요청된 권한",ja:"要求された権限",de:"Angeforderte Berechtigungen",es:"Permisos solicitados",fr:"Permissions demandées",it:"Permessi richiesti",da:"Anmodede tilladelser",pl:"Żądane uprawnienia",ru:"Запрошенные разрешения",ar:"الأذونات المطلوبة",no:"Forespurte tillatelser","pt-BR":"Permissões solicitadas",th:"สิทธิ์ที่ร้องขอ",tr:"İstenen izinler",uk:"Запитані дозволи"},"ui.planApproved":{zh:"已批准",en:"Approved","zh-TW":"已批准",ko:"승인됨",ja:"承認済み",de:"Genehmigt",es:"Aprobado",fr:"Approuvé",it:"Approvato",da:"Godkendt",pl:"Zatwierdzono",ru:"Одобрено",ar:"تمت الموافقة",no:"Godkjent","pt-BR":"Aprovado",th:"อนุมัติแล้ว",tr:"Onaylandı",uk:"Затверджено"},"ui.planRejected":{zh:"已拒绝",en:"Rejected","zh-TW":"已拒絕",ko:"거부됨",ja:"却下済み",de:"Abgelehnt",es:"Rechazado",fr:"Rejeté",it:"Rifiutato",da:"Afvist",pl:"Odrzucono",ru:"Отклонено",ar:"مرفوض",no:"Avvist","pt-BR":"Rejeitado",th:"ถูกปฏิเสธ",tr:"Reddedildi",uk:"Відхилено"},"ui.planPending":{zh:"待审批",en:"Pending","zh-TW":"待審批",ko:"대기 중",ja:"承認待ち",de:"Ausstehend",es:"Pendiente",fr:"En attente",it:"In attesa",da:"Afventer",pl:"Oczekuje",ru:"Ожидает",ar:"قيد الانتظار",no:"Venter","pt-BR":"Pendente",th:"รอดำเนินการ",tr:"Beklemede",uk:"Очікує"},"ui.planUltraplan":{zh:"UltraPlan 执行中",en:"UltraPlan Executing","zh-TW":"UltraPlan 執行中",ko:"UltraPlan 실행 중",ja:"UltraPlan 実行中",de:"UltraPlan wird ausgeführt",es:"UltraPlan en ejecución",fr:"UltraPlan en cours",it:"UltraPlan in esecuzione",da:"UltraPlan kører",pl:"UltraPlan w trakcie",ru:"UltraPlan выполняется",ar:"UltraPlan قيد التنفيذ",no:"UltraPlan kjører","pt-BR":"UltraPlan em execução",th:"UltraPlan กำลังดำเนินการ",tr:"UltraPlan çalışıyor",uk:"UltraPlan виконується"},"ui.planApprove":{zh:"批准",en:"Approve","zh-TW":"批准",ko:"승인",ja:"承認",de:"Genehmigen",es:"Aprobar",fr:"Approuver",it:"Approva",da:"Godkend",pl:"Zatwierdź",ru:"Одобрить",ar:"موافقة",no:"Godkjenn","pt-BR":"Aprovar",th:"อนุมัติ",tr:"Onayla",uk:"Схвалити"},"ui.planApproveWithEdits":{zh:"批准并修改",en:"Approve with edits","zh-TW":"批准並修改",ko:"수정 후 승인",ja:"修正して承認",de:"Mit Änderungen genehmigen",es:"Aprobar con cambios",fr:"Approuver avec modifications",it:"Approva con modifiche",da:"Godkend med ændringer",pl:"Zatwierdź ze zmianami",ru:"Одобрить с правками",ar:"موافقة مع تعديلات",no:"Godkjenn med endringer","pt-BR":"Aprovar com edições",th:"อนุมัติพร้อมแก้ไข",tr:"Düzenlemelerle onayla",uk:"Схвалити зі змінами"},"ui.planReject":{zh:"拒绝",en:"Reject","zh-TW":"拒絕",ko:"거부",ja:"拒否",de:"Ablehnen",es:"Rechazar",fr:"Rejeter",it:"Rifiuta",da:"Afvis",pl:"Odrzuć",ru:"Отклонить",ar:"رفض",no:"Avvis","pt-BR":"Rejeitar",th:"ปฏิเสธ",tr:"Reddet",uk:"Відхилити"},"ui.planFeedback":{zh:"反馈",en:"Feedback","zh-TW":"回饋",ko:"피드백",ja:"フィードバック",de:"Feedback",es:"Comentarios",fr:"Retour",it:"Feedback",da:"Feedback",pl:"Opinia",ru:"Отзыв",ar:"ملاحظات",no:"Tilbakemelding","pt-BR":"Feedback",th:"ข้อเสนอแนะ",tr:"Geri bildirim",uk:"Відгук"},"ui.planFeedbackPlaceholder":{zh:"输入你的修改建议…",en:"Type your feedback…","zh-TW":"輸入你的修改建議…",ko:"피드백을 입력하세요…",ja:"フィードバックを入力…",de:"Feedback eingeben…",es:"Escribe tu comentario…",fr:"Saisissez votre retour…",it:"Scrivi il tuo feedback…",da:"Skriv din feedback…",pl:"Wpisz swoją opinię…",ru:"Введите отзыв…",ar:"اكتب ملاحظاتك…",no:"Skriv tilbakemelding…","pt-BR":"Digite seu feedback…",th:"พิมพ์ข้อเสนอแนะ…",tr:"Geri bildiriminizi yazın…",uk:"Введіть відгук…"},"ui.planFeedbackSubmit":{zh:"发送",en:"Send","zh-TW":"傳送",ko:"보내기",ja:"送信",de:"Senden",es:"Enviar",fr:"Envoyer",it:"Invia",da:"Send",pl:"Wyślij",ru:"Отправить",ar:"إرسال",no:"Send","pt-BR":"Enviar",th:"ส่ง",tr:"Gönder",uk:"Надіслати"},"ui.permission.approvalRequired":{zh:"待审批",en:"Approval Required","zh-TW":"待審批",ko:"승인 필요",ja:"承認が必要",de:"Genehmigung erforderlich",es:"Aprobación requerida",fr:"Approbation requise",it:"Approvazione richiesta",da:"Godkendelse påkrævet",pl:"Wymagana akceptacja",ru:"Требуется одобрение",ar:"موافقة مطلوبة",no:"Godkjenning påkrevd","pt-BR":"Aprovação necessária",th:"ต้องการการอนุมัติ",tr:"Onay gerekli",uk:"Потрібне схвалення"},"ui.permission.allow":{zh:"允许",en:"Allow","zh-TW":"允許",ko:"허용",ja:"許可",de:"Erlauben",es:"Permitir",fr:"Autoriser",it:"Consenti",da:"Tillad",pl:"Zezwól",ru:"Разрешить",ar:"سماح",no:"Tillat","pt-BR":"Permitir",th:"อนุญาต",tr:"İzin ver",uk:"Дозволити"},"ui.permission.allowSession":{zh:"本次会话允许",en:"Allow for session","zh-TW":"本次會話允許",ko:"세션 동안 허용",ja:"セッション中は許可",de:"Für Sitzung erlauben",es:"Permitir para sesión",fr:"Autoriser pour la session",it:"Consenti per sessione",da:"Tillad for session",pl:"Zezwól na sesję",ru:"Разрешить на сессию",ar:"سماح للجلسة",no:"Tillat for økt","pt-BR":"Permitir para sessão",th:"อนุญาตสำหรับเซสชัน",tr:"Oturum için izin ver",uk:"Дозволити для сесії"},"ui.permission.deny":{zh:"拒绝",en:"Deny","zh-TW":"拒絕",ko:"거부",ja:"拒否",de:"Ablehnen",es:"Denegar",fr:"Refuser",it:"Nega",da:"Afvis",pl:"Odmów",ru:"Отклонить",ar:"رفض",no:"Avslå","pt-BR":"Negar",th:"ปฏิเสธ",tr:"Reddet",uk:"Відхилити"},"ui.permission.allowCountdown":{zh:"允许({seconds}s)",en:"Allow({seconds}s)","zh-TW":"允許({seconds}s)",ko:"허용({seconds}s)",ja:"許可({seconds}s)",de:"Erlauben({seconds}s)",es:"Permitir({seconds}s)",fr:"Autoriser({seconds}s)",it:"Consenti({seconds}s)",da:"Tillad({seconds}s)",pl:"Zezwól({seconds}s)",ru:"Разрешить({seconds}s)",ar:"سماح({seconds}s)",no:"Tillat({seconds}s)","pt-BR":"Permitir({seconds}s)",th:"อนุญาต({seconds}s)",tr:"İzin ver({seconds}s)",uk:"Дозволити({seconds}s)"},"ui.permission.autoApprove.enable":{zh:"开启 {seconds}s 自动审批",en:"Auto-approve {seconds}s","zh-TW":"開啟 {seconds}s 自動審批",ko:"{seconds}s 자동 승인",ja:"{seconds}s 自動承認",de:"Auto-Genehmigung {seconds}s",es:"Auto-aprobar {seconds}s",fr:"Auto-approuver {seconds}s",it:"Auto-approva {seconds}s",da:"Auto-godkend {seconds}s",pl:"Auto-akceptacja {seconds}s",ru:"Авто-одобрение {seconds}s",ar:"موافقة تلقائية {seconds}s",no:"Auto-godkjenn {seconds}s","pt-BR":"Auto-aprovar {seconds}s",th:"อนุมัติอัตโนมัติ {seconds}s",tr:"Otomatik onayla {seconds}s",uk:"Авто-схвалення {seconds}s"},"ui.permission.autoApprove.active":{zh:"自动审批 {seconds}s",en:"Auto-approve {seconds}s","zh-TW":"自動審批 {seconds}s",ko:"자동 승인 {seconds}s",ja:"自動承認 {seconds}s",de:"Auto-Genehmigung {seconds}s",es:"Auto-aprobar {seconds}s",fr:"Auto-approuver {seconds}s",it:"Auto-approva {seconds}s",da:"Auto-godkend {seconds}s",pl:"Auto-akceptacja {seconds}s",ru:"Авто-одобрение {seconds}s",ar:"موافقة تلقائية {seconds}s",no:"Auto-godkjenn {seconds}s","pt-BR":"Auto-aprovar {seconds}s",th:"อนุมัติอัตโนมัติ {seconds}s",tr:"Otomatik onayla {seconds}s",uk:"Авто-схвалення {seconds}s"},"ui.permission.autoApprove.disable":{zh:"关闭自动审批",en:"Disable auto-approve","zh-TW":"關閉自動審批",ko:"자동 승인 끄기",ja:"自動承認を無効化",de:"Auto-Genehmigung deaktivieren",es:"Desactivar auto-aprobar",fr:"Désactiver auto-approuver",it:"Disattiva auto-approva",da:"Deaktiver auto-godkend",pl:"Wyłącz auto-akceptację",ru:"Выключить авто-одобрение",ar:"إيقاف الموافقة التلقائية",no:"Deaktiver auto-godkjenn","pt-BR":"Desativar auto-aprovar",th:"ปิดอนุมัติอัตโนมัติ",tr:"Otomatik onayı kapat",uk:"Вимкнути авто-схвалення"},"ui.subAgentApproval":{zh:"SubAgent",en:"SubAgent","zh-TW":"SubAgent",ko:"SubAgent",ja:"SubAgent",de:"SubAgent",es:"SubAgent",fr:"SubAgent",it:"SubAgent",da:"SubAgent",pl:"SubAgent",ru:"SubAgent",ar:"SubAgent",no:"SubAgent","pt-BR":"SubAgent",th:"SubAgent",tr:"SubAgent",uk:"SubAgent"},"ui.permission.queued":{zh:"+{n} 排队中",en:"+{n} queued","zh-TW":"+{n} 排隊中",ko:"+{n} 대기 중",ja:"+{n} キュー中",de:"+{n} in Warteschlange",es:"+{n} en cola",fr:"+{n} en attente",it:"+{n} in coda",da:"+{n} i kø",pl:"+{n} w kolejce",ru:"+{n} в очереди",ar:"+{n} في الانتظار",no:"+{n} i kø","pt-BR":"+{n} na fila",th:"+{n} รอคิว",tr:"+{n} sırada",uk:"+{n} в черзі"},"ui.teammate.idle_notification":{zh:"{name} 已空闲",en:"{name} is idle","zh-TW":"{name} 已閒置",ko:"{name} 유휴 상태",ja:"{name} がアイドル",de:"{name} ist untätig",es:"{name} está inactivo",fr:"{name} est inactif",it:"{name} è inattivo",da:"{name} er inaktiv",pl:"{name} jest bezczynny",ru:"{name} простаивает",ar:"{name} خامل",no:"{name} er inaktiv","pt-BR":"{name} está ocioso",th:"{name} ว่าง",tr:"{name} boşta",uk:"{name} очікує"},"ui.teammate.shutdown_request":{zh:"请求关闭 {name}",en:"Requesting shutdown of {name}","zh-TW":"請求關閉 {name}",ko:"{name} 종료 요청",ja:"{name} のシャットダウンを要求",de:"Herunterfahren von {name} angefordert",es:"Solicitando cierre de {name}",fr:"Demande d'arrêt de {name}",it:"Richiesta chiusura di {name}",da:"Anmoder nedlukning af {name}",pl:"Żądanie zamknięcia {name}",ru:"Запрос завершения {name}",ar:"طلب إيقاف {name}",no:"Ber om avslutning av {name}","pt-BR":"Solicitando encerramento de {name}",th:"ขอปิด {name}",tr:"{name} kapatılıyor",uk:"Запит завершення {name}"},"ui.teammate.shutdown_response":{zh:"{name} 同意关闭",en:"{name} accepted shutdown","zh-TW":"{name} 同意關閉",ko:"{name} 종료 수락",ja:"{name} がシャットダウンを承認",de:"{name} akzeptiert Herunterfahren",es:"{name} aceptó el cierre",fr:"{name} a accepté l'arrêt",it:"{name} ha accettato la chiusura",da:"{name} accepterede nedlukning",pl:"{name} zaakceptował zamknięcie",ru:"{name} принял завершение",ar:"{name} وافق على الإيقاف",no:"{name} godtok avslutning","pt-BR":"{name} aceitou o encerramento",th:"{name} ยอมรับการปิด",tr:"{name} kapatmayı kabul etti",uk:"{name} прийняв завершення"},"ui.teammate.shutdown_approved":{zh:"{name} 已关闭",en:"{name} shut down","zh-TW":"{name} 已關閉",ko:"{name} 종료됨",ja:"{name} がシャットダウン",de:"{name} heruntergefahren",es:"{name} cerrado",fr:"{name} arrêté",it:"{name} chiuso",da:"{name} lukket ned",pl:"{name} zamknięty",ru:"{name} завершён",ar:"{name} أُغلق",no:"{name} avsluttet","pt-BR":"{name} encerrado",th:"{name} ปิดแล้ว",tr:"{name} kapatıldı",uk:"{name} завершено"},"ui.teammate.teammate_terminated":{zh:"{name} 已终止",en:"{name} terminated","zh-TW":"{name} 已終止",ko:"{name} 종료됨",ja:"{name} が終了",de:"{name} beendet",es:"{name} terminado",fr:"{name} terminé",it:"{name} terminato",da:"{name} afsluttet",pl:"{name} zakończony",ru:"{name} завершён",ar:"{name} أُنهي",no:"{name} avsluttet","pt-BR":"{name} finalizado",th:"{name} สิ้นสุด",tr:"{name} sonlandırıldı",uk:"{name} завершено"},"ui.permission.autoApprove.off":{zh:"关闭",en:"Off","zh-TW":"關閉",ko:"끄기",ja:"オフ",de:"Aus",es:"Desactivar",fr:"Désactiver",it:"Disattiva",da:"Sluk",pl:"Wyłącz",ru:"Выкл",ar:"إيقاف",no:"Av","pt-BR":"Desativar",th:"ปิด",tr:"Kapat",uk:"Вимк"},"ui.permission.autoApprove.setting":{zh:"自动审批",en:"Auto-approve","zh-TW":"自動審批",ko:"자동 승인",ja:"自動承認",de:"Auto-Genehmigung",es:"Auto-aprobar",fr:"Auto-approuver",it:"Auto-approva",da:"Auto-godkend",pl:"Auto-akceptacja",ru:"Авто-одобрение",ar:"موافقة تلقائية",no:"Auto-godkjenn","pt-BR":"Auto-aprovar",th:"อนุมัติอัตโนมัติ",tr:"Otomatik onayla",uk:"Авто-схвалення"},"ui.dangerApproval":{zh:"操作待审批",en:"Approval Required","zh-TW":"操作待審批",ko:"승인 필요",ja:"承認が必要",de:"Genehmigung erforderlich",es:"Aprobación requerida",fr:"Approbation requise",it:"Approvazione richiesta",da:"Godkendelse påkrævet",pl:"Wymagana akceptacja",ru:"Требуется одобрение",ar:"موافقة مطلوبة",no:"Godkjenning påkrevd","pt-BR":"Aprovação necessária",th:"ต้องการการอนุมัติ",tr:"Onay gerekli",uk:"Потрібне схвалення"},"ui.dangerDenied":{zh:"已拒绝",en:"Denied","zh-TW":"已拒絕",ko:"거부됨",ja:"拒否",de:"Verweigert",es:"Denegado",fr:"Refusé",it:"Negato",da:"Afvist",pl:"Odmowa",ru:"Отказано",ar:"مرفوض",no:"Avslått","pt-BR":"Negado",th:"ถูกปฏิเสธ",tr:"Reddedildi",uk:"Відмовлено"},"ui.context.systemPrompt":{zh:"系统提示词",en:"System Prompt","zh-TW":"系統提示詞",ko:"시스템 프롬프트",ja:"システムプロンプト",de:"System-Prompt",es:"Prompt del sistema",fr:"Prompt système",it:"Prompt di sistema",da:"System-prompt",pl:"Prompt systemowy",ru:"Системный промпт",ar:"موجه النظام",no:"System-prompt","pt-BR":"Prompt do sistema",th:"System Prompt",tr:"Sistem Prompt'u",uk:"Системний промпт"},"ui.context.messages":{zh:"消息",en:"Messages","zh-TW":"訊息",ko:"메시지",ja:"メッセージ",de:"Nachrichten",es:"Mensajes",fr:"Messages",it:"Messaggi",da:"Beskeder",pl:"Wiadomości",ru:"Сообщения",ar:"الرسائل",no:"Meldinger","pt-BR":"Mensagens",th:"ข้อความ",tr:"Mesajlar",uk:"Повідомлення"},"ui.context.tools":{zh:"工具",en:"Tools","zh-TW":"工具",ko:"도구",ja:"ツール",de:"Tools",es:"Herramientas",fr:"Outils",it:"Strumenti",da:"Værktøjer",pl:"Narzędzia",ru:"Инструменты",ar:"الأدوات",no:"Verktøy","pt-BR":"Ferramentas",th:"เครื่องมือ",tr:"Araçlar",uk:"Інструменти"},"ui.context.noData":{zh:"暂无 Context 数据",en:"No context data","zh-TW":"暫無 Context 資料",ko:"컨텍스트 데이터 없음",ja:"コンテキストデータなし",de:"Keine Kontextdaten",es:"Sin datos de contexto",fr:"Aucune donnée de contexte",it:"Nessun dato di contesto",da:"Ingen kontekstdata",pl:"Brak danych kontekstu",ru:"Нет данных контекста",ar:"لا توجد بيانات سياق",no:"Ingen kontekstdata","pt-BR":"Sem dados de contexto",th:"ไม่มีข้อมูล Context",tr:"Bağlam verisi yok",uk:"Немає даних контексту"},"ui.context.noFields":{zh:"Request body 中未找到 messages / system / tools",en:"No messages / system / tools found in request body","zh-TW":"Request body 中未找到 messages / system / tools",ko:"요청 본문에서 messages / system / tools를 찾을 수 없음",ja:"リクエストボディに messages / system / tools が見つかりません",de:"Keine messages / system / tools im Request-Body gefunden",es:"No se encontraron messages / system / tools en el cuerpo de la solicitud",fr:"Aucun messages / system / tools dans le corps de la requête",it:"Nessun messages / system / tools trovato nel corpo della richiesta",da:"Ingen messages / system / tools fundet i request body",pl:"Nie znaleziono messages / system / tools w treści żądania",ru:"В теле запроса не найдено messages / system / tools",ar:"لم يتم العثور على messages / system / tools في جسم الطلب",no:"Ingen messages / system / tools funnet i request body","pt-BR":"Nenhum messages / system / tools encontrado no corpo da requisição",th:"ไม่พบ messages / system / tools ใน request body",tr:"İstek gövdesinde messages / system / tools bulunamadı",uk:"У тілі запиту не знайдено messages / system / tools"},"ui.context.selectPrompt":{zh:"请在左侧选择一个要查看的内容",en:"Select an item on the left to view","zh-TW":"請在左側選擇一個要查看的內容",ko:"왼쪽에서 항목을 선택하세요",ja:"左側から項目を選択してください",de:"Wählen Sie links einen Eintrag aus",es:"Seleccione un elemento a la izquierda",fr:"Sélectionnez un élément à gauche",it:"Seleziona un elemento a sinistra",da:"Vælg et element til venstre",pl:"Wybierz element po lewej stronie",ru:"Выберите элемент слева",ar:"اختر عنصرًا على اليسار",no:"Velg et element til venstre","pt-BR":"Selecione um item à esquerda",th:"เลือกรายการทางซ้าย",tr:"Soldan bir öğe seçin",uk:"Виберіть елемент ліворуч"},"ui.context.history":{zh:"历史",en:"History","zh-TW":"歷史",ko:"기록",ja:"履歴",de:"Verlauf",es:"Historial",fr:"Historique",it:"Cronologia",da:"Historik",pl:"Historia",ru:"История",ar:"التاريخ",no:"Historikk","pt-BR":"Histórico",th:"ประวัติ",tr:"Geçmiş",uk:"Історія"},"ui.context.currentTurn":{zh:"当前轮次",en:"Current Turn","zh-TW":"當前輪次",ko:"현재 턴",ja:"現在のターン",de:"Aktueller Durchgang",es:"Turno actual",fr:"Tour actuel",it:"Turno corrente",da:"Aktuel tur",pl:"Bieżąca tura",ru:"Текущий ход",ar:"الدور الحالي",no:"Gjeldende tur","pt-BR":"Turno atual",th:"รอบปัจจุบัน",tr:"Mevcut tur",uk:"Поточний хід"},"ui.context.historyTurnNoTime":{zh:"历史轮次 {n}",en:"Turn {n}","zh-TW":"歷史輪次 {n}",ko:"턴 {n}",ja:"ターン {n}",de:"Runde {n}",es:"Turno {n}",fr:"Tour {n}",it:"Turno {n}",da:"Tur {n}",pl:"Tura {n}",ru:"Ход {n}",ar:"الدور {n}",no:"Tur {n}","pt-BR":"Turno {n}",th:"รอบ {n}",tr:"Tur {n}",uk:"Хід {n}"},"ui.workspaces.title":{zh:"工作区",en:"Workspaces","zh-TW":"工作區",ko:"워크스페이스",ja:"ワークスペース",de:"Arbeitsbereiche",es:"Espacios de trabajo",fr:"Espaces de travail",it:"Aree di lavoro",da:"Arbejdsområder",pl:"Obszary robocze",ru:"Рабочие пространства",ar:"مساحات العمل",no:"Arbeidsområder","pt-BR":"Áreas de trabalho",th:"เวิร์กสเปซ",tr:"Çalışma alanları",uk:"Робочі простори"},"ui.workspaces.subtitle":{zh:"选择一个项目目录启动 Claude 会话",en:"Select a project directory to start a Claude session","zh-TW":"選擇一個專案目錄啟動 Claude 會話",ko:"Claude 세션을 시작할 프로젝트 디렉토리를 선택하세요",ja:"Claude セッションを開始するプロジェクトディレクトリを選択",de:"Wählen Sie ein Projektverzeichnis, um eine Claude-Sitzung zu starten",es:"Seleccione un directorio de proyecto para iniciar una sesión de Claude",fr:"Sélectionnez un répertoire de projet pour démarrer une session Claude",it:"Seleziona una directory di progetto per avviare una sessione Claude",da:"Vælg en projektmappe for at starte en Claude-session",pl:"Wybierz katalog projektu, aby rozpocząć sesję Claude",ru:"Выберите каталог проекта для запуска сеанса Claude",ar:"اختر مجلد مشروع لبدء جلسة Claude",no:"Velg en prosjektmappe for å starte en Claude-økt","pt-BR":"Selecione um diretório de projeto para iniciar uma sessão do Claude",th:"เลือกไดเรกทอรีโปรเจกต์เพื่อเริ่มเซสชัน Claude",tr:"Claude oturumu başlatmak için bir proje dizini seçin",uk:"Виберіть каталог проєкту для запуску сеансу Claude"},"ui.workspaces.normalLaunch":{zh:"常规启动",en:"Launch","zh-TW":"常規啟動",ko:"일반 시작",ja:"通常起動",de:"Starten",es:"Iniciar",fr:"Lancer",it:"Avvia",da:"Start",pl:"Uruchom",ru:"Запуск",ar:"تشغيل",no:"Start","pt-BR":"Iniciar",th:"เริ่มต้น",tr:"Başlat",uk:"Запуск"},"ui.workspaces.skipPermLaunch":{zh:"免审启动",en:"Skip Approval","zh-TW":"免審啟動",ko:"승인 건너뛰기",ja:"承認スキップ",de:"Ohne Genehmigung",es:"Sin aprobación",fr:"Sans approbation",it:"Senza approvazione",da:"Spring godkendelse over",pl:"Pomiń zatwierdzenie",ru:"Без одобрения",ar:"تخطي الموافقة",no:"Hopp over godkjenning","pt-BR":"Sem aprovação",th:"ข้ามการอนุมัติ",tr:"Onay atla",uk:"Без схвалення"},"ui.workspaces.empty":{zh:"暂无工作区,添加一个项目目录开始使用",en:"No workspaces yet. Add a project directory to get started.","zh-TW":"暫無工作區,新增一個專案目錄開始使用",ko:"아직 워크스페이스가 없습니다. 프로젝트 디렉토리를 추가하세요.",ja:"ワークスペースはまだありません。プロジェクトディレクトリを追加してください。",de:"Noch keine Arbeitsbereiche. Fügen Sie ein Projektverzeichnis hinzu.",es:"Aún no hay espacios de trabajo. Añada un directorio de proyecto.",fr:"Aucun espace de travail. Ajoutez un répertoire de projet.",it:"Nessuna area di lavoro. Aggiungi una directory di progetto.",da:"Ingen arbejdsområder endnu. Tilføj en projektmappe.",pl:"Brak obszarów roboczych. Dodaj katalog projektu.",ru:"Пока нет рабочих пространств. Добавьте каталог проекта.",ar:"لا توجد مساحات عمل بعد. أضف مجلد مشروع للبدء.",no:"Ingen arbeidsområder ennå. Legg til en prosjektmappe.","pt-BR":"Nenhuma área de trabalho. Adicione um diretório de projeto.",th:"ยังไม่มีเวิร์กสเปซ เพิ่มไดเรกทอรีโปรเจกต์เพื่อเริ่มใช้งาน",tr:"Henüz çalışma alanı yok. Başlamak için bir proje dizini ekleyin.",uk:"Робочих просторів ще немає. Додайте каталог проєкту."},"ui.workspaces.pathPlaceholder":{zh:"输入项目目录路径",en:"Enter project directory path","zh-TW":"輸入專案目錄路徑",ko:"프로젝트 디렉토리 경로를 입력하세요",ja:"プロジェクトディレクトリのパスを入力",de:"Projektverzeichnispfad eingeben",es:"Ingrese la ruta del directorio del proyecto",fr:"Entrez le chemin du répertoire du projet",it:"Inserisci il percorso della directory del progetto",da:"Indtast projektmappens sti",pl:"Wprowadź ścieżkę katalogu projektu",ru:"Введите путь к каталогу проекта",ar:"أدخل مسار مجلد المشروع",no:"Skriv inn prosjektmappens sti","pt-BR":"Digite o caminho do diretório do projeto",th:"ป้อนเส้นทางไดเรกทอรีโปรเจกต์",tr:"Proje dizini yolunu girin",uk:"Введіть шлях до каталогу проєкту"},"ui.workspaces.confirmRemove":{zh:"确定从列表中移除该工作区?",en:"Remove this workspace from the list?","zh-TW":"確定從列表中移除該工作區?",ko:"이 워크스페이스를 목록에서 제거하시겠습니까?",ja:"このワークスペースをリストから削除しますか?",de:"Diesen Arbeitsbereich aus der Liste entfernen?",es:"¿Eliminar este espacio de trabajo de la lista?",fr:"Supprimer cet espace de travail de la liste ?",it:"Rimuovere quest'area di lavoro dalla lista?",da:"Fjern dette arbejdsområde fra listen?",pl:"Usunąć ten obszar roboczy z listy?",ru:"Удалить это рабочее пространство из списка?",ar:"إزالة مساحة العمل هذه من القائمة؟",no:"Fjerne dette arbeidsområdet fra listen?","pt-BR":"Remover esta área de trabalho da lista?",th:"ลบเวิร์กสเปซนี้ออกจากรายการ?",tr:"Bu çalışma alanı listeden kaldırılsın mı?",uk:"Видалити цей робочий простір зі списку?"},"ui.workspaces.justNow":{zh:"刚刚",en:"just now","zh-TW":"剛剛",ko:"방금",ja:"たった今",de:"gerade eben",es:"justo ahora",fr:"à l'instant",it:"proprio ora",da:"lige nu",pl:"właśnie",ru:"только что",ar:"الآن",no:"akkurat nå","pt-BR":"agora mesmo",th:"เมื่อสักครู่",tr:"az önce",uk:"щойно"},"ui.workspaces.browse":{zh:"浏览目录",en:"Browse Directory","zh-TW":"瀏覽目錄",ko:"디렉토리 탐색",ja:"ディレクトリを参照",de:"Verzeichnis durchsuchen",es:"Explorar directorio",fr:"Parcourir le répertoire",it:"Sfoglia directory",da:"Gennemse mappe",pl:"Przeglądaj katalog",ru:"Обзор каталога",ar:"تصفح المجلد",no:"Bla gjennom mappe","pt-BR":"Explorar diretório",th:"เรียกดูไดเรกทอรี",tr:"Dizine göz at",uk:"Переглянути каталог"},"ui.workspaces.selectDir":{zh:"选择项目目录",en:"Select Project Directory","zh-TW":"選擇專案目錄",ko:"프로젝트 디렉토리 선택",ja:"プロジェクトディレクトリを選択",de:"Projektverzeichnis auswählen",es:"Seleccionar directorio del proyecto",fr:"Sélectionner le répertoire du projet",it:"Seleziona directory del progetto",da:"Vælg projektmappe",pl:"Wybierz katalog projektu",ru:"Выбрать каталог проекта",ar:"اختر مجلد المشروع",no:"Velg prosjektmappe","pt-BR":"Selecionar diretório do projeto",th:"เลือกไดเรกทอรีโปรเจกต์",tr:"Proje dizinini seçin",uk:"Вибрати каталог проєкту"},"ui.workspaces.select":{zh:"选择",en:"Select","zh-TW":"選擇",ko:"선택",ja:"選択",de:"Auswählen",es:"Seleccionar",fr:"Sélectionner",it:"Seleziona",da:"Vælg",pl:"Wybierz",ru:"Выбрать",ar:"اختيار",no:"Velg","pt-BR":"Selecionar",th:"เลือก",tr:"Seç",uk:"Вибрати"},"ui.workspaces.selectCurrent":{zh:"选择当前目录",en:"Select Current Directory","zh-TW":"選擇當前目錄",ko:"현재 디렉토리 선택",ja:"現在のディレクトリを選択",de:"Aktuelles Verzeichnis auswählen",es:"Seleccionar directorio actual",fr:"Sélectionner le répertoire actuel",it:"Seleziona directory corrente",da:"Vælg aktuel mappe",pl:"Wybierz bieżący katalog",ru:"Выбрать текущий каталог",ar:"اختر المجلد الحالي",no:"Velg gjeldende mappe","pt-BR":"Selecionar diretório atual",th:"เลือกไดเรกทอรีปัจจุบัน",tr:"Mevcut dizini seç",uk:"Вибрати поточний каталог"},"ui.workspaces.goTo":{zh:"前往",en:"Go","zh-TW":"前往",ko:"이동",ja:"移動",de:"Los",es:"Ir",fr:"Aller",it:"Vai",da:"Gå",pl:"Idź",ru:"Перейти",ar:"اذهب",no:"Gå","pt-BR":"Ir",th:"ไป",tr:"Git",uk:"Перейти"},"ui.loadMoreHistory":{zh:"加载更早的消息(隐藏 {count} 条)",en:"Load earlier messages ({count} hidden)","zh-TW":"載入更早的訊息(隱藏 {count} 條)",ko:"이전 메시지 로드 ({count}개 숨겨짐)",ja:"以前のメッセージを読み込む({count}件非表示)",de:"Ältere Nachrichten laden ({count} ausgeblendet)",es:"Cargar mensajes anteriores ({count} ocultos)",fr:"Charger les messages précédents ({count} masqués)",it:"Carica messaggi precedenti ({count} nascosti)",da:"Indlæs ældre beskeder ({count} skjulte)",pl:"Załaduj wcześniejsze wiadomości ({count} ukrytych)",ru:"Загрузить ранние сообщения ({count} скрыто)",ar:"تحميل رسائل أقدم ({count} مخفية)",no:"Last inn eldre meldinger ({count} skjulte)","pt-BR":"Carregar mensagens anteriores ({count} ocultas)",th:"โหลดข้อความเก่า ({count} ถูกซ่อน)",tr:"Eski mesajları yükle ({count} gizli)",uk:"Завантажити старіші повідомлення ({count} приховано)"},"ui.workspaces.emptyDir":{zh:"此目录下没有子目录",en:"No subdirectories in this directory","zh-TW":"此目錄下沒有子目錄",ko:"이 디렉토리에 하위 디렉토리가 없습니다",ja:"このディレクトリにはサブディレクトリがありません",de:"Keine Unterverzeichnisse in diesem Verzeichnis",es:"No hay subdirectorios en este directorio",fr:"Aucun sous-répertoire dans ce répertoire",it:"Nessuna sottodirectory in questa directory",da:"Ingen undermapper i denne mappe",pl:"Brak podkatalogów w tym katalogu",ru:"В этом каталоге нет подкаталогов",ar:"لا توجد أدلة فرعية في هذا المجلد",no:"Ingen undermapper i denne mappen","pt-BR":"Nenhum subdiretório neste diretório",th:"ไม่มีไดเรกทอรีย่อยในไดเรกทอรีนี้",tr:"Bu dizinde alt dizin yok",uk:"У цьому каталозі немає підкаталогів"},"ui.processManagement":{zh:"CCV进程管理",en:"CCV Process Manager","zh-TW":"CCV程序管理",ko:"CCV 프로세스 관리",ja:"CCVプロセス管理",de:"CCV-Prozessverwaltung",es:"Gestión de procesos CCV",fr:"Gestion des processus CCV",it:"Gestione processi CCV",da:"CCV-processtyring",pl:"Zarządzanie procesami CCV",ru:"Управление процессами CCV",ar:"إدارة عمليات CCV",no:"CCV-prosessbehandling","pt-BR":"Gerenciamento de processos CCV",th:"จัดการโปรเซส CCV",tr:"CCV Süreç Yönetimi",uk:"Керування процесами CCV"},"ui.processManagement.command":{zh:"命令",en:"Command","zh-TW":"命令",ko:"명령",ja:"コマンド",de:"Befehl",es:"Comando",fr:"Commande",it:"Comando",da:"Kommando",pl:"Polecenie",ru:"Команда",ar:"أمر",no:"Kommando","pt-BR":"Comando",th:"คำสั่ง",tr:"Komut",uk:"Команда"},"ui.processManagement.port":{zh:"端口",en:"Port","zh-TW":"端口",ko:"포트",ja:"ポート",de:"Port",es:"Puerto",fr:"Port",it:"Porta",da:"Port",pl:"Port",ru:"Порт",ar:"منفذ",no:"Port","pt-BR":"Porta",th:"พอร์ต",tr:"Port",uk:"Порт"},"ui.processManagement.startTime":{zh:"启动时间",en:"Start Time","zh-TW":"啟動時間",ko:"시작 시간",ja:"開始時刻",de:"Startzeit",es:"Hora de inicio",fr:"Heure de démarrage",it:"Ora di avvio",da:"Starttid",pl:"Czas uruchomienia",ru:"Время запуска",ar:"وقت البدء",no:"Starttid","pt-BR":"Hora de início",th:"เวลาเริ่มต้น",tr:"Başlangıç zamanı",uk:"Час запуску"},"ui.processManagement.action":{zh:"操作",en:"Action","zh-TW":"操作",ko:"작업",ja:"操作",de:"Aktion",es:"Acción",fr:"Action",it:"Azione",da:"Handling",pl:"Akcja",ru:"Действие",ar:"إجراء",no:"Handling","pt-BR":"Ação",th:"การดำเนินการ",tr:"İşlem",uk:"Дія"},"ui.processManagement.kill":{zh:"关闭",en:"Stop","zh-TW":"關閉",ko:"서비스 중지",ja:"サービス停止",de:"Dienst beenden",es:"Detener servicio",fr:"Arrêter le service",it:"Arresta servizio",da:"Stop tjeneste",pl:"Zatrzymaj usługę",ru:"Остановить сервис",ar:"إيقاف الخدمة",no:"Stopp tjeneste","pt-BR":"Parar serviço",th:"หยุดบริการ",tr:"Servisi durdur",uk:"Зупинити сервіс"},"ui.processManagement.killConfirm":{zh:"确定要关闭此CCV进程吗?",en:"Are you sure you want to stop this CCV process?","zh-TW":"確定要關閉此CCV程序嗎?",ko:"이 CCV 프로세스를 중지하시겠습니까?",ja:"このCCVプロセスを停止しますか?",de:"Möchten Sie diesen CCV-Prozess wirklich beenden?",es:"¿Seguro que desea detener este proceso CCV?",fr:"Voulez-vous vraiment arrêter ce processus CCV ?",it:"Sei sicuro di voler arrestare questo processo CCV?",da:"Er du sikker på, at du vil stoppe denne CCV-proces?",pl:"Czy na pewno chcesz zatrzymać ten proces CCV?",ru:"Вы уверены, что хотите остановить этот процесс CCV?",ar:"هل أنت متأكد من إيقاف عملية CCV هذه؟",no:"Er du sikker på at du vil stoppe denne CCV-prosessen?","pt-BR":"Tem certeza de que deseja parar este processo CCV?",th:"คุณแน่ใจหรือไม่ว่าต้องการหยุดโปรเซส CCV นี้?",tr:"Bu CCV sürecini durdurmak istediğinizden emin misiniz?",uk:"Ви впевнені, що хочете зупинити цей процес CCV?"},"ui.processManagement.killed":{zh:"进程已关闭",en:"Process stopped","zh-TW":"程序已關閉",ko:"프로세스가 중지되었습니다",ja:"プロセスが停止しました",de:"Prozess beendet",es:"Proceso detenido",fr:"Processus arrêté",it:"Processo arrestato",da:"Proces stoppet",pl:"Proces zatrzymany",ru:"Процесс остановлен",ar:"تم إيقاف العملية",no:"Prosess stoppet","pt-BR":"Processo parado",th:"หยุดโปรเซสแล้ว",tr:"Süreç durduruldu",uk:"Процес зупинено"},"ui.processManagement.killFailed":{zh:"关闭失败",en:"Failed to stop","zh-TW":"關閉失敗",ko:"중지 실패",ja:"停止に失敗しました",de:"Beenden fehlgeschlagen",es:"Error al detener",fr:"Échec de l'arrêt",it:"Arresto fallito",da:"Stop mislykkedes",pl:"Nie udało się zatrzymać",ru:"Не удалось остановить",ar:"فشل الإيقاف",no:"Stopp mislyktes","pt-BR":"Falha ao parar",th:"หยุดไม่สำเร็จ",tr:"Durdurma başarısız",uk:"Не вдалося зупинити"},"ui.processManagement.refresh":{zh:"刷新",en:"Refresh","zh-TW":"重新整理",ko:"새로고침",ja:"更新",de:"Aktualisieren",es:"Actualizar",fr:"Actualiser",it:"Aggiorna",da:"Opdater",pl:"Odśwież",ru:"Обновить",ar:"تحديث",no:"Oppdater","pt-BR":"Atualizar",th:"รีเฟรช",tr:"Yenile",uk:"Оновити"},"ui.processManagement.current":{zh:"当前",en:"Current","zh-TW":"目前",ko:"현재",ja:"現在",de:"Aktuell",es:"Actual",fr:"Actuel",it:"Corrente",da:"Aktuel",pl:"Bieżący",ru:"Текущий",ar:"الحالي",no:"Gjeldende","pt-BR":"Atual",th:"ปัจจุบัน",tr:"Mevcut",uk:"Поточний"},"ui.terminal.ctrlCBlocked":{zh:"请在启动 ccv 的终端中按 Ctrl+C 退出",en:"Please press Ctrl+C in the terminal where ccv was launched to exit","zh-TW":"請在啟動 ccv 的終端中按 Ctrl+C 退出",ko:"ccv를 실행한 터미널에서 Ctrl+C를 눌러 종료하세요",ja:"ccv を起動したターミナルで Ctrl+C を押して終了してください",de:"Bitte drücken Sie Ctrl+C im Terminal, in dem ccv gestartet wurde",es:"Presione Ctrl+C en la terminal donde se inició ccv para salir",fr:"Appuyez sur Ctrl+C dans le terminal où ccv a été lancé pour quitter",it:"Premere Ctrl+C nel terminale in cui è stato avviato ccv per uscire",da:"Tryk Ctrl+C i terminalen, hvor ccv blev startet, for at afslutte",pl:"Naciśnij Ctrl+C w terminalu, w którym uruchomiono ccv, aby zakończyć",ru:"Нажмите Ctrl+C в терминале, где был запущен ccv, чтобы выйти",ar:"اضغط Ctrl+C في الطرفية التي تم تشغيل ccv فيها للخروج",no:"Trykk Ctrl+C i terminalen der ccv ble startet for å avslutte","pt-BR":"Pressione Ctrl+C no terminal onde o ccv foi iniciado para sair",th:"กด Ctrl+C ในเทอร์มินัลที่เปิด ccv เพื่อออก",tr:"Çıkmak için ccv'nin başlatıldığı terminalde Ctrl+C'ye basın",uk:"Натисніть Ctrl+C у терміналі, де був запущений ccv, щоб вийти"},"ui.terminal.agentTeam":{zh:"Agent Team",en:"Agent Team","zh-TW":"Agent Team",ko:"Agent Team",ja:"Agent Team",de:"Agent Team",es:"Agent Team",fr:"Agent Team",it:"Agent Team",da:"Agent Team",pl:"Agent Team",ru:"Agent Team",ar:"Agent Team",no:"Agent Team","pt-BR":"Agent Team",th:"Agent Team",tr:"Agent Team",uk:"Agent Team"},"ui.terminal.agentTeamDisabledTip":{zh:'需要在 {configDir}/settings.json 的 env 属性中增加 "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" 的设置',en:'Requires "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" in {configDir}/settings.json env',"zh-TW":'需要在 {configDir}/settings.json 的 env 屬性中增加 "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" 的設定',ko:'{configDir}/settings.json의 env에 "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" 설정이 필요합니다',ja:'{configDir}/settings.json の env に "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" の設定が必要です',de:'Erfordert "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" in {configDir}/settings.json env',es:'Requiere "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" en env de {configDir}/settings.json',fr:'Nécessite "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" dans env de {configDir}/settings.json',it:'Richiede "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" in env di {configDir}/settings.json',da:'Kræver "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" i {configDir}/settings.json env',pl:'Wymaga "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" w env {configDir}/settings.json',ru:'Требуется "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" в env {configDir}/settings.json',ar:'يتطلب "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" في env بملف {configDir}/settings.json',no:'Krever "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" i {configDir}/settings.json env',"pt-BR":'Requer "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" em env de {configDir}/settings.json',th:'ต้องตั้งค่า "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" ใน env ของ {configDir}/settings.json',tr:'{configDir}/settings.json env içinde "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" gereklidir',uk:'Потрібно "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" в env {configDir}/settings.json'},"ui.terminal.agentTeamEnable":{zh:"确认开启",en:"Enable Now","zh-TW":"確認開啟",ko:"활성화",ja:"有効にする",de:"Jetzt aktivieren",es:"Activar ahora",fr:"Activer maintenant",it:"Attiva ora",da:"Aktivér nu",pl:"Włącz teraz",ru:"Включить сейчас",ar:"تفعيل الآن",no:"Aktiver nå","pt-BR":"Ativar agora",th:"เปิดใช้งานเดี๋ยวนี้",tr:"Şimdi etkinleştir",uk:"Увімкнути зараз"},"ui.terminal.agentTeamEnabling":{zh:"开启中...",en:"Enabling...","zh-TW":"開啟中...",ko:"활성화 중...",ja:"有効化中...",de:"Wird aktiviert...",es:"Activando...",fr:"Activation...",it:"Attivazione...",da:"Aktiverer...",pl:"Włączanie...",ru:"Включение...",ar:"جارٍ التفعيل...",no:"Aktiverer...","pt-BR":"Ativando...",th:"กำลังเปิดใช้งาน...",tr:"Etkinleştiriliyor...",uk:"Увімкнення..."},"ui.terminal.presetShortcuts":{zh:"预置快捷方式",en:"Preset Shortcuts","zh-TW":"預置快捷方式",ko:"프리셋 단축키",ja:"プリセットショートカット",de:"Voreingestellte Verknüpfungen",es:"Atajos preestablecidos",fr:"Raccourcis prédéfinis",it:"Scorciatoie preimpostate",da:"Forudindstillede genveje",pl:"Ustawione skróty",ru:"Предустановленные ярлыки",ar:"اختصارات مسبقة",no:"Forhåndsinnstilte snarveier","pt-BR":"Atalhos predefinidos",th:"ทางลัดที่ตั้งไว้ล่วงหน้า",tr:"Önceden ayarlanmış kısayollar",uk:"Попередньо встановлені ярлики"},"ui.terminal.customShortcuts":{zh:"+ 自定义快捷方式",en:"+ Custom Shortcuts","zh-TW":"+ 自訂快捷方式",ko:"+ 사용자 정의 바로가기",ja:"+ カスタムショートカット",de:"+ Benutzerdefinierte Verknüpfungen",es:"+ Atajos personalizados",fr:"+ Raccourcis personnalisés",it:"+ Scorciatoie personalizzate",da:"+ Brugerdefinerede genveje",pl:"+ Niestandardowe skróty",ru:"+ Пользовательские ярлыки",ar:"+ اختصارات مخصصة",no:"+ Egendefinerte snarveier","pt-BR":"+ Atalhos personalizados",th:"+ ทางลัดที่กำหนดเอง",tr:"+ Özel kısayollar",uk:"+ Користувацькі ярлики"},"ui.terminal.agentTeamCustom":{zh:"Agent Team 定制",en:"Agent Team Custom","zh-TW":"Agent Team 定制",ko:"Agent Team 커스텀",ja:"Agent Team カスタム",de:"Agent Team Anpassung",es:"Personalización de Agent Team",fr:"Personnalisation Agent Team",it:"Personalizzazione Agent Team",da:"Agent Team tilpasning",pl:"Dostosowanie Agent Team",ru:"Настройка Agent Team",ar:"تخصيص Agent Team",no:"Agent Team tilpasning","pt-BR":"Personalização Agent Team",th:"ปรับแต่ง Agent Team",tr:"Agent Team özelleştirme",uk:"Налаштування Agent Team"},"ui.preset.scoutRegiment.name":{zh:"调查兵团",en:"Scout Regiment","zh-TW":"調查兵團",ko:"조사병단",ja:"調査兵団",de:"Aufklärungstrupp",es:"Escuadrón de Exploración",fr:"Bataillon d'Exploration",it:"Corpo di Ricognizione",da:"Spejderregimentet",pl:"Oddział Zwiadowczy",ru:"Разведкорпус",ar:"فيلق الاستطلاع",no:"Speiderregimentet","pt-BR":"Tropa de Exploração",th:"กองทหารสำรวจ",tr:"Keşif Alayı",uk:"Розвідкорпус"},"ui.preset.scoutRegiment.desc":{zh:"ultrathink \n<system-reminder>\n先假设Prompt足够复杂,然后判断这个Prompt的复杂度,你可能启动一个/team;\n需要一个2-5位teammate(系统非常复杂的情况下最大扩充到10位);\n从不同角色、视角来帮助你搜索、分析、阶段总结等;\n你需要一个完整的规划来让这些teammate有明确的分工和良好的协同;\n团队完成任务以后解散;\n你需要汇总后分析可行性并完善你自己的Plan,非必要,不要急于执行。\n如果Prompt足够简单,你可以忽略这段描述。\n</system-reminder>",en:"ultrathink \n<system-reminder>\nFirst assume the Prompt is complex enough, then judge its complexity — you may launch a /team;\nNeed 2-5 teammates (up to 10 for very complex systems);\nFrom different roles and perspectives to help you search, analyze, summarize, etc.;\nYou need a complete plan to give these teammates clear division of labor and good coordination;\nDisband the team after task completion;\nYou need to summarize, analyze feasibility and refine your own Plan — do not rush to execute unless necessary.\nIf the Prompt is simple enough, you can ignore this description.\n</system-reminder>","zh-TW":"ultrathink \n<system-reminder>\n先假設Prompt足夠複雜,然後判斷這個Prompt的複雜度,你可能啟動一個/team;\n需要一個2-5位teammate(系統非常複雜的情況下最大擴充到10位);\n從不同角色、視角來幫助你搜索、分析、階段總結等;\n你需要一個完整的規劃來讓這些teammate有明確的分工和良好的協同;\n團隊完成任務以後解散;\n你需要匯總後分析可行性並完善你自己的Plan,非必要,不要急於執行。\n如果Prompt足夠簡單,你可以忽略這段描述。\n</system-reminder>",ko:"ultrathink \n<system-reminder>\n먼저 Prompt가 충분히 복잡하다고 가정한 후 복잡도를 판단하세요 — /team을 시작할 수 있습니다;\n2-5명의 teammate 필요 (매우 복잡한 시스템은 최대 10명);\n다양한 역할과 관점에서 검색, 분석, 단계별 요약 등을 지원;\nteammate들에게 명확한 분업과 협업을 위한 완전한 계획이 필요;\n작업 완료 후 팀 해산;\n요약 후 실현 가능성을 분석하고 자신의 Plan을 완성 — 필요하지 않으면 서두르지 마세요.\nPrompt가 충분히 간단하면 이 설명을 무시할 수 있습니다.\n</system-reminder>",ja:"ultrathink \n<system-reminder>\nまずPromptが十分に複雑だと仮定し、その複雑さを判断してください — /teamを起動する可能性があります;\n2-5人のteammateが必要(非常に複雑なシステムでは最大10人);\n異なる役割・視点から検索、分析、段階的まとめなどを支援;\nこれらのteammateに明確な分担と良好な協調のための完全な計画が必要;\nタスク完了後にチームを解散;\n集約後に実現可能性を分析し、自分のPlanを完善 — 必要でなければ急いで実行しないでください。\nPromptが十分にシンプルであれば、この説明は無視できます。\n</system-reminder>",de:"ultrathink \n<system-reminder>\nGehen Sie zunächst davon aus, dass der Prompt komplex genug ist, und beurteilen Sie dann die Komplexität — Sie können ein /team starten;\n2-5 Teammates erforderlich (bei sehr komplexen Systemen bis zu 10);\nAus verschiedenen Rollen und Perspektiven bei Suche, Analyse, Zusammenfassung unterstützen;\nSie brauchen einen vollständigen Plan mit klarer Arbeitsteilung und guter Koordination;\nTeam nach Aufgabenabschluss auflösen;\nZusammenfassen, Machbarkeit analysieren und Ihren Plan verfeinern — nicht übereilt ausführen.\nWenn der Prompt einfach genug ist, können Sie diese Beschreibung ignorieren.\n</system-reminder>",es:"ultrathink \n<system-reminder>\nPrimero asuma que el Prompt es suficientemente complejo, luego juzgue su complejidad — puede iniciar un /team;\nNecesita 2-5 teammates (hasta 10 para sistemas muy complejos);\nDesde diferentes roles y perspectivas para ayudar en búsqueda, análisis, resumen, etc.;\nNecesita un plan completo con división clara del trabajo y buena coordinación;\nDisolver el equipo tras completar la tarea;\nResuma, analice viabilidad y perfeccione su Plan — no se apresure a ejecutar.\nSi el Prompt es suficientemente simple, puede ignorar esta descripción.\n</system-reminder>",fr:"ultrathink \n<system-reminder>\nSupposez d'abord que le Prompt est assez complexe, puis jugez sa complexité — vous pouvez lancer un /team;\n2-5 coéquipiers nécessaires (jusqu'à 10 pour les systèmes très complexes);\nDe différents rôles et perspectives pour aider à la recherche, l'analyse, le résumé, etc.;\nVous avez besoin d'un plan complet avec une répartition claire et une bonne coordination;\nDissoudre l'équipe après l'achèvement de la tâche;\nRésumez, analysez la faisabilité et affinez votre Plan — ne vous précipitez pas.\nSi le Prompt est assez simple, vous pouvez ignorer cette description.\n</system-reminder>",it:"ultrathink \n<system-reminder>\nPrima supponi che il Prompt sia abbastanza complesso, poi valuta la complessità — puoi avviare un /team;\nServono 2-5 teammate (fino a 10 per sistemi molto complessi);\nDa diversi ruoli e prospettive per aiutare nella ricerca, analisi, riepilogo, ecc.;\nServe un piano completo con divisione chiara del lavoro e buon coordinamento;\nSciogliere il team dopo il completamento;\nRiassumi, analizza la fattibilità e perfeziona il tuo Plan — non affrettarti.\nSe il Prompt è abbastanza semplice, puoi ignorare questa descrizione.\n</system-reminder>",da:"ultrathink \n<system-reminder>\nAntag først at Prompt er kompleks nok, vurder derefter kompleksiteten — du kan starte et /team;\n2-5 teammedlemmer nødvendige (op til 10 for meget komplekse systemer);\nFra forskellige roller og perspektiver til at hjælpe med søgning, analyse, opsummering osv.;\nDu har brug for en komplet plan med klar arbejdsdeling og god koordinering;\nOpløs teamet efter opgavens afslutning;\nOpsummer, analyser gennemførlighed og forfin din Plan — forhast dig ikke.\nHvis Prompt er simpel nok, kan du ignorere denne beskrivelse.\n</system-reminder>",pl:"ultrathink \n<system-reminder>\nNajpierw załóż, że Prompt jest wystarczająco złożony, następnie oceń jego złożoność — możesz uruchomić /team;\nPotrzeba 2-5 współpracowników (do 10 dla bardzo złożonych systemów);\nZ różnych ról i perspektyw, aby pomóc w wyszukiwaniu, analizie, podsumowaniu itp.;\nPotrzebujesz kompletnego planu z jasnym podziałem pracy i dobrą koordynacją;\nRozwiąż zespół po zakończeniu zadania;\nPodsumuj, przeanalizuj wykonalność i udoskonal swój Plan — nie spiesz się.\nJeśli Prompt jest wystarczająco prosty, możesz zignorować ten opis.\n</system-reminder>",ru:"ultrathink \n<system-reminder>\nСначала предположите, что Prompt достаточно сложный, затем оцените его сложность — вы можете запустить /team;\nНужно 2-5 участников (до 10 для очень сложных систем);\nИз разных ролей и перспектив помогать в поиске, анализе, подведении итогов и т.д.;\nНужен полный план с чётким разделением труда и хорошей координацией;\nРаспустить команду после завершения задачи;\nПодведите итоги, проанализируйте осуществимость и доработайте свой Plan — не спешите.\nЕсли Prompt достаточно прост, можете игнорировать это описание.\n</system-reminder>",ar:"ultrathink \n<system-reminder>\nافترض أولاً أن الـ Prompt معقد بما يكفي، ثم قيّم مدى تعقيده — قد تبدأ /team;\nتحتاج 2-5 أعضاء (حتى 10 للأنظمة شديدة التعقيد);\nمن أدوار ومنظورات مختلفة للمساعدة في البحث والتحليل والتلخيص وغيرها;\nتحتاج خطة كاملة بتقسيم واضح للعمل وتنسيق جيد;\nحل الفريق بعد إتمام المهمة;\nلخّص وحلل الجدوى وحسّن خطتك — لا تتسرع.\nإذا كان الـ Prompt بسيطاً بما يكفي، يمكنك تجاهل هذا الوصف.\n</system-reminder>",no:"ultrathink \n<system-reminder>\nAnta først at Prompt er kompleks nok, vurder deretter kompleksiteten — du kan starte et /team;\n2-5 teammedlemmer nødvendig (opptil 10 for svært komplekse systemer);\nFra ulike roller og perspektiver for å hjelpe med søk, analyse, oppsummering osv.;\nDu trenger en komplett plan med klar arbeidsfordeling og god koordinering;\nOppløs teamet etter fullført oppgave;\nOppsummer, analyser gjennomførbarhet og forfin din Plan — ikke forhast deg.\nHvis Prompt er enkel nok, kan du ignorere denne beskrivelsen.\n</system-reminder>","pt-BR":"ultrathink \n<system-reminder>\nPrimeiro assuma que o Prompt é complexo o suficiente, depois avalie sua complexidade — você pode iniciar um /team;\nPrecisa de 2-5 membros (até 10 para sistemas muito complexos);\nDe diferentes papéis e perspectivas para ajudar na busca, análise, resumo, etc.;\nVocê precisa de um plano completo com divisão clara de trabalho e boa coordenação;\nDissolver a equipe após a conclusão;\nResuma, analise viabilidade e refine seu Plan — não se apresse.\nSe o Prompt for simples o suficiente, pode ignorar esta descrição.\n</system-reminder>",th:"ultrathink \n<system-reminder>\nสมมติก่อนว่า Prompt ซับซ้อนเพียงพอ แล้วตัดสินความซับซ้อน — คุณอาจเริ่ม /team;\nต้องการ teammate 2-5 คน (สูงสุด 10 คนสำหรับระบบที่ซับซ้อนมาก);\nจากบทบาทและมุมมองต่างๆ เพื่อช่วยค้นหา วิเคราะห์ สรุป ฯลฯ;\nต้องการแผนที่สมบูรณ์พร้อมการแบ่งงานชัดเจนและการประสานงานที่ดี;\nยุบทีมหลังเสร็จสิ้นภารกิจ;\nสรุป วิเคราะห์ความเป็นไปได้และปรับปรุง Plan — อย่ารีบดำเนินการ\nถ้า Prompt ง่ายพอ สามารถข้ามคำอธิบายนี้ได้\n</system-reminder>",tr:"ultrathink \n<system-reminder>\nÖnce Prompt'un yeterince karmaşık olduğunu varsayın, sonra karmaşıklığını değerlendirin — bir /team başlatabilirsiniz;\n2-5 teammate gerekli (çok karmaşık sistemler için 10'a kadar);\nFarklı roller ve perspektiflerden arama, analiz, özet vb. konularda yardım;\nNet iş bölümü ve iyi koordinasyon için eksiksiz bir plan gerekli;\nGörev tamamlandıktan sonra ekibi dağıtın;\nÖzetleyin, fizibilite analizi yapın ve Planınızı geliştirin — acele etmeyin.\nPrompt yeterince basitse bu açıklamayı göz ardı edebilirsiniz.\n</system-reminder>",uk:"ultrathink \n<system-reminder>\nСпочатку припустіть, що Prompt достатньо складний, потім оцініть його складність — ви можете запустити /team;\nПотрібно 2-5 учасників (до 10 для дуже складних систем);\nЗ різних ролей та перспектив допомагати в пошуку, аналізі, підсумках тощо;\nПотрібен повний план з чітким розподілом праці та доброю координацією;\nРозпустити команду після завершення завдання;\nПідсумуйте, проаналізуйте здійсненність та вдосконаліть свій Plan — не поспішайте.\nЯкщо Prompt достатньо простий, можете ігнорувати цей опис.\n</system-reminder>"},"ui.preset.codeReview2.name":{zh:"Code Reviewer",en:"Code Reviewer","zh-TW":"Code Reviewer",ko:"Code Reviewer",ja:"Code Reviewer",de:"Code Reviewer",es:"Code Reviewer",fr:"Code Reviewer",it:"Code Reviewer",da:"Code Reviewer",pl:"Code Reviewer",ru:"Code Reviewer",ar:"Code Reviewer",no:"Code Reviewer","pt-BR":"Code Reviewer",th:"Code Reviewer",tr:"Code Reviewer",uk:"Code Reviewer"},"ui.preset.codeReview2.desc":{zh:"启动一个/team 有2个teammate;\n如果判断任务很轻,可以是1个teammate;\n任务是从不同视角和角色对当前git变更做Code Review;\n根据当前的git变更记录,确认需求和目标是否实现,审查新增代码是否存在副作用:对已经功能破坏,以及自身编码是否有疏漏;\n获得报告以后要审视报告,审视完报告总结出修改建议;\n不要立即执行,要询问我;",en:"Launch a /team with 2 teammates;\nuse 1 if the task is simple;\ndo a Code Review of current git changes from different perspectives and roles;\nbased on git diff, verify requirements and goals are met, review new code for side effects: breaking existing functionality, and any coding oversights;\nafter receiving the report, review it, summarize modification suggestions;\ndo NOT execute immediately — ask me first;","zh-TW":"啟動一個/team 有2個teammate;\n如果判斷任務很輕,可以是1個teammate;\n任務是從不同視角和角色對當前git變更做Code Review;\n根據當前的git變更記錄,確認需求和目標是否實現,審查新增代碼是否存在副作用:對已有功能破壞,以及自身編碼是否有疏漏;\n獲得報告以後要審視報告,審視完報告總結出修改建議;\n不要立即執行,要詢問我;",ko:"2명의 teammate로 /team을 시작하세요;\n작업이 간단하면 1명도 가능;\n다양한 관점과 역할에서 현재 git 변경사항을 Code Review;\ngit diff를 기반으로 요구사항과 목표 달성 여부를 확인하고, 새 코드의 부작용(기존 기능 손상, 코딩 누락)을 검토;\n보고서를 받으면 검토 후 수정 제안을 요약;\n즉시 실행하지 말고 먼저 저에게 물어보세요;",ja:"2人のteammateで/teamを起動;\nタスクが軽い場合は1人でも可;\n現在のgit変更を異なる視点と役割からCode Review;\ngit diffに基づき、要件と目標の達成を確認し、新コードの副作用(既存機能の破壊、コーディングの見落とし)を審査;\nレポートを受け取ったら確認し、修正提案をまとめる;\n即座に実行せず、まず私に確認してください;",de:"Starte ein /team mit 2 Teammates;\n1 bei einfachen Aufgaben;\nCode Review der aktuellen Git-Änderungen aus verschiedenen Perspektiven;\nÜberprüfe anhand des Git-Diff, ob Anforderungen erfüllt sind, und prüfe neuen Code auf Nebenwirkungen;\nNach Erhalt des Berichts zusammenfassen und Änderungsvorschläge machen;\nNICHT sofort ausführen, erst mich fragen;",es:"Inicia un /team con 2 teammates;\n1 si la tarea es simple;\nCode Review de los cambios git actuales desde diferentes perspectivas;\nVerifica requisitos, revisa efectos secundarios del código nuevo;\nDespués de recibir el informe, resúmelo con sugerencias de modificación;\nNO ejecutes inmediatamente, pregúntame primero;",fr:"Lancez un /team avec 2 coéquipiers;\n1 si la tâche est simple;\nCode Review des changements git actuels sous différents angles;\nVérifiez les exigences et examinez les effets secondaires du nouveau code;\nAprès le rapport, résumez les suggestions;\nN'exécutez PAS immédiatement, demandez-moi d'abord;",it:"Avvia un /team con 2 teammate;\n1 se il compito è semplice;\nCode Review delle modifiche git correnti da diverse prospettive;\nVerifica requisiti e rivedi gli effetti collaterali del nuovo codice;\nDopo il rapporto, riassumi i suggerimenti;\nNON eseguire immediatamente, chiedi prima a me;",da:"Start et /team med 2 teammedlemmer;\n1 hvis opgaven er enkel;\nCode Review af aktuelle git-ændringer fra forskellige perspektiver;\nVerificer krav og gennemgå bivirkninger af ny kode;\nOpsummer efter rapporten;\nUdfør IKKE med det samme, spørg mig først;",pl:"Uruchom /team z 2 współpracownikami;\n1 jeśli zadanie jest proste;\nCode Review bieżących zmian git z różnych perspektyw;\nZweryfikuj wymagania i sprawdź efekty uboczne nowego kodu;\nPo raporcie podsumuj sugestie;\nNIE wykonuj natychmiast, najpierw zapytaj mnie;",ru:"Запустите /team с 2 участниками;\n1 если задача простая;\nCode Review текущих git-изменений с разных точек зрения;\nПроверьте требования и побочные эффекты нового кода;\nПосле отчёта подведите итог с предложениями;\nНЕ выполняйте сразу, сначала спросите меня;",ar:"ابدأ /team مع عضوين;\nعضو واحد إذا كانت المهمة بسيطة;\nمراجعة الكود للتغييرات الحالية في git من منظورات مختلفة;\nتحقق من المتطلبات وراجع الآثار الجانبية للكود الجديد;\nبعد التقرير، لخّص الاقتراحات;\nلا تنفذ فوراً، اسألني أولاً;",no:"Start et /team med 2 teammedlemmer;\n1 hvis oppgaven er enkel;\nCode Review av gjeldende git-endringer fra ulike perspektiver;\nVerifiser krav og gjennomgå bivirkninger av ny kode;\nOppsummer etter rapporten;\nIKKE utfør umiddelbart, spør meg først;","pt-BR":"Inicie um /team com 2 membros;\n1 se a tarefa for simples;\nCode Review das alterações git atuais de diferentes perspectivas;\nVerifique requisitos e revise efeitos colaterais do novo código;\nApós o relatório, resuma sugestões;\nNÃO execute imediatamente, pergunte-me primeiro;",th:"เริ่ม /team กับ 2 teammate;\n1 คนถ้างานง่าย;\nCode Review การเปลี่ยนแปลง git ปัจจุบันจากมุมมองต่างๆ;\nตรวจสอบความต้องการและผลข้างเคียงของโค้ดใหม่;\nหลังได้รับรายงาน สรุปข้อเสนอแนะ;\nอย่าดำเนินการทันที ถามฉันก่อน;",tr:"2 teammate ile bir /team başlatın;\ngörev basitse 1 yeterli;\nmevcut git değişikliklerini farklı açılardan Code Review yapın;\ngereksinimleri doğrulayın ve yeni kodun yan etkilerini inceleyin;\nrapordan sonra önerileri özetleyin;\nhemen uygulamayın, önce bana sorun;",uk:"Запустіть /team з 2 учасниками;\n1 якщо завдання просте;\nCode Review поточних git-змін з різних перспектив;\nПеревірте вимоги та побічні ефекти нового коду;\nПісля звіту підсумуйте пропозиції;\nНЕ виконуйте одразу, спершу запитайте мене;"},"ui.preset.codeReview5.name":{zh:"Code Reviewer Pro",en:"Code Reviewer Pro","zh-TW":"Code Reviewer Pro",ko:"Code Reviewer Pro",ja:"Code Reviewer Pro",de:"Code Reviewer Pro",es:"Code Reviewer Pro",fr:"Code Reviewer Pro",it:"Code Reviewer Pro",da:"Code Reviewer Pro",pl:"Code Reviewer Pro",ru:"Code Reviewer Pro",ar:"Code Reviewer Pro",no:"Code Reviewer Pro","pt-BR":"Code Reviewer Pro",th:"Code Reviewer Pro",tr:"Code Reviewer Pro",uk:"Code Reviewer Pro"},"ui.preset.codeReview5.desc":{zh:"启动一个/team 有5个teammate;\n如果判断任务较轻,可以适当缩小teammate数量,如果足够复杂可以扩大teammate数量;\n任务是从不同视角和角色对当前git变更做Code Review;\n根据当前的git变更记录,确认需求和目标是否实现,审查新增代码是否存在副作用:对已经功能破坏,以及自身编码是否有疏漏;\n获得报告以后要审视报告,审视完报告总结出修改建议;\n不要立即执行,要询问我;",en:"Launch a /team with 5 teammates;\nreduce if the task is lighter, increase if complex enough;\ndo a Code Review of current git changes from different perspectives and roles;\nbased on git diff, verify requirements and goals are met, review new code for side effects: breaking existing functionality, and any coding oversights;\nafter receiving the report, review it, summarize modification suggestions;\ndo NOT execute immediately — ask me first;","zh-TW":"啟動一個/team 有5個teammate;\n如果判斷任務較輕,可以適當縮小teammate數量,如果足夠複雜可以擴大teammate數量;\n任務是從不同視角和角色對當前git變更做Code Review;\n根據當前的git變更記錄,確認需求和目標是否實現,審查新增代碼是否存在副作用:對已有功能破壞,以及自身編碼是否有疏漏;\n獲得報告以後要審視報告,審視完報告總結出修改建議;\n不要立即執行,要詢問我;",ko:"5명의 teammate로 /team을 시작하세요;\n작업이 가벼우면 줄이고, 충분히 복잡하면 늘리세요;\n다양한 관점과 역할에서 현재 git 변경사항을 Code Review;\ngit diff를 기반으로 요구사항과 목표 달성 여부를 확인하고, 새 코드의 부작용(기존 기능 손상, 코딩 누락)을 검토;\n보고서를 받으면 검토 후 수정 제안을 요약;\n즉시 실행하지 말고 먼저 저에게 물어보세요;",ja:"5人のteammateで/teamを起動;\nタスクが軽い場合は減らし、複雑な場合は増やす;\n現在のgit変更を異なる視点と役割からCode Review;\ngit diffに基づき、要件と目標の達成を確認し、新コードの副作用(既存機能の破壊、コーディングの見落とし)を審査;\nレポートを受け取ったら確認し、修正提案をまとめる;\n即座に実行せず、まず私に確認してください;",de:"Starte ein /team mit 5 Teammates;\nweniger bei leichten, mehr bei komplexen Aufgaben;\nCode Review der aktuellen Git-Änderungen aus verschiedenen Perspektiven;\nÜberprüfe anhand des Git-Diff, ob Anforderungen erfüllt sind, und prüfe neuen Code auf Nebenwirkungen;\nNach Erhalt des Berichts zusammenfassen und Änderungsvorschläge machen;\nNICHT sofort ausführen, erst mich fragen;",es:"Inicia un /team con 5 teammates;\nreduce si la tarea es ligera, aumenta si es compleja;\nCode Review de los cambios git actuales desde diferentes perspectivas;\nVerifica requisitos, revisa efectos secundarios del código nuevo;\nDespués de recibir el informe, resúmelo con sugerencias de modificación;\nNO ejecutes inmediatamente, pregúntame primero;",fr:"Lancez un /team avec 5 coéquipiers;\nréduisez si la tâche est légère, augmentez si elle est complexe;\nCode Review des changements git actuels sous différents angles;\nVérifiez les exigences et examinez les effets secondaires du nouveau code;\nAprès le rapport, résumez les suggestions;\nN'exécutez PAS immédiatement, demandez-moi d'abord;",it:"Avvia un /team con 5 teammate;\nriduci se il compito è leggero, aumenta se è complesso;\nCode Review delle modifiche git correnti da diverse prospettive;\nVerifica requisiti e rivedi gli effetti collaterali del nuovo codice;\nDopo il rapporto, riassumi i suggerimenti;\nNON eseguire immediatamente, chiedi prima a me;",da:"Start et /team med 5 teammedlemmer;\nreducer hvis opgaven er let, øg hvis den er kompleks;\nCode Review af aktuelle git-ændringer fra forskellige perspektiver;\nVerificer krav og gennemgå bivirkninger af ny kode;\nOpsummer efter rapporten;\nUdfør IKKE med det samme, spørg mig først;",pl:"Uruchom /team z 5 współpracownikami;\nzmniejsz jeśli zadanie jest lekkie, zwiększ jeśli złożone;\nCode Review bieżących zmian git z różnych perspektyw;\nZweryfikuj wymagania i sprawdź efekty uboczne nowego kodu;\nPo raporcie podsumuj sugestie;\nNIE wykonuj natychmiast, najpierw zapytaj mnie;",ru:"Запустите /team с 5 участниками;\nуменьшите если задача лёгкая, увеличьте если сложная;\nCode Review текущих git-изменений с разных точек зрения;\nПроверьте требования и побочные эффекты нового кода;\nПосле отчёта подведите итог с предложениями;\nНЕ выполняйте сразу, сначала спросите меня;",ar:"ابدأ /team مع 5 أعضاء;\nقلل إذا كانت المهمة خفيفة، زد إذا كانت معقدة;\nمراجعة الكود للتغييرات الحالية في git من منظورات مختلفة;\nتحقق من المتطلبات وراجع الآثار الجانبية للكود الجديد;\nبعد التقرير، لخّص الاقتراحات;\nلا تنفذ فوراً، اسألني أولاً;",no:"Start et /team med 5 teammedlemmer;\nreduser hvis oppgaven er lett, øk hvis den er kompleks;\nCode Review av gjeldende git-endringer fra ulike perspektiver;\nVerifiser krav og gjennomgå bivirkninger av ny kode;\nOppsummer etter rapporten;\nIKKE utfør umiddelbart, spør meg først;","pt-BR":"Inicie um /team com 5 membros;\nreduza se a tarefa for leve, aumente se for complexa;\nCode Review das alterações git atuais de diferentes perspectivas;\nVerifique requisitos e revise efeitos colaterais do novo código;\nApós o relatório, resuma sugestões;\nNÃO execute imediatamente, pergunte-me primeiro;",th:"เริ่ม /team กับ 5 teammate;\nลดถ้างานเบา เพิ่มถ้าซับซ้อน;\nCode Review การเปลี่ยนแปลง git ปัจจุบันจากมุมมองต่างๆ;\nตรวจสอบความต้องการและผลข้างเคียงของโค้ดใหม่;\nหลังได้รับรายงาน สรุปข้อเสนอแนะ;\nอย่าดำเนินการทันที ถามฉันก่อน;",tr:"5 teammate ile bir /team başlatın;\ngörev hafifse azaltın, karmaşıksa artırın;\nmevcut git değişikliklerini farklı açılardan Code Review yapın;\ngereksinimleri doğrulayın ve yeni kodun yan etkilerini inceleyin;\nrapordan sonra önerileri özetleyin;\nhemen uygulamayın, önce bana sorun;",uk:"Запустіть /team з 5 учасниками;\nзменшіть якщо завдання легке, збільшіть якщо складне;\nCode Review поточних git-змін з різних перспектив;\nПеревірте вимоги та побічні ефекти нового коду;\nПісля звіту підсумуйте пропозиції;\nНЕ виконуйте одразу, спершу запитайте мене;"},"ui.terminal.addItem":{zh:"添加",en:"Add","zh-TW":"新增",ko:"추가",ja:"追加",de:"Hinzufügen",es:"Agregar",fr:"Ajouter",it:"Aggiungi",da:"Tilføj",pl:"Dodaj",ru:"Добавить",ar:"إضافة",no:"Legg til","pt-BR":"Adicionar",th:"เพิ่ม",tr:"Ekle",uk:"Додати"},"ui.terminal.deleteSelected":{zh:"删除",en:"Delete","zh-TW":"刪除",ko:"삭제",ja:"削除",de:"Löschen",es:"Eliminar",fr:"Supprimer",it:"Elimina",da:"Slet",pl:"Usuń",ru:"Удалить",ar:"حذف",no:"Slett","pt-BR":"Excluir",th:"ลบ",tr:"Sil",uk:"Видалити"},"ui.ok":{zh:"确定",en:"OK","zh-TW":"確定",ko:"확인",ja:"OK",de:"OK",es:"Aceptar",fr:"OK",it:"OK",da:"OK",pl:"OK",ru:"ОК",ar:"موافق",no:"OK","pt-BR":"OK",th:"ตกลง",tr:"Tamam",uk:"ОК"},"ui.terminal.editItem":{zh:"编辑",en:"Edit","zh-TW":"編輯",ko:"편집",ja:"編集",de:"Bearbeiten",es:"Editar",fr:"Modifier",it:"Modifica",da:"Rediger",pl:"Edytuj",ru:"Редактировать",ar:"تعديل",no:"Rediger","pt-BR":"Editar",th:"แก้ไข",tr:"Düzenle",uk:"Редагувати"},"ui.terminal.teamName":{zh:"名称:",en:"Name:","zh-TW":"名稱:",ko:"이름:",ja:"名前:",de:"Name:",es:"Nombre:",fr:"Nom :",it:"Nome:",da:"Navn:",pl:"Nazwa:",ru:"Имя:",ar:"الاسم:",no:"Navn:","pt-BR":"Nome:",th:"ชื่อ:",tr:"Ad:",uk:"Назва:"},"ui.terminal.teamDesc":{zh:"描述:",en:"Description:","zh-TW":"描述:",ko:"설명:",ja:"説明:",de:"Beschreibung:",es:"Descripción:",fr:"Description :",it:"Descrizione:",da:"Beskrivelse:",pl:"Opis:",ru:"Описание:",ar:"الوصف:",no:"Beskrivelse:","pt-BR":"Descrição:",th:"คำอธิบาย:",tr:"Açıklama:",uk:"Опис:"},"ui.terminal.teamNamePlaceholder":{zh:"输入 Team 名称...",en:"Enter team name...","zh-TW":"輸入 Team 名稱...",ko:"팀 이름 입력...",ja:"チーム名を入力...",de:"Teamname eingeben...",es:"Ingrese nombre del equipo...",fr:"Entrez le nom de l'équipe...",it:"Inserisci nome del team...",da:"Indtast teamnavn...",pl:"Wpisz nazwę zespołu...",ru:"Введите название команды...",ar:"أدخل اسم الفريق...",no:"Skriv inn teamnavn...","pt-BR":"Digite o nome da equipe...",th:"ป้อนชื่อทีม...",tr:"Takım adını girin...",uk:"Введіть назву команди..."},"ui.terminal.presetInputPlaceholder":{zh:"输入快捷方式文本...",en:"Enter shortcut text...","zh-TW":"輸入快捷方式文字...",ko:"단축키 텍스트 입력...",ja:"ショートカットテキストを入力...",de:"Verknüpfungstext eingeben...",es:"Ingrese texto del atajo...",fr:"Entrez le texte du raccourci...",it:"Inserisci testo scorciatoia...",da:"Indtast genvejstekst...",pl:"Wpisz tekst skrótu...",ru:"Введите текст ярлыка...",ar:"أدخل نص الاختصار...",no:"Skriv inn snarveitekst...","pt-BR":"Digite o texto do atalho...",th:"ป้อนข้อความทางลัด...",tr:"Kısayol metnini girin...",uk:"Введіть текст ярлика..."},"ui.terminal.pasteImageFailed":{zh:"粘贴图片上传失败",en:"Failed to upload pasted image","zh-TW":"貼上圖片上傳失敗",ko:"붙여넣은 이미지 업로드 실패",ja:"貼り付けた画像のアップロードに失敗しました",de:"Hochladen des eingefügten Bildes fehlgeschlagen",es:"Error al subir la imagen pegada",fr:"Échec du téléchargement de l'image collée",it:"Caricamento immagine incollata non riuscito",da:"Upload af indsat billede mislykkedes",pl:"Nie udało się przesłać wklejonego obrazu",ru:"Не удалось загрузить вставленное изображение",ar:"فشل رفع الصورة الملصقة",no:"Kunne ikke laste opp limt bilde","pt-BR":"Falha ao enviar imagem colada",th:"อัปโหลดรูปภาพที่วางไม่สำเร็จ",tr:"Yapıştırılan resim yüklenemedi",uk:"Не вдалося завантажити вставлене зображення"},"ui.chatInput.clearContext":{zh:"清空上下文",en:"Clear Context","zh-TW":"清空上下文",ko:"컨텍스트 초기화",ja:"コンテキストをクリア",de:"Kontext leeren",es:"Limpiar contexto",fr:"Effacer le contexte",it:"Cancella contesto",da:"Ryd kontekst",pl:"Wyczyść kontekst",ru:"Очистить контекст",ar:"مسح السياق",no:"Tøm kontekst","pt-BR":"Limpar contexto",th:"ล้างบริบท",tr:"Bağlamı temizle",uk:"Очистити контекст"},"ui.chatInput.voiceStart":{zh:"语音输入",en:"Start voice input","zh-TW":"語音輸入",ko:"음성 입력 시작",ja:"音声入力を開始",de:"Spracheingabe starten",es:"Iniciar dictado por voz",fr:"Démarrer la saisie vocale",it:"Avvia dettatura vocale",da:"Start stemmeinput",pl:"Rozpocznij dyktowanie",ru:"Начать голосовой ввод",ar:"بدء الإدخال الصوتي",no:"Start taleinndata","pt-BR":"Iniciar entrada por voz",th:"เริ่มการป้อนด้วยเสียง",tr:"Sesli girişi başlat",uk:"Почати голосове введення"},"ui.chatInput.voiceStop":{zh:"停止录音",en:"Stop recording","zh-TW":"停止錄音",ko:"녹음 중지",ja:"録音を停止",de:"Aufnahme beenden",es:"Detener grabación",fr:"Arrêter l'enregistrement",it:"Interrompi registrazione",da:"Stop optagelse",pl:"Zatrzymaj nagrywanie",ru:"Остановить запись",ar:"إيقاف التسجيل",no:"Stopp opptak","pt-BR":"Parar gravação",th:"หยุดการบันทึก",tr:"Kaydı durdur",uk:"Зупинити запис"},"ui.chatInput.voicePermissionDenied":{zh:"无法访问麦克风。请在浏览器设置中授予权限,并确保通过 HTTPS 或 localhost 访问。",en:"Cannot access microphone. Please grant permission in browser settings, and ensure you are accessing via HTTPS or localhost.","zh-TW":"無法存取麥克風。請在瀏覽器設定中授予權限,並確保透過 HTTPS 或 localhost 存取。",ko:"마이크에 접근할 수 없습니다. 브라우저 설정에서 권한을 부여하고 HTTPS 또는 localhost로 접속하세요.",ja:"マイクにアクセスできません。ブラウザの設定で権限を許可し、HTTPS または localhost でアクセスしてください。",de:"Kein Mikrofonzugriff. Bitte erteile die Berechtigung in den Browsereinstellungen und greife über HTTPS oder localhost zu.",es:"No se puede acceder al micrófono. Concede el permiso en la configuración del navegador y accede mediante HTTPS o localhost.",fr:"Impossible d'accéder au microphone. Accordez l'autorisation dans les paramètres du navigateur et accédez via HTTPS ou localhost.",it:"Impossibile accedere al microfono. Concedi l'autorizzazione nelle impostazioni del browser e accedi via HTTPS o localhost.",da:"Kan ikke få adgang til mikrofonen. Giv tilladelse i browserindstillingerne, og tilgå via HTTPS eller localhost.",pl:"Nie można uzyskać dostępu do mikrofonu. Udziel uprawnień w ustawieniach przeglądarki i korzystaj przez HTTPS lub localhost.",ru:"Нет доступа к микрофону. Предоставьте разрешение в настройках браузера и используйте HTTPS или localhost.",ar:"تعذر الوصول إلى الميكروفون. يرجى منح الإذن في إعدادات المتصفح والوصول عبر HTTPS أو localhost.",no:"Kan ikke få tilgang til mikrofonen. Gi tillatelse i nettleserinnstillingene, og bruk HTTPS eller localhost.","pt-BR":"Não é possível acessar o microfone. Conceda permissão nas configurações do navegador e acesse via HTTPS ou localhost.",th:"ไม่สามารถเข้าถึงไมโครโฟน โปรดอนุญาตในการตั้งค่าเบราว์เซอร์และเข้าผ่าน HTTPS หรือ localhost",tr:"Mikrofona erişilemiyor. Tarayıcı ayarlarından izin verin ve HTTPS veya localhost üzerinden erişin.",uk:"Немає доступу до мікрофона. Надайте дозвіл у налаштуваннях браузера й використовуйте HTTPS або localhost."},"ui.chatInput.clearContextConfirm":{zh:"确定要清空当前对话上下文吗?此操作不可撤销。",en:"Clear the current conversation context? This cannot be undone.","zh-TW":"確定要清空當前對話上下文嗎?此操作不可撤銷。",ko:"현재 대화 컨텍스트를 초기화하시겠습니까? 되돌릴 수 없습니다.",ja:"現在の会話コンテキストをクリアしますか?元に戻せません。",de:"Den aktuellen Kontext löschen? Dies kann nicht rückgängig gemacht werden.",es:"¿Limpiar el contexto actual? No se puede deshacer.",fr:"Effacer le contexte actuel ? Cette action est irréversible.",it:"Cancellare il contesto attuale? Questa azione non può essere annullata.",da:"Ryd den aktuelle kontekst? Kan ikke fortrydes.",pl:"Wyczyścić kontekst? Tego nie można cofnąć.",ru:"Очистить текущий контекст? Это нельзя отменить.",ar:"مسح السياق الحالي؟ لا يمكن التراجع.",no:"Tøm konteksten? Kan ikke angres.","pt-BR":"Limpar o contexto atual? Não pode ser desfeito.",th:"ล้างบริบทปัจจุบัน? ไม่สามารถย้อนกลับได้",tr:"Mevcut bağlamı temizle? Bu geri alınamaz.",uk:"Очистити контекст? Це не можна скасувати."},"ui.terminal.upload":{zh:"上传文件",en:"Upload File","zh-TW":"上傳檔案",ko:"파일 업로드",ja:"ファイルをアップロード",de:"Datei hochladen",es:"Subir archivo",fr:"Télécharger un fichier",it:"Carica file",da:"Upload fil",pl:"Prześlij plik",ru:"Загрузить файл",ar:"رفع ملف",no:"Last opp fil","pt-BR":"Enviar arquivo",th:"อัปโหลดไฟล์",tr:"Dosya yükle",uk:"Завантажити файл"},"ui.editorSession.banner":{zh:"保存好以后,点我回到「终端」界面",en:"After saving, click here to return to Terminal","zh-TW":"儲存好以後,點我回到「終端」介面",ko:"저장 후 여기를 클릭하여 터미널로 돌아가기",ja:"保存後、ここをクリックしてターミナルに戻る",de:"Nach dem Speichern hier klicken, um zum Terminal zurückzukehren",es:"Después de guardar, haz clic aquí para volver a la Terminal",fr:"Après avoir enregistré, cliquez ici pour revenir au Terminal",it:"Dopo aver salvato, clicca qui per tornare al Terminale",da:"Klik her for at vende tilbage til Terminalen efter at have gemt",pl:"Po zapisaniu kliknij tutaj, aby wrócić do Terminala",ru:"После сохранения нажмите здесь, чтобы вернуться в Терминал",ar:"بعد الحفظ، انقر هنا للعودة إلى الطرفية",no:"Etter lagring, klikk her for å gå tilbake til Terminalen","pt-BR":"Após salvar, clique aqui para voltar ao Terminal",th:"หลังบันทึกแล้ว คลิกที่นี่เพื่อกลับไปที่เทอร์มินัล",tr:"Kaydettikten sonra Terminal'e dönmek için buraya tıklayın",uk:"Після збереження натисніть тут, щоб повернутися до Терміналу"},"ui.askSubmit":{zh:"提交",en:"Submit","zh-TW":"提交",ko:"제출",ja:"送信",de:"Absenden",es:"Enviar",fr:"Soumettre",it:"Invia",da:"Indsend",pl:"Wyślij",ru:"Отправить",ar:"إرسال",no:"Send inn","pt-BR":"Enviar",th:"ส่ง",tr:"Gönder",uk:"Надіслати"},"ui.askSubmitting":{zh:"提交中...",en:"Submitting...","zh-TW":"提交中...",ko:"제출 중...",ja:"送信中...",de:"Wird gesendet...",es:"Enviando...",fr:"Envoi en cours...",it:"Invio in corso...",da:"Indsender...",pl:"Wysyłanie...",ru:"Отправка...",ar:"جارٍ الإرسال...",no:"Sender inn...","pt-BR":"Enviando...",th:"กำลังส่ง...",tr:"Gönderiliyor...",uk:"Надсилання..."},"ui.askOther":{zh:"其他",en:"Other","zh-TW":"其他",ko:"기타",ja:"その他",de:"Andere",es:"Otro",fr:"Autre",it:"Altro",da:"Andet",pl:"Inne",ru:"Другое",ar:"أخرى",no:"Annet","pt-BR":"Outro",th:"อื่นๆ",tr:"Diğer",uk:"Інше"},"ui.askOtherPlaceholder":{zh:"输入你的回答...",en:"Type your answer...","zh-TW":"輸入你的回答...",ko:"답변을 입력하세요...",ja:"回答を入力...",de:"Geben Sie Ihre Antwort ein...",es:"Escribe tu respuesta...",fr:"Tapez votre réponse...",it:"Digita la tua risposta...",da:"Skriv dit svar...",pl:"Wpisz swoją odpowiedź...",ru:"Введите ваш ответ...",ar:"اكتب إجابتك...",no:"Skriv svaret ditt...","pt-BR":"Digite sua resposta...",th:"พิมพ์คำตอบของคุณ...",tr:"Cevabınızı yazın...",uk:"Введіть вашу відповідь..."},"ui.calibrationModelLabel":{zh:"手动校准主力模型:",en:"Calibrate model:","zh-TW":"手動校準主力模型:",ko:"모델 수동 보정:",ja:"モデル手動校正:",de:"Modell kalibrieren:",es:"Calibrar modelo:",fr:"Calibrer le modèle :",it:"Calibra modello:",da:"Kalibrer model:",pl:"Kalibruj model:",ru:"Калибровка модели:",ar:"معايرة النموذج:",no:"Kalibrer modell:","pt-BR":"Calibrar modelo:",th:"ปรับเทียบโมเดล:",tr:"Model kalibrasyonu:",uk:"Калібрування моделі:"},"ui.cachedContentTitle":{zh:"当前 KV-Cache 缓存内容",en:"Current KV-Cache Content","zh-TW":"當前 KV-Cache 快取內容",ko:"현재 KV-Cache 캐시 콘텐츠",ja:"現在の KV-Cache キャッシュ内容",de:"Aktueller KV-Cache Inhalt",es:"Contenido actual de KV-Cache",fr:"Contenu KV-Cache actuel",it:"Contenuto KV-Cache attuale",da:"Aktuelt KV-Cache indhold",pl:"Bieżąca zawartość KV-Cache",ru:"Текущее содержимое KV-Cache",ar:"محتوى KV-Cache الحالي",no:"Nåværende KV-Cache innhold","pt-BR":"Conteúdo atual do KV-Cache",th:"เนื้อหา KV-Cache ปัจจุบัน",tr:"Mevcut KV-Cache İçeriği",uk:"Поточний вміст KV-Cache"},"ui.noCachedContent":{zh:"暂无缓存内容",en:"No cached content","zh-TW":"暫無快取內容",ko:"캐시된 콘텐츠 없음",ja:"キャッシュ内容なし",de:"Kein zwischengespeicherter Inhalt",es:"Sin contenido en caché",fr:"Aucun contenu en cache",it:"Nessun contenuto in cache",da:"Intet cachelagret indhold",pl:"Brak zawartości w pamięci podręcznej",ru:"Нет кэшированного содержимого",ar:"لا يوجد محتوى مخزن مؤقتًا",no:"Ingen bufret innhold","pt-BR":"Sem conteúdo em cache",th:"ไม่มีเนื้อหาที่แคช",tr:"Önbelleğe alınmış içerik yok",uk:"Немає кешованого вмісту"},"ui.systemPrompt":{zh:"系统提示词",en:"System Prompt","zh-TW":"系統提示詞",ko:"시스템 프롬프트",ja:"システムプロンプト",de:"System-Prompt",es:"Prompt del sistema",fr:"Prompt système",it:"Prompt di sistema",da:"Systemprompt",pl:"Prompt systemowy",ru:"Системный промпт",ar:"موجه النظام",no:"Systemprompt","pt-BR":"Prompt do sistema",th:"พรอมต์ระบบ",tr:"Sistem İstemi",uk:"Системний промпт"},"ui.messages":{zh:"消息",en:"Messages","zh-TW":"訊息",ko:"메시지",ja:"メッセージ",de:"Nachrichten",es:"Mensajes",fr:"Messages",it:"Messaggi",da:"Beskeder",pl:"Wiadomości",ru:"Сообщения",ar:"الرسائل",no:"Meldinger","pt-BR":"Mensagens",th:"ข้อความ",tr:"Mesajlar",uk:"Повідомлення"},"ui.tools":{zh:"工具",en:"Tools","zh-TW":"工具",ko:"도구",ja:"ツール",de:"Werkzeuge",es:"Herramientas",fr:"Outils",it:"Strumenti",da:"Værktøjer",pl:"Narzędzia",ru:"Инструменты",ar:"الأدوات",no:"Verktøy","pt-BR":"Ferramentas",th:"เครื่องมือ",tr:"Araçlar",uk:"Інструменти"},"ui.builtinTools":{zh:"内置工具",en:"Built-in Tools","zh-TW":"內建工具",ko:"내장 도구",ja:"組み込みツール",de:"Eingebaute Werkzeuge",es:"Herramientas integradas",fr:"Outils intégrés",it:"Strumenti integrati",da:"Indbyggede værktøjer",pl:"Wbudowane narzędzia",ru:"Встроенные инструменты",ar:"الأدوات المدمجة",no:"Innebygde verktøy","pt-BR":"Ferramentas integradas",th:"เครื่องมือในตัว",tr:"Yerleşik Araçlar",uk:"Вбудовані інструменти"},"ui.mcpTools":{zh:"MCP 工具",en:"MCP Tools","zh-TW":"MCP 工具",ko:"MCP 도구",ja:"MCP ツール",de:"MCP-Werkzeuge",es:"Herramientas MCP",fr:"Outils MCP",it:"Strumenti MCP",da:"MCP-værktøjer",pl:"Narzędzia MCP",ru:"Инструменты MCP",ar:"أدوات MCP",no:"MCP-verktøy","pt-BR":"Ferramentas MCP",th:"เครื่องมือ MCP",tr:"MCP Araçları",uk:"Інструменти MCP"},"ui.loadedSkills":{zh:"当前在用 Skill",en:"Active Skills","zh-TW":"目前在用 Skill",ko:"활성 Skill",ja:"有効な Skill",de:"Aktive Skills",es:"Skills activas",fr:"Skills actifs",it:"Skills attive",da:"Aktive Skills",pl:"Aktywne Skille",ru:"Активные Skill",ar:"المهارات النشطة",no:"Aktive Skills","pt-BR":"Skills ativas",th:"Skills ที่ใช้งานอยู่",tr:"Etkin Skiller",uk:"Активні Skill"},"ui.noDescription":{zh:"暂无描述",en:"No description","zh-TW":"暫無描述",ko:"설명 없음",ja:"説明なし",de:"Keine Beschreibung",es:"Sin descripción",fr:"Aucune description",it:"Nessuna descrizione",da:"Ingen beskrivelse",pl:"Brak opisu",ru:"Нет описания",ar:"لا يوجد وصف",no:"Ingen beskrivelse","pt-BR":"Sem descrição",th:"ไม่มีคำอธิบาย",tr:"Açıklama yok",uk:"Немає опису"},"ui.skillManage":{zh:"管理",en:"Manage","zh-TW":"管理",ko:"관리",ja:"管理",de:"Verwalten",es:"Gestionar",fr:"Gérer",it:"Gestisci",da:"Administrer",pl:"Zarządzaj",ru:"Управлять",ar:"إدارة",no:"Administrer","pt-BR":"Gerenciar",th:"จัดการ",tr:"Yönet",uk:"Керувати"},"ui.skillManagerTitle":{zh:"Skill 管理",en:"Skill Manager","zh-TW":"Skill 管理",ko:"Skill 관리자",ja:"Skill マネージャー",de:"Skill-Verwaltung",es:"Administrador de Skills",fr:"Gestionnaire de skills",it:"Gestione Skill",da:"Skill-administrator",pl:"Menedżer Skilli",ru:"Менеджер Skill",ar:"مدير المهارات",no:"Skill-behandler","pt-BR":"Gerenciador de Skills",th:"ตัวจัดการ Skill",tr:"Skill Yöneticisi",uk:"Менеджер Skill"},"ui.noSkillsLoaded":{zh:"当前会话未启用任何 Skill",en:"No active skills in the current conversation","zh-TW":"目前會話未啟用任何 Skill",ko:"현재 대화에 활성 Skill이 없습니다",ja:"現在の会話に有効な Skill はありません",de:"In der aktuellen Konversation sind keine Skills aktiv",es:"No hay skills activas en la conversación actual",fr:"Aucun skill actif dans la conversation actuelle",it:"Nessuna skill attiva nella conversazione corrente",da:"Ingen aktive skills i den aktuelle samtale",pl:"Brak aktywnych skilli w bieżącej rozmowie",ru:"В текущей беседе нет активных Skill",ar:"لا توجد مهارات نشطة في المحادثة الحالية",no:"Ingen aktive skills i den gjeldende samtalen","pt-BR":"Nenhuma skill ativa na conversa atual",th:"ไม่มี Skill ที่ใช้งานในการสนทนาปัจจุบัน",tr:"Geçerli konuşmada etkin skill yok",uk:"У поточній розмові немає активних Skill"},"ui.skillSource.user":{zh:"用户",en:"USER","zh-TW":"使用者",ko:"사용자",ja:"ユーザー",de:"USER",es:"USUARIO",fr:"UTILISATEUR",it:"UTENTE",da:"BRUGER",pl:"UŻYT.",ru:"ПОЛЬЗ.",ar:"مستخدم",no:"BRUKER","pt-BR":"USUÁRIO",th:"ผู้ใช้",tr:"KULLANICI",uk:"КОРИСТ."},"ui.skillSource.project":{zh:"项目",en:"PROJECT","zh-TW":"專案",ko:"프로젝트",ja:"プロジェクト",de:"PROJEKT",es:"PROYECTO",fr:"PROJET",it:"PROGETTO",da:"PROJEKT",pl:"PROJEKT",ru:"ПРОЕКТ",ar:"مشروع",no:"PROSJEKT","pt-BR":"PROJETO",th:"โปรเจกต์",tr:"PROJE",uk:"ПРОЕКТ"},"ui.skillSource.plugin":{zh:"插件",en:"PLUGIN","zh-TW":"外掛",ko:"플러그인",ja:"プラグイン",de:"PLUGIN",es:"PLUGIN",fr:"PLUGIN",it:"PLUGIN",da:"PLUGIN",pl:"WTYCZKA",ru:"ПЛАГИН",ar:"إضافة",no:"PLUGIN","pt-BR":"PLUGIN",th:"ปลั๊กอิน",tr:"EKLENTI",uk:"ПЛАГIН"},"ui.skillSource.builtin":{zh:"内置",en:"BUILTIN","zh-TW":"內建",ko:"내장",ja:"組込",de:"BUILTIN",es:"INTEGRADO",fr:"INTÉGRÉ",it:"INCORP.",da:"INDBYGGET",pl:"WBUD.",ru:"ВСТРОЕН.",ar:"مدمج",no:"INNEBYGD","pt-BR":"INTEG.",th:"ในตัว",tr:"YERLEŞIK",uk:"ВБУД."},"ui.skillCannotDisableBuiltin":{zh:"内置 Skill,硬编码在 Claude Code 里,无法单独禁用",en:"Builtin skill — hardcoded in Claude Code, cannot be disabled individually","zh-TW":"內建 Skill,硬編碼在 Claude Code 裡,無法單獨停用",ko:"내장 Skill — Claude Code에 하드코딩되어 개별 비활성화 불가",ja:"組み込み Skill — Claude Code にハードコードされており個別無効化不可",de:"Eingebautes Skill — in Claude Code fest codiert, kann nicht einzeln deaktiviert werden",es:"Skill integrada — codificada en Claude Code, no se puede desactivar individualmente",fr:"Skill intégré — codé en dur dans Claude Code, ne peut être désactivé individuellement",it:"Skill integrata — codificata in Claude Code, non può essere disabilitata singolarmente",da:"Indbygget skill — hardkodet i Claude Code, kan ikke deaktiveres individuelt",pl:"Wbudowany skill — zakodowany w Claude Code, nie można wyłączyć osobno",ru:"Встроенный Skill — жёстко задан в Claude Code, нельзя отключить отдельно",ar:"مهارة مدمجة — مضمنة في Claude Code، لا يمكن تعطيلها فرديًا",no:"Innebygd skill — hardkodet i Claude Code, kan ikke deaktiveres individuelt","pt-BR":"Skill integrada — codificada no Claude Code, não pode ser desativada individualmente",th:"Skill ในตัว — hardcoded ใน Claude Code ไม่สามารถปิดแยกได้",tr:"Yerleşik skill — Claude Code'a kodlanmış, tek tek devre dışı bırakılamaz",uk:"Вбудований Skill — жорстко задано в Claude Code, не можна вимкнути окремо"},"ui.skillCannotDisablePlugin":{zh:"来自插件 {plugin},请用 `claude plugin disable <name>` CLI 禁用整个插件",en:"From plugin {plugin} — use `claude plugin disable <name>` CLI to disable the whole plugin","zh-TW":"來自外掛 {plugin},請用 `claude plugin disable <name>` CLI 停用整個外掛",ko:"플러그인 {plugin}에서 온 것 — `claude plugin disable <name>` CLI로 플러그인 전체 비활성화",ja:"プラグイン {plugin} から — `claude plugin disable <name>` CLI でプラグイン全体を無効化",de:"Aus Plugin {plugin} — verwenden Sie `claude plugin disable <name>` CLI, um das gesamte Plugin zu deaktivieren",es:"Del plugin {plugin} — use `claude plugin disable <name>` CLI para desactivar el plugin completo",fr:"Du plugin {plugin} — utilisez `claude plugin disable <name>` CLI pour désactiver le plugin entier",it:"Dal plugin {plugin} — usa `claude plugin disable <name>` CLI per disabilitare l'intero plugin",da:"Fra plugin {plugin} — brug `claude plugin disable <name>` CLI til at deaktivere hele plugin'et",pl:"Z wtyczki {plugin} — użyj `claude plugin disable <name>` CLI aby wyłączyć całą wtyczkę",ru:"Из плагина {plugin} — используйте `claude plugin disable <name>` CLI для отключения всего плагина",ar:"من الإضافة {plugin} — استخدم `claude plugin disable <name>` لتعطيل الإضافة بأكملها",no:"Fra plugin {plugin} — bruk `claude plugin disable <name>` CLI for å deaktivere hele plugin-et","pt-BR":"Do plugin {plugin} — use `claude plugin disable <name>` CLI para desativar o plugin inteiro",th:"จากปลั๊กอิน {plugin} — ใช้ `claude plugin disable <name>` CLI เพื่อปิดปลั๊กอินทั้งหมด",tr:"{plugin} eklentisinden — tüm eklentiyi devre dışı bırakmak için `claude plugin disable <name>` CLI kullanın",uk:"З плагіна {plugin} — використовуйте `claude plugin disable <name>` CLI, щоб вимкнути весь плагін"},"ui.skillEnabled":{zh:"已启用 {name},下次 Claude Code session 生效",en:"Enabled {name}, takes effect on next Claude Code session","zh-TW":"已啟用 {name},下次 Claude Code session 生效",ko:"{name} 활성화됨, 다음 Claude Code 세션에서 적용됨",ja:"{name} を有効化、次の Claude Code セッションで反映",de:"{name} aktiviert, wirksam in nächster Claude Code-Sitzung",es:"{name} habilitada, efectiva en la próxima sesión de Claude Code",fr:"{name} activé, effectif à la prochaine session Claude Code",it:"{name} abilitata, effettiva nella prossima sessione Claude Code",da:"{name} aktiveret, træder i kraft ved næste Claude Code-session",pl:"Włączono {name}, zadziała w następnej sesji Claude Code",ru:"{name} включён, действует в следующей сессии Claude Code",ar:"تم تفعيل {name}، يسري في جلسة Claude Code التالية",no:"Aktivert {name}, trer i kraft ved neste Claude Code-økt","pt-BR":"{name} habilitada, efetiva na próxima sessão do Claude Code",th:"เปิดใช้ {name} แล้ว มีผลใน Claude Code session ถัดไป",tr:"{name} etkinleştirildi, sonraki Claude Code oturumunda geçerli",uk:"{name} увімкнено, набуде чинності в наступній сесії Claude Code"},"ui.skillDisabled":{zh:"已禁用 {name},下次 Claude Code session 生效",en:"Disabled {name}, takes effect on next Claude Code session","zh-TW":"已停用 {name},下次 Claude Code session 生效",ko:"{name} 비활성화됨, 다음 Claude Code 세션에서 적용됨",ja:"{name} を無効化、次の Claude Code セッションで反映",de:"{name} deaktiviert, wirksam in nächster Claude Code-Sitzung",es:"{name} deshabilitada, efectiva en la próxima sesión de Claude Code",fr:"{name} désactivé, effectif à la prochaine session Claude Code",it:"{name} disabilitata, effettiva nella prossima sessione Claude Code",da:"{name} deaktiveret, træder i kraft ved næste Claude Code-session",pl:"Wyłączono {name}, zadziała w następnej sesji Claude Code",ru:"{name} отключён, действует в следующей сессии Claude Code",ar:"تم تعطيل {name}، يسري في جلسة Claude Code التالية",no:"Deaktivert {name}, trer i kraft ved neste Claude Code-økt","pt-BR":"{name} desabilitada, efetiva na próxima sessão do Claude Code",th:"ปิดใช้ {name} แล้ว มีผลใน Claude Code session ถัดไป",tr:"{name} devre dışı bırakıldı, sonraki Claude Code oturumunda geçerli",uk:"{name} вимкнено, набуде чинності в наступній сесії Claude Code"},"ui.skillToggleConflict":{zh:"{name} 目标目录已存在同名副本,请手动清理后重试",en:"{name}: target directory already contains a copy with the same name, please clean up manually and retry","zh-TW":"{name} 目標目錄已存在同名副本,請手動清理後重試",ko:"{name}: 대상 디렉토리에 동일 이름 사본이 이미 존재합니다. 수동 정리 후 재시도",ja:"{name}: 対象ディレクトリに同名のコピーが既に存在します。手動でクリーンアップして再試行してください",de:"{name}: Zielverzeichnis enthält bereits eine Kopie mit demselben Namen, bitte manuell bereinigen und erneut versuchen",es:"{name}: el directorio de destino ya contiene una copia con el mismo nombre, limpie manualmente y reintente",fr:"{name}: le répertoire cible contient déjà une copie du même nom, veuillez nettoyer manuellement et réessayer",it:"{name}: la directory di destinazione contiene già una copia con lo stesso nome, pulire manualmente e riprovare",da:"{name}: målkataloget indeholder allerede en kopi med samme navn, ryd op manuelt og prøv igen",pl:"{name}: katalog docelowy zawiera już kopię o tej samej nazwie, wyczyść ręcznie i spróbuj ponownie",ru:"{name}: целевой каталог уже содержит копию с тем же именем, очистите вручную и повторите",ar:"{name}: يحتوي المجلد الهدف بالفعل على نسخة بنفس الاسم، يرجى التنظيف يدويًا وإعادة المحاولة",no:"{name}: målkatalogen inneholder allerede en kopi med samme navn, rydd opp manuelt og prøv igjen","pt-BR":"{name}: o diretório de destino já contém uma cópia com o mesmo nome, limpe manualmente e tente novamente",th:"{name}: ไดเรกทอรีปลายทางมีสำเนาชื่อเดียวกันอยู่แล้ว กรุณาล้างด้วยตนเองแล้วลองอีกครั้ง",tr:"{name}: hedef dizinde aynı adla bir kopya zaten var, manuel olarak temizleyin ve yeniden deneyin",uk:"{name}: цільовий каталог уже містить копію з такою ж назвою, очистіть вручну та повторіть"},"ui.skillToggleFailed":{zh:"切换失败:{reason}",en:"Toggle failed: {reason}","zh-TW":"切換失敗:{reason}",ko:"전환 실패: {reason}",ja:"切り替え失敗: {reason}",de:"Umschalten fehlgeschlagen: {reason}",es:"Error al alternar: {reason}",fr:"Échec du basculement: {reason}",it:"Cambio fallito: {reason}",da:"Skift mislykkedes: {reason}",pl:"Przełączenie nieudane: {reason}",ru:"Переключение не удалось: {reason}",ar:"فشل التبديل: {reason}",no:"Bytte mislyktes: {reason}","pt-BR":"Falha ao alternar: {reason}",th:"สลับล้มเหลว: {reason}",tr:"Geçiş başarısız: {reason}",uk:"Перемикання не вдалося: {reason}"},"ui.skillsBuiltinLabel":{zh:"内置 Skill(Claude Code 自带,不可单独禁用)",en:"Builtin skills (bundled with Claude Code, cannot be disabled individually)","zh-TW":"內建 Skill(Claude Code 自帶,不可單獨停用)",ko:"내장 Skill (Claude Code 기본 제공, 개별 비활성화 불가)",ja:"組み込み Skill(Claude Code 同梱、個別無効化不可)",de:"Eingebaute Skills (mit Claude Code geliefert, nicht einzeln deaktivierbar)",es:"Skills integradas (incluidas con Claude Code, no se pueden desactivar individualmente)",fr:"Skills intégrés (fournis avec Claude Code, non désactivables individuellement)",it:"Skill integrate (incluse con Claude Code, non disabilitabili singolarmente)",da:"Indbyggede skills (leveret med Claude Code, kan ikke deaktiveres individuelt)",pl:"Wbudowane skille (dostarczane z Claude Code, nie można wyłączyć osobno)",ru:"Встроенные Skill (поставляются с Claude Code, нельзя отключить отдельно)",ar:"مهارات مدمجة (مضمنة مع Claude Code، لا يمكن تعطيلها فرديًا)",no:"Innebygde skills (følger med Claude Code, kan ikke deaktiveres individuelt)","pt-BR":"Skills integradas (incluídas no Claude Code, não podem ser desativadas individualmente)",th:"Skill ในตัว (มาพร้อมกับ Claude Code ไม่สามารถปิดแยกได้)",tr:"Yerleşik skiller (Claude Code ile birlikte gelir, tek tek devre dışı bırakılamaz)",uk:"Вбудовані Skill (постачаються з Claude Code, не можна вимкнути окремо)"},"ui.skillsPluginLabel":{zh:"插件 Skill(请用 `claude plugin disable <name>` CLI 整体禁用)",en:"Plugin skills (use `claude plugin disable <name>` CLI to disable the whole plugin)","zh-TW":"外掛 Skill(請用 `claude plugin disable <name>` CLI 整體停用)",ko:"플러그인 Skill (`claude plugin disable <name>` CLI로 플러그인 전체 비활성화)",ja:"プラグイン Skill(`claude plugin disable <name>` CLI でプラグイン全体を無効化)",de:"Plugin-Skills (verwenden Sie `claude plugin disable <name>` CLI, um das gesamte Plugin zu deaktivieren)",es:"Skills de plugin (use `claude plugin disable <name>` CLI para desactivar el plugin completo)",fr:"Skills de plugin (utilisez `claude plugin disable <name>` CLI pour désactiver le plugin entier)",it:"Skill di plugin (usa `claude plugin disable <name>` CLI per disabilitare l'intero plugin)",da:"Plugin-skills (brug `claude plugin disable <name>` CLI til at deaktivere hele plugin'et)",pl:"Skille wtyczki (użyj `claude plugin disable <name>` CLI aby wyłączyć całą wtyczkę)",ru:"Skill плагина (используйте `claude plugin disable <name>` CLI для отключения всего плагина)",ar:"مهارات الإضافة (استخدم `claude plugin disable <name>` لتعطيل الإضافة بأكملها)",no:"Plugin-skills (bruk `claude plugin disable <name>` CLI for å deaktivere hele plugin-et)","pt-BR":"Skills de plugin (use `claude plugin disable <name>` CLI para desativar o plugin inteiro)",th:"Skill ปลั๊กอิน (ใช้ `claude plugin disable <name>` CLI เพื่อปิดปลั๊กอินทั้งหมด)",tr:"Eklenti skiller (tüm eklentiyi devre dışı bırakmak için `claude plugin disable <name>` CLI kullanın)",uk:"Skill плагіна (використовуйте `claude plugin disable <name>` CLI, щоб вимкнути весь плагін)"},"ui.skillsLoadError.http":{zh:"服务器错误 (HTTP {status})",en:"Server error (HTTP {status})","zh-TW":"伺服器錯誤 (HTTP {status})",ko:"서버 오류 (HTTP {status})",ja:"サーバーエラー (HTTP {status})",de:"Serverfehler (HTTP {status})",es:"Error del servidor (HTTP {status})",fr:"Erreur serveur (HTTP {status})",it:"Errore del server (HTTP {status})",da:"Serverfejl (HTTP {status})",pl:"Błąd serwera (HTTP {status})",ru:"Ошибка сервера (HTTP {status})",ar:"خطأ في الخادم (HTTP {status})",no:"Serverfeil (HTTP {status})","pt-BR":"Erro do servidor (HTTP {status})",th:"ข้อผิดพลาดของเซิร์ฟเวอร์ (HTTP {status})",tr:"Sunucu hatası (HTTP {status})",uk:"Помилка сервера (HTTP {status})"},"ui.skillsLoadError.network":{zh:"网络请求失败",en:"Network request failed","zh-TW":"網路請求失敗",ko:"네트워크 요청 실패",ja:"ネットワーク要求に失敗しました",de:"Netzwerkanfrage fehlgeschlagen",es:"Error de red",fr:"Échec de la requête réseau",it:"Richiesta di rete fallita",da:"Netværksanmodning mislykkedes",pl:"Żądanie sieciowe nie powiodło się",ru:"Ошибка сетевого запроса",ar:"فشل طلب الشبكة",no:"Nettverksforespørsel mislyktes","pt-BR":"Falha na requisição de rede",th:"คำขอเครือข่ายล้มเหลว",tr:"Ağ isteği başarısız",uk:"Мережевий запит не вдався"},"ui.skillsLoadFailed":{zh:"加载 Skill 列表失败:{reason}",en:"Failed to load skills: {reason}","zh-TW":"載入 Skill 列表失敗:{reason}",ko:"Skill 목록 로드 실패: {reason}",ja:"Skill 一覧の読み込み失敗: {reason}",de:"Skills laden fehlgeschlagen: {reason}",es:"Error al cargar skills: {reason}",fr:"Échec du chargement des skills: {reason}",it:"Caricamento skill fallito: {reason}",da:"Kunne ikke indlæse skills: {reason}",pl:"Nie udało się załadować skilli: {reason}",ru:"Не удалось загрузить Skill: {reason}",ar:"فشل تحميل المهارات: {reason}",no:"Kunne ikke laste skills: {reason}","pt-BR":"Falha ao carregar skills: {reason}",th:"โหลด Skill ไม่สำเร็จ: {reason}",tr:"Skill yükleme başarısız: {reason}",uk:"Не вдалося завантажити Skill: {reason}"},"ui.tokens":{zh:"Token",en:"Tokens","zh-TW":"Token",ko:"토큰",ja:"トークン",de:"Token",es:"Tokens",fr:"Jetons",it:"Token",da:"Tokens",pl:"Tokeny",ru:"Токены",ar:"الرموز",no:"Tokens","pt-BR":"Tokens",th:"โทเค็น",tr:"Tokenler",uk:"Токени"},"ui.userPromptNav":{zh:"用户 Prompt 导航",en:"User Prompt Nav","zh-TW":"使用者 Prompt 導航",ko:"사용자 프롬프트 탐색",ja:"ユーザープロンプトナビ",de:"Benutzer-Prompt-Navigation",es:"Navegación de prompts",fr:"Navigation des prompts",it:"Navigazione prompt utente",da:"Bruger-prompt navigation",pl:"Nawigacja promptów",ru:"Навигация по промптам",ar:"تنقل المطالبات",no:"Bruker-prompt navigasjon","pt-BR":"Navegação de prompts",th:"นำทางพรอมต์ผู้ใช้",tr:"Kullanıcı İstemi Gezinme",uk:"Навігація промптів"},"ui.loadEarlierConversations":{zh:"加载更早的对话",en:"Load earlier conversations","zh-TW":"載入更早的對話",ko:"이전 대화 로드",ja:"以前の会話を読み込む",de:"Ältere Unterhaltungen laden",es:"Cargar conversaciones anteriores",fr:"Charger les conversations précédentes",it:"Carica conversazioni precedenti",da:"Indlæs ældre samtaler",pl:"Załaduj wcześniejsze rozmowy",ru:"Загрузить ранние разговоры",ar:"تحميل محادثات أقدم",no:"Last inn eldre samtaler","pt-BR":"Carregar conversas anteriores",th:"โหลดบทสนทนาก่อนหน้า",tr:"Eski konuşmaları yükle",uk:"Завантажити попередні розмови"},"ui.loadingMoreHistory":{zh:"加载中...",en:"Loading...","zh-TW":"載入中...",ko:"로딩 중...",ja:"読み込み中...",de:"Laden...",es:"Cargando...",fr:"Chargement...",it:"Caricamento...",da:"Indlæser...",pl:"Ładowanie...",ru:"Загрузка...",ar:"جارٍ التحميل...",no:"Laster...","pt-BR":"Carregando...",th:"กำลังโหลด...",tr:"Yükleniyor...",uk:"Завантаження..."},"ui.allConversationsLoaded":{zh:"已加载全部对话",en:"All conversations loaded","zh-TW":"已載入全部對話",ko:"모든 대화가 로드됨",ja:"すべての会話を読み込みました",de:"Alle Unterhaltungen geladen",es:"Todas las conversaciones cargadas",fr:"Toutes les conversations chargées",it:"Tutte le conversazioni caricate",da:"Alle samtaler indlæst",pl:"Wszystkie rozmowy załadowane",ru:"Все разговоры загружены",ar:"تم تحميل جميع المحادثات",no:"Alle samtaler lastet","pt-BR":"Todas as conversas carregadas",th:"โหลดบทสนทนาทั้งหมดแล้ว",tr:"Tüm konuşmalar yüklendi",uk:"Всі розмови завантажено"},"ui.loadSessionPlaceholder":{zh:"加载此会话 ({count} 条消息)",en:"Load this session ({count} messages)","zh-TW":"載入此對話 ({count} 則訊息)",ko:"이 세션 로드 ({count}개 메시지)",ja:"このセッションを読み込む ({count} メッセージ)",de:"Diese Sitzung laden ({count} Nachrichten)",es:"Cargar esta sesión ({count} mensajes)",fr:"Charger cette session ({count} messages)",it:"Carica questa sessione ({count} messaggi)",da:"Indlæs denne session ({count} beskeder)",pl:"Załaduj tę sesję ({count} wiadomości)",ru:"Загрузить эту сессию ({count} сообщений)",ar:"تحميل هذه الجلسة ({count} رسائل)",no:"Last inn denne økten ({count} meldinger)","pt-BR":"Carregar esta sessão ({count} mensagens)",th:"โหลดเซสชันนี้ ({count} ข้อความ)",tr:"Bu oturumu yükle ({count} mesaj)",uk:"Завантажити цю сесію ({count} повідомлень)"},"ui.proxySwitch":{zh:"代理热切换",en:"Hot-Switch Proxy","zh-TW":"代理熱切換",ko:"프록시 핫스위칭",ja:"プロキシ ホットスイッチ",de:"Proxy-Hotswitch",es:"Cambio rápido de proxy",fr:"Changement à chaud du proxy",it:"Cambio rapido proxy",da:"Proxy hot-switch",pl:"Szybkie przełączanie proxy",ru:"Горячее переключение прокси",ar:"تبديل الوكيل الفوري",no:"Proxy hot-switch","pt-BR":"Troca rápida de proxy",th:"สลับพร็อกซีแบบร้อน",tr:"Proxy hızlı geçiş",uk:"Гаряче перемикання проксі"},"ui.proxy.builtin":{zh:"内置",en:"Built-in","zh-TW":"內建",ko:"내장",ja:"ビルトイン",de:"Eingebaut",es:"Integrado",fr:"Intégré",it:"Integrato",da:"Indbygget",pl:"Wbudowany",ru:"Встроенный",ar:"مدمج",no:"Innebygd","pt-BR":"Integrado",th:"ในตัว",tr:"Yerleşik",uk:"Вбудований"},"ui.proxy.addProxy":{zh:"添加代理",en:"Add Proxy","zh-TW":"新增代理",ko:"프록시 추가",ja:"プロキシ追加",de:"Proxy hinzufügen",es:"Agregar proxy",fr:"Ajouter un proxy",it:"Aggiungi proxy",da:"Tilføj proxy",pl:"Dodaj proxy",ru:"Добавить прокси",ar:"إضافة وكيل",no:"Legg til proxy","pt-BR":"Adicionar proxy",th:"เพิ่มพร็อกซี",tr:"Proxy ekle",uk:"Додати проксі"},"ui.proxy.deleteProxy":{zh:"删除代理",en:"Delete Proxy","zh-TW":"刪除代理",ko:"프록시 삭제",ja:"プロキシ削除",de:"Proxy löschen",es:"Eliminar proxy",fr:"Supprimer le proxy",it:"Elimina proxy",da:"Slet proxy",pl:"Usuń proxy",ru:"Удалить прокси",ar:"حذف الوكيل",no:"Slett proxy","pt-BR":"Excluir proxy",th:"ลบพร็อกซี",tr:"Proxy sil",uk:"Видалити проксі"},"ui.proxy.deleteConfirm":{zh:"确定删除「{name}」?",en:'Delete "{name}"?',"zh-TW":"確定刪除「{name}」?",ko:'"{name}"을(를) 삭제하시겠습니까?',ja:"「{name}」を削除しますか?",de:"„{name}“ löschen?",es:'¿Eliminar "{name}"?',fr:"Supprimer « {name} » ?",it:'Eliminare "{name}"?',da:'Slet "{name}"?',pl:'Usunąć "{name}"?',ru:"Удалить «{name}»?",ar:'حذف "{name}"؟',no:'Slette "{name}"?',"pt-BR":'Excluir "{name}"?',th:'ลบ "{name}"?',tr:'"{name}" silinsin mi?',uk:"Видалити «{name}»?"},"ui.proxy.name":{zh:"名称",en:"Name","zh-TW":"名稱",ko:"이름",ja:"名前",de:"Name",es:"Nombre",fr:"Nom",it:"Nome",da:"Navn",pl:"Nazwa",ru:"Название",ar:"الاسم",no:"Navn","pt-BR":"Nome",th:"ชื่อ",tr:"Ad",uk:"Назва"},"ui.proxy.baseURL":{zh:"地址",en:"Base URL","zh-TW":"地址",ko:"주소",ja:"アドレス",de:"Adresse",es:"Dirección",fr:"Adresse",it:"Indirizzo",da:"Adresse",pl:"Adres",ru:"Адрес",ar:"العنوان",no:"Adresse","pt-BR":"Endereço",th:"ที่อยู่",tr:"Adres",uk:"Адреса"},"ui.proxy.apiKey":{zh:"API Key",en:"API Key","zh-TW":"API Key",ko:"API Key",ja:"API Key",de:"API Key",es:"API Key",fr:"API Key",it:"API Key",da:"API Key",pl:"API Key",ru:"API Key",ar:"API Key",no:"API Key","pt-BR":"API Key",th:"API Key",tr:"API Key",uk:"API Key"},"ui.proxy.models":{zh:"模型",en:"Models","zh-TW":"模型",ko:"모델",ja:"モデル",de:"Modelle",es:"Modelos",fr:"Modèles",it:"Modelli",da:"Modeller",pl:"Modele",ru:"Модели",ar:"النماذج",no:"Modeller","pt-BR":"Modelos",th:"โมเดล",tr:"Modeller",uk:"Моделі"},"ui.proxy.activeModel":{zh:"当前模型",en:"Active Model","zh-TW":"目前模型",ko:"현재 모델",ja:"現在のモデル",de:"Aktives Modell",es:"Modelo activo",fr:"Modèle actif",it:"Modello attivo",da:"Aktivt model",pl:"Aktywny model",ru:"Активная модель",ar:"النموذج النشط",no:"Aktiv modell","pt-BR":"Modelo ativo",th:"โมเดลที่ใช้งาน",tr:"Aktif model",uk:"Активна модель"},"ui.proxy.save":{zh:"保存",en:"Save","zh-TW":"儲存",ko:"저장",ja:"保存",de:"Speichern",es:"Guardar",fr:"Enregistrer",it:"Salva",da:"Gem",pl:"Zapisz",ru:"Сохранить",ar:"حفظ",no:"Lagre","pt-BR":"Salvar",th:"บันทึก",tr:"Kaydet",uk:"Зберегти"},"ui.proxy.cancel":{zh:"取消",en:"Cancel","zh-TW":"取消",ko:"취소",ja:"キャンセル",de:"Abbrechen",es:"Cancelar",fr:"Annuler",it:"Annulla",da:"Annuller",pl:"Anuluj",ru:"Отмена",ar:"إلغاء",no:"Avbryt","pt-BR":"Cancelar",th:"ยกเลิก",tr:"İptal",uk:"Скасувати"},"ui.proxy.openConfigDir":{zh:"打开配置文件目录",en:"Open config directory","zh-TW":"開啟設定檔目錄",ko:"설정 파일 디렉토리 열기",ja:"設定ファイルのディレクトリを開く",de:"Konfigurationsverzeichnis öffnen",es:"Abrir directorio de configuración",fr:"Ouvrir le dossier de configuration",it:"Apri cartella di configurazione",da:"Åbn konfigurationsmappe",pl:"Otwórz katalog konfiguracji",ru:"Открыть каталог конфигурации",ar:"فتح مجلد الإعدادات",no:"Åpne konfigurasjonsmappe","pt-BR":"Abrir diretório de configuração",th:"เปิดไดเรกทอรีการกำหนดค่า",tr:"Yapılandırma dizinini aç",uk:"Відкрити каталог конфігурації"},"ui.proxy.maxWarning":{zh:"如果你是 Claude 官方 Max 订阅用户,请勿使用该功能",en:"Do not use this feature if you are a Claude Max subscriber","zh-TW":"如果你是 Claude 官方 Max 訂閱用戶,請勿使用此功能",ko:"Claude Max 구독자인 경우 이 기능을 사용하지 마세요",ja:"Claude Max サブスクリプションをご利用の場合、この機能は使用しないでください",de:"Verwenden Sie diese Funktion nicht, wenn Sie Claude Max abonniert haben",es:"No utilice esta función si tiene suscripción Claude Max",fr:"N'utilisez pas cette fonction si vous êtes abonné Claude Max",it:"Non utilizzare questa funzione se sei abbonato a Claude Max",da:"Brug ikke denne funktion, hvis du har Claude Max-abonnement",pl:"Nie używaj tej funkcji, jeśli masz subskrypcję Claude Max",ru:"Не используйте эту функцию, если у вас подписка Claude Max",ar:"لا تستخدم هذه الميزة إذا كنت مشتركًا في Claude Max",no:"Ikke bruk denne funksjonen hvis du har Claude Max-abonnement","pt-BR":"Não use este recurso se você é assinante do Claude Max",th:"อย่าใช้ฟีเจอร์นี้หากคุณเป็นสมาชิก Claude Max",tr:"Claude Max abonesi iseniz bu özelliği kullanmayın",uk:"Не використовуйте цю функцію, якщо ви підписник Claude Max"},"ui.proxy.requiredFields":{zh:"名称、地址、API Key 为必填项",en:"Name, Base URL, and API Key are required","zh-TW":"名稱、地址、API Key 為必填項",ko:"이름, 주소, API Key는 필수 항목입니다",ja:"名前、アドレス、API Key は必須です",de:"Name, Adresse und API Key sind erforderlich",es:"Nombre, dirección y API Key son obligatorios",fr:"Nom, adresse et API Key sont obligatoires",it:"Nome, indirizzo e API Key sono obbligatori",da:"Navn, adresse og API Key er påkrævet",pl:"Nazwa, adres i API Key są wymagane",ru:"Название, адрес и API Key обязательны",ar:"الاسم والعنوان و API Key مطلوبة",no:"Navn, adresse og API Key er påkrevd","pt-BR":"Nome, endereço e API Key são obrigatórios",th:"ชื่อ ที่อยู่ และ API Key จำเป็นต้องกรอก",tr:"Ad, adres ve API Key zorunludur",uk:"Назва, адреса та API Key є обов'язковими"},"ui.ultraplan":{zh:"UltraPlan",en:"UltraPlan","zh-TW":"UltraPlan",ko:"UltraPlan",ja:"UltraPlan",de:"UltraPlan",es:"UltraPlan",fr:"UltraPlan",it:"UltraPlan",da:"UltraPlan",pl:"UltraPlan",ru:"UltraPlan",ar:"UltraPlan",no:"UltraPlan","pt-BR":"UltraPlan",th:"UltraPlan",tr:"UltraPlan",uk:"UltraPlan"},"ui.ultraplan.title":{zh:"UltraPlan — 至尊许愿机",en:"UltraPlan — Ultimate Wishing Machine","zh-TW":"UltraPlan — 至尊許願機",ko:"UltraPlan — 최고의 소원 기계",ja:"UltraPlan — 究極のウィッシングマシン",de:"UltraPlan — Ultimative Wunschmaschine",es:"UltraPlan — Máquina de deseos suprema",fr:"UltraPlan — Machine à vœux suprême",it:"UltraPlan — Macchina dei desideri suprema",da:"UltraPlan — Den ultimative ønskemaskine",pl:"UltraPlan — Najwyższa maszyna życzeń",ru:"UltraPlan — Супер-машина желаний",ar:"UltraPlan — آلة الأمنيات العظمى",no:"UltraPlan — Den ultimate ønskemaskinen","pt-BR":"UltraPlan — Máquina de desejos suprema",th:"UltraPlan — เครื่องอธิษฐานสูงสุด",tr:"UltraPlan — Nihai dilek makinesi",uk:"UltraPlan — Найвища машина бажань"},"ui.ultraplan.roleCodeExpert":{zh:"代码专家",en:"Code Expert","zh-TW":"程式碼專家",ko:"코드 전문가",ja:"コードエキスパート",de:"Code-Experte",es:"Experto en código",fr:"Expert code",it:"Esperto di codice",da:"Kodeekspert",pl:"Ekspert kodu",ru:"Эксперт по коду",ar:"خبير الكود",no:"Kodeekspert","pt-BR":"Especialista em código",th:"ผู้เชี่ยวชาญโค้ด",tr:"Kod uzmanı",uk:"Експерт з коду"},"ui.ultraplan.roleResearchExpert":{zh:"调研专家",en:"Research Expert","zh-TW":"調研專家",ko:"리서치 전문가",ja:"リサーチエキスパート",de:"Recherche-Experte",es:"Experto en investigación",fr:"Expert recherche",it:"Esperto di ricerca",da:"Forskningsekspert",pl:"Ekspert badawczy",ru:"Эксперт по исследованиям",ar:"خبير الأبحاث",no:"Forskningsekspert","pt-BR":"Especialista em pesquisa",th:"ผู้เชี่ยวชาญวิจัย",tr:"Araştırma uzmanı",uk:"Експерт з досліджень"},"ui.ultraplan.agentTeamRequired":{zh:"UltraPlan 需要开启 Agent Team 才能使用",en:"UltraPlan requires Agent Team to be enabled","zh-TW":"UltraPlan 需要開啟 Agent Team 才能使用",ko:"UltraPlan을 사용하려면 Agent Team을 활성화해야 합니다",ja:"UltraPlan を使用するには Agent Team を有効にする必要があります",de:"UltraPlan erfordert die Aktivierung von Agent Team",es:"UltraPlan requiere que Agent Team esté activado",fr:"UltraPlan nécessite l'activation de Agent Team",it:"UltraPlan richiede che Agent Team sia attivato",da:"UltraPlan kræver at Agent Team er aktiveret",pl:"UltraPlan wymaga włączonego Agent Team",ru:"UltraPlan требует включённого Agent Team",ar:"UltraPlan يتطلب تفعيل Agent Team",no:"UltraPlan krever at Agent Team er aktivert","pt-BR":"UltraPlan requer que o Agent Team esteja ativado",th:"UltraPlan ต้องเปิดใช้งาน Agent Team",tr:"UltraPlan için Agent Team'in etkinleştirilmesi gerekir",uk:"UltraPlan потребує увімкненого Agent Team"},"ui.ultraplan.placeholder":{zh:"这是一个超级许愿机,它能完成非常复杂的任务,只有普通输入无法完成的任务才需要启用该功能",en:"This is a super wishing machine for complex tasks. Only use it when normal input can't handle the job.","zh-TW":"這是一個超級許願機,它能完成非常複雜的任務,只有普通輸入無法完成的任務才需要啟用該功能",ko:"복잡한 작업을 위한 슈퍼 위시 머신입니다. 일반 입력으로 처리할 수 없는 작업에만 사용하세요.",ja:"これは超複雑なタスクを処理できるスーパーウィッシングマシンです。通常の入力では対応できないタスクにのみ使用してください。",de:"Dies ist eine Super-Wunschmaschine für komplexe Aufgaben. Verwenden Sie sie nur, wenn normale Eingaben nicht ausreichen.",es:"Esta es una súper máquina de deseos para tareas complejas. Úsala solo cuando la entrada normal no pueda manejar el trabajo.",fr:"C'est une super machine à vœux pour les tâches complexes. Utilisez-la uniquement quand l'entrée normale ne suffit pas.",it:"Questa è una super macchina dei desideri per compiti complessi. Usala solo quando l'input normale non è sufficiente.",da:"Dette er en super-ønskemaskine til komplekse opgaver. Brug den kun, når normal input ikke kan klare opgaven.",pl:"To super maszyna życzeń do złożonych zadań. Używaj jej tylko, gdy normalne dane wejściowe nie wystarczą.",ru:"Это супер-машина желаний для сложных задач. Используйте только когда обычный ввод не справляется.",ar:"هذه آلة أمنيات خارقة للمهام المعقدة. استخدمها فقط عندما لا يكفي الإدخال العادي.",no:"Dette er en super-ønskemaskin for komplekse oppgaver. Bruk den kun når vanlig input ikke kan håndtere jobben.","pt-BR":"Esta é uma super máquina de desejos para tarefas complexas. Use apenas quando a entrada normal não conseguir lidar com o trabalho.",th:"นี่คือเครื่องอธิษฐานสุดยอดสำหรับงานที่ซับซ้อน ใช้เฉพาะเมื่อการป้อนข้อมูลปกติไม่สามารถจัดการได้",tr:"Bu, karmaşık görevler için süper bir dilek makinesidir. Yalnızca normal giriş yeterli olmadığında kullanın.",uk:"Це супер-машина бажань для складних завдань. Використовуйте лише коли звичайний ввід не справляється."},"ui.ultraplan.send":{zh:"发送",en:"Send","zh-TW":"發送",ko:"보내기",ja:"送信",de:"Senden",es:"Enviar",fr:"Envoyer",it:"Invia",da:"Send",pl:"Wyślij",ru:"Отправить",ar:"إرسال",no:"Send","pt-BR":"Enviar",th:"ส่ง",tr:"Gönder",uk:"Надіслати"},"ui.ultraplan.upload":{zh:"添加附件",en:"Add Attachment","zh-TW":"新增附件",ko:"첨부 추가",ja:"添付を追加",de:"Anhang hinzufügen",es:"Agregar adjunto",fr:"Ajouter une pièce jointe",it:"Aggiungi allegato",da:"Tilføj vedhæftning",pl:"Dodaj załącznik",ru:"Добавить вложение",ar:"إضافة مرفق",no:"Legg til vedlegg","pt-BR":"Adicionar anexo",th:"เพิ่มไฟล์แนบ",tr:"Ek ekle",uk:"Додати вкладення"},"ui.ultraplan.contextWarning":{zh:"当前模型上下文窗口为 200K,很容易不够一次 UltraPlan 运行,务必在运行之前执行 /clear 命令。",en:"The current model has a 200K context window, which may not be enough for a single UltraPlan run. Make sure to run /clear before starting.","zh-TW":"目前模型的上下文窗口為 200K,可能不足以完成一次 UltraPlan 執行,請務必在執行前先執行 /clear 指令。",ko:"현재 모델의 컨텍스트 창은 200K로, 한 번의 UltraPlan 실행에 충분하지 않을 수 있습니다. 시작 전에 /clear 명령을 실행하세요.",ja:"現在のモデルのコンテキストウィンドウは200Kで、1回のUltraPlan実行には不十分な場合があります。開始前に必ず /clear コマンドを実行してください。",de:"Das aktuelle Modell hat ein 200K-Kontextfenster, das für einen einzelnen UltraPlan-Lauf möglicherweise nicht ausreicht. Führen Sie vor dem Start /clear aus.",es:"El modelo actual tiene una ventana de contexto de 200K, que puede no ser suficiente para una ejecución de UltraPlan. Asegúrese de ejecutar /clear antes de comenzar.",fr:"Le modèle actuel a une fenêtre de contexte de 200K, ce qui peut être insuffisant pour une exécution UltraPlan. Exécutez /clear avant de commencer.",it:"Il modello attuale ha una finestra di contesto di 200K, che potrebbe non essere sufficiente per un'esecuzione di UltraPlan. Eseguire /clear prima di iniziare.",da:"Den aktuelle model har et 200K kontekstvindue, hvilket muligvis ikke er nok til en enkelt UltraPlan-kørsel. Kør /clear inden start.",pl:"Bieżący model ma okno kontekstu 200K, które może nie wystarczyć na jedno uruchomienie UltraPlan. Przed rozpoczęciem wykonaj /clear.",ru:"Текущая модель имеет контекстное окно 200K, которого может не хватить для одного запуска UltraPlan. Обязательно выполните /clear перед запуском.",ar:"نافذة السياق للنموذج الحالي هي 200K، وقد لا تكفي لتشغيل UltraPlan واحد. تأكد من تنفيذ /clear قبل البدء.",no:"Gjeldende modell har et 200K kontekstvindu, som kanskje ikke er nok for én UltraPlan-kjøring. Kjør /clear før du starter.","pt-BR":"O modelo atual tem uma janela de contexto de 200K, que pode não ser suficiente para uma execução do UltraPlan. Execute /clear antes de iniciar.",th:"โมเดลปัจจุบันมีหน้าต่างบริบท 200K ซึ่งอาจไม่เพียงพอสำหรับการรัน UltraPlan ครั้งเดียว ให้รันคำสั่ง /clear ก่อนเริ่ม",tr:"Mevcut modelin 200K bağlam penceresi var ve tek bir UltraPlan çalıştırması için yeterli olmayabilir. Başlamadan önce /clear komutunu çalıştırın.",uk:"Поточна модель має контекстне вікно 200K, якого може не вистачити для одного запуску UltraPlan. Обов'язково виконайте /clear перед запуском."},"ui.ultraplan.customAdd":{zh:"自定义 UltraPlan",en:"Custom UltraPlan","zh-TW":"自訂 UltraPlan",ko:"커스텀 UltraPlan",ja:"カスタム UltraPlan",de:"Benutzerdefinierter UltraPlan",es:"UltraPlan personalizado",fr:"UltraPlan personnalisé",it:"UltraPlan personalizzato",da:"Tilpasset UltraPlan",pl:"Niestandardowy UltraPlan",ru:"Пользовательский UltraPlan",ar:"UltraPlan مخصص",no:"Tilpasset UltraPlan","pt-BR":"UltraPlan personalizado",th:"UltraPlan กำหนดเอง",tr:"Özel UltraPlan",uk:"Користувацький UltraPlan"},"ui.ultraplan.customCreateTitle":{zh:"新建自定义专家",en:"New Custom Expert","zh-TW":"新建自訂專家",ko:"새 커스텀 전문가",ja:"新しいカスタムエキスパート",de:"Neuer benutzerdefinierter Experte",es:"Nuevo experto personalizado",fr:"Nouvel expert personnalisé",it:"Nuovo esperto personalizzato",da:"Ny tilpasset ekspert",pl:"Nowy niestandardowy ekspert",ru:"Новый пользовательский эксперт",ar:"خبير مخصص جديد",no:"Ny tilpasset ekspert","pt-BR":"Novo especialista personalizado",th:"ผู้เชี่ยวชาญกำหนดเองใหม่",tr:"Yeni özel uzman",uk:"Новий користувацький експерт"},"ui.ultraplan.customEditTitle":{zh:"编辑自定义专家",en:"Edit Custom Expert","zh-TW":"編輯自訂專家",ko:"커스텀 전문가 편집",ja:"カスタムエキスパートを編集",de:"Benutzerdefinierten Experten bearbeiten",es:"Editar experto personalizado",fr:"Modifier l'expert personnalisé",it:"Modifica esperto personalizzato",da:"Rediger tilpasset ekspert",pl:"Edytuj niestandardowego eksperta",ru:"Редактировать пользовательского эксперта",ar:"تعديل الخبير المخصص",no:"Rediger tilpasset ekspert","pt-BR":"Editar especialista personalizado",th:"แก้ไขผู้เชี่ยวชาญกำหนดเอง",tr:"Özel uzmanı düzenle",uk:"Редагувати користувацького експерта"},"ui.ultraplan.customTitlePlaceholder":{zh:"专家名称,例如:架构师",en:"Expert name, e.g. Architect","zh-TW":"專家名稱,例如:架構師",ko:"전문가 이름, 예: 아키텍트",ja:"エキスパート名、例:アーキテクト",de:"Expertenname, z. B. Architekt",es:"Nombre del experto, p. ej. Arquitecto",fr:"Nom de l'expert, par ex. Architecte",it:"Nome dell'esperto, es. Architetto",da:"Ekspertnavn, f.eks. Arkitekt",pl:"Nazwa eksperta, np. Architekt",ru:"Имя эксперта, например: Архитектор",ar:"اسم الخبير، مثل: المهندس المعماري",no:"Ekspertnavn, f.eks. Arkitekt","pt-BR":"Nome do especialista, ex.: Arquiteto",th:"ชื่อผู้เชี่ยวชาญ เช่น สถาปนิก",tr:"Uzman adı, örn. Mimar",uk:"Ім'я експерта, наприклад: Архітектор"},"ui.ultraplan.customContentPlaceholder":{zh:"输入你的提示词正文。发送时会自动用 <system-reminder> 包裹。",en:"Enter your prompt body. It will be auto-wrapped in <system-reminder> tags when sent.","zh-TW":"輸入你的提示詞正文。發送時會自動用 <system-reminder> 包裹。",ko:"프롬프트 본문을 입력하세요. 전송 시 <system-reminder> 태그로 자동 래핑됩니다.",ja:"プロンプト本文を入力してください。送信時に <system-reminder> タグで自動的にラップされます。",de:"Prompt-Text eingeben. Er wird beim Senden automatisch in <system-reminder>-Tags eingehüllt.",es:"Introduzca el cuerpo del prompt. Se envolverá automáticamente en etiquetas <system-reminder> al enviar.",fr:"Saisissez le corps de l'invite. Il sera automatiquement encapsulé dans des balises <system-reminder> lors de l'envoi.",it:"Inserisci il corpo del prompt. Verrà automaticamente racchiuso in tag <system-reminder> all'invio.",da:"Indtast prompt-teksten. Den bliver automatisk pakket ind i <system-reminder>-tags ved afsendelse.",pl:"Wprowadź treść polecenia. Zostanie automatycznie owinięta tagami <system-reminder> przy wysłaniu.",ru:"Введите текст промпта. При отправке он будет автоматически обёрнут в теги <system-reminder>.",ar:"أدخل نص الموجّه. سيتم لفه تلقائيًا بعلامات <system-reminder> عند الإرسال.",no:"Skriv inn prompt-innholdet. Det pakkes automatisk inn i <system-reminder>-tagger ved sending.","pt-BR":"Digite o corpo do prompt. Será envolvido automaticamente em tags <system-reminder> ao enviar.",th:"ป้อนเนื้อหาพรอมต์ ระบบจะห่อด้วยแท็ก <system-reminder> อัตโนมัติเมื่อส่ง",tr:"Komut gövdesini girin. Gönderildiğinde otomatik olarak <system-reminder> etiketleriyle sarılacaktır.",uk:"Введіть текст запиту. При відправці він буде автоматично обгорнутий тегами <system-reminder>."},"ui.ultraplan.customSave":{zh:"保存",en:"Save","zh-TW":"儲存",ko:"저장",ja:"保存",de:"Speichern",es:"Guardar",fr:"Enregistrer",it:"Salva",da:"Gem",pl:"Zapisz",ru:"Сохранить",ar:"حفظ",no:"Lagre","pt-BR":"Salvar",th:"บันทึก",tr:"Kaydet",uk:"Зберегти"},"ui.ultraplan.customCancel":{zh:"取消",en:"Cancel","zh-TW":"取消",ko:"취소",ja:"キャンセル",de:"Abbrechen",es:"Cancelar",fr:"Annuler",it:"Annulla",da:"Annullér",pl:"Anuluj",ru:"Отмена",ar:"إلغاء",no:"Avbryt","pt-BR":"Cancelar",th:"ยกเลิก",tr:"İptal",uk:"Скасувати"},"ui.ultraplan.customDelete":{zh:"删除",en:"Delete","zh-TW":"刪除",ko:"삭제",ja:"削除",de:"Löschen",es:"Eliminar",fr:"Supprimer",it:"Elimina",da:"Slet",pl:"Usuń",ru:"Удалить",ar:"حذف",no:"Slett","pt-BR":"Excluir",th:"ลบ",tr:"Sil",uk:"Видалити"},"ui.ultraplan.customDeleteConfirm":{zh:"确定删除这个自定义专家吗?",en:"Delete this custom expert?","zh-TW":"確定刪除這個自訂專家嗎?",ko:"이 커스텀 전문가를 삭제하시겠습니까?",ja:"このカスタムエキスパートを削除しますか?",de:"Diesen benutzerdefinierten Experten löschen?",es:"¿Eliminar este experto personalizado?",fr:"Supprimer cet expert personnalisé ?",it:"Eliminare questo esperto personalizzato?",da:"Slet denne tilpassede ekspert?",pl:"Usunąć tego niestandardowego eksperta?",ru:"Удалить этого пользовательского эксперта?",ar:"حذف هذا الخبير المخصص؟",no:"Slette denne tilpassede eksperten?","pt-BR":"Excluir este especialista personalizado?",th:"ลบผู้เชี่ยวชาญกำหนดเองนี้หรือไม่?",tr:"Bu özel uzman silinsin mi?",uk:"Видалити цього користувацького експерта?"},"ui.taskNotification.result":{zh:"结果详情",en:"Result details","zh-TW":"結果詳情",ko:"결과 상세",ja:"結果の詳細",de:"Ergebnisdetails",es:"Detalles del resultado",fr:"Détails du résultat",it:"Dettagli del risultato",da:"Resultatdetaljer",pl:"Szczegóły wyniku",ru:"Подробности результата",ar:"تفاصيل النتيجة",no:"Resultatdetaljer","pt-BR":"Detalhes do resultado",th:"รายละเอียดผลลัพธ์",tr:"Sonuç detayları",uk:"Деталі результату"}},locales={};for(const[key,translations]of Object.entries(i18nData))for(const[lang,text]of Object.entries(translations))locales[lang]||(locales[lang]={}),locales[lang][key]=text;let currentLang="zh";const LANG_MAP$2={zh:"zh","zh-cn":"zh","zh-hans":"zh","zh-tw":"zh-TW","zh-hk":"zh-TW","zh-hant":"zh-TW",en:"en",ko:"ko",de:"de",es:"es",fr:"fr",it:"it",da:"da",ja:"ja",pl:"pl",ru:"ru",ar:"ar",no:"no",nb:"no",nn:"no",pt:"pt-BR","pt-br":"pt-BR",th:"th",tr:"tr",uk:"uk"};function setLang(lang){currentLang=locales[lang]?lang:"en"}function getLang(){return currentLang}function t(key,params){var _a;let text=(null==(_a=locales[currentLang])?void 0:_a[key])||locales.en[key]||key;if(params)for(const[k,v]of Object.entries(params))text=text.replaceAll(`{${k}}`,v);return text}setLang("undefined"!=typeof navigator&&navigator.language?function(raw){if(!raw)return"en";const cleaned=raw.toLowerCase().replace(/_/g,"-");if(LANG_MAP$2[cleaned])return LANG_MAP$2[cleaned];const primary=cleaned.split("-")[0];return LANG_MAP$2[primary]?LANG_MAP$2[primary]:"en"}(navigator.language):"en");const _urlToken=new URLSearchParams(window.location.search).get("token");function apiUrl(path){if(!_urlToken)return path;const sep=path.includes("?")?"&":"?";return`${path}${sep}token=${_urlToken}`}const styles$p_root="_root_2zmas_2",styles$p_inner="_inner_2zmas_10",styles$p_header="_header_2zmas_17",styles$p_headerTitle="_headerTitle_2zmas_22",styles$p_headerFolderIcon="_headerFolderIcon_2zmas_27",styles$p_headerSubtitle="_headerSubtitle_2zmas_32",styles$p_addButtonRow="_addButtonRow_2zmas_36",styles$p_loadingCenter="_loadingCenter_2zmas_42",styles$p_emptyState="_emptyState_2zmas_47",styles$p_card="_card_2zmas_52",styles$p_cardRow="_cardRow_2zmas_59",styles$p_cardLeft="_cardLeft_2zmas_65",styles$p_cardNameRow="_cardNameRow_2zmas_70",styles$p_cardName="_cardName_2zmas_70",styles$p_cardPath="_cardPath_2zmas_82",styles$p_cardMeta="_cardMeta_2zmas_87",styles$p_dirPathHeader="_dirPathHeader_2zmas_96",styles$p_dirCurrentPath="_dirCurrentPath_2zmas_104",styles$p_dirFolderIcon="_dirFolderIcon_2zmas_113",styles$p_dirList="_dirList_2zmas_118",styles$p_dirListCenter="_dirListCenter_2zmas_124",styles$p_dirItem="_dirItem_2zmas_129",styles$p_dirItemInner="_dirItemInner_2zmas_137",styles$p_dirItemName="_dirItemName_2zmas_145",styles$p_dirGitTag="_dirGitTag_2zmas_153",styles$p_dirFooter="_dirFooter_2zmas_162",styles$p_dirPathInputRow="_dirPathInputRow_2zmas_170",styles$p_dirPathInput="_dirPathInput_2zmas_170",{Text:Text$4,Title:Title}=Typography;function formatSize(bytes){if(!bytes)return"0 B";const units=["B","KB","MB","GB"];let i=0,size=bytes;for(;size>=1024&&i<units.length-1;)size/=1024,i++;return`${size.toFixed(i>0?1:0)} ${units[i]}`}function timeAgo(isoString){if(!isoString)return"";const diff=Date.now()-new Date(isoString).getTime(),mins=Math.floor(diff/6e4);if(mins<1)return t("ui.workspaces.justNow");if(mins<60)return`${mins}m ago`;const hours=Math.floor(mins/60);if(hours<24)return`${hours}h ago`;return`${Math.floor(hours/24)}d ago`}function DirBrowser({open:open,onClose:onClose,onSelect:onSelect}){const[currentPath,setCurrentPath]=reactExports.useState(""),[parentPath,setParentPath]=reactExports.useState(null),[dirs,setDirs]=reactExports.useState([]),[loading2,setLoading]=reactExports.useState(!1),[pathInput,setPathInput]=reactExports.useState(""),browse=reactExports.useCallback(path=>{setLoading(!0);const url=path?`/api/browse-dir?path=${encodeURIComponent(path)}`:"/api/browse-dir";fetch(apiUrl(url)).then(res=>res.json()).then(data=>{data.error?staticMethods.error(data.error):(setCurrentPath(data.current),setParentPath(data.parent),setDirs(data.dirs||[]),setPathInput(data.current)),setLoading(!1)}).catch(()=>{staticMethods.error("Failed to browse directory"),setLoading(!1)})},[]);reactExports.useEffect(()=>{open&&browse("")},[open,browse]);const handleGoTo=()=>{const p=pathInput.trim();p&&browse(p)};return jsxRuntimeExports.jsxs(Modal,{title:t("ui.workspaces.selectDir"),open:open,onCancel:onClose,footer:null,width:600,styles:{body:{padding:"12px 0"}},children:[jsxRuntimeExports.jsxs("div",{className:styles$p_dirPathHeader,children:[jsxRuntimeExports.jsx(Button,{type:"text",icon:jsxRuntimeExports.jsx(RefIcon$6,{}),disabled:!parentPath,onClick:()=>parentPath&&browse(parentPath),size:"small"}),jsxRuntimeExports.jsxs(Text$4,{className:styles$p_dirCurrentPath,children:[jsxRuntimeExports.jsx(RefIcon$7,{className:styles$p_dirFolderIcon}),currentPath]})]}),jsxRuntimeExports.jsx("div",{className:styles$p_dirList,children:loading2?jsxRuntimeExports.jsx("div",{className:styles$p_dirListCenter,children:jsxRuntimeExports.jsx(Spin,{})}):0===dirs.length?jsxRuntimeExports.jsx("div",{className:styles$p_dirListCenter,children:jsxRuntimeExports.jsx(Text$4,{type:"secondary",children:t("ui.workspaces.emptyDir")})}):dirs.map(dir=>jsxRuntimeExports.jsxs("div",{className:styles$p_dirItem,onMouseEnter:e=>e.currentTarget.style.background="var(--bg-elevated)",onMouseLeave:e=>e.currentTarget.style.background="transparent",children:[jsxRuntimeExports.jsxs("div",{className:styles$p_dirItemInner,onClick:()=>browse(dir.path),children:[jsxRuntimeExports.jsx(RefIcon$b,{style:{color:dir.hasGit?"var(--color-primary)":"var(--text-muted)",fontSize:16,flexShrink:0}}),jsxRuntimeExports.jsx(Text$4,{className:styles$p_dirItemName,children:dir.name}),dir.hasGit&&jsxRuntimeExports.jsxs(Tag,{color:"blue",className:styles$p_dirGitTag,children:[jsxRuntimeExports.jsx(RefIcon$5,{style:{marginRight:2}}),"git"]})]}),jsxRuntimeExports.jsx(Button,{type:"primary",size:"small",onClick:e=>{e.stopPropagation(),onSelect(dir.path)},children:t("ui.workspaces.select")})]},dir.path))}),jsxRuntimeExports.jsxs("div",{className:styles$p_dirFooter,children:[jsxRuntimeExports.jsxs(Button,{type:"primary",ghost:!0,block:!0,icon:jsxRuntimeExports.jsx(RefIcon$7,{}),onClick:()=>onSelect(currentPath),children:[t("ui.workspaces.selectCurrent")," — ",currentPath.split("/").pop()||currentPath]}),jsxRuntimeExports.jsxs("div",{className:styles$p_dirPathInputRow,children:[jsxRuntimeExports.jsx(Input,{size:"small",value:pathInput,onChange:e=>setPathInput(e.target.value),onPressEnter:handleGoTo,placeholder:t("ui.workspaces.pathPlaceholder"),className:styles$p_dirPathInput}),jsxRuntimeExports.jsx(Button,{size:"small",onClick:handleGoTo,children:t("ui.workspaces.goTo")})]})]})]})}function WorkspaceList({onLaunch:onLaunch}){const[workspaces,setWorkspaces]=reactExports.useState([]),[loading2,setLoading]=reactExports.useState(!0),[launching,setLaunching]=reactExports.useState(null),[browseOpen,setBrowseOpen]=reactExports.useState(!1),fetchWorkspaces=()=>{fetch(apiUrl("/api/workspaces")).then(res=>res.json()).then(data=>{setWorkspaces(data.workspaces||[]),setLoading(!1)}).catch(()=>setLoading(!1))};reactExports.useEffect(()=>{fetchWorkspaces()},[]);const handleLaunch=(workspace,dangerousMode=!1)=>{var _a;setLaunching(workspace.id);const extraArgs=[];if(dangerousMode&&extraArgs.push("--dangerously-skip-permissions"),workspace.logCount>0&&extraArgs.push("-c"),null==(_a=window.electronAPI)?void 0:_a.launchWorkspace)return window.electronAPI.launchWorkspace(workspace.path,extraArgs),void setLaunching(null);fetch(apiUrl("/api/workspaces/launch"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:workspace.path,extraArgs:extraArgs})}).then(res=>res.json()).then(data=>{data.error?(staticMethods.error(data.error),setLaunching(null)):onLaunch({projectName:data.projectName,path:workspace.path})}).catch(()=>{staticMethods.error("Launch failed"),setLaunching(null)})};return jsxRuntimeExports.jsxs("div",{className:styles$p_root,children:[jsxRuntimeExports.jsxs("div",{className:styles$p_inner,children:[jsxRuntimeExports.jsxs("div",{className:styles$p_header,children:[jsxRuntimeExports.jsxs(Title,{level:3,className:styles$p_headerTitle,children:[jsxRuntimeExports.jsx(RefIcon$7,{className:styles$p_headerFolderIcon}),t("ui.workspaces.title")]}),jsxRuntimeExports.jsx(Text$4,{type:"secondary",className:styles$p_headerSubtitle,children:t("ui.workspaces.subtitle")})]}),jsxRuntimeExports.jsx("div",{className:styles$p_addButtonRow,children:jsxRuntimeExports.jsx(Button,{type:"primary",icon:jsxRuntimeExports.jsx(RefIcon$8,{}),onClick:()=>setBrowseOpen(!0),size:"large",children:t("ui.workspaces.browse")})}),loading2?jsxRuntimeExports.jsx("div",{className:styles$p_loadingCenter,children:jsxRuntimeExports.jsx(Spin,{})}):0===workspaces.length?jsxRuntimeExports.jsx(Empty,{description:jsxRuntimeExports.jsx(Text$4,{type:"secondary",children:t("ui.workspaces.empty")}),className:styles$p_emptyState}):jsxRuntimeExports.jsx(List,{dataSource:workspaces,renderItem:item=>jsxRuntimeExports.jsx(Card,{size:"small",className:styles$p_card,hoverable:!0,onClick:()=>handleLaunch(item,!1),children:jsxRuntimeExports.jsxs("div",{className:styles$p_cardRow,children:[jsxRuntimeExports.jsxs("div",{className:styles$p_cardLeft,children:[jsxRuntimeExports.jsx("div",{className:styles$p_cardNameRow,children:jsxRuntimeExports.jsx(Text$4,{strong:!0,className:styles$p_cardName,children:item.projectName})}),jsxRuntimeExports.jsx(Text$4,{type:"secondary",className:styles$p_cardPath,children:item.path}),jsxRuntimeExports.jsxs("div",{className:styles$p_cardMeta,children:[jsxRuntimeExports.jsxs("span",{children:[jsxRuntimeExports.jsx(RefIcon$9,{style:{marginRight:4}}),timeAgo(item.lastUsed)]}),item.logCount>0&&jsxRuntimeExports.jsxs("span",{children:[jsxRuntimeExports.jsx(RefIcon$3,{style:{marginRight:4}}),item.logCount," logs (",formatSize(item.totalSize),")"]})]})]}),jsxRuntimeExports.jsxs(Space,{children:[jsxRuntimeExports.jsx(Button,{type:"primary",icon:jsxRuntimeExports.jsx(RefIcon$2,{}),loading:launching===item.id,onClick:e=>{e.stopPropagation(),handleLaunch(item,!1)},children:t("ui.workspaces.normalLaunch")}),jsxRuntimeExports.jsx(Button,{icon:jsxRuntimeExports.jsx(RefIcon$2,{}),loading:launching===item.id,onClick:e=>{e.stopPropagation(),handleLaunch(item,!0)},style:{background:"#d97706",borderColor:"#d97706",color:"#fff"},children:t("ui.workspaces.skipPermLaunch")}),jsxRuntimeExports.jsx(Popconfirm,{title:t("ui.workspaces.confirmRemove"),onConfirm:e=>{var id;null==e||e.stopPropagation(),id=item.id,fetch(apiUrl(`/api/workspaces/${id}`),{method:"DELETE"}).then(res=>res.json()).then(()=>fetchWorkspaces()).catch(()=>{})},onCancel:e=>null==e?void 0:e.stopPropagation(),okText:"Yes",cancelText:"No",children:jsxRuntimeExports.jsx(Button,{type:"text",danger:!0,icon:jsxRuntimeExports.jsx(RefIcon$a,{}),onClick:e=>e.stopPropagation()})})]})]})},item.id)})]}),jsxRuntimeExports.jsx(DirBrowser,{open:browseOpen,onClose:()=>setBrowseOpen(!1),onSelect:path=>{setBrowseOpen(!1),fetch(apiUrl("/api/workspaces/add"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:path})}).then(res=>res.json()).then(data=>{data.error?staticMethods.error(data.error):fetchWorkspaces()}).catch(()=>staticMethods.error("Failed to add workspace"))}})]})}const styles$o_iconBtn="_iconBtn_5ojec_1";function OpenFolderIcon({apiEndpoint:apiEndpoint,title:title2,size:size=16}){const[hovered,setHovered]=reactExports.useState(!1),handleClick=e=>{e.stopPropagation(),fetch(apiEndpoint,{method:"POST"}).catch(()=>{})},closedFolder=jsxRuntimeExports.jsx("svg",{width:size,height:size,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntimeExports.jsx("path",{d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"})}),openFolder=jsxRuntimeExports.jsxs("svg",{width:size,height:size,viewBox:"0 0 24 24",fill:"none",stroke:"var(--color-accent-yellow)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("path",{d:"M5 19a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4l2 2h5a2 2 0 0 1 2 2v1",fill:"none"}),jsxRuntimeExports.jsx("path",{d:"M20 10H8.5A2.5 2.5 0 0 0 6 12.5L5 19h13.5a2 2 0 0 0 2-1.75l1-6.25A1 1 0 0 0 20.5 10z",fill:"var(--color-accent-yellow)",stroke:"var(--color-accent-yellow)"})]});return jsxRuntimeExports.jsx("span",{role:"button",tabIndex:0,onClick:handleClick,onKeyDown:e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),handleClick(e))},onMouseEnter:()=>setHovered(!0),onMouseLeave:()=>setHovered(!1),title:title2,className:styles$o_iconBtn,style:{opacity:hovered?1:.7},children:hovered?openFolder:closedFolder})}let _configDir="~/.claude";function tc(key,params){return t(key,{...params,configDir:_configDir})}const NATIVE_TEAMMATE_RE=/You are a Claude agent/i,_cache=new WeakMap;function isNativeTeammate(req){var _a;if(!req)return!1;const cached=_cache.get(req);if(void 0!==cached)return cached;if(req.teammate)return _cache.set(req,!1),!1;const sysText=function(body2){const system=null==body2?void 0:body2.system;return"string"==typeof system?system:Array.isArray(system)?system.map(s=>s&&s.text||"").join(""):""}(req.body||{});if(!NATIVE_TEAMMATE_RE.test(sysText))return _cache.set(req,!1),!1;const tools=null==(_a=req.body)?void 0:_a.tools,result=Array.isArray(tools)&&tools.some(t2=>t2&&"SendMessage"===t2.name);return _cache.set(req,result),result}const SUBAGENT_SYSTEM_RE=/command execution specialist|file search specialist|planning specialist|general-purpose agent/i,TEAMMATE_SYSTEM_RE=/running as an agent in a team|Agent Teammate Communication/i;function getSystemText(body2){const system=null==body2?void 0:body2.system;return"string"==typeof system?system:Array.isArray(system)?system.map(s=>s&&s.text||"").join(""):""}const _isTeammateCache=new WeakMap;function isTeammate(req){if(!req)return!1;const cached=_isTeammateCache.get(req);if(void 0!==cached)return cached;if(req.teammate)return _isTeammateCache.set(req,!0),!0;if(isNativeTeammate(req))return req.teammate||(req.teammate=function(req){if(!(null==req?void 0:req.body))return null;const msgs=req.body.messages||[];if(0===msgs.length)return null;for(const m of msgs){if("user"!==m.role)continue;const content2=m.content;let text="";if("string"==typeof content2?text=content2:Array.isArray(content2)&&(text=content2.filter(c=>c&&"text"===c.type).map(c=>c.text||"").join(" ")),!text)continue;const nameMatch=text.match(/Agent\s+(?:oh-my-claudecode:)?(\S+)\s+started/i)||text.match(/You are (\w+)[,.]/)||text.match(/name[::]\s*["']?(\w+)/i);if(nameMatch)return nameMatch[1]}return null}(req)||null),_isTeammateCache.set(req,!0),!0;const sysText=getSystemText(req.body||{}),result=TEAMMATE_SYSTEM_RE.test(sysText);return _isTeammateCache.set(req,result),result}const _isMainAgentCache=new WeakMap;function isMainAgent(req){if(!req)return!1;const cached=_isMainAgentCache.get(req);if(void 0!==cached)return cached;const result=function(req){if(!req)return!1;if(isTeammate(req))return!1;if(req.mainAgent){const sysText2=getSystemText(req.body||{});return!SUBAGENT_SYSTEM_RE.test(sysText2)}const body2=req.body||{};if(!body2.system||!Array.isArray(body2.tools))return!1;const sysText=getSystemText(body2);if(!sysText.includes("You are Claude Code"))return!1;if(SUBAGENT_SYSTEM_RE.test(sysText))return!1;const isSystemArray=Array.isArray(body2.system),hasToolSearch=body2.tools.some(t2=>"ToolSearch"===t2.name);if(isSystemArray&&hasToolSearch){const messages=body2.messages||[];if((messages.length>0?"string"==typeof messages[0].content?messages[0].content:Array.isArray(messages[0].content)?messages[0].content.map(c=>c.text||"").join(""):"":"").includes("<available-deferred-tools>"))return!0}if(body2.tools.length>5){const hasEdit=body2.tools.some(t2=>"Edit"===t2.name),hasBash=body2.tools.some(t2=>"Bash"===t2.name),hasTaskOrAgent=body2.tools.some(t2=>"Task"===t2.name||"Agent"===t2.name);if(hasEdit&&hasBash&&hasTaskOrAgent)return!0}return!1}(req);return _isMainAgentCache.set(req,result),result}function isSkillText(text){return!!text&&/^Base directory for this skill:/i.test(text.trim())}function stripSystemTags(text){return text?text.replace(/<system-reminder>[\s\S]*?<\/system-reminder>/gi,"").replace(/<local-command-caveat>[\s\S]*?<\/local-command-caveat>/gi,"").replace(/<local-command-stdout>[\s\S]*?<\/local-command-stdout>/gi,"").replace(/<command-name>[\s\S]*?<\/command-name>/gi,"").replace(/<command-message>[\s\S]*?<\/command-message>/gi,"").replace(/<command-args>[\s\S]*?<\/command-args>/gi,"").replace(/<teammate-message[\s\S]*?<\/teammate-message>/gi,"").replace(/<task-notification>[\s\S]*?<\/task-notification>/gi,"").trim():""}const SYNTHETIC_PROMPTS=[{subType:"Recap",pattern:/^The user stepped away and is coming back\. Recap in under/i},{subType:"Title",pattern:/^(Based on the above conversation, generate a|Please write a)\s+(short|concise)\s+title/i},{subType:"Compact",pattern:/^(Your task is to create a detailed summary of the conversation|This session is being continued from a previous conversation)/i},{subType:"Topic",pattern:/^Analyze if this message indicates a new/i},{subType:"Summary",pattern:/^Summarize this coding session/i}];function isSystemText(text){if(!text)return!0;const trimmed=text.trim();return!trimmed||!/Implement the following plan:/i.test(trimmed)&&(!!/^<[a-zA-Z_][\w-]*[\s>]/i.test(trimmed)||(!!/^\[SUGGESTION MODE:/i.test(trimmed)||(!!/^Your response was cut off because it exceeded the output token limit/i.test(trimmed)||(!!/^Base directory for this skill:/i.test(trimmed)||!!function(text){if(!text||"string"!=typeof text)return!1;const trimmed=text.trim();if(!trimmed)return!1;for(const{pattern:pattern}of SYNTHETIC_PROMPTS)if(pattern.test(trimmed))return!0;return!1}(trimmed)))))}function classifyUserContent(content2){if(!Array.isArray(content2))return{commands:[],textBlocks:[],skillBlocks:[],teammateBlocks:[],taskNotificationBlocks:[]};const teammateBlocks=[];for(const b of content2){if("text"!==b.type)continue;const text=b.text||"",re=/<teammate-message\s+([^>]*)>([\s\S]*?)<\/teammate-message>/gi;let match;for(;null!==(match=re.exec(text));){const attrs=match[1],body2=match[2].trim(),idMatch=attrs.match(/teammate_id="([^"]*)"/),colorMatch=attrs.match(/color="([^"]*)"/),summaryMatch=attrs.match(/summary="([^"]*)"/),tmId=idMatch?idMatch[1]:"teammate",tmColor=colorMatch?colorMatch[1]:null;if(body2.startsWith("{"))try{const j=JSON.parse(body2);if(j&&j.type){teammateBlocks.push({id:tmId,color:tmColor,summary:null,content:null,status:j.type,statusFrom:j.from||tmId});continue}}catch{}teammateBlocks.push({id:tmId,color:tmColor,summary:summaryMatch?summaryMatch[1]:null,content:body2,status:null})}}const taskNotificationBlocks=[];if(content2.some(b=>"text"===b.type&&/<task-notification>/i.test(b.text||"")))for(const b of content2){if("text"!==b.type)continue;const text=b.text||"",tnRe=/<task-notification>([\s\S]*?)<\/task-notification>/gi;let tnMatch;for(;null!==(tnMatch=tnRe.exec(text));){const inner2=tnMatch[1],field2=tag=>{const m=inner2.match(new RegExp(`<${tag}>([\\s\\S]*?)<\\/${tag}>`,"i"));return m?m[1].trim():null},usageBlock=inner2.match(/<usage>([\s\S]*?)<\/usage>/i);let usage=null;if(usageBlock){const uf=tag=>{const m=usageBlock[1].match(new RegExp(`<${tag}>([\\s\\S]*?)<\\/${tag}>`,"i"));return m?m[1].trim():null};usage={totalTokens:Number(uf("total_tokens")||0),toolUses:Number(uf("tool_uses")||0),durationMs:Number(uf("duration_ms")||0)}}taskNotificationBlocks.push({taskId:field2("task-id"),status:field2("status"),summary:field2("summary"),result:field2("result"),usage:usage})}}const hasCommand=content2.some(b=>"text"===b.type&&/<command-message>/i.test(b.text||"")),commands=[];if(hasCommand)for(const b of content2){if("text"!==b.type)continue;const m=(b.text||"").match(/<command-name>\s*([^<]*)<\/command-name>/i);if(m){const cmd=m[1].trim();commands.push(cmd.startsWith("/")?cmd:`/${cmd}`)}}let textBlocks=content2.filter(b=>"text"===b.type&&!isSystemText(b.text));for(const b of content2){if("text"!==b.type||!isSystemText(b.text))continue;const userText=stripSystemTags(b.text);userText&&textBlocks.push({...b,text:userText})}hasCommand&&(textBlocks=textBlocks.filter(b=>!/<command-message>/i.test(b.text||"")));const skillBlocks=textBlocks.filter(b=>isSkillText(b.text));return skillBlocks.length>0&&(textBlocks=textBlocks.filter(b=>!isSkillText(b.text))),{commands:commands,textBlocks:textBlocks,skillBlocks:skillBlocks,teammateBlocks:teammateBlocks,taskNotificationBlocks:taskNotificationBlocks}}const _promptRegistry=new Map;let _registryScanIdx=0,_registrySessionKey=null;const TM_TAG_RE=/<teammate-message[^>]*>/;function _extractSpawnPrompt(req){var _a;const msgs=null==(_a=req.body)?void 0:_a.messages;if(!Array.isArray(msgs)||0===msgs.length)return"";const content2=msgs[0].content;if("string"==typeof content2){const m=TM_TAG_RE.exec(content2);return m?content2.slice(m.index+m[0].length).trimStart():""}if(Array.isArray(content2))for(const b of content2){if("text"!==b.type||!b.text)continue;const m=TM_TAG_RE.exec(b.text);if(m)return b.text.slice(m.index+m[0].length).trimStart()}return""}function _extractRawPrompt(req){var _a;const msgs=null==(_a=req.body)?void 0:_a.messages;if(!Array.isArray(msgs)||0===msgs.length)return"";const content2=msgs[0].content;if("string"==typeof content2)return content2.trimStart();if(Array.isArray(content2))for(const b of content2)if("text"===b.type&&b.text)return b.text.trimStart();return""}function resolveTeammateNames(requests){var _a,_b,_c;if(!Array.isArray(requests)||0===requests.length)return;const sessionKey=(null==(_a=requests[0])?void 0:_a.timestamp)||null;sessionKey!==_registrySessionKey&&(_promptRegistry.clear(),_registryScanIdx=0,_registrySessionKey=sessionKey);for(let i=_registryScanIdx;i<requests.length;i++){const req=requests[i];if(!req.mainAgent)continue;const content2=null==(_c=null==(_b=req.response)?void 0:_b.body)?void 0:_c.content;if(Array.isArray(content2))for(const block of content2){if("tool_use"!==block.type||"Agent"!==block.name)continue;const inp=block.input;if(!inp||!inp.name||!inp.prompt)continue;const prefix2=inp.prompt.trimStart().slice(0,60);prefix2&&_promptRegistry.set(prefix2,inp.name)}}if(_registryScanIdx=requests.length,0!==_promptRegistry.size)for(const req of requests){if(req.teammate)continue;if(!isNativeTeammate(req)&&!TEAMMATE_SYSTEM_RE.test(getSystemText(req.body||{})))continue;let prompt=_extractSpawnPrompt(req);if(!prompt&&isNativeTeammate(req)&&(prompt=_extractRawPrompt(req)),!prompt)continue;const prefix2=prompt.slice(0,60),name=_promptRegistry.get(prefix2);name&&(req.teammate=name,null===req._cachedTeammateName&&(req._cachedTeammateName=name))}}function restoreSlimmedEntry(entry,requests){var _a;if(!entry._slimmed||null==entry._fullEntryIndex)return entry;const fullEntry=requests[entry._fullEntryIndex];return(null==(_a=null==fullEntry?void 0:fullEntry.body)?void 0:_a.messages)?fullEntry.body.messages.length<entry._messageCount?entry:{...entry,_slimmed:!1,_fullEntryIndex:void 0,body:{...entry.body,messages:fullEntry.body.messages.slice(0,entry._messageCount),system:fullEntry.body.system}}:entry}const BUILTIN_SKILL_NAMES=new Set(["update-config","keybindings-help","simplify","fewer-permission-prompts","loop","schedule","claude-api","init","review","security-review"]);function skillToDisplayName(s){if(!s||"string"!=typeof s.name)return"";if("plugin"===s.source&&"string"==typeof s.pluginName&&s.pluginName.includes("@")){const short=s.pluginName.split("@")[0];if(short)return`${short}:${s.name}`}return s.name}function mergeActiveSkills(fsSkills,historicalSkills){if(!Array.isArray(fsSkills))return null;const descMap=new Map((historicalSkills||[]).map(s=>[s.name,s.description])),out=new Map;for(const s of fsSkills){if(!s||!s.enabled||"builtin"===s.source)continue;const name=skillToDisplayName(s);name&&!BUILTIN_SKILL_NAMES.has(name)&&out.set(name,{name:name,description:s.description||descMap.get(name)||""})}return[...out.values()]}const MODEL_CONTEXT_SIZES=[{match:/\[1m\]/i,tokens:1e6},{match:/opus/i,tokens:1e6},{match:/claude/i,tokens:2e5},{match:/gpt-4o|o1|o3|o4/i,tokens:128e3},{match:/gpt-4/i,tokens:128e3},{match:/gpt-3/i,tokens:16e3},{match:/deepseek/i,tokens:128e3}];function getModelMaxTokens(modelName2){if(!modelName2)return 2e5;for(const entry of MODEL_CONTEXT_SIZES)if(entry.match.test(modelName2))return entry.tokens;return 2e5}function appendCacheLossMap(map,requests,startIndex,prevMainAgent){var _a,_b;for(let i=startIndex;i<requests.length;i++){const req=requests[i];if(isMainAgent(req)){if(prevMainAgent){const usage=null==(_b=null==(_a=req.response)?void 0:_a.body)?void 0:_b.usage;if(usage){const cacheCreate=usage.cache_creation_input_tokens||0,cacheRead=usage.cache_read_input_tokens||0;if(cacheCreate>0&&cacheCreate>cacheRead){const loss=_computeCacheLoss(prevMainAgent._slimmed?restoreSlimmedEntry(prevMainAgent,requests):prevMainAgent,req);loss&&map.set(i,loss)}}}prevMainAgent=req}}return prevMainAgent}const _jsonCache=new WeakMap;function _getCachedJson(entry,key){let cache=_jsonCache.get(entry);if(cache||(cache={},_jsonCache.set(entry,cache)),void 0===cache[key]){const body2=stripPrivateKeys(entry.body);cache[key]=JSON.stringify(null==body2?void 0:body2[key])}return cache[key]}function _computeCacheLoss(prevMainAgent,req){if(req.timestamp-prevMainAgent.timestamp>3e5)return{reason:"ttl",reasons:["ttl"]};const prev=stripPrivateKeys(prevMainAgent.body),curr=stripPrivateKeys(req.body);if(!prev||!curr)return{reason:"key_change",reasons:["key_change"]};const reasons=[];prev.model!==curr.model&&reasons.push("model_change");_getCachedJson(prevMainAgent,"system")!==_getCachedJson(req,"system")&&reasons.push("system_change");_getCachedJson(prevMainAgent,"tools")!==_getCachedJson(req,"tools")&&reasons.push("tools_change");const prevMsgs=prev.messages||[],currMsgs=curr.messages||[];if(currMsgs.length<prevMsgs.length)reasons.push("msg_truncated");else{const prefixLen=Math.min(prevMsgs.length,currMsgs.length);let prefixMatch=!0;for(let j=0;j<prefixLen;j++)if(JSON.stringify(prevMsgs[j])!==JSON.stringify(currMsgs[j])){prefixMatch=!1;break}prefixMatch||reasons.push("msg_modified")}return 0===reasons.length&&reasons.push("key_change"),{reason:reasons[0],reasons:reasons}}function escapeHtml(str){return str?str.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"):""}function extractToolResultText(toolResult){return toolResult.content?"string"==typeof toolResult.content?toolResult.content:Array.isArray(toolResult.content)?toolResult.content.filter(b=>"text"===b.type).map(b=>b.text).join("\n"):JSON.stringify(toolResult.content):String(toolResult.content??"")}const MODEL_PROVIDERS=[{match:/claude/i,name:"Claude",color:"var(--bg-model-avatar)",svg:'<svg t="1771495509570" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1570" width="200" height="200"><path d="M198.4 678.4l198.4-115.2 6.4-12.8H243.2l-96-6.4-102.4-6.4-19.2-6.4-25.6-25.6v-12.8l19.2-12.8h32l64 6.4 96 6.4 70.4 6.4L384 512h19.2V492.8l-6.4-6.4-102.4-64-108.8-76.8-51.2-38.4-32-19.2-19.2-25.6-6.4-38.4 32-32h44.8l38.4 32 83.2 64L384 364.8l12.8 12.8 6.4-6.4-6.4-12.8L339.2 256l-64-108.8-25.6-38.4-6.4-25.6c0-12.8-6.4-19.2-6.4-32l32-44.8 19.2-6.4 44.8 6.4 19.2 12.8 25.6 57.6 44.8 96 64 128 19.2 38.4 6.4 38.4 6.4 12.8h6.4V384l6.4-70.4 12.8-89.6 12.8-115.2 6.4-32 19.2-38.4 32-19.2 25.6 12.8 19.2 32v19.2l-32 70.4-19.2 121.6-19.2 83.2h6.4l12.8-12.8 44.8-57.6 70.4-89.6 32-32 38.4-38.4 25.6-19.2h44.8l32 51.2-12.8 51.2-51.2 57.6-38.4 51.2-51.2 70.4-38.4 57.6v6.4h6.4l121.6-25.6 64-12.8 76.8-12.8 38.4 19.2 6.4 19.2-12.8 32-83.2 19.2-96 19.2-147.2 32 64 6.4h96l128 6.4 32 19.2 25.6 38.4-6.4 19.2-51.2 25.6-70.4-12.8-160-38.4-57.6-12.8h-6.4v6.4l44.8 44.8 83.2 76.8 108.8 102.4 6.4 25.6-12.8 19.2h-12.8l-96-70.4-38.4-32-83.2-70.4h-6.4v6.4l19.2 25.6 102.4 147.2 6.4 44.8-6.4 12.8-25.6 6.4-25.6-6.4-57.6-83.2-64-83.2-51.2-83.2-6.4 6.4-25.6 307.2-12.8 12.8-32 12.8-25.6-19.2-12.8-32 12.8-64 19.2-83.2 12.8-64 12.8-83.2 6.4-25.6h-6.4l-64 83.2-96 128-70.4 76.8-19.2 6.4-32-12.8v-25.6l19.2-25.6 102.4-128 64-83.2 38.4-51.2v-6.4l-268.8 172.8-51.2 12.8-19.2-19.2v-32l12.8-12.8 76.8-57.6z m0 0" fill="#D97757" p-id="1571"></path></svg>',svgAnimated:"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\" width=\"200\" height=\"200\" overflow=\"visible\"><style><![CDATA[.logo{will-change:d;shape-rendering:geometricPrecision;fill:#D97757;animation:logoWave 3.2s linear infinite;}@keyframes logoWave{8.33%{d:path('M198 678 L397 563 L403 550 L243 550 L147 544 L45 538 L26 531 L0 506 L0 493 L19 480 L51 480 L115 486 L211 493 L282 499 L384 512 L403 512 L404 502 L396 495 L273 418 L143 326 L81 280 L43 257 L20 226 L12 180 L51 141 L104 141 L150 180 L250 257 L381 349 L397 378 L403 371 L397 358 L339 256 L275 147 L250 109 L243 83 L275 38 L294 32 L339 38 L358 51 L384 109 L429 205 L493 333 L512 371 L518 410 L525 422 L531 422 L531 384 L538 314 L550 224 L563 109 L570 77 L589 38 L621 19 L646 32 L666 64 L666 83 L634 154 L614 275 L595 358 L602 358 L614 346 L659 288 L730 198 L762 166 L800 128 L826 109 L870 109 L902 160 L890 211 L838 269 L800 320 L749 390 L710 448 L710 454 L717 454 L838 429 L902 416 L979 403 L1018 422 L1024 442 L1011 474 L928 493 L832 512 L685 544 L749 550 L845 550 L973 557 L1005 576 L1030 614 L1024 634 L973 659 L902 646 L742 608 L685 595 L678 595 L678 602 L723 646 L806 723 L915 826 L922 851 L909 870 L896 870 L800 800 L762 768 L678 698 L672 698 L672 704 L691 730 L794 877 L800 922 L794 934 L768 941 L742 934 L685 851 L621 768 L570 685 L563 691 L538 998 L525 1011 L493 1024 L467 1005 L454 973 L467 909 L486 826 L499 762 L512 678 L518 653 L512 653 L448 736 L352 864 L282 941 L262 947 L230 934 L230 909 L250 883 L352 755 L416 672 L454 621 L454 614 L186 787 L134 800 L115 781 L115 749 L128 736 L205 678 Z');}16.67%{d:path('M198 678 L397 563 L403 550 L243 550 L147 544 L45 538 L26 531 L0 506 L0 493 L19 480 L51 480 L115 486 L211 493 L282 499 L384 512 L403 512 L403 493 L397 486 L294 422 L186 346 L134 307 L102 288 L83 262 L77 224 L109 192 L154 192 L192 224 L275 288 L384 365 L397 378 L392 365 L384 350 L315 227 L238 97 L207 51 L200 20 L238 -34 L261 -42 L315 -34 L338 -19 L369 51 L422 166 L499 319 L522 365 L530 412 L525 422 L531 422 L531 384 L538 314 L550 224 L563 109 L570 77 L589 38 L621 19 L646 32 L666 64 L666 83 L634 154 L614 275 L595 358 L602 358 L614 346 L659 288 L730 198 L762 166 L800 128 L826 109 L870 109 L902 160 L890 211 L838 269 L800 320 L749 390 L710 448 L710 454 L717 454 L838 429 L902 416 L979 403 L1018 422 L1024 442 L1011 474 L928 493 L832 512 L685 544 L749 550 L845 550 L973 557 L1005 576 L1030 614 L1024 634 L973 659 L902 646 L742 608 L685 595 L678 595 L678 602 L723 646 L806 723 L915 826 L922 851 L909 870 L896 870 L800 800 L762 768 L678 698 L672 698 L672 704 L691 730 L794 877 L800 922 L794 934 L768 941 L742 934 L685 851 L621 768 L570 685 L563 691 L538 998 L525 1011 L493 1024 L467 1005 L454 973 L467 909 L486 826 L499 762 L512 678 L518 653 L512 653 L448 736 L352 864 L282 941 L262 947 L230 934 L230 909 L250 883 L352 755 L416 672 L454 621 L454 614 L186 787 L134 800 L115 781 L115 749 L128 736 L205 678 Z');}25%{d:path('M198 678 L397 563 L403 550 L243 550 L147 544 L45 538 L26 531 L0 506 L0 493 L19 480 L51 480 L115 486 L211 493 L282 499 L384 512 L403 512 L403 493 L397 486 L294 422 L186 346 L134 307 L102 288 L83 262 L77 224 L109 192 L154 192 L192 224 L275 288 L384 365 L397 378 L403 371 L397 358 L339 256 L275 147 L250 109 L243 83 L275 38 L294 32 L339 38 L358 51 L384 109 L429 205 L493 333 L512 371 L518 410 L525 422 L525 429 L525 383 L533 298 L548 191 L564 52 L572 14 L595 -32 L633 -55 L664 -40 L687 -1 L687 22 L648 106 L625 252 L595 358 L602 358 L614 346 L659 288 L730 198 L762 166 L800 128 L826 109 L870 109 L902 160 L890 211 L838 269 L800 320 L749 390 L710 448 L710 454 L717 454 L838 429 L902 416 L979 403 L1018 422 L1024 442 L1011 474 L928 493 L832 512 L685 544 L749 550 L845 550 L973 557 L1005 576 L1030 614 L1024 634 L973 659 L902 646 L742 608 L685 595 L678 595 L678 602 L723 646 L806 723 L915 826 L922 851 L909 870 L896 870 L800 800 L762 768 L678 698 L672 698 L672 704 L691 730 L794 877 L800 922 L794 934 L768 941 L742 934 L685 851 L621 768 L570 685 L563 691 L538 998 L525 1011 L493 1024 L467 1005 L454 973 L467 909 L486 826 L499 762 L512 678 L518 653 L512 653 L448 736 L352 864 L282 941 L262 947 L230 934 L230 909 L250 883 L352 755 L416 672 L454 621 L454 614 L186 787 L134 800 L115 781 L115 749 L128 736 L205 678 Z');}33.33%{d:path('M198 678 L397 563 L403 550 L243 550 L147 544 L45 538 L26 531 L0 506 L0 493 L19 480 L51 480 L115 486 L211 493 L282 499 L384 512 L403 512 L403 493 L397 486 L294 422 L186 346 L134 307 L102 288 L83 262 L77 224 L109 192 L154 192 L192 224 L275 288 L384 365 L397 378 L403 371 L397 358 L339 256 L275 147 L250 109 L243 83 L275 38 L294 32 L339 38 L358 51 L384 109 L429 205 L493 333 L512 371 L518 410 L525 422 L531 422 L531 384 L538 314 L550 224 L563 109 L570 77 L589 38 L621 19 L646 32 L666 64 L666 83 L634 154 L614 275 L595 358 L591 349 L607 333 L660 264 L745 157 L783 118 L829 72 L860 49 L914 49 L952 111 L937 172 L876 241 L829 303 L768 387 L722 456 L710 454 L717 454 L838 429 L902 416 L979 403 L1018 422 L1024 442 L1011 474 L928 493 L832 512 L685 544 L749 550 L845 550 L973 557 L1005 576 L1030 614 L1024 634 L973 659 L902 646 L742 608 L685 595 L678 595 L678 602 L723 646 L806 723 L915 826 L922 851 L909 870 L896 870 L800 800 L762 768 L678 698 L672 698 L672 704 L691 730 L794 877 L800 922 L794 934 L768 941 L742 934 L685 851 L621 768 L570 685 L563 691 L538 998 L525 1011 L493 1024 L467 1005 L454 973 L467 909 L486 826 L499 762 L512 678 L518 653 L512 653 L448 736 L352 864 L282 941 L262 947 L230 934 L230 909 L250 883 L352 755 L416 672 L454 621 L454 614 L186 787 L134 800 L115 781 L115 749 L128 736 L205 678 Z');}41.67%{d:path('M198 678 L397 563 L403 550 L243 550 L147 544 L45 538 L26 531 L0 506 L0 493 L19 480 L51 480 L115 486 L211 493 L282 499 L384 512 L403 512 L403 493 L397 486 L294 422 L186 346 L134 307 L102 288 L83 262 L77 224 L109 192 L154 192 L192 224 L275 288 L384 365 L397 378 L403 371 L397 358 L339 256 L275 147 L250 109 L243 83 L275 38 L294 32 L339 38 L358 51 L384 109 L429 205 L493 333 L512 371 L518 410 L525 422 L531 422 L531 384 L538 314 L550 224 L563 109 L570 77 L589 38 L621 19 L646 32 L666 64 L666 83 L634 154 L614 275 L595 358 L602 358 L614 346 L659 288 L730 198 L762 166 L800 128 L826 109 L870 109 L902 160 L890 211 L838 269 L800 320 L749 390 L710 448 L710 454 L721 445 L867 415 L943 399 L1036 384 L1082 407 L1089 430 L1074 468 L974 492 L859 515 L685 544 L749 550 L845 550 L973 557 L1005 576 L1030 614 L1024 634 L973 659 L902 646 L742 608 L685 595 L678 595 L678 602 L723 646 L806 723 L915 826 L922 851 L909 870 L896 870 L800 800 L762 768 L678 698 L672 698 L672 704 L691 730 L794 877 L800 922 L794 934 L768 941 L742 934 L685 851 L621 768 L570 685 L563 691 L538 998 L525 1011 L493 1024 L467 1005 L454 973 L467 909 L486 826 L499 762 L512 678 L518 653 L512 653 L448 736 L352 864 L282 941 L262 947 L230 934 L230 909 L250 883 L352 755 L416 672 L454 621 L454 614 L186 787 L134 800 L115 781 L115 749 L128 736 L205 678 Z');}50%{d:path('M198 678 L397 563 L403 550 L243 550 L147 544 L45 538 L26 531 L0 506 L0 493 L19 480 L51 480 L115 486 L211 493 L282 499 L384 512 L403 512 L403 493 L397 486 L294 422 L186 346 L134 307 L102 288 L83 262 L77 224 L109 192 L154 192 L192 224 L275 288 L384 365 L397 378 L403 371 L397 358 L339 256 L275 147 L250 109 L243 83 L275 38 L294 32 L339 38 L358 51 L384 109 L429 205 L493 333 L512 371 L518 410 L525 422 L531 422 L531 384 L538 314 L550 224 L563 109 L570 77 L589 38 L621 19 L646 32 L666 64 L666 83 L634 154 L614 275 L595 358 L602 358 L614 346 L659 288 L730 198 L762 166 L800 128 L826 109 L870 109 L902 160 L890 211 L838 269 L800 320 L749 390 L710 448 L710 454 L717 454 L838 429 L902 416 L979 403 L1018 422 L1024 442 L1011 474 L928 493 L832 512 L685 544 L762 547 L877 547 L1031 554 L1069 577 L1100 623 L1092 646 L1031 677 L947 662 L755 616 L685 600 L678 595 L678 602 L723 646 L806 723 L915 826 L922 851 L909 870 L896 870 L800 800 L762 768 L678 698 L672 698 L672 704 L691 730 L794 877 L800 922 L794 934 L768 941 L742 934 L685 851 L621 768 L570 685 L563 691 L538 998 L525 1011 L493 1024 L467 1005 L454 973 L467 909 L486 826 L499 762 L512 678 L518 653 L512 653 L448 736 L352 864 L282 941 L262 947 L230 934 L230 909 L250 883 L352 755 L416 672 L454 621 L454 614 L186 787 L134 800 L115 781 L115 749 L128 736 L205 678 Z');}58.33%{d:path('M198 678 L397 563 L403 550 L243 550 L147 544 L45 538 L26 531 L0 506 L0 493 L19 480 L51 480 L115 486 L211 493 L282 499 L384 512 L403 512 L403 493 L397 486 L294 422 L186 346 L134 307 L102 288 L83 262 L77 224 L109 192 L154 192 L192 224 L275 288 L384 365 L397 378 L403 371 L397 358 L339 256 L275 147 L250 109 L243 83 L275 38 L294 32 L339 38 L358 51 L384 109 L429 205 L493 333 L512 371 L518 410 L525 422 L531 422 L531 384 L538 314 L550 224 L563 109 L570 77 L589 38 L621 19 L646 32 L666 64 L666 83 L634 154 L614 275 L595 358 L602 358 L614 346 L659 288 L730 198 L762 166 L800 128 L826 109 L870 109 L902 160 L890 211 L838 269 L800 320 L749 390 L710 448 L710 454 L717 454 L838 429 L902 416 L979 403 L1018 422 L1024 442 L1011 474 L928 493 L832 512 L685 544 L749 550 L845 550 L973 557 L1005 576 L1030 614 L1024 634 L973 659 L902 646 L742 608 L685 595 L678 595 L679 593 L733 646 L833 739 L963 861 L971 892 L956 915 L940 915 L825 831 L779 792 L679 708 L672 698 L672 704 L691 730 L794 877 L800 922 L794 934 L768 941 L742 934 L685 851 L621 768 L570 685 L563 691 L538 998 L525 1011 L493 1024 L467 1005 L454 973 L467 909 L486 826 L499 762 L512 678 L518 653 L512 653 L448 736 L352 864 L282 941 L262 947 L230 934 L230 909 L250 883 L352 755 L416 672 L454 621 L454 614 L186 787 L134 800 L115 781 L115 749 L128 736 L205 678 Z');}66.67%{d:path('M198 678 L397 563 L403 550 L243 550 L147 544 L45 538 L26 531 L0 506 L0 493 L19 480 L51 480 L115 486 L211 493 L282 499 L384 512 L403 512 L403 493 L397 486 L294 422 L186 346 L134 307 L102 288 L83 262 L77 224 L109 192 L154 192 L192 224 L275 288 L384 365 L397 378 L403 371 L397 358 L339 256 L275 147 L250 109 L243 83 L275 38 L294 32 L339 38 L358 51 L384 109 L429 205 L493 333 L512 371 L518 410 L525 422 L531 422 L531 384 L538 314 L550 224 L563 109 L570 77 L589 38 L621 19 L646 32 L666 64 L666 83 L634 154 L614 275 L595 358 L602 358 L614 346 L659 288 L730 198 L762 166 L800 128 L826 109 L870 109 L902 160 L890 211 L838 269 L800 320 L749 390 L710 448 L710 454 L717 454 L838 429 L902 416 L979 403 L1018 422 L1024 442 L1011 474 L928 493 L832 512 L685 544 L749 550 L845 550 L973 557 L1005 576 L1030 614 L1024 634 L973 659 L902 646 L742 608 L685 595 L678 595 L678 602 L723 646 L806 723 L915 826 L922 851 L909 870 L896 870 L800 800 L762 768 L678 698 L672 698 L682 707 L705 737 L828 914 L836 968 L828 983 L797 991 L767 983 L698 883 L621 783 L570 685 L563 691 L538 998 L525 1011 L493 1024 L467 1005 L454 973 L467 909 L486 826 L499 762 L512 678 L518 653 L512 653 L448 736 L352 864 L282 941 L262 947 L230 934 L230 909 L250 883 L352 755 L416 672 L454 621 L454 614 L186 787 L134 800 L115 781 L115 749 L128 736 L205 678 Z');}75%{d:path('M198 678 L397 563 L403 550 L243 550 L147 544 L45 538 L26 531 L0 506 L0 493 L19 480 L51 480 L115 486 L211 493 L282 499 L384 512 L403 512 L403 493 L397 486 L294 422 L186 346 L134 307 L102 288 L83 262 L77 224 L109 192 L154 192 L192 224 L275 288 L384 365 L397 378 L403 371 L397 358 L339 256 L275 147 L250 109 L243 83 L275 38 L294 32 L339 38 L358 51 L384 109 L429 205 L493 333 L512 371 L518 410 L525 422 L531 422 L531 384 L538 314 L550 224 L563 109 L570 77 L589 38 L621 19 L646 32 L666 64 L666 83 L634 154 L614 275 L595 358 L602 358 L614 346 L659 288 L730 198 L762 166 L800 128 L826 109 L870 109 L902 160 L890 211 L838 269 L800 320 L749 390 L710 448 L710 454 L717 454 L838 429 L902 416 L979 403 L1018 422 L1024 442 L1011 474 L928 493 L832 512 L685 544 L749 550 L845 550 L973 557 L1005 576 L1030 614 L1024 634 L973 659 L902 646 L742 608 L685 595 L678 595 L678 602 L723 646 L806 723 L915 826 L922 851 L909 870 L896 870 L800 800 L762 768 L678 698 L672 698 L672 704 L691 730 L794 877 L800 922 L794 934 L768 941 L742 934 L685 851 L621 768 L570 685 L568 696 L537 1064 L522 1080 L483 1095 L452 1072 L437 1034 L452 957 L476 857 L491 780 L506 680 L514 650 L512 653 L448 736 L352 864 L282 941 L262 947 L230 934 L230 909 L250 883 L352 755 L416 672 L454 621 L454 614 L186 787 L134 800 L115 781 L115 749 L128 736 L205 678 Z');}83.33%{d:path('M198 678 L397 563 L403 550 L243 550 L147 544 L45 538 L26 531 L0 506 L0 493 L19 480 L51 480 L115 486 L211 493 L282 499 L384 512 L403 512 L403 493 L397 486 L294 422 L186 346 L134 307 L102 288 L83 262 L77 224 L109 192 L154 192 L192 224 L275 288 L384 365 L397 378 L403 371 L397 358 L339 256 L275 147 L250 109 L243 83 L275 38 L294 32 L339 38 L358 51 L384 109 L429 205 L493 333 L512 371 L518 410 L525 422 L531 422 L531 384 L538 314 L550 224 L563 109 L570 77 L589 38 L621 19 L646 32 L666 64 L666 83 L634 154 L614 275 L595 358 L602 358 L614 346 L659 288 L730 198 L762 166 L800 128 L826 109 L870 109 L902 160 L890 211 L838 269 L800 320 L749 390 L710 448 L710 454 L717 454 L838 429 L902 416 L979 403 L1018 422 L1024 442 L1011 474 L928 493 L832 512 L685 544 L749 550 L845 550 L973 557 L1005 576 L1030 614 L1024 634 L973 659 L902 646 L742 608 L685 595 L678 595 L678 602 L723 646 L806 723 L915 826 L922 851 L909 870 L896 870 L800 800 L762 768 L678 698 L672 698 L672 704 L691 730 L794 877 L800 922 L794 934 L768 941 L742 934 L685 851 L621 768 L570 685 L563 691 L538 998 L525 1011 L493 1024 L467 1005 L454 973 L467 909 L486 826 L499 762 L512 678 L518 653 L512 653 L441 756 L326 910 L241 1002 L218 1010 L180 995 L180 964 L203 933 L326 780 L403 680 L449 618 L454 614 L186 787 L134 800 L115 781 L115 749 L128 736 L205 678 Z');}91.67%{d:path('M198 678 L397 563 L403 550 L243 550 L147 544 L45 538 L26 531 L0 506 L0 493 L19 480 L51 480 L115 486 L211 493 L282 499 L384 512 L403 512 L403 493 L397 486 L294 422 L186 346 L134 307 L102 288 L83 262 L77 224 L109 192 L154 192 L192 224 L275 288 L384 365 L397 378 L403 371 L397 358 L339 256 L275 147 L250 109 L243 83 L275 38 L294 32 L339 38 L358 51 L384 109 L429 205 L493 333 L512 371 L518 410 L525 422 L531 422 L531 384 L538 314 L550 224 L563 109 L570 77 L589 38 L621 19 L646 32 L666 64 L666 83 L634 154 L614 275 L595 358 L602 358 L614 346 L659 288 L730 198 L762 166 L800 128 L826 109 L870 109 L902 160 L890 211 L838 269 L800 320 L749 390 L710 448 L710 454 L717 454 L838 429 L902 416 L979 403 L1018 422 L1024 442 L1011 474 L928 493 L832 512 L685 544 L749 550 L845 550 L973 557 L1005 576 L1030 614 L1024 634 L973 659 L902 646 L742 608 L685 595 L678 595 L678 602 L723 646 L806 723 L915 826 L922 851 L909 870 L896 870 L800 800 L762 768 L678 698 L672 698 L672 704 L691 730 L794 877 L800 922 L794 934 L768 941 L742 934 L685 851 L621 768 L570 685 L563 691 L538 998 L525 1011 L493 1024 L467 1005 L454 973 L467 909 L486 826 L499 762 L512 678 L518 653 L512 653 L448 736 L352 864 L282 941 L262 947 L230 934 L230 909 L250 883 L352 755 L416 672 L454 621 L454 614 L137 828 L76 844 L52 820 L52 782 L68 767 L160 698 Z');}0%,100%{d:path('M198 678 L397 563 L403 550 L211 554 L96 547 L-27 539 L-50 531 L-81 500 L-81 485 L-58 470 L-19 470 L58 477 L173 485 L257 493 L380 508 L403 512 L403 493 L397 486 L294 422 L186 346 L134 307 L102 288 L83 262 L77 224 L109 192 L154 192 L192 224 L275 288 L384 365 L397 378 L403 371 L397 358 L339 256 L275 147 L250 109 L243 83 L275 38 L294 32 L339 38 L358 51 L384 109 L429 205 L493 333 L512 371 L518 410 L525 422 L531 422 L531 384 L538 314 L550 224 L563 109 L570 77 L589 38 L621 19 L646 32 L666 64 L666 83 L634 154 L614 275 L595 358 L602 358 L614 346 L659 288 L730 198 L762 166 L800 128 L826 109 L870 109 L902 160 L890 211 L838 269 L800 320 L749 390 L710 448 L710 454 L717 454 L838 429 L902 416 L979 403 L1018 422 L1024 442 L1011 474 L928 493 L832 512 L685 544 L749 550 L845 550 L973 557 L1005 576 L1030 614 L1024 634 L973 659 L902 646 L742 608 L685 595 L678 595 L678 602 L723 646 L806 723 L915 826 L922 851 L909 870 L896 870 L800 800 L762 768 L678 698 L672 698 L672 704 L691 730 L794 877 L800 922 L794 934 L768 941 L742 934 L685 851 L621 768 L570 685 L563 691 L538 998 L525 1011 L493 1024 L467 1005 L454 973 L467 909 L486 826 L499 762 L512 678 L518 653 L512 653 L448 736 L352 864 L282 941 L262 947 L230 934 L230 909 L250 883 L352 755 L416 672 L454 621 L454 614 L186 787 L134 800 L115 781 L115 749 L128 736 L205 678 Z');}}@media (prefers-reduced-motion:reduce){.logo{animation:none;}}]]></style><path class=\"logo\" d=\"M198 678 L397 563 L403 550 L243 550 L147 544 L45 538 L26 531 L0 506 L0 493 L19 480 L51 480 L115 486 L211 493 L282 499 L384 512 L403 512 L403 493 L397 486 L294 422 L186 346 L134 307 L102 288 L83 262 L77 224 L109 192 L154 192 L192 224 L275 288 L384 365 L397 378 L403 371 L397 358 L339 256 L275 147 L250 109 L243 83 L275 38 L294 32 L339 38 L358 51 L384 109 L429 205 L493 333 L512 371 L518 410 L525 422 L531 422 L531 384 L538 314 L550 224 L563 109 L570 77 L589 38 L621 19 L646 32 L666 64 L666 83 L634 154 L614 275 L595 358 L602 358 L614 346 L659 288 L730 198 L762 166 L800 128 L826 109 L870 109 L902 160 L890 211 L838 269 L800 320 L749 390 L710 448 L710 454 L717 454 L838 429 L902 416 L979 403 L1018 422 L1024 442 L1011 474 L928 493 L832 512 L685 544 L749 550 L845 550 L973 557 L1005 576 L1030 614 L1024 634 L973 659 L902 646 L742 608 L685 595 L678 595 L678 602 L723 646 L806 723 L915 826 L922 851 L909 870 L896 870 L800 800 L762 768 L678 698 L672 698 L672 704 L691 730 L794 877 L800 922 L794 934 L768 941 L742 934 L685 851 L621 768 L570 685 L563 691 L538 998 L525 1011 L493 1024 L467 1005 L454 973 L467 909 L486 826 L499 762 L512 678 L518 653 L512 653 L448 736 L352 864 L282 941 L262 947 L230 934 L230 909 L250 883 L352 755 L416 672 L454 621 L454 614 L186 787 L134 800 L115 781 L115 749 L128 736 L205 678 Z\"/></svg>"},{match:/gpt|o1|o3|o4/i,name:"OpenAI",color:"var(--bg-model-avatar)",svg:'<svg t="1771495569354" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2752" width="200" height="200"><path d="M565.265178 954.519092c-22.289934 0-48.400999-8.151747-67.952455-14.838727a103.425292 103.425292 0 0 1-26.875292-11.272338c-12.737105-7.769634-15.411897-8.342804-19.806198-24.773669 21.971506-5.158528 81.581157-41.905075 103.871091-55.342721 148.896757-89.159735 119.028246-10.444426 119.028246-364.981743 15.029784 3.566389 82.791182 32.415932 82.791182 57.316972 0 133.102747 20.570425 273.847757-52.604243 354.91943-22.799418 25.47421-91.834527 58.972796-138.388646 58.972796z m-433.061569-299.321966c258.626916 136.860193 184.369594 157.048504 357.721593 52.094759 44.579867-27.193719 90.433445-49.292596 132.593263-77.568969v101.896839c-95.528287 22.226248-272.319304 227.038896-419.050754 100.686815l-25.856323-25.155782c-37.319718-43.943012-45.344094-72.410442-45.344094-151.889977z m375.744596-19.105658c-19.933569-13.310275-79.479535-51.330533-101.896839-57.316972v-133.739602a1158.312326 1158.312326 0 0 0 101.896839-57.316973c43.943012 10.189684 70.690933 47.063603 114.633945 57.316973v127.371049c-17.831947 12.10025-95.846715 58.718054-114.633945 63.749211z m-426.693016-178.31947c0-63.685525-4.26693-90.306074 38.84817-145.776166 23.945757-30.88748 47.509402-39.612396 82.090641-57.953828v261.110652c44.134069 23.372588 83.873836 49.037854 129.345301 74.448379l131.765351 78.396881c-59.545966 15.921381-63.685525 61.32916-109.602788 33.753328-104.699003-62.730242-272.38299-129.345301-272.38299-243.91556z m866.123138 127.37105c0 79.543221-47.573087 161.188063-121.002497 178.31947v-165.582365c0-82.791182 9.743885-84.574377-48.910483-116.608196L565.265178 362.371082c15.79401-23.62733 22.608361-19.105657 48.146256-34.835982 41.714019-25.47421 39.039227-16.112438 117.053995 28.785857 94.190891 54.196382 216.849212 100.559444 216.849212 228.885777z m-541.326961-197.425127v-95.528287c43.751956-23.181531 90.688187-50.94842 133.357489-76.804743 82.154327-49.547338 95.528287-63.303412 185.006449-63.303412 48.464684 0 102.533695 36.746548 125.651541 65.405034 42.223503 52.22213 39.930824 92.662439 39.930824 151.125751-31.078536-16.494551-192.393971-121.002497-222.899337-121.002498s-229.650003 123.422547-261.110652 140.108155z m-50.94842 159.213812c-16.36718-10.95391-63.112355-39.99451-82.791183-44.579867 0-168.320842-33.880699-314.606493 67.952455-390.519639 56.043262-41.714019 113.169178-53.814269 181.376375-30.696423 25.47421 8.661231 35.536523 20.888852 56.36169 26.429493-11.781822 16.048752-80.68956 50.311565-102.278953 63.303412-154.564769 93.235608-120.620384 7.451206-120.620384 376.063024z m-292.953415 121.002498c0 169.148754 115.143429 280.853165 274.293556 273.847756 59.800708-2.674792 26.811606-7.705949 69.417222 25.47421 97.820966 76.741057 228.822091 73.747838 319.637649 1.018969a251.939936 251.939936 0 0 0 52.604244-55.661149c58.20857-85.274918-10.95391-45.598836 81.96327-83.619094 130.236898-53.241099 199.399378-217.358696 128.64476-355.428914-27.448461-53.559526-40.249252-28.849543-28.276373-104.699003 18.723544-118.582447-63.176041-230.032116-157.621674-269.771884-98.90362-41.586648-129.090559 12.737105-178.892639-37.574459A161.888604 161.888604 0 0 0 580.103905 28.913674C474.003821-27.766443 331.284559 1.528898 258.428319 93.681853c-81.326415 102.979494 9.489143 54.705866-92.407697 98.648878C15.149614 257.353652-33.251385 439.175825 41.579107 561.06992c56.807488 92.598753 20.570425 4.967471 20.570424 106.800625z" fill="#EFA474" p-id="2753"></path></svg>'},{match:/gemini/i,name:"Gemini",color:"var(--bg-model-avatar)",svg:'<svg t="1771495622863" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4556" width="200" height="200"><path d="M960 512.896A477.248 477.248 0 0 0 512.896 960h-1.792A477.184 477.184 0 0 0 64 512.896v-1.792A477.184 477.184 0 0 0 511.104 64h1.792A477.248 477.248 0 0 0 960 511.104z" fill="#448AFF" p-id="4557"></path></svg>'},{match:/qwen/i,name:"Qwen",color:"var(--bg-model-avatar)",svg:'<svg t="1771495640319" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5634" width="200" height="200"><path d="M537.782857 57.161143c16.749714 29.44 33.426286 58.953143 50.102857 88.502857a7.68 7.68 0 0 0 6.692572 3.913143h236.873143c7.424 0 13.750857 4.681143 19.017142 13.933714l62.061715 109.677714c8.082286 14.372571 10.24 20.370286 1.024 35.693715a2262.893714 2262.893714 0 0 0-32.438857 55.478857l-15.652572 28.086857c-4.534857 8.338286-9.508571 11.922286-1.718857 21.833143l113.152 197.851428c7.314286 12.8 4.754286 21.065143-1.828571 32.841143-18.651429 33.499429-37.632 66.742857-56.978286 99.84-6.765714 11.593143-14.994286 16.018286-29.001143 15.798857a1833.398857 1833.398857 0 0 0-99.291429 0.658286 4.242286 4.242286 0 0 0-3.437714 2.157714 24571.830857 24571.830857 0 0 1-115.419428 202.24c-7.204571 12.507429-16.201143 15.469714-30.939429 15.506286-42.532571 0.146286-85.430857 0.182857-128.731429 0.109714a22.930286 22.930286 0 0 1-19.821714-11.556571l-56.978286-99.108571a3.84 3.84 0 0 0-3.547428-2.121143h-218.331429a76.288 76.288 0 0 1-34.377143-3.913143l-68.388571-118.198857a23.149714 23.149714 0 0 1-0.073143-23.04l51.492572-90.441143a8.448 8.448 0 0 0 0-8.411429 23594.496 23594.496 0 0 1-80.018286-139.593143L47.542857 425.325714c-6.838857-13.202286-7.387429-21.138286 4.022857-41.179428 19.858286-34.669714 39.570286-69.302857 59.209143-103.936 5.632-9.984 12.946286-14.262857 24.905143-14.262857 36.827429-0.182857 73.654857-0.182857 110.445714-0.073143 1.901714 0 3.657143-1.024 4.571429-2.669715l119.734857-208.859428a20.845714 20.845714 0 0 1 17.993143-10.496c22.381714-0.036571 44.946286 0 67.547428-0.256l43.410286-0.987429c14.555429-0.109714 30.866286 1.389714 38.4 14.518857z m-146.432 17.188571a2.56 2.56 0 0 0-2.194286 1.28l-122.331428 213.942857a6.692571 6.692571 0 0 1-5.741714 3.364572H138.788571c-2.377143 0-2.962286 1.060571-1.755428 3.145143l247.917714 433.334857c1.060571 1.792 0.548571 2.633143-1.462857 2.669714l-119.222857 0.658286a9.289143 9.289143 0 0 0-8.557714 4.937143l-56.32 98.56c-1.865143 3.328-0.914286 5.046857 2.925714 5.046857l243.858286 0.365714c1.974857 0 3.401143 0.841143 4.425142 2.56l59.867429 104.704c1.974857 3.474286 3.913143 3.510857 5.924571 0l213.577143-373.76 33.426286-58.953143a2.340571 2.340571 0 0 1 4.096 0l60.745143 107.958857a5.193143 5.193143 0 0 0 4.571428 2.633143l117.906286-0.841143a1.718857 1.718857 0 0 0 1.462857-2.56l-123.721143-217.014857a4.608 4.608 0 0 1 0-4.827428l12.507429-21.613715 47.798857-84.370285c1.024-1.755429 0.512-2.633143-1.499428-2.633143H392.521143c-2.486857 0-3.108571-1.097143-1.828572-3.291429l61.184-106.861714a4.571429 4.571429 0 0 0 0-4.864l-58.258285-102.253714a2.56 2.56 0 0 0-2.267429-1.316572z m268.361143 342.198857c1.974857 0 2.486857 0.841143 1.462857 2.56l-35.474286 62.500572-111.542857 195.620571a2.377143 2.377143 0 0 1-2.121143 1.243429 2.486857 2.486857 0 0 1-2.121142-1.243429l-147.346286-257.353143c-0.841143-1.462857-0.402286-2.230857 1.206857-2.304l9.216-0.512 286.793143-0.512h-0.073143z" fill="#7D5DED" p-id="5635"></path></svg>'},{match:/kimi|moonshot/i,name:"Kimi",color:"var(--bg-model-avatar)",svg:'<svg t="1771495664798" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6649" width="200" height="200"><path d="M731.062857 590.262857v318.317714h-148.589714V443.977143a146.285714 146.285714 0 0 1-146.285714 146.285714l-214.491429-0.036571v318.354285H73.142857V165.814857h148.553143v275.858286h180.882286l119.771428-275.858286h167.753143l-67.84 156.269714a255.524571 255.524571 0 0 1-106.678857 119.588572h66.925714a148.553143 148.553143 0 0 1 148.516572 148.589714z m120.758857-473.965714a99.035429 99.035429 0 0 1 0 198.070857h-99.035428V215.332571a99.035429 99.035429 0 0 1 99.035428-99.035428z" fill="currentColor" p-id="6650"></path></svg>'},{match:/glm|chatglm/i,name:"GLM",color:"var(--bg-model-avatar)",svg:'<svg data-name="glm" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 217.2 200"> <defs> <style> .st0 { fill: currentColor; } </style> </defs> <path class="st0" d="M86.8,190.4H0L131.3,4.8h85.8L86.8,190.4h0ZM212.8,190h-107.9l14.9-21.6c2.3-3.3,6-5.2,9.9-5.2h83.1v26.8h0ZM99.4,26.3c-2.3,3.3-6,5.2-9.9,5.2H6.4V4.8h107.9l-14.9,21.6Z"/> </svg>'},{match:/minimax|abab/i,name:"MiniMax",color:"var(--bg-model-avatar)",svg:'<svg viewBox="0 0 24 24" fill="currentColor"><path d="M4 8l4-4 4 4 4-4 4 4v8l-4 4-4-4-4 4-4-4z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/></svg>'},{match:/deepseek/i,name:"DeepSeek",color:"var(--bg-model-avatar)",svg:'<svg t="1771495947541" class="icon" viewBox="0 0 1391 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11539" width="200" height="200"><path d="M1326.70201318 112.02090779c-12.94676356-6.47485468-18.53640721 5.86654827-26.0997327 12.13814316-2.57756953 2.02376031-4.77807747 4.65435413-6.9785854 7.08168819-18.91788751 20.63528526-41.02017805 34.19182812-69.92725218 32.57311444-42.23384508-2.42733405-78.29772513 11.12773591-110.16384908 44.10589703-6.77679853-40.66668282-29.28560862-64.94444203-63.55255448-80.52327231-17.95608583-8.09209545-36.06388005-16.1856638-48.63358202-33.78825438-8.74900746-12.5431898-11.12773591-26.50330641-15.52727888-40.26016327-2.7823022-8.29535522-5.56460442-16.79249731-14.92044538-18.20942411-10.19244639-1.61871367-14.16337637 7.08168818-18.15934561 14.36516325-15.93232553 29.74073376-22.12880269 62.51710799-21.49692994 95.69705596 1.36684831 74.65672404 32.27117059 134.13819156 93.62469006 176.42358804 6.9800583 4.8546681 8.77551959 9.71080912 6.57501165 16.79102439-4.17271686 14.56695011-9.18056624 28.7303265-13.55506995 43.29727663-2.78377509 9.30723537-6.95501906 11.32952278-16.74241882 7.28347507-33.66158524-14.36516325-62.745407-35.60875491-88.46513227-61.30196806-43.62425973-43.09548975-83.0772755-90.64060097-132.26613965-127.86659667a581.67054343 581.67054343 0 0 0-35.07703915-24.48101901c-50.20074429-49.77065841 6.57501167-90.63912807 19.72650789-95.49526908 13.73181759-5.05792788 4.77955037-22.4572587-39.65480265-22.25547181s-85.07599655 15.3770434-136.87041526 35.60875491c-7.58541892 3.03416756-15.55379103 5.25971475-23.69596499 7.08168819-47.03990759-9.10544849-95.84876434-11.12773591-146.8596019-5.26118765-96.02551195 10.92594905-172.73103555 57.25739323-229.12678412 136.36373875-67.72674425 95.09022244-83.68558192 203.13015422-64.13582165 315.82149435 20.48504978 118.76262107 79.88992666 217.09027084 171.13736114 293.97106918 94.6350973 79.71317902 203.61031862 118.76262107 327.93607117 111.27735913 75.51542292-4.45256725 159.57953934-14.77020989 254.41642354-96.71040901 23.92426399 12.13961607 49.03715574 16.99575708 90.66564019 20.63675815 32.09295007 3.03416756 62.97223311-1.61871367 86.87145788-6.67664152 37.45429471-8.09209545 34.84874013-43.49906349 21.31870939-49.97244528-109.7838417-52.19946535-85.68283009-30.95587367-107.58333373-48.15194474 55.78891504-67.37324899 139.85303146-137.3770918 172.73103555-364.17669887 2.60408167-18.00616433 0.40357375-29.33568711 0-43.90263724-0.20325977-8.90218873 1.76894914-12.34287584 11.75960867-13.35328309 27.49014733-3.23742733 54.19671351-10.92594905 78.70277179-24.68280588 71.11440706-39.65480265 99.81822142-104.80250446 106.59649284-182.89844271 1.01188015-11.9363563-0.20178686-24.27775924-12.56970195-30.54935413M706.87018452 814.87993343c-106.36966673-85.37941333-157.98733782-113.5014334-179.30604722-112.28776638-19.92829476 1.21366703-16.33737217 24.48101902-11.96286844 39.65480264 4.5777635 14.97199677 10.57098089 25.2896394 18.94145384 38.44113563 5.76786417 8.70040186 9.76383341 21.64863831-5.78995762 31.35944742-34.26841876 21.64863831-93.82647692-7.28347506-96.60730623-8.69892897-69.3454579-41.67856295-127.33635378-96.710409-168.1797842-171.97249368-39.45154288-72.43117687-62.33888747-150.1220685-66.13306983-233.07267483-1.01188015-20.02992464 4.77955037-27.11161282 24.27923214-30.75408682a235.19659216 235.19659216 0 0 1 77.91771774-2.02228741c108.59668681 16.18713669 201.05631542 65.75453531 278.54394728 144.25552022 44.23256614 44.71125762 77.69089163 98.12439001 112.1861365 150.32385536 36.64567431 55.43394691 76.0986901 108.24024576 126.29943438 151.53604947 17.72778682 15.17378365 31.86465106 26.7065662 45.41972102 35.20370829-40.84343042 4.65435413-108.99878765 5.66476139-155.60860936-31.96628094m51.00936468-334.83953883c0-8.90218873 6.9815312-15.98387693 15.75557791-15.98387693q2.98408908 0.05155138 5.36134463 1.01188017a15.85720779 15.85720779 0 0 1 10.16740714 14.97199676 15.78061715 15.78061715 0 0 1-15.73053865 15.98387691 15.60386953 15.60386953 0 0 1-15.55379103-15.98387691m158.39238446 82.95060635c-10.1423679 4.24930749-20.30830215 7.89178146-30.09570191 8.29535522-15.12370514 0.81009328-31.66286419-5.46150162-40.61513142-13.15002332-13.96011661-11.93782919-23.92573689-18.61447073-28.09845373-39.45301577-1.79546129-8.90218873-0.81009328-22.65904557 0.78505403-30.54935414 3.59092258-16.99575708-0.40504665-27.92023321-12.13961606-37.8343021-9.55910075-8.09356835-21.72522894-10.31911553-35.07703915-10.31911552-4.98281013 0-9.55910075-2.22407429-12.94823645-4.04604774a13.27669246 13.27669246 0 0 1-5.76639128-18.61299783c1.39041466-2.8323807 8.16868608-9.71228202 9.7623605-10.92594905 18.13136058-10.52090241 39.04649623-7.08021529 58.36795748 0.81009328 17.93104659 7.48526194 31.46107731 21.24359167 51.01083757 40.6666828 19.92829476 23.46913885 23.51921733 29.94399353 34.84874013 47.54511123 8.97877936 13.75685685 17.14746545 27.92023321 22.71206987 44.10442409 3.41270206 10.11732865-0.98684091 18.41121097-12.74644958 23.46913885" fill="#4D6BFE" p-id="11540"></path></svg>'}],_modelInfoCache=new Map;function getModelInfo(modelName2){if(!modelName2)return null;const cached=_modelInfoCache.get(modelName2);if(cached)return cached;let info=null;for(const provider of MODEL_PROVIDERS)if(provider.match.test(modelName2)){info={name:modelName2.replace(/^claude-/,"").replace(/-\d{8,}$/,""),provider:provider.name,color:provider.color,svg:provider.svg,svgAnimated:provider.svgAnimated||null};break}return info||(info={name:modelName2,provider:modelName2,color:"var(--bg-model-avatar)",svg:null}),_modelInfoCache.set(modelName2,info),info}const AUTO_APPROVE_DEFAULTS={Claude:3,OpenAI:3,Gemini:5,DeepSeek:5,Qwen:5,GLM:10,Kimi:10,MiniMax:10};function getAutoApproveDefault(modelName2){const info=getModelInfo(modelName2);return info&&AUTO_APPROVE_DEFAULTS[info.provider]||10}function getSvgAvatar(type){return"user"===type?'<svg viewBox="0 0 24 24"><path d="M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8v2.4h19.2v-2.4c0-3.2-6.4-4.8-9.6-4.8z"/></svg>':"agent"===type?'<svg viewBox="0 0 24 24"><path d="M12 2a2 2 0 012 2c0 .74-.4 1.39-1 1.73V7h1a7 7 0 017 7h1a1 1 0 011 1v3a1 1 0 01-1 1h-1.17A7 7 0 0113 22h-2a7 7 0 01-6.83-3H3a1 1 0 01-1-1v-3a1 1 0 011-1h1a7 7 0 017-7h1V5.73c-.6-.34-1-.99-1-1.73a2 2 0 012-2zM9.5 13a1.5 1.5 0 100 3 1.5 1.5 0 000-3zm5 0a1.5 1.5 0 100 3 1.5 1.5 0 000-3z"/></svg>':"sub-search"===type||"sub-explore"===type?'<svg viewBox="0 0 1024 1024"><path d="M128.957606 76.608479v495.401496c0 20.428928-17.875312 38.304239-38.304239 38.304239S52.349127 592.438903 52.349127 572.009975V38.304239c0-20.428928 17.875312-38.304239 38.30424-38.304239h426.453865c20.428928 0 38.304239 17.875312 38.304239 38.304239s-17.875312 38.304239-38.304239 38.30424H128.957606z m127.680798 127.680798v495.401496c0 20.428928-17.875312 38.304239-38.304239 38.304239S180.029925 720.119701 180.029925 699.690773V165.985037c0-20.428928 17.875312-38.304239 38.30424-38.304239h426.453865c20.428928 0 38.304239 17.875312 38.304239 38.304239s-17.875312 38.304239-38.304239 38.30424H256.638404z m579.670823 291.112219v-150.663341H399.640898v515.830424h76.608479c0 38.304239 30.643392 68.947631 43.411471 89.376558h-145.55611c-33.197007 0-61.286783-28.089776-61.286783-63.840399V321.755611c0-35.750623 28.089776-63.840399 61.286783-63.840399h490.294264c33.197007 0 61.286783 28.089776 61.286784 63.840399V564.349127c-20.428928-22.982544-58.733167-56.179551-89.376559-68.947631zM486.46384 411.13217h255.361596c15.321696 0 25.53616 10.214464 25.53616 25.536159s-10.214464 25.53616-25.53616 25.53616H486.46384c-15.321696 0-25.53616-10.214464-25.536159-25.53616s10.214464-25.53616 25.536159-25.536159z m0 102.144638h102.144639c15.321696 0 25.53616 10.214464 25.536159 25.53616s-10.214464 25.53616-25.536159 25.536159h-102.144639c-15.321696 0-25.53616-10.214464-25.536159-25.536159s10.214464-25.53616 25.536159-25.53616z m503.062345 492.84788c-2.553616 2.553616-7.660848 10.214464-12.76808 10.214464-10.214464 10.214464-35.750623 10.214464-45.965088 0l-81.71571-71.501247c-28.089776 17.875312-63.840399 28.089776-99.591023 28.089776-102.144638 0-186.413965-84.269327-186.413965-186.413965s84.269327-186.413965 186.413965-186.413965 186.413965 84.269327 186.413965 186.413965c0 38.304239-10.214464 71.501247-30.643391 99.591022l81.715711 71.501247c12.76808 12.76808 12.76808 35.750623 2.553616 48.518703z m-240.039901-324.309227c-58.733167 0-104.698254 48.518703-104.698254 104.698255 0 58.733167 48.518703 104.698254 104.698254 104.698254s104.698254-48.518703 104.698255-104.698254c2.553616-58.733167-45.965087-104.698254-104.698255-104.698255z" fill="currentColor"/></svg>':"sub-plan"===type?'<svg viewBox="0 0 1024 1024"><path d="M674.507676 598.338391 287.079856 598.338391c-14.136975 0-25.638937 11.499915-25.638937 25.63689 0 14.137998 11.501962 25.640983 25.638937 25.640983l387.42782 0c14.137998 0 25.640983-11.501962 25.640983-25.640983C700.148659 609.838306 688.646698 598.338391 674.507676 598.338391zM794.746154 384.583029c-14.137998 0-25.640983 11.501962-25.640983 25.63996l0 494.299873c0 0.130983 0 0.280386-0.001023 0.433882-0.899486 0.279363-2.665713 0.644683-5.764284 0.644683L200.047664 905.601426c-4.312212 0-7.564279-2.971681-7.564279-6.913457L192.483384 191.851493c0-4.493338 0.974188-8.28878 1.811252-9.821693l373.337917 0c14.136975 0 25.63996-11.501962 25.63996-25.63996 0-14.136975-11.501962-25.638937-25.63996-25.638937l-374.069581 0c-30.336936 0-52.357462 25.696242-52.357462 61.099566l0 706.836477c0 32.086789 26.396183 58.19133 58.84113 58.19133l563.293223 0c34.119075 0 57.042157-21.041222 57.042157-52.356438L820.382021 410.224012C820.383044 396.086014 808.883129 384.583029 794.746154 384.583029zM674.507676 745.295394 287.079856 745.295394c-14.136975 0-25.638937 11.499915-25.638937 25.63689 0 14.137998 11.501962 25.640983 25.638937 25.640983l387.42782 0c14.137998 0 25.640983-11.501962 25.640983-25.640983C700.148659 756.795309 688.646698 745.295394 674.507676 745.295394zM879.595634 157.107177c-3.77293-14.409175-12.871145-28.250414-24.964578-37.975916l-43.827181-35.240619c-12.880355-10.352789-29.27679-16.290011-44.986587-16.290011-16.876366 0-31.594579 6.747681-41.439808 18.995633l-19.624966 24.381293c-6.380314 7.968485-7.987928 17.577331-5.222955 26.916023l-114.241904 142.063553-2.486634 3.090385-22.812565 85.303828c-9.749038 30.859845 4.449335 48.075949 13.806447 55.608505 6.783497 5.450129 14.468526 8.728802 22.851451 9.754155 0.984421 0.246617 2.125407 0.488117 3.440355 0.632403 1.003863 0.110517 2.053776 0.167822 3.118014 0.167822l0.014326 0c4.588505 0 10.047844-0.9967 17.180288-3.13541l2.877537-1.065262 83.402525-41.897226 119.874181-149.07934c0.440022 0.017396 0.880043 0.032746 1.320065 0.032746 9.218966 0 17.411555-3.862981 23.077601-10.892071l19.562545-24.342408C880.924909 191.1976 884.15037 174.495196 879.595634 157.107177zM674.469813 348.564697l-56.738235 28.537963c-2.958378 0.579191-5.734608 1.684362-8.277524 3.296069-0.313132 0.198521-0.615007 0.385786-0.905626 0.562818 0.12382-0.318248 0.25378-0.639566 0.39295-0.971118 0.99977-2.437515 1.588171-5.022387 1.753947-7.702426l17.732873-66.078974 105.73209-131.488707 48.647977 39.113833L674.469813 348.564697zM831.385633 172.919305l-7.679913 9.550517-68.139913-54.779627 7.687076-9.56382c0.291642-0.132006 1.144056-0.38374 2.604314-0.38374 4.28356 0 9.735735 2.071172 13.570063 5.15644l43.832298 35.245735c3.493567 2.805906 6.421246 7.018857 7.642051 10.993378C831.497173 171.081447 831.492056 172.446537 831.385633 172.919305zM487.474932 291.067168l-200.394053 0c-14.136975 0-25.638937 11.501962-25.638937 25.63996 0 14.136975 11.501962 25.637913 25.638937 25.637913l200.394053 0c14.137998 0 25.63996-11.500938 25.63996-25.637913C513.114892 302.56913 501.611907 291.067168 487.474932 291.067168zM674.507676 438.023148 287.079856 438.023148c-14.136975 0-25.638937 11.500938-25.638937 25.638937s11.501962 25.638937 25.638937 25.638937l387.42782 0c14.137998 0 25.640983-11.501962 25.640983-25.638937S688.646698 438.023148 674.507676 438.023148z" fill="currentColor"/></svg>':"teammate"===type?'<svg viewBox="0 0 24 24"><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z" fill="currentColor"/></svg>':'<svg viewBox="0 0 1024 1024"><path d="M810.666667 384l53.333333-117.333333L981.333333 213.333333l-117.333333-53.333333L810.666667 42.666667l-53.333334 117.333333L640 213.333333l117.333333 53.333334L810.666667 384zM810.666667 640l-53.333334 117.333333L640 810.666667l117.333333 53.333333L810.666667 981.333333l53.333333-117.333333L981.333333 810.666667l-117.333333-53.333334L810.666667 640zM490.666667 405.333333L384 170.666667 277.333333 405.333333 42.666667 512l234.666666 106.666667L384 853.333333l106.666667-234.666666L725.333333 512l-234.666666-106.666667z m-64.426667 148.906667L384 647.253333l-42.24-93.013333L248.746667 512l93.013333-42.24L384 376.746667l42.24 93.013333 93.013333 42.24-93.013333 42.24z" fill="currentColor"/></svg>'}function formatTokenCount(n){return null==n||0===n?"0":n>=1e6?(n/1e6).toFixed(1)+"M":n>=1e3?(n/1e3).toFixed(1)+"K":String(n)}function stripPrivateKeys(obj){if(Array.isArray(obj))return obj.map(stripPrivateKeys);if(obj&&"object"==typeof obj){const result={};for(const key of Object.keys(obj))key.startsWith("_")||(result[key]=stripPrivateKeys(obj[key]));return result}return obj}function computeTokenStats(requests){var _a,_b,_c;const byModel={};for(const req of requests){const usage=null==(_b=null==(_a=req.response)?void 0:_a.body)?void 0:_b.usage;if(!usage)continue;const model=(null==(_c=req.body)?void 0:_c.model)||"unknown";byModel[model]||(byModel[model]={input:0,output:0,cacheCreation:0,cacheRead:0});const s=byModel[model];s.input+=usage.input_tokens||0,s.output+=usage.output_tokens||0,s.cacheCreation+=usage.cache_creation_input_tokens||0,s.cacheRead+=usage.cache_read_input_tokens||0}return byModel}function computeCacheRebuildStats(requests){var _a,_b,_c;const stats={ttl:{count:0,cacheCreate:0},system_change:{count:0,cacheCreate:0},tools_change:{count:0,cacheCreate:0},model_change:{count:0,cacheCreate:0},msg_truncated:{count:0,cacheCreate:0},msg_modified:{count:0,cacheCreate:0},key_change:{count:0,cacheCreate:0}},lossMap=function(requests){const map=new Map;return appendCacheLossMap(map,requests,0,null),map}(requests);for(const[i,result]of lossMap){const cacheCreate=(null==(_c=null==(_b=null==(_a=requests[i].response)?void 0:_a.body)?void 0:_b.usage)?void 0:_c.cache_creation_input_tokens)||0,reasons=result.reasons||[result.reason];for(const r of reasons)stats[r]&&(stats[r].count++,stats[r].cacheCreate+=cacheCreate)}return stats}function computeToolUsageStats(requests){var _a,_b;const toolCounts={};for(const req of requests){const content2=null==(_b=null==(_a=req.response)?void 0:_a.body)?void 0:_b.content;if(Array.isArray(content2))for(const block of content2)"tool_use"===block.type&&block.name&&(toolCounts[block.name]=(toolCounts[block.name]||0)+1)}return Object.entries(toolCounts).sort((a,b)=>b[1]-a[1])}function computeSkillUsageStats(requests){var _a;const skillCounts={};for(const req of requests){const messages=null==(_a=req.body)?void 0:_a.messages;if(Array.isArray(messages))for(const msg of messages){if("user"!==msg.role)continue;const content2=msg.content;if(Array.isArray(content2))for(const block of content2){if("text"!==block.type||!isSkillText(block.text))continue;const nameMatch=block.text.match(/^#\s+(.+)$/m),skillName=nameMatch?nameMatch[1]:"Skill";skillCounts[skillName]=(skillCounts[skillName]||0)+1}}}return Object.entries(skillCounts).sort((a,b)=>b[1]-a[1])}function isClaudeMdReminder(text){return"string"==typeof text&&(text.includes("<system-reminder>")&&text.includes("# claudeMd"))}function isSkillsReminder(text){return"string"==typeof text&&(text.includes("<system-reminder>")&&text.includes("skills are available"))}function hasClaudeMdReminder(body2){const messages=null==body2?void 0:body2.messages;if(!Array.isArray(messages))return!1;for(const msg of messages){const content2=null==msg?void 0:msg.content;if("string"==typeof content2){if(isClaudeMdReminder(content2))return!0}else if(Array.isArray(content2))for(const block of content2)if("text"===block.type&&isClaudeMdReminder(block.text))return!0}return!1}function hasSkillsReminder(body2){if(Array.isArray(null==body2?void 0:body2.system))for(const blk of body2.system)if("text"===(null==blk?void 0:blk.type)&&isSkillsReminder(blk.text))return!0;const messages=null==body2?void 0:body2.messages;if(!Array.isArray(messages))return!1;for(const msg of messages){const content2=null==msg?void 0:msg.content;if("string"==typeof content2){if(isSkillsReminder(content2))return!0}else if(Array.isArray(content2))for(const block of content2)if("text"===block.type&&isSkillsReminder(block.text))return!0}return!1}function extractLoadedSkills(requests){if(!Array.isArray(requests)||0===requests.length)return[];let chosen=null;if(1===requests.length)chosen=requests[0];else for(let i=requests.length-1;i>=0;i--)if(isMainAgent(requests[i])){chosen=requests[i];break}if(!chosen||!chosen.body)return[];const body2=chosen.body;let last=null;if(Array.isArray(body2.system))for(const blk of body2.system)"text"===(null==blk?void 0:blk.type)&&isSkillsReminder(blk.text)&&(last=blk.text);if(Array.isArray(body2.messages))for(const msg of body2.messages){const c=null==msg?void 0:msg.content;if("string"==typeof c)isSkillsReminder(c)&&(last=c);else if(Array.isArray(c))for(const blk of c)"text"===(null==blk?void 0:blk.type)&&isSkillsReminder(blk.text)&&(last=blk.text)}if(!last)return[];const m=/<system-reminder>([\s\S]*?)<\/system-reminder>/i.exec(last);return function(innerText){if("string"!=typeof innerText)return[];const headerIdx=innerText.indexOf("skills are available for use with the Skill tool");if(headerIdx<0)return[];const lineStart=innerText.indexOf("\n",headerIdx);if(lineStart<0)return[];const lines=innerText.slice(lineStart+1).split(/\r?\n/),skills=[];let current=null;const flush=()=>{current&&current.name&&skills.push(current),current=null};for(const line of lines)if(/^-\s+/.test(line)){flush();const rest=line.replace(/^-\s+/,""),colonSpaceIdx=rest.indexOf(": ");if(colonSpaceIdx>0)current={name:rest.slice(0,colonSpaceIdx).trim(),description:rest.slice(colonSpaceIdx+2).trim()};else{const name=rest.replace(/:\s*$/,"").trim();current={name:name,description:""}}}else if(current&&line.trim())current.description=current.description?current.description+"\n"+line.trim():line.trim();else{if(line.trim())break;flush()}return flush(),skills}(m?m[1]:last)}function getModelShort(model){return model?model.replace(/^claude-/,"").replace(/-\d{8,}$/,""):null}function isRelevantRequest(request){var _a,_b,_c;if(!request)return!1;const url=request.url||"";return!(request.isHeartbeat||request.isCountTokens||/\/api\/eval\/sdk-/.test(url)||/\/messages\/count_tokens/.test(url)||!0===request.inProgress||request.response&&0===request.response.status||1===(null==(_a=request.body)?void 0:_a.max_tokens)&&!(null==(_b=request.body)?void 0:_b.system)&&(!(null==(_c=request.body)?void 0:_c.tools)||0===request.body.tools.length))}function filterRelevantRequests(requests){return requests.filter(isRelevantRequest)}function findPrevMainAgentTimestamp(requests,startIndex){for(let i=startIndex-1;i>=0;i--)if(isMainAgent(requests[i])&&requests[i].timestamp)return requests[i].timestamp;return null}function extractCachedContent(requests){var _a,_b,_c,_d;if(!Array.isArray(requests)||0===requests.length)return null;let chosen=null;if(1===requests.length)chosen=requests[0];else{let latestMA=null,latestMAWithUsage=null;for(let i=requests.length-1;i>=0;i--)if(isMainAgent(requests[i])&&(latestMA||(latestMA=requests[i]),null==(_b=null==(_a=requests[i].response)?void 0:_a.body)?void 0:_b.usage)){latestMAWithUsage=requests[i];break}chosen=latestMAWithUsage||latestMA}if(!chosen||!chosen.body)return null;const body2=chosen.body,usage=null==(_d=null==(_c=chosen.response)?void 0:_c.body)?void 0:_d.usage,result={system:[],messages:[],tools:[],cacheCreateTokens:(null==usage?void 0:usage.cache_creation_input_tokens)||0,cacheReadTokens:(null==usage?void 0:usage.cache_read_input_tokens)||0};if(Array.isArray(body2.system)){let lastCacheIndex=-1;for(let i=body2.system.length-1;i>=0;i--)if(body2.system[i].cache_control){lastCacheIndex=i;break}if(lastCacheIndex>=0)for(let i=0;i<=lastCacheIndex;i++){const block=body2.system[i];"text"===block.type&&block.text&&result.system.push(block.text)}}if(Array.isArray(body2.messages)){let lastCacheIndex=-1;for(let i=body2.messages.length-1;i>=0;i--){const content2=body2.messages[i].content;if(Array.isArray(content2)){for(const block of content2)if(block.cache_control){lastCacheIndex=i;break}if(lastCacheIndex>=0)break}}if(lastCacheIndex<0&&result.cacheReadTokens>0&&body2.messages.length>0&&(lastCacheIndex=body2.messages.length-1),lastCacheIndex>=0)for(let i=0;i<=lastCacheIndex;i++){const msg=body2.messages[i],content2=msg.content;if("string"==typeof content2)result.messages.push(`[${msg.role}] ${content2}`);else if(Array.isArray(content2))for(const block of content2)if("text"===block.type&&block.text)result.messages.push(`[${msg.role}] ${block.text}`);else if("tool_use"===block.type){const inputStr=block.input?JSON.stringify(block.input):"",preview=inputStr.length>200?inputStr.substring(0,200)+"...":inputStr;result.messages.push(`[${msg.role}] ${block.name}(${preview})`)}else if("tool_result"===block.type){const toolText=extractToolResultText(block);toolText&&result.messages.push(`[tool_result: ${block.tool_use_id}] ${toolText}`)}}}if(Array.isArray(body2.tools)&&body2.tools.length>0&&result.system.length>0)for(const tool of body2.tools)result.tools.push(`${tool.name}: ${tool.description||""}`);return result}function parseCachedTools(tools){const builtin=[],mcpByServer=new Map;if(!Array.isArray(tools))return{builtin:builtin,mcpByServer:mcpByServer};for(const raw of tools){if("string"!=typeof raw||!raw)continue;const colonIdx=raw.indexOf(":"),name=colonIdx>=0?raw.slice(0,colonIdx).trim():raw.trim(),description=colonIdx>=0?raw.slice(colonIdx+1).trim():"";if(!name)continue;const mcpMatch=/^mcp__(.+?)__(.+)$/.exec(name);if(mcpMatch){const server=mcpMatch[1],toolName2=mcpMatch[2];mcpByServer.has(server)||mcpByServer.set(server,[]),mcpByServer.get(server).push({name:toolName2,fullName:name,description:description})}else builtin.push({name:name,description:description})}return{builtin:builtin,mcpByServer:mcpByServer}}let _dbInstance=null,_dbPromise=null;function getDB(){return _dbInstance?Promise.resolve(_dbInstance):_dbPromise||(_dbPromise=new Promise((resolve,reject)=>{const req=indexedDB.open("ccv_entryCache",2);req.onupgradeneeded=()=>{const db=req.result;db.objectStoreNames.contains("entries")||db.createObjectStore("entries"),db.objectStoreNames.contains("sessions")||db.createObjectStore("sessions"),db.objectStoreNames.contains("session_index")||db.createObjectStore("session_index")},req.onsuccess=()=>{_dbInstance=req.result,_dbInstance.onclose=()=>{_dbInstance=null},_dbPromise=null,resolve(_dbInstance)},req.onerror=()=>{_dbPromise=null,reject(req.error)}}),_dbPromise)}let _writeId=0;function getCacheMeta(){try{const raw=localStorage.getItem("ccv_cacheMeta");if(!raw)return null;const meta=JSON.parse(raw);return(null==meta?void 0:meta.lastTs)&&(null==meta?void 0:meta.count)>0&&(null==meta?void 0:meta.projectName)?meta:null}catch{return null}}async function saveEntries(projectName,entries){if(!projectName||!Array.isArray(entries)||0===entries.length)return;const myId=++_writeId;try{const db=await getDB();if(myId!==_writeId)return;return function(projectName,entries){try{const last=entries[entries.length-1],lastTs=(null==last?void 0:last.timestamp)||null;lastTs&&localStorage.setItem("ccv_cacheMeta",JSON.stringify({projectName:projectName,lastTs:lastTs,count:entries.length}))}catch{}}(projectName,entries),new Promise(resolve=>{const tx=db.transaction("entries","readwrite");tx.objectStore("entries").put({projectName:projectName,entries:entries,ts:Date.now()},"cache"),tx.oncomplete=()=>resolve(),tx.onerror=()=>resolve()})}catch{}}async function clearEntries(){!function(){try{localStorage.removeItem("ccv_cacheMeta")}catch{}}();try{const db=await getDB();return new Promise(resolve=>{const tx=db.transaction("entries","readwrite");tx.objectStore("entries").delete("cache"),tx.oncomplete=()=>resolve(),tx.onerror=()=>resolve()})}catch{}}async function saveSessionEntries(projectName,sessionId,entries){if(projectName&&null!=entries)try{const db=await getDB(),key=`${projectName}:${sessionId}`;return new Promise(resolve=>{const tx=db.transaction("sessions","readwrite");tx.objectStore("sessions").put({entries:entries,ts:Date.now()},key),tx.oncomplete=()=>resolve(),tx.onerror=()=>resolve()})}catch{}}async function saveSessionIndex(projectName,index){if(projectName&&Array.isArray(index))try{const db=await getDB();return new Promise(resolve=>{const tx=db.transaction("session_index","readwrite");tx.objectStore("session_index").put({index:index,ts:Date.now()},projectName),tx.oncomplete=()=>resolve(),tx.onerror=()=>resolve()})}catch{}}function buildSessionIndex(entries,mainAgentSessions){const groupMap=new Map;for(const entry of entries){const id=entry._sessionId;if(null==id)continue;const ts=entry.timestamp||null;let g2=groupMap.get(id);g2||(g2={firstTs:ts,lastTs:ts,entryCount:0},groupMap.set(id,g2)),g2.entryCount++,ts&&((!g2.firstTs||ts<g2.firstTs)&&(g2.firstTs=ts),(!g2.lastTs||ts>g2.lastTs)&&(g2.lastTs=ts))}const sortedGroupKeys=Array.from(groupMap.keys()).sort(),result=[];for(let i=0;i<mainAgentSessions.length;i++){const session=mainAgentSessions[i],sessionId=sortedGroupKeys[i]||(null==session?void 0:session.entryTimestamp)||null,g2=sessionId&&groupMap.get(sessionId)||{firstTs:null,lastTs:null,entryCount:0};let msgCount=0,preview="",userId=null;if(session&&(msgCount=session.messages?session.messages.length:0,userId=session.userId||null,session.messages))for(const msg of session.messages)if("user"===msg.role){const text=extractTextContent(msg);if(text){preview=text.slice(0,80);break}}result.push({sessionId:sessionId,firstTs:g2.firstTs,lastTs:g2.lastTs||(null==session?void 0:session.entryTimestamp)||null,entryCount:g2.entryCount,msgCount:msgCount,preview:preview,userId:userId})}return result}function extractTextContent(msg){if(!msg)return"";if("string"==typeof msg.content)return msg.content;if(Array.isArray(msg.content))for(const block of msg.content)if("text"===block.type&&block.text)return block.text;return""}function splitHotCold(entries,mainAgentSessions,sessionIndex,hotCount,pinnedSessionIds=new Set){if(sessionIndex.length<=hotCount)return{hotEntries:entries,allSessions:mainAgentSessions,coldGroups:new Map};const hotSessionIds=new Set(pinnedSessionIds);let remaining=hotCount-hotSessionIds.size;for(let i=sessionIndex.length-1;i>=0&&remaining>0;i--){const sid=sessionIndex[i].sessionId;hotSessionIds.has(sid)||(hotSessionIds.add(sid),remaining--)}const hotEntries=[],coldGroups=new Map;for(const entry of entries)if(hotSessionIds.has(entry._sessionId))hotEntries.push(entry);else{let group=coldGroups.get(entry._sessionId);group||(group=[],coldGroups.set(entry._sessionId,group)),group.push(entry)}return{hotEntries:hotEntries,allSessions:mainAgentSessions.map((session,i)=>{const meta=sessionIndex[i],sid=null==meta?void 0:meta.sessionId;return sid&&!hotSessionIds.has(sid)?{_cold:!0,sessionId:sid,preview:meta.preview,msgCount:meta.msgCount,firstTs:meta.firstTs,lastTs:meta.lastTs,userId:meta.userId,messages:null,response:null,entryTimestamp:meta.lastTs}:session}),coldGroups:coldGroups}}function mergeSessionIndices(oldIndex,newIndex){if(!oldIndex||0===oldIndex.length)return newIndex||[];if(!newIndex||0===newIndex.length)return oldIndex;const newIdSet=new Set(newIndex.map(s=>s.sessionId)),merged=[];for(const item of oldIndex)newIdSet.has(item.sessionId)||merged.push(item);for(const item of newIndex)merged.push(item);return merged.sort((a,b)=>a.sessionId===b.sessionId?0:null==a.sessionId?-1:null==b.sessionId?1:a.sessionId<b.sessionId?-1:1),merged}function isCheckpointEntry(entry){var _a;if(!entry._deltaFormat)return!0;if(entry._isCheckpoint)return!0;const msgs=null==(_a=entry.body)?void 0:_a.messages;return!(!Array.isArray(msgs)||entry._totalMessageCount!==msgs.length)}function isDeltaEntry(entry){return entry._deltaFormat&&entry.mainAgent}function reconstructEntries(entries){var _a,_b;let accumulated=[];const broken=[];for(let i=0;i<entries.length;i++){const entry=entries[i];if(entry.inProgress)continue;if(!isDeltaEntry(entry)){entry.mainAgent&&Array.isArray(null==(_a=entry.body)?void 0:_a.messages)&&(accumulated=[...entry.body.messages]);continue}const msgs=null==(_b=entry.body)?void 0:_b.messages;Array.isArray(msgs)&&(isCheckpointEntry(entry)?accumulated=[...msgs]:(accumulated=[...accumulated,...msgs],entry.body.messages=accumulated,entry._totalMessageCount&&accumulated.length!==entry._totalMessageCount&&broken.push(i)))}return broken.length>0&&function(entries,brokenIndices){var _a;for(const brokenIdx of brokenIndices){const brokenEntry=entries[brokenIdx],expectedCount=brokenEntry._totalMessageCount;if(expectedCount)for(let j=brokenIdx+1;j<entries.length;j++){const candidate=entries[j];if(!candidate.mainAgent||!Array.isArray(null==(_a=candidate.body)?void 0:_a.messages))continue;const candidateMsgs=candidate.body.messages,candidateTotal=candidate._totalMessageCount||candidateMsgs.length;if((!candidate._deltaFormat||isCheckpointEntry(candidate))&&candidateTotal>=expectedCount){brokenEntry.body.messages=candidateMsgs.slice(0,expectedCount);break}}}}(entries,broken),entries}let _mermaidPromise=null,_mermaidInstance=null,_observerStarted=!1,_scanTimer=null,_pendingNodes=new Set;const THEME_DARK={theme:"dark",darkMode:!0,themeVariables:{darkMode:!0,background:"#0d1117",primaryColor:"#1a3a5c",primaryTextColor:"#c9d1d9",primaryBorderColor:"#30363d",lineColor:"#58a6ff",secondaryColor:"#161b22",tertiaryColor:"#0d1117",nodeTextColor:"#c9d1d9",edgeLabelBackground:"#0d1117"}},THEME_LIGHT={theme:"default",darkMode:!1,themeVariables:{darkMode:!1,background:"#FFFFFF",primaryColor:"#dce8f5",primaryTextColor:"#1a1a1a",primaryBorderColor:"#E0E0E0",lineColor:"#0969DA",secondaryColor:"#F0F0F0",tertiaryColor:"#F5F5F5",nodeTextColor:"#1a1a1a",edgeLabelBackground:"#FFFFFF"}};function getCurrentThemeConfig(){return"light"===document.documentElement.getAttribute("data-theme")?THEME_LIGHT:THEME_DARK}async function renderMermaidIn(container2){if(!container2)return;const codeEls=container2.querySelectorAll("code.language-mermaid");if(0===codeEls.length)return;const m=await(_mermaidPromise||(_mermaidPromise=__vitePreload(()=>import("./mermaid.core-O3WUNQR6.js").then(n=>n.bB),__vite__mapDeps([0,1,2,3,4,5])).then(mod=>{const m=mod.default,cfg=getCurrentThemeConfig();return m.initialize({startOnLoad:!1,securityLevel:"strict",flowchart:{useMaxWidth:!0},...cfg}),_mermaidInstance=m,m}).catch(()=>(_mermaidPromise=null,null)),_mermaidPromise));if(m)for(const code of codeEls){const pre=code.parentElement;if(!pre||pre.dataset.mermaidRendered)continue;pre.dataset.mermaidRendered="1";const src=code.textContent;try{const id="mmd-"+Math.random().toString(36).slice(2,9),{svg:svg}=await m.render(id,src),wrapper2=document.createElement("div");wrapper2.className="mermaid-diagram",wrapper2.dataset.mermaidSrc=src,wrapper2.innerHTML=purify.sanitize(svg,{USE_PROFILES:{svg:!0,svgFilters:!0},ADD_TAGS:["style","foreignObject"]}),pre.replaceWith(wrapper2)}catch{}}}function scheduleScan(){_scanTimer||(_scanTimer=requestAnimationFrame(()=>{_scanTimer=null;const nodes=_pendingNodes;_pendingNodes=new Set;for(const node of nodes)node.isConnected&&renderMermaidIn(node)}))}const styles$n={layout:"_layout_1mbsl_1",header:"_header_1mbsl_6",content:"_content_1mbsl_14",mainContainer:"_mainContainer_1mbsl_19",leftPanel:"_leftPanel_1mbsl_24",leftPanelHeader:"_leftPanelHeader_1mbsl_36",leftPanelCount:"_leftPanelCount_1mbsl_47",leftPanelBody:"_leftPanelBody_1mbsl_53",rightPanel:"_rightPanel_1mbsl_58",modalActions:"_modalActions_1mbsl_64",spinCenter:"_spinCenter_1mbsl_68",emptyCenter:"_emptyCenter_1mbsl_73",logListContainer:"_logListContainer_1mbsl_83",loadingOverlay:"_loadingOverlay_1mbsl_131",dragOverlay:"_dragOverlay_1mbsl_144",dragOverlayContent:"_dragOverlayContent_1mbsl_158",dragIcon:"_dragIcon_1mbsl_167",loadingText:"_loadingText_1mbsl_171",mobileLoadingOverlay:"_mobileLoadingOverlay_1mbsl_177",mobileLoadingSpinner:"_mobileLoadingSpinner_1mbsl_189",mobileLoadingLabel:"_mobileLoadingLabel_1mbsl_202",footer:"_footer_1mbsl_208",footerRight:"_footerRight_1mbsl_220",footerLink:"_footerLink_1mbsl_233",footerIcon:"_footerIcon_1mbsl_245",footerSep:"_footerSep_1mbsl_250",footerVersion:"_footerVersion_1mbsl_255",footerVersionNew:"_footerVersionNew_1mbsl_265",newBadge:"_newBadge_1mbsl_275",guideContainer:"_guideContainer_1mbsl_287",guideContent:"_guideContent_1mbsl_295",guideTitle:"_guideTitle_1mbsl_300",guideStep:"_guideStep_1mbsl_307",guideStepNum:"_guideStepNum_1mbsl_313",guideStepBody:"_guideStepBody_1mbsl_328",guideText:"_guideText_1mbsl_333",guideCode:"_guideCode_1mbsl_340",mobileChatOverlay:"_mobileChatOverlay_1mbsl_353",mobileChatOverlayVisible:"_mobileChatOverlayVisible_1mbsl_365",mobileNavBtn:"_mobileNavBtn_1mbsl_369",mobileChatInner:"_mobileChatInner_1mbsl_374",mobileGitDiffOverlay:"_mobileGitDiffOverlay_1mbsl_393",mobileGitDiffOverlayVisible:"_mobileGitDiffOverlayVisible_1mbsl_405",mobileGitDiffInner:"_mobileGitDiffInner_1mbsl_409",mobileFileExplorerOverlay:"_mobileFileExplorerOverlay_1mbsl_429",mobileFileExplorerOverlayVisible:"_mobileFileExplorerOverlayVisible_1mbsl_441",mobileFileExplorerInner:"_mobileFileExplorerInner_1mbsl_445",mobileMenuBtn:"_mobileMenuBtn_1mbsl_475",mobileMenuOverlay:"_mobileMenuOverlay_1mbsl_492",mobileMenuDropdown:"_mobileMenuDropdown_1mbsl_498",mobileMenuItem:"_mobileMenuItem_1mbsl_512",mobileStatsOverlay:"_mobileStatsOverlay_1mbsl_530",mobileStatsOverlayVisible:"_mobileStatsOverlayVisible_1mbsl_542",mobileStatsInner:"_mobileStatsInner_1mbsl_546",mobileLogMgmtOverlay:"_mobileLogMgmtOverlay_1mbsl_553",mobileLogMgmtOverlayVisible:"_mobileLogMgmtOverlayVisible_1mbsl_565",mobileLogMgmtHeader:"_mobileLogMgmtHeader_1mbsl_569",mobileLogMgmtTitle:"_mobileLogMgmtTitle_1mbsl_578",mobileLogMgmtClose:"_mobileLogMgmtClose_1mbsl_584",mobileLogMgmtActions:"_mobileLogMgmtActions_1mbsl_599",mobileLogMgmtBody:"_mobileLogMgmtBody_1mbsl_607",mobileSettingsOverlay:"_mobileSettingsOverlay_1mbsl_614",mobileSettingsOverlayVisible:"_mobileSettingsOverlayVisible_1mbsl_626",mobilePromptOverlay:"_mobilePromptOverlay_1mbsl_630",mobilePromptOverlayVisible:"_mobilePromptOverlayVisible_1mbsl_642",mobilePromptBody:"_mobilePromptBody_1mbsl_646",mobilePromptList:"_mobilePromptList_1mbsl_654",mobilePromptItem:"_mobilePromptItem_1mbsl_660",mobilePromptTimestamp:"_mobilePromptTimestamp_1mbsl_665",mobilePromptCard:"_mobilePromptCard_1mbsl_672",mobilePromptPreText:"_mobilePromptPreText_1mbsl_680",tableTimestampCell:"_tableTimestampCell_1mbsl_690",tablePreviewText:"_tablePreviewText_1mbsl_694",tablePreviewTextClickable:"_tablePreviewTextClickable_1mbsl_703",tableTag:"_tableTag_1mbsl_713",tableActionsCell:"_tableActionsCell_1mbsl_719",mobileCLIRoot:"_mobileCLIRoot_1mbsl_725",mobileCLIHeader:"_mobileCLIHeader_1mbsl_734",mobileCLIHeaderLeft:"_mobileCLIHeaderLeft_1mbsl_745",mobileCLIStatusLabel:"_mobileCLIStatusLabel_1mbsl_753",mobileCtxTag:"_mobileCtxTag_1mbsl_759",mobileCtxTagFill:"_mobileCtxTagFill_1mbsl_778",mobileCtxTagContent:"_mobileCtxTagContent_1mbsl_788",mobileCLIHeaderRight:"_mobileCLIHeaderRight_1mbsl_796",mobileCLIBody:"_mobileCLIBody_1mbsl_802",mobileSettingsBody:"_mobileSettingsBody_1mbsl_811",mobileSettingsSectionTitle:"_mobileSettingsSectionTitle_1mbsl_815",mobileSettingsRow:"_mobileSettingsRow_1mbsl_822",mobileSettingsLabel:"_mobileSettingsLabel_1mbsl_830",mobilePromptEmpty:"_mobilePromptEmpty_1mbsl_836",mobilePromptHeader:"_mobilePromptHeader_1mbsl_843",mobilePromptCount:"_mobilePromptCount_1mbsl_851",chatViewWrapper:"_chatViewWrapper_1mbsl_857",resumeFooterRight:"_resumeFooterRight_1mbsl_863",resumeFooterLeft:"_resumeFooterLeft_1mbsl_868",resumeCheckboxOpacity:"_resumeCheckboxOpacity_1mbsl_872",btnMarginLeft:"_btnMarginLeft_1mbsl_876",btnMarginRight:"_btnMarginRight_1mbsl_880",modalTitleInline:"_modalTitleInline_1mbsl_885",previewPopover:"_previewPopover_1mbsl_892",previewItem:"_previewItem_1mbsl_898",previewText:"_previewText_1mbsl_910"},MAX_SESSIONS=isMobile&&!isPad?30:100;class AppBase extends React.Component{constructor(props){super(props),__publicField(this,"_resetSSETimeout",()=>{this._sseTimeoutTimer&&clearTimeout(this._sseTimeoutTimer),this._sseReconnectCount=0,this._sseTimeoutTimer=setTimeout(()=>{console.warn("SSE heartbeat timeout, reconnecting..."),this._reconnectSSE()},45e3)}),__publicField(this,"_teardownTransientLiveState",()=>{this._pendingEntries=[],this._flushRafId&&(cancelAnimationFrame(this._flushRafId),this._flushRafId=null),this._streamingOffTimer&&(clearTimeout(this._streamingOffTimer),this._streamingOffTimer=null),this._loadingCountRafId&&(cancelAnimationFrame(this._loadingCountRafId),this._loadingCountRafId=null),this._chunkedEntries=[],this._chunkedTotal=0,this._isIncremental=!1,this._sseSlimmer=null,this._sseReconstructor=null}),__publicField(this,"_flushPendingEntries",()=>{this._flushRafId=null;const batch=this._pendingEntries;this._pendingEntries=[],0!==batch.length&&this.setState(prev=>{var _a,_b,_c,_d,_e;const requests=[...prev.requests];let cacheExpireAt=prev.cacheExpireAt,cacheType=prev.cacheType,mainAgentSessions=prev.mainAgentSessions,shouldClearStreaming=!1;this._sseSlimmer||(this._sseSlimmer=function(isMainAgentFn){let prevMainIdx=-1,prevMsgCount=0,prevUserId=null;const sessionSlimmedIndices=new Set;return{processEntry(entry,requests,currentIdx){var _a,_b,_c,_d,_e;if(!isMainAgentFn(entry))return entry;if(!(null==(_b=null==(_a=entry.body)?void 0:_a.messages)?void 0:_b.length))return entry;const count=entry.body.messages.length,userId=(null==(_c=entry.body.metadata)?void 0:_c.user_id)||null,isNewSession=prevMsgCount>0&&(count<.5*prevMsgCount&&prevMsgCount-count>4||prevUserId&&userId&&userId!==prevUserId);if(isNewSession&&count<=4&&prevMsgCount>4)return entry;if(isNewSession)return sessionSlimmedIndices.clear(),prevMainIdx=currentIdx,prevMsgCount=count,prevUserId=userId,entry;if(prevMainIdx>=0&&prevMainIdx<requests.length){const orig=requests[prevMainIdx];if((null==(_e=null==(_d=orig.body)?void 0:_d.messages)?void 0:_e.length)>0){const cloned={...orig,body:{...orig.body},_messageCount:orig.body.messages.length,_slimmed:!0,_fullEntryIndex:currentIdx};cloned.body.messages=[],requests[prevMainIdx]=cloned,sessionSlimmedIndices.add(prevMainIdx)}}for(const idx of sessionSlimmedIndices)requests[idx]._fullEntryIndex!==currentIdx&&(requests[idx]={...requests[idx],_fullEntryIndex:currentIdx});return entry._prevMsgCount=prevMsgCount,prevMainIdx=currentIdx,prevMsgCount=count,prevUserId=userId,entry},onDedup(existingIndex){sessionSlimmedIndices.delete(existingIndex)}}}(isMainAgent)),this._sseReconstructor||(this._sseReconstructor=function(){let accumulated=[];return{reconstruct(entry){var _a,_b,_c;if(entry.inProgress){if(isDeltaEntry(entry)&&!isCheckpointEntry(entry)){const msgs2=null==(_a=entry.body)?void 0:_a.messages;Array.isArray(msgs2)&&(entry.body.messages=[...accumulated,...msgs2])}return entry}if(!isDeltaEntry(entry))return entry.mainAgent&&Array.isArray(null==(_b=entry.body)?void 0:_b.messages)&&(accumulated=[...entry.body.messages]),entry;const msgs=null==(_c=entry.body)?void 0:_c.messages;return Array.isArray(msgs)?(isCheckpointEntry(entry)?accumulated=[...msgs]:(accumulated=[...accumulated,...msgs],entry.body.messages=accumulated),entry):entry},reset(){accumulated=[]}}}());for(const rawEntry of batch){const entry=this._sseReconstructor.reconstruct(rawEntry),key=`${entry.timestamp}|${entry.url}`,existingIndex=this._requestIndexMap.get(key);if(void 0!==existingIndex)requests[existingIndex]=entry,this._sseSlimmer&&this._sseSlimmer.onDedup(existingIndex);else{const newIdx=requests.length;this._sseSlimmer&&this._sseSlimmer.processEntry(entry,requests,newIdx),this._requestIndexMap.set(key,newIdx),requests.push(entry)}if(isMainAgent(entry)&&!entry.inProgress&&(null==(_b=null==(_a=entry.response)?void 0:_a.body)?void 0:_b.usage)){const kvCached=extractCachedContent([entry]);kvCached&&(kvCached.system.length>0||kvCached.messages.length>0||kvCached.tools.length>0)&&(this._lastKvCacheContent=kvCached)}if(!entry.inProgress&&isMainAgent(entry)&&prev.streamingLatest&&prev.streamingLatest.timestamp===entry.timestamp&&(shouldClearStreaming=!0),isMainAgent(entry)){const usage=null==(_d=null==(_c=entry.response)?void 0:_c.body)?void 0:_d.usage;if(null==usage?void 0:usage.cache_creation){const cc=usage.cache_creation,reqTime=entry.timestamp?new Date(entry.timestamp).getTime():Date.now();let newExpireAt=null,newType=null;if(cc.ephemeral_1h_input_tokens>0?(newExpireAt=reqTime+36e5,newType="1h"):cc.ephemeral_5m_input_tokens>0&&(newExpireAt=reqTime+3e5,newType="5m"),newExpireAt&&newExpireAt>Date.now()){cacheExpireAt=newExpireAt;const cacheTotal=(usage.cache_read_input_tokens||0)+(usage.cache_creation_input_tokens||0);cacheType=cacheTotal>0?formatTokenCount(cacheTotal):newType,localStorage.setItem("ccv_cacheExpireAt",String(cacheExpireAt)),localStorage.setItem("ccv_cacheType",cacheType)}}}if(isMainAgent(entry)&&entry.body&&Array.isArray(entry.body.messages)&&!entry._slimmed){const timestamp=entry.timestamp||(new Date).toISOString(),lastSession=mainAgentSessions.length>0?mainAgentSessions[mainAgentSessions.length-1]:null,prevMessages=(null==lastSession?void 0:lastSession.messages)||[],messages=entry.body.messages,prevCount=prevMessages.length,userId=(null==(_e=entry.body.metadata)?void 0:_e.user_id)||null,isNewSession=!(null!==userId&&(null==lastSession?void 0:lastSession.userId)===userId)&&prevCount>0&&messages.length<.5*prevCount&&prevCount-messages.length>4;if(prevCount>4&&messages.length<=4&&messages.length<.5*prevCount)continue;(isNewSession||null===this._currentSessionId)&&(this._currentSessionId=timestamp);for(let i=0;i<messages.length;i++)!isNewSession&&i<prevCount&&prevMessages[i]._timestamp?messages[i]._timestamp=prevMessages[i]._timestamp:messages[i]._timestamp||(messages[i]._timestamp=timestamp);mainAgentSessions=this.mergeMainAgentSessions(mainAgentSessions,entry)}entry._sessionId=this._currentSessionId}let selectedIndex=prev.selectedIndex;return mainAgentSessions.length>MAX_SESSIONS&&(mainAgentSessions=mainAgentSessions.slice(-MAX_SESSIONS)),null===selectedIndex&&requests.length>0&&(this._autoSelectTimer&&clearTimeout(this._autoSelectTimer),this._autoSelectTimer=setTimeout(()=>{this.setState(s=>{if(null===s.selectedIndex&&s.requests.length>0){const filtered=s.showAll?s.requests:filterRelevantRequests(s.requests);return filtered.length>0?{selectedIndex:filtered.length-1}:null}return null})},200)),{requests:requests,cacheExpireAt:cacheExpireAt,cacheType:cacheType,mainAgentSessions:mainAgentSessions,...shouldClearStreaming&&{streamingLatest:null}}},()=>{isMobile&&this.state.projectName&&(this._cacheSaveTimer&&clearTimeout(this._cacheSaveTimer),this._cacheSaveTimer=setTimeout(()=>{this.state.projectName&&0===this.state.sessionIndex.length&&saveEntries(this.state.projectName,this.state.requests)},5e3),this.state.mainAgentSessions.length>10&&(this._evictionTimer||(this._evictionTimer=setTimeout(()=>{this._evictionTimer=null,this._evictColdSessions()},1e4))))})}),__publicField(this,"handleSelectRequest",index=>{this.setState({selectedIndex:index,scrollCenter:!1})}),__publicField(this,"handleScrollDone",()=>{this.setState({scrollCenter:!1})}),__publicField(this,"handleScrollTsDone",()=>{this.setState({chatScrollToTs:null})}),__publicField(this,"handleWorkspaceLaunch",({projectName:projectName})=>{this._isLocalLog=!1,this._localLogFile=null,this.setState({workspaceMode:!1,projectName:projectName,viewMode:"chat",cliMode:!0,terminalVisible:!1})}),__publicField(this,"handleReturnToWorkspaces",()=>{fetch(apiUrl("/api/workspaces/stop"),{method:"POST"}).then(()=>{this._teardownTransientLiveState(),this._rebuildRequestIndex([]),this.setState({workspaceMode:!0,requests:[],mainAgentSessions:[],projectName:"",selectedIndex:null,streamingLatest:null})}).catch(()=>{})}),__publicField(this,"handleProxyProfileChange",data=>{fetch(apiUrl("/api/proxy-profiles"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(data)}).then(r=>r.json()).then(()=>{this.setState({proxyProfiles:data.profiles,activeProxyId:data.active})}).catch(()=>{})}),__publicField(this,"handleLangChange",()=>{const lang=getLang();this.setState({lang:lang}),fetch(apiUrl("/api/preferences"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({lang:lang})}).catch(()=>{})}),__publicField(this,"handleCollapseToolResultsChange",checked=>{this.setState({collapseToolResults:checked}),fetch(apiUrl("/api/preferences"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({collapseToolResults:checked})}).catch(()=>{})}),__publicField(this,"handleExpandThinkingChange",checked=>{this.setState({expandThinking:checked}),fetch(apiUrl("/api/preferences"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({expandThinking:checked})}).catch(()=>{})}),__publicField(this,"handleExpandDiffChange",checked=>{this.setState({expandDiff:checked}),fetch(apiUrl("/api/preferences"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({expandDiff:checked})}).catch(()=>{})}),__publicField(this,"handleAutoApproveChange",seconds=>{this.setState({autoApproveSeconds:seconds}),fetch(apiUrl("/api/preferences"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({autoApproveSeconds:seconds})}).catch(()=>{})}),__publicField(this,"handleThemeColorChange",value=>{this.setState({themeColor:value}),document.documentElement.setAttribute("data-theme","light"===value?"light":"dark"),async function(){if(!_mermaidInstance)return;const cfg=getCurrentThemeConfig();_mermaidInstance.initialize({startOnLoad:!1,securityLevel:"strict",flowchart:{useMaxWidth:!0},...cfg});const diagrams=document.querySelectorAll(".mermaid-diagram[data-mermaid-src]");for(const wrapper2 of diagrams){const src=wrapper2.dataset.mermaidSrc;try{const id="mmd-"+Math.random().toString(36).slice(2,9),{svg:svg}=await _mermaidInstance.render(id,src);wrapper2.innerHTML=purify.sanitize(svg,{USE_PROFILES:{svg:!0,svgFilters:!0},ADD_TAGS:["style","foreignObject"]})}catch{}}}(),fetch(apiUrl("/api/preferences"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({themeColor:value})}).catch(()=>{}),window.dispatchEvent(new CustomEvent("ccv-focus-terminal"))}),__publicField(this,"handleLogDirChange",value=>{if(!value||"string"!=typeof value)return;const trimmed=value.trim();trimmed&&(this.setState({logDir:trimmed}),fetch(apiUrl("/api/preferences"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({logDir:trimmed})}).then(r=>r.json()).then(data=>{data.logDir&&this.setState({logDir:data.logDir})}).catch(()=>{}))}),__publicField(this,"handleShowFullToolContentChange",checked=>{this.setState({showFullToolContent:checked}),fetch(apiUrl("/api/preferences"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({showFullToolContent:checked})}).catch(()=>{})}),__publicField(this,"handleFilterIrrelevantChange",checked=>{this.setState(prev=>{const newShowAll=!checked,newFiltered=newShowAll?prev.requests:filterRelevantRequests(prev.requests);return{showAll:newShowAll,selectedIndex:newFiltered.length>0?newFiltered.length-1:null}}),fetch(apiUrl("/api/preferences"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filterIrrelevant:checked})}).catch(()=>{})}),__publicField(this,"handleImportLocalLogs",()=>{this.setState({importModalVisible:!0,localLogsLoading:!0}),fetch(apiUrl("/api/local-logs")).then(res=>res.json()).then(data=>{const{_currentProject:_currentProject,...logs}=data;this.setState({localLogs:logs,currentProject:_currentProject||"",localLogsLoading:!1})}).catch(()=>{this.setState({localLogs:{},localLogsLoading:!1})})}),__publicField(this,"handleCloseImportModal",()=>{this.setState({importModalVisible:!1,selectedLogs:new Set})}),__publicField(this,"handleRefreshStats",()=>{this.setState({refreshingStats:!0}),fetch(apiUrl("/api/refresh-stats"),{method:"POST"}).then(res=>res.json()).then(data=>{if(!data.ok)throw new Error(data.error||"refresh failed");return fetch(apiUrl("/api/local-logs"))}).then(res=>res.json()).then(data=>{const{_currentProject:_currentProject,...logs}=data;this.setState({localLogs:logs,refreshingStats:!1}),staticMethods.success(t("ui.refreshStatsSuccess"))}).catch(()=>{this.setState({refreshingStats:!1}),staticMethods.error(t("ui.refreshStatsFailed"))})}),__publicField(this,"handleToggleLogSelect",(file,checked)=>{this.setState(prev=>{const selectedLogs=new Set(prev.selectedLogs);return checked?selectedLogs.add(file):selectedLogs.delete(file),{selectedLogs:selectedLogs}})}),__publicField(this,"handleMergeLogs",()=>{const{selectedLogs:selectedLogs,localLogs:localLogs,currentProject:currentProject}=this.state;if(selectedLogs.size<2)return;const logs=localLogs[currentProject];if(!logs)return;const indices=[];if(logs.forEach((log,i)=>{selectedLogs.has(log.file)&&indices.push(i)}),indices.sort((a,b)=>a-b),selectedLogs.has(logs[0].file))return void staticMethods.warning(t("ui.mergeLatestNotAllowed"));for(let i=1;i<indices.length;i++)if(indices[i]-indices[i-1]!==1)return void staticMethods.warning(t("ui.mergeNotConsecutive"));if(indices.reduce((sum,i)=>sum+logs[i].size,0)>524288e3)return void staticMethods.warning(t("ui.mergeTooLarge"));const files=indices.map(i=>logs[i].file).reverse();fetch(apiUrl("/api/merge-logs"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({files:files})}).then(res=>res.json()).then(data=>{data.ok?(staticMethods.success(t("ui.mergeSuccess")),this.setState({selectedLogs:new Set}),this.handleImportLocalLogs()):staticMethods.error(data.error||"Merge failed")}).catch(()=>staticMethods.error("Merge failed"))}),__publicField(this,"handleDeleteLogs",()=>{const{selectedLogs:selectedLogs}=this.state;0!==selectedLogs.size&&Modal.confirm({title:t("ui.deleteLogs"),content:t("ui.deleteLogsConfirm",{count:selectedLogs.size}),okText:t("ui.deleteLogs"),okButtonProps:{danger:!0},cancelText:t("ui.cancel"),onOk:()=>{const files=[...selectedLogs];fetch(apiUrl("/api/delete-logs"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({files:files})}).then(res=>res.json()).then(data=>{if(data.results){const deleted=data.results.filter(r=>r.ok).length,failed=data.results.filter(r=>r.error).length;deleted>0&&staticMethods.success(t("ui.deleteSuccess",{count:deleted})),failed>0&&staticMethods.error(t("ui.deleteFailed",{count:failed})),this.setState({selectedLogs:new Set}),this.handleImportLocalLogs()}}).catch(()=>staticMethods.error("Delete failed"))}})}),__publicField(this,"handleOpenLogFile",async file=>{let base=`${window.location.protocol}//${window.location.host}`,token=new URLSearchParams(window.location.search).get("token");if(!token)try{const r=await fetch(apiUrl("/api/local-url"));if(r.ok){const data=await r.json();data.url&&(base=data.url.split("?")[0],token=new URL(data.url).searchParams.get("token"))}}catch{}const tokenParam=token?`&token=${encodeURIComponent(token)}`:"";window.open(`${base}?logfile=${encodeURIComponent(file)}${tokenParam}`,"_blank"),this.setState({importModalVisible:!1})}),__publicField(this,"handleDownloadLogFile",file=>{const url=apiUrl(`/api/download-log?file=${encodeURIComponent(file)}`),a=document.createElement("a");a.href=url,a.download="",document.body.appendChild(a),a.click(),document.body.removeChild(a)}),__publicField(this,"handleResumeChoice",choice=>{this.state.resumeRememberChoice&&(this.setState({resumeAutoChoice:choice}),fetch(apiUrl("/api/preferences"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({resumeAutoChoice:choice})}).catch(()=>{})),fetch(apiUrl("/api/resume-choice"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({choice:choice})}).catch(err=>console.error("resume-choice failed:",err))}),__publicField(this,"handleResumeAutoChoiceToggle",enabled=>{const value=enabled?"continue":null;this.setState({resumeAutoChoice:value}),fetch(apiUrl("/api/preferences"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({resumeAutoChoice:value})}).catch(()=>{})}),__publicField(this,"handleResumeAutoChoiceChange",value=>{this.setState({resumeAutoChoice:value}),fetch(apiUrl("/api/preferences"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({resumeAutoChoice:value})}).catch(()=>{})}),__publicField(this,"_finishLocalLoad",(entries,fileNames)=>{if(0===entries.length)return staticMethods.error(t("ui.noLogs")),void this.setState({fileLoading:!1,fileLoadingCount:0});this.animateLoadingCount(entries.length,()=>{this._batchSlim(entries);const{mainAgentSessions:mainAgentSessions,filtered:filtered}=this._processEntries(entries);this._isLocalLog=!0,this._localLogFile=1===fileNames.length?fileNames[0]:`${fileNames.length} files`,this.eventSource&&(this.eventSource.close(),this.eventSource=null),this._streamingOffTimer&&(clearTimeout(this._streamingOffTimer),this._streamingOffTimer=null),this.setState({requests:entries,selectedIndex:filtered.length>0?filtered.length-1:null,mainAgentSessions:mainAgentSessions,importModalVisible:!1,fileLoading:!1,fileLoadingCount:0})})});const savedExpireAt=parseInt(localStorage.getItem("ccv_cacheExpireAt"),10)||null,savedCacheType=localStorage.getItem("ccv_cacheType")||null,now=Date.now(),cacheExpireAt=savedExpireAt&&savedExpireAt>now?savedExpireAt:null,cacheType=cacheExpireAt?savedCacheType:null;this.state={requests:[],selectedIndex:null,viewMode:"raw",cacheExpireAt:cacheExpireAt,cacheType:cacheType,mainAgentSessions:[],importModalVisible:!1,localLogs:{},localLogsLoading:!1,refreshingStats:!1,showAll:!1,lang:getLang(),userProfile:null,projectName:"",resumeModalVisible:!1,resumeFileName:"",resumeRememberChoice:!1,resumeAutoChoice:null,autoApproveSeconds:0,collapseToolResults:!0,expandThinking:!0,expandDiff:!1,logDir:"",showFullToolContent:!1,showThinkingSummaries:!1,themeColor:"dark",claudeMissing:!1,updateModalVisible:!1,fileLoading:!1,fileLoadingCount:0,isDragging:!1,selectedLogs:new Set,githubStars:null,cliMode:!1,sdkMode:!1,workspaceMode:!1,serverCachedContent:null,updateInfo:null,pendingUploadPaths:[],contextWindow:null,isStreaming:!1,streamingLatest:null,hasMoreHistory:!1,loadingMore:!1,sessionIndex:[],loadingSessionId:null,proxyProfiles:[],activeProxyId:"max",defaultConfig:null},this.eventSource=null,this._currentSessionId=null,this._autoSelectTimer=null,this._chunkedEntries=[],this._chunkedTotal=0,this.mainContainerRef=React.createRef(),this._layoutRef=React.createRef(),this._requestIndexMap=new Map,this._pendingEntries=[],this._flushRafId=null,this._cacheLossMap=new Map,this._cacheLossProcessedCount=0,this._cacheLossLastMainAgent=null,this._cacheLossShowAll=void 0,this._lastKvCacheContent=null,this._sseSlimmer=null,this._sseReconstructor=null}_batchSlim(entries){const slimmer=function(isMainAgentFn){let prevMainIdx=-1,prevMsgCount=0,prevUserId=null;return{process(entry,entries,currentIdx){var _a,_b,_c;if(!isMainAgentFn(entry))return entry;if(!entry.body||!Array.isArray(entry.body.messages)||0===entry.body.messages.length)return entry;const count=entry.body.messages.length,userId=(null==(_a=entry.body.metadata)?void 0:_a.user_id)||null,isNewSession=prevMsgCount>0&&(count<.5*prevMsgCount&&prevMsgCount-count>4||prevUserId&&userId&&userId!==prevUserId);if(isNewSession&&count<=4&&prevMsgCount>4)return entry;if(isNewSession)return prevMainIdx=currentIdx,prevMsgCount=count,prevUserId=userId,entry;if(prevMainIdx>=0&&prevMainIdx<entries.length){const prev=entries[prevMainIdx];if((null==(_c=null==(_b=prev.body)?void 0:_b.messages)?void 0:_c.length)>0){const pCount=prev.body.messages.length,idxArr=[];for(let j=prev._prevMsgCount||0;j<pCount;j++)idxArr.push(j);prev._messageCount=pCount,prev._messagesIndex=idxArr,prev._slimmed=!0,prev.body.messages=[]}}return entry._prevMsgCount=prevMsgCount,prevMainIdx=currentIdx,prevMsgCount=count,prevUserId=userId,entry},finalize(entries){var _a,_b,_c,_d,_e,_f;let sessionSlimmed=[],currentFullIdx=-1,pCount=0,pUserId=null;for(let i=0;i<entries.length;i++){const e=entries[i],isSlimmed=e._slimmed,hasMsgs=(null==(_b=null==(_a=e.body)?void 0:_a.messages)?void 0:_b.length)>0;if(!isSlimmed&&!hasMsgs)continue;if(!isSlimmed&&!isMainAgentFn(e))continue;const count=e._messageCount||(null==(_d=null==(_c=e.body)?void 0:_c.messages)?void 0:_d.length)||0,userId=(null==(_f=null==(_e=e.body)?void 0:_e.metadata)?void 0:_f.user_id)||null,isNew=pCount>0&&(count<.5*pCount&&pCount-count>4||pUserId&&userId&&userId!==pUserId);if(!(isNew&&count<=4&&pCount>10)){if(isNew){for(const idx of sessionSlimmed)entries[idx]._fullEntryIndex=currentFullIdx;sessionSlimmed=[],currentFullIdx=-1,pCount=0}isSlimmed&&sessionSlimmed.push(i),!hasMsgs&&isSlimmed||(currentFullIdx=i),pCount=count,pUserId=userId}}for(const idx of sessionSlimmed)entries[idx]._fullEntryIndex=currentFullIdx}}}(isMainAgent);for(let i=0;i<entries.length;i++)slimmer.process(entries[i],entries,i);slimmer.finalize(entries)}_rebuildRequestIndex(entries){this._requestIndexMap.clear();for(let i=0;i<entries.length;i++){const e=entries[i];this._requestIndexMap.set(`${e.timestamp}|${e.url}`,i)}this._cacheLossProcessedCount=0,this._cacheLossLastMainAgent=null,this._cacheLossMap=new Map,this._lastKvCacheContent=null,this._sseSlimmer=null,this._sseReconstructor=null}_processEntries(entries){var _a;let timestamps=[],prevUserId=null,sessions=[];const filtered=[];this._requestIndexMap.clear(),this._cacheLossProcessedCount=0,this._cacheLossLastMainAgent=null,this._cacheLossMap=new Map,this._lastKvCacheContent=null,this._sseSlimmer=null,this._sseReconstructor=null;let currentSessionId=null;for(let i=0;i<entries.length;i++){const entry=entries[i];if(this._requestIndexMap.set(`${entry.timestamp}|${entry.url}`,i),isRelevantRequest(entry)&&filtered.push(entry),isMainAgent(entry)&&entry.body&&Array.isArray(entry.body.messages)){const messages=entry.body.messages,count=entry._messageCount||messages.length,userId=(null==(_a=entry.body.metadata)?void 0:_a.user_id)||null,timestamp=entry.timestamp||(new Date).toISOString(),prevCount=timestamps.length,isNewSession=prevCount>0&&(count<.5*prevCount&&prevCount-count>4||prevUserId&&userId&&userId!==prevUserId);isNewSession&&!(isNewSession&&count<=4&&prevCount>4&&count<.5*prevCount)?(currentSessionId=timestamp,timestamps=[]):null===currentSessionId&&(currentSessionId=timestamp);for(let j=timestamps.length;j<count;j++)timestamps.push(timestamp);if(messages.length>0)for(let j=0;j<messages.length;j++)messages[j]._timestamp=timestamps[j];prevUserId=userId,entry._slimmed||(sessions=this.mergeMainAgentSessions(sessions,entry))}entry._sessionId=currentSessionId}return this._currentSessionId=currentSessionId,{mainAgentSessions:sessions,filtered:filtered}}componentDidMount(){fetch(apiUrl("/api/claude-settings")).then(r=>r.json()).then(data=>{data.showThinkingSummaries&&this.setState({showThinkingSummaries:!0}),!1===data.claudeAvailable&&this.setState({claudeMissing:!0})}).catch(()=>{}),this._prefsReady=fetch(apiUrl("/api/preferences")).then(res=>res.json()).then(data=>{var path;"string"==typeof data.claudeConfigDir&&("string"==typeof(path=data.claudeConfigDir)&&path.length>0&&(_configDir=path)),data.lang&&(setLang(data.lang),this.setState({lang:data.lang})),void 0!==data.collapseToolResults&&this.setState({collapseToolResults:!!data.collapseToolResults}),void 0!==data.expandThinking&&this.setState({expandThinking:!!data.expandThinking}),void 0!==data.expandDiff&&this.setState({expandDiff:!!data.expandDiff}),void 0!==data.showFullToolContent&&this.setState({showFullToolContent:!!data.showFullToolContent}),data.resumeAutoChoice&&this.setState({resumeAutoChoice:data.resumeAutoChoice}),"number"==typeof data.autoApproveSeconds&&this.setState({autoApproveSeconds:data.autoApproveSeconds}),data.themeColor&&(this.setState({themeColor:data.themeColor}),document.documentElement.setAttribute("data-theme","light"===data.themeColor?"light":"dark"));const filterIrrelevant=void 0===data.filterIrrelevant||!!data.filterIrrelevant;this.setState({showAll:!filterIrrelevant}),data.logDir&&this.setState({logDir:data.logDir});const urlTheme=new URLSearchParams(window.location.search).get("theme");return"light"!==urlTheme&&"dark"!==urlTheme||(this.setState({themeColor:urlTheme}),document.documentElement.setAttribute("data-theme",urlTheme)),data}).catch(()=>({})),fetch(apiUrl("/api/user-profile")).then(res=>res.json()).then(data=>this.setState({userProfile:data})).catch(()=>{}),fetch(apiUrl("/api/proxy-profiles")).then(res=>res.json()).then(data=>{if(!data.profiles)return;let activeId=data.active||"max";const dc=data.defaultConfig;if("max"===activeId&&(null==dc?void 0:dc.origin)){const match=data.profiles.find(p=>{if("max"===p.id||!p.baseURL)return!1;try{if(new URL(p.baseURL).origin!==dc.origin)return!1}catch{return!1}if(dc.apiKey&&p.apiKey){if(dc.apiKey.slice(-4)!==p.apiKey.slice(-4))return!1}return!dc.model||!p.activeModel||dc.model===p.activeModel});match&&(activeId=match.id,this.handleProxyProfileChange({active:match.id,profiles:data.profiles}))}this.setState({proxyProfiles:data.profiles,activeProxyId:activeId,defaultConfig:dc||null})}).catch(()=>{});const logfile=new URLSearchParams(window.location.search).get("logfile");fetch(apiUrl("/api/project-name")).then(res=>res.json()).then(data=>{const projectName=data.projectName||"";this.setState({projectName:projectName}),projectName&&(document.title=projectName),isMobile&&projectName&&!logfile&&0===this.state.requests.length&&async function(projectName){try{const db=await getDB();return new Promise(resolve=>{const req=db.transaction("entries","readonly").objectStore("entries").get("cache");req.onsuccess=()=>{const data=req.result;data&&data.projectName===projectName&&Array.isArray(data.entries)&&0!==data.entries.length?data.ts&&Date.now()-data.ts>6048e5?(clearEntries(),resolve(null)):resolve(data.entries):resolve(null)},req.onerror=()=>resolve(null)})}catch{return null}}(projectName).then(cached=>{if(cached&&0===this.state.requests.length){this._batchSlim(cached);const{mainAgentSessions:mainAgentSessions,filtered:filtered}=this._processEntries(cached);if(mainAgentSessions.length>8){const sessionIndex=buildSessionIndex(cached,mainAgentSessions),unslimmed=cached.map(e=>e._slimmed?restoreSlimmedEntry(e,cached):e),{hotEntries:hotEntries,allSessions:allSessions}=splitHotCold(unslimmed,mainAgentSessions,sessionIndex,8);this._sseSlimmer=null,this._sseReconstructor=null;const hotFiltered=hotEntries.filter(e=>isRelevantRequest(e));this._oldestTs=hotEntries.length>0?hotEntries[0].timestamp:null,this.setState({requests:hotEntries,selectedIndex:hotFiltered.length>0?hotFiltered.length-1:null,mainAgentSessions:allSessions,sessionIndex:sessionIndex,hasMoreHistory:!!this._oldestTs,fileLoading:!1})}else this._oldestTs=cached.length>0?cached[0].timestamp:null,this.setState({requests:cached,selectedIndex:filtered.length>0?filtered.length-1:null,mainAgentSessions:mainAgentSessions,hasMoreHistory:!!this._oldestTs,fileLoading:!1})}})}).catch(()=>{}),fetch("https://api.github.com/repos/weiesky/cc-viewer").then(res=>res.json()).then(data=>{null!=data.stargazers_count&&this.setState({githubStars:data.stargazers_count})}).catch(()=>{}),fetch(apiUrl("/api/cli-mode")).then(res=>res.json()).then(data=>{data.workspaceMode?this.setState({cliMode:!0,workspaceMode:!0,isWorkspaceServer:!0}):data.cliMode&&this.setState({cliMode:!0,sdkMode:!!data.sdkMode,viewMode:"chat"})}).catch(()=>{}),logfile?this.loadLocalLogFile(logfile):this.initSSE()}componentWillUnmount(){this.eventSource&&this.eventSource.close(),this._localLogES&&(this._localLogES.close(),this._localLogES=null),this._autoSelectTimer&&clearTimeout(this._autoSelectTimer),this._loadingCountTimer&&cancelAnimationFrame(this._loadingCountTimer),this._loadingCountRafId&&cancelAnimationFrame(this._loadingCountRafId),this._cacheSaveTimer&&clearTimeout(this._cacheSaveTimer),this._evictionTimer&&clearTimeout(this._evictionTimer),this._sseTimeoutTimer&&clearTimeout(this._sseTimeoutTimer),this._sseReconnectTimer&&clearTimeout(this._sseReconnectTimer),this._streamingOffTimer&&clearTimeout(this._streamingOffTimer),this._streamingRaf&&(cancelAnimationFrame(this._streamingRaf),this._streamingRaf=null),this._pendingStreamingLatest=null}_reconnectSSE(){if(this.state.streamingLatest&&this.setState({streamingLatest:null}),this._sseReconnectCount>=10)console.error("SSE reconnect limit reached");else{if(this._sseReconnectCount=(this._sseReconnectCount||0)+1,this.eventSource&&(this.eventSource.close(),this.eventSource=null),this._chunkedEntries&&this._chunkedEntries.length>0&&isMobile)try{const partial=reconstructEntries([...this._chunkedEntries]);if(Array.isArray(partial)&&partial.length>0){this._batchSlim(partial);const{mainAgentSessions:mainAgentSessions}=this._processEntries(partial);if(this.setState({requests:partial,mainAgentSessions:mainAgentSessions}),this.state.projectName){const meta=getCacheMeta(),existingCount=meta&&meta.projectName===this.state.projectName?meta.count:0;partial.length>=existingCount&&saveEntries(this.state.projectName,partial)}}}catch(e){console.warn("Failed to save partial entries on reconnect:",e)}this._teardownTransientLiveState(),this.setState({isStreaming:!1}),this._sseReconnectTimer&&clearTimeout(this._sseReconnectTimer),this._sseReconnectTimer=setTimeout(()=>{this.initSSE()},2e3)}}animateLoadingCount(target,onDone){this._loadingCountTimer&&(cancelAnimationFrame(this._loadingCountTimer),this._loadingCountTimer=null);const duration=Math.min(800,Math.max(300,.5*target)),start=performance.now(),step=now=>{const progress=Math.min((now-start)/duration,1),current=Math.round(progress*target);this.setState({fileLoadingCount:current}),progress<1?this._loadingCountTimer=requestAnimationFrame(step):(this._loadingCountTimer=null,onDone())};this._loadingCountTimer=requestAnimationFrame(step)}async loadMoreHistory(){if(this.state.hasMoreHistory&&!this._loadingMore){this._loadingMore=!0,this.setState({loadingMore:!0});try{const res=await fetch(apiUrl(`/api/entries/page?before=${encodeURIComponent(this._oldestTs)}&limit=100`)),data=await res.json();if(Array.isArray(data.entries)&&data.entries.length>0){const merged=[...reconstructEntries(data.entries),...this.state.requests];this._batchSlim(merged);const{mainAgentSessions:mainAgentSessions}=this._processEntries(merged);if(this._oldestTs=data.oldestTimestamp,isMobile&&mainAgentSessions.length>8){const sessionIndex=buildSessionIndex(merged,mainAgentSessions),fullIndex=mergeSessionIndices(this.state.sessionIndex,sessionIndex),unslimmed=merged.map(e=>e._slimmed?restoreSlimmedEntry(e,merged):e),{hotEntries:hotEntries,allSessions:allSessions,coldGroups:coldGroups}=splitHotCold(unslimmed,mainAgentSessions,fullIndex,8);this._sseSlimmer=null,this._sseReconstructor=null;const pn=this.state.projectName;if(pn){for(const[sid,coldEntries]of coldGroups)saveSessionEntries(pn,sid,coldEntries);saveSessionIndex(pn,fullIndex),saveEntries(pn,merged)}this.setState({requests:hotEntries,mainAgentSessions:allSessions,sessionIndex:fullIndex,hasMoreHistory:!!data.hasMore,loadingMore:!1})}else this.setState({requests:merged,mainAgentSessions:mainAgentSessions,hasMoreHistory:!!data.hasMore,loadingMore:!1}),isMobile&&this.state.projectName&&saveEntries(this.state.projectName,merged)}else this.setState({hasMoreHistory:!1,loadingMore:!1})}catch(e){console.error("loadMoreHistory failed:",e),this.setState({loadingMore:!1})}this._loadingMore=!1}}initSSE(){try{let url="/events",hasCache=!1;if(isMobile){const meta=getCacheMeta();meta&&meta.lastTs&&meta.count>0&&(url=`/events?since=${encodeURIComponent(meta.lastTs)}&cc=${meta.count}&project=${encodeURIComponent(meta.projectName||"")}`,hasCache=!0)}!hasCache&&isMobile&&(url="/events?limit=200"),hasCache||this.setState({fileLoading:!0,fileLoadingCount:0}),this.eventSource=new EventSource(apiUrl(url)),this.eventSource.onmessage=event=>{this._resetSSETimeout(),this.handleEventMessage(event)},this.eventSource.onopen=()=>{this._resetSSETimeout()},this.eventSource.addEventListener("stream-progress",event=>{this._resetSSETimeout();try{const data=JSON.parse(event.data);if(this.state.requests.find(r=>r&&r.timestamp===data.timestamp&&!r.inProgress))return;if(this._pendingStreamingLatest={timestamp:data.timestamp,url:data.url,content:data.content||[],model:data.model,updatedAt:Date.now()},this._streamingRaf)return;this._streamingRaf=requestAnimationFrame(()=>{this._streamingRaf=null;const pending=this._pendingStreamingLatest;this._pendingStreamingLatest=null,pending&&React.startTransition(()=>{this.setState({streamingLatest:pending})})})}catch{}}),this.eventSource.addEventListener("resume_prompt",event=>{this._resetSSETimeout();try{const data=JSON.parse(event.data);(this._prefsReady||Promise.resolve({})).then(prefs=>{(null==prefs?void 0:prefs.resumeAutoChoice)?fetch(apiUrl("/api/resume-choice"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({choice:prefs.resumeAutoChoice})}).catch(err=>console.error("resume-choice failed:",err)):this.setState({resumeModalVisible:!0,resumeFileName:data.recentFileName||""})})}catch{}}),this.eventSource.addEventListener("resume_resolved",()=>{this._resetSSETimeout(),this.setState({resumeModalVisible:!1,resumeFileName:"",resumeRememberChoice:!1})}),this.eventSource.addEventListener("update_completed",event=>{this._resetSSETimeout();try{const data=JSON.parse(event.data);this.setState({updateInfo:{type:"completed",version:data.version}})}catch{}}),this.eventSource.addEventListener("update_major_available",event=>{this._resetSSETimeout();try{const data=JSON.parse(event.data);this.setState({updateInfo:{type:"major",version:data.version}})}catch{}}),this.eventSource.addEventListener("load_start",event=>{this._resetSSETimeout();try{const data=JSON.parse(event.data);this._chunkedEntries=[],this._chunkedTotal=data.total||0,this._isIncremental=!!data.incremental,this._hasMoreHistory=!!data.hasMore,this._oldestTs=data.oldestTs||null,this._isIncremental||this.setState({fileLoading:!0,fileLoadingCount:0})}catch{}}),this.eventSource.addEventListener("load_chunk",event=>{this._resetSSETimeout();try{const chunk=JSON.parse(event.data);Array.isArray(chunk)&&(this._chunkedEntries.push(...chunk),this._isIncremental||this._loadingCountRafId||(this._loadingCountRafId=requestAnimationFrame(()=>{this._loadingCountRafId=null,this.setState({fileLoadingCount:this._chunkedEntries.length})})))}catch{}}),this.eventSource.addEventListener("load_end",()=>{this._resetSSETimeout(),this._loadingCountRafId&&(cancelAnimationFrame(this._loadingCountRafId),this._loadingCountRafId=null);const delta=this._chunkedEntries;this._chunkedEntries=[],this._chunkedTotal=0;const isIncremental=this._isIncremental;let rawEntries;if(this._isIncremental=!1,isIncremental&&isMobile&&this.state.requests.length>0){if(0===delta.length)return void this.setState({fileLoading:!1,fileLoadingCount:0});const eKey=(e,i)=>e.timestamp&&e.url?`${e.timestamp}|${e.url}`:`__nokey_c${i}`,map=new Map;this.state.requests.forEach((e,i)=>map.set(eKey(e,i),e)),delta.forEach((e,i)=>map.set(e.timestamp&&e.url?`${e.timestamp}|${e.url}`:`__nokey_d${i}`,e)),rawEntries=Array.from(map.values())}else rawEntries=delta;const entries=Array.isArray(rawEntries)?reconstructEntries(rawEntries):rawEntries;if(Array.isArray(entries)&&entries.length>0){this._batchSlim(entries);const{mainAgentSessions:mainAgentSessions,filtered:filtered}=this._processEntries(entries);if(isMobile&&mainAgentSessions.length>8){const sessionIndex=buildSessionIndex(entries,mainAgentSessions),fullIndex=isIncremental?mergeSessionIndices(this.state.sessionIndex,sessionIndex):sessionIndex,unslimmed=entries.map(e=>e._slimmed?restoreSlimmedEntry(e,entries):e),{hotEntries:hotEntries,allSessions:allSessions,coldGroups:coldGroups}=splitHotCold(unslimmed,mainAgentSessions,fullIndex,8);this._sseSlimmer=null,this._sseReconstructor=null;const pn=this.state.projectName;if(pn){for(const[sid,coldEntries]of coldGroups)saveSessionEntries(pn,sid,coldEntries);saveSessionIndex(pn,fullIndex),saveEntries(pn,entries)}const hotFiltered=hotEntries.filter(e=>isRelevantRequest(e)),newState={requests:hotEntries,selectedIndex:hotFiltered.length>0?hotFiltered.length-1:null,mainAgentSessions:allSessions,sessionIndex:fullIndex,fileLoading:!1,fileLoadingCount:0};isIncremental||(newState.hasMoreHistory=!!this._hasMoreHistory),this.setState(newState)}else{const newState={requests:entries,selectedIndex:filtered.length>0?filtered.length-1:null,mainAgentSessions:mainAgentSessions,fileLoading:!1,fileLoadingCount:0};isIncremental||(newState.hasMoreHistory=!!this._hasMoreHistory),this.setState(newState),isMobile&&this.state.projectName&&saveEntries(this.state.projectName,entries)}}else this.setState({fileLoading:!1,fileLoadingCount:0})}),this.eventSource.addEventListener("full_reload",event=>{this._resetSSETimeout();try{const entries=JSON.parse(event.data);if(Array.isArray(entries)){entries.length>0&&this._batchSlim(entries);const{mainAgentSessions:mainAgentSessions,filtered:filtered}=entries.length>0?this._processEntries(entries):{mainAgentSessions:[],filtered:[]};entries.length>0?this.animateLoadingCount(entries.length,()=>{this.setState({requests:entries,selectedIndex:filtered.length>0?filtered.length-1:null,mainAgentSessions:mainAgentSessions,fileLoading:!1,fileLoadingCount:0,serverCachedContent:null}),isMobile&&this.state.projectName&&saveEntries(this.state.projectName,entries)}):(this.setState({requests:entries,selectedIndex:null,mainAgentSessions:mainAgentSessions,fileLoading:!1,fileLoadingCount:0,serverCachedContent:null}),isMobile&&clearEntries())}else this.setState({fileLoading:!1,fileLoadingCount:0})}catch{this.setState({fileLoading:!1,fileLoadingCount:0})}}),this.eventSource.addEventListener("workspace_started",event=>{this._resetSSETimeout();try{const data=JSON.parse(event.data);this._loadingCountTimer&&(cancelAnimationFrame(this._loadingCountTimer),this._loadingCountTimer=null),this._rebuildRequestIndex([]),data.projectName&&(document.title=`${data.projectName} - CC Viewer`),this.setState({workspaceMode:!1,projectName:data.projectName||"",viewMode:"chat",cliMode:!0,requests:[],mainAgentSessions:[],selectedIndex:null,streamingLatest:null}),isMobile&&clearEntries()}catch{}}),this.eventSource.addEventListener("workspace_stopped",()=>{this._resetSSETimeout(),this._teardownTransientLiveState(),this._rebuildRequestIndex([]),this.setState({workspaceMode:!0,requests:[],mainAgentSessions:[],projectName:"",selectedIndex:null,streamingLatest:null})}),this.eventSource.addEventListener("context_window",event=>{this._resetSSETimeout();try{const data=JSON.parse(event.data);this.setState({contextWindow:data})}catch{}}),this.eventSource.addEventListener("kv_cache_content",event=>{var _a,_b,_c;this._resetSSETimeout();try{const cached=JSON.parse(event.data);cached&&((null==(_a=cached.system)?void 0:_a.length)>0||(null==(_b=cached.messages)?void 0:_b.length)>0||(null==(_c=cached.tools)?void 0:_c.length)>0)&&this.setState({serverCachedContent:cached})}catch(err){console.error("Failed to parse kv_cache_content:",err)}}),this.eventSource.addEventListener("proxy_profile",event=>{this._resetSSETimeout();try{const data=JSON.parse(event.data);data.active&&this.setState({activeProxyId:data.active}),data.profile&&fetch(apiUrl("/api/proxy-profiles")).then(r=>r.json()).then(d=>{d.profiles&&this.setState({proxyProfiles:d.profiles,activeProxyId:d.active||"max"})}).catch(()=>{})}catch{}}),this.eventSource.addEventListener("ping",()=>{this._resetSSETimeout()}),this.eventSource.addEventListener("streaming_status",e=>{this._resetSSETimeout();try{JSON.parse(e.data).active?(clearTimeout(this._streamingOffTimer),this.setState({isStreaming:!0})):(clearTimeout(this._streamingOffTimer),this._streamingOffTimer=setTimeout(()=>{this.setState({isStreaming:!1})},2e3))}catch(err){console.error("Failed to parse streaming_status:",err)}}),this.eventSource.onerror=()=>{console.error("SSE连接错误")}}catch(error2){console.error("EventSource初始化失败:",error2),this.setState({fileLoading:!1,fileLoadingCount:0})}}loadLocalLogFile(file){this._isLocalLog=!0,this._localLogFile=file,this.setState({fileLoading:!0,fileLoadingCount:0,serverCachedContent:null}),this._localLogES&&(this._localLogES.close(),this._localLogES=null);const entries=[],es=new EventSource(apiUrl(`/api/local-log?file=${encodeURIComponent(file)}`));this._localLogES=es,es.addEventListener("load_start",event=>{try{JSON.parse(event.data);this.setState({fileLoadingCount:0})}catch{}}),es.addEventListener("load_chunk",event=>{try{const chunk=JSON.parse(event.data);if(Array.isArray(chunk)){for(const entry of chunk)entries.push(entry);this.setState({fileLoadingCount:entries.length})}}catch{}}),es.addEventListener("load_end",()=>{es.close();const reconstructed=reconstructEntries(entries);if(this._batchSlim(reconstructed),Array.isArray(reconstructed)&&reconstructed.length>0){const{mainAgentSessions:mainAgentSessions,filtered:filtered}=this._processEntries(reconstructed);this.setState({requests:reconstructed,selectedIndex:filtered.length>0?filtered.length-1:null,mainAgentSessions:mainAgentSessions,fileLoading:!1,fileLoadingCount:0,serverCachedContent:null})}else this.setState({fileLoading:!1,fileLoadingCount:0,serverCachedContent:null})}),es.onerror=()=>{es.close(),console.error("加载日志文件 SSE 连接错误"),this.setState({fileLoading:!1,fileLoadingCount:0})}}handleEventMessage(event){try{const entry=JSON.parse(event.data);this._pendingEntries.push(entry),this._flushRafId||(this._flushRafId=requestAnimationFrame(this._flushPendingEntries))}catch(error2){console.error("处理事件消息失败:",error2)}}async loadSession(sessionId){if(null==this._loadingSessionId){this._loadingSessionId=sessionId,this.setState({loadingSessionId:sessionId});try{let entries=await async function(projectName,sessionId){try{const db=await getDB(),key=`${projectName}:${sessionId}`;return new Promise(resolve=>{const req=db.transaction("sessions","readonly").objectStore("sessions").get(key);req.onsuccess=()=>{const data=req.result;data&&Array.isArray(data.entries)&&0!==data.entries.length?data.ts&&Date.now()-data.ts>6048e5?resolve(null):resolve(data.entries):resolve(null)},req.onerror=()=>resolve(null)})}catch{return null}}(this.state.projectName,sessionId);if(!entries||0===entries.length){const meta=(this.state.sessionIndex||[]).find(s=>s.sessionId===sessionId);if(meta&&meta.lastTs){const res=await fetch(apiUrl(`/api/entries/page?before=${encodeURIComponent(meta.lastTs)}&limit=200`));entries=(await res.json()).entries||[]}}if(entries&&entries.length>0){const merged=[...reconstructEntries(entries),...this.state.requests];this._batchSlim(merged);const{mainAgentSessions:mainAgentSessions}=this._processEntries(merged),sessionIndex=buildSessionIndex(merged,mainAgentSessions),fullIndex=mergeSessionIndices(this.state.sessionIndex,sessionIndex),unslimmed=merged.map(e=>e._slimmed?restoreSlimmedEntry(e,merged):e),{hotEntries:hotEntries,allSessions:allSessions,coldGroups:coldGroups}=splitHotCold(unslimmed,mainAgentSessions,fullIndex,8,new Set([sessionId]));this._sseSlimmer=null,this._sseReconstructor=null;const pn=this.state.projectName;if(pn){for(const[sid,coldEntries]of coldGroups)saveSessionEntries(pn,sid,coldEntries);saveSessionIndex(pn,fullIndex),saveEntries(pn,merged)}this.setState({requests:hotEntries,mainAgentSessions:allSessions,sessionIndex:fullIndex,loadingSessionId:null})}else this.setState({loadingSessionId:null})}catch(e){console.error("loadSession failed:",e),this.setState({loadingSessionId:null})}this._loadingSessionId=null}}_evictColdSessions(){const{requests:requests,mainAgentSessions:mainAgentSessions,projectName:projectName}=this.state;if(!isMobile||mainAgentSessions.length<=8)return;const unslimmed=requests.map(e=>e._slimmed?restoreSlimmedEntry(e,requests):e),{hotEntries:hotEntries,allSessions:allSessions,coldGroups:coldGroups}=splitHotCold(unslimmed,mainAgentSessions,this.state.sessionIndex,8);this._sseSlimmer=null,this._sseReconstructor=null;const fullIndex=this.state.sessionIndex;if(projectName){for(const[sid,coldEntries]of coldGroups)saveSessionEntries(projectName,sid,coldEntries);saveSessionIndex(projectName,fullIndex)}this.setState({requests:hotEntries,mainAgentSessions:allSessions,sessionIndex:fullIndex})}mergeMainAgentSessions(prevSessions,entry){return function(prevSessions,entry){var _a;const newMessages=entry.body.messages,newResponse=entry.response,userId=(null==(_a=entry.body.metadata)?void 0:_a.user_id)||null,entryTimestamp=entry.timestamp||null;if(0===prevSessions.length)return[{userId:userId,messages:newMessages,response:newResponse,entryTimestamp:entryTimestamp}];const lastSession=prevSessions[prevSessions.length-1],prevMsgCount=lastSession.messages?lastSession.messages.length:0,isNewConversation=prevMsgCount>0&&newMessages.length<.5*prevMsgCount&&prevMsgCount-newMessages.length>4,sameUser=null!==userId&&userId===lastSession.userId;if(isNewConversation&&newMessages.length<=4&&prevMsgCount>4)return prevSessions;if(sameUser||userId===lastSession.userId&&!isNewConversation){const currentLen=prevMsgCount,newLen=newMessages.length;if(newLen>currentLen){lastSession.messages||(lastSession.messages=[]);for(let i=currentLen;i<newLen;i++)newMessages[i]._timestamp||(newMessages[i]._timestamp=entryTimestamp),lastSession.messages.push(newMessages[i])}else if(newLen<currentLen){for(let i=0;i<newMessages.length;i++)newMessages[i]._timestamp||(newMessages[i]._timestamp=entryTimestamp);lastSession.messages=newMessages}return lastSession.response=newResponse,lastSession.entryTimestamp=entryTimestamp,[...prevSessions]}return[...prevSessions,{userId:userId,messages:newMessages,response:newResponse,entryTimestamp:entryTimestamp}]}(prevSessions,entry)}renderLogTable(logs,mobile){const columns=[{title:"",dataIndex:"file",key:"check",width:40,fixed:!!mobile&&"left",render:file=>jsxRuntimeExports.jsx(Checkbox,{checked:this.state.selectedLogs.has(file)||!1,onClick:e=>e.stopPropagation(),onChange:e=>{e.stopPropagation(),this.handleToggleLogSelect(file,e.target.checked)}})},{title:t("ui.logTime"),dataIndex:"timestamp",key:"time",width:mobile?150:180,render:ts=>jsxRuntimeExports.jsx("span",{className:styles$n.tableTimestampCell,children:this.formatTimestamp(ts,mobile)})},{title:t("ui.logPreview"),dataIndex:"preview",key:"preview",width:mobile?150:void 0,ellipsis:!0,render:arr=>{if(!Array.isArray(arr)||0===arr.length)return"—";const first=arr[0],displayText=first.length<=30&&arr.length>1?`${first} | ${arr[1]}`:first;return arr.length<=1?jsxRuntimeExports.jsx("span",{className:styles$n.tablePreviewText,children:displayText}):jsxRuntimeExports.jsx(Popover,{trigger:mobile?"click":"hover",placement:mobile?"bottomLeft":"leftTop",autoAdjustOverflow:{adjustX:!1,adjustY:!0},overlayInnerStyle:{background:"var(--bg-elevated)",border:"1px solid var(--border-hover)",borderRadius:8,padding:0,maxHeight:400,overflowY:"auto"},content:jsxRuntimeExports.jsx("div",{className:styles$n.previewPopover,children:arr.map((text,i)=>jsxRuntimeExports.jsx("div",{className:styles$n.previewItem,children:jsxRuntimeExports.jsx("pre",{className:styles$n.previewText,children:text})},i))}),children:jsxRuntimeExports.jsx("span",{className:styles$n.tablePreviewTextClickable,style:{textDecoration:mobile?"underline dotted #666":"none"},children:displayText})})}},...mobile?[]:[{title:t("ui.logTurns"),dataIndex:"turns",key:"turns",width:80,render:v=>jsxRuntimeExports.jsx(Tag,{className:styles$n.tableTag,children:v||0})}],{title:t("ui.logSize"),dataIndex:"size",key:"size",width:90,render:v=>jsxRuntimeExports.jsx(Tag,{className:styles$n.tableTag,children:this.formatSize(v)})},{title:t("ui.logActions"),key:"actions",width:mobile?160:180,render:(_,log)=>jsxRuntimeExports.jsxs("span",{className:styles$n.tableActionsCell,children:[jsxRuntimeExports.jsx(Button,{size:"small",type:"primary",onClick:e=>{e.stopPropagation(),this.handleOpenLogFile(log.file)},children:t("ui.openLog")}),jsxRuntimeExports.jsx(Button,{size:"small",icon:jsxRuntimeExports.jsx(RefIcon$c,{}),onClick:e=>{e.stopPropagation(),this.handleDownloadLogFile(log.file)},children:t("ui.downloadLog")})]})}];return jsxRuntimeExports.jsx(ForwardTable,{size:"small",dataSource:logs,columns:columns,rowKey:"file",pagination:!1,scroll:mobile?{x:"max-content",y:"calc(100vh - 160px)"}:{y:400},onRow:log=>({onClick:()=>{const checked=!this.state.selectedLogs.has(log.file);this.handleToggleLogSelect(log.file,checked)},style:{cursor:"pointer"}})})}formatTimestamp(ts,mobile){return!ts||ts.length<15?ts:mobile?`${ts.slice(4,6)}-${ts.slice(6,8)} ${ts.slice(9,11)}:${ts.slice(11,13)}:${ts.slice(13,15)}`:`${ts.slice(0,4)}-${ts.slice(4,6)}-${ts.slice(6,8)} ${ts.slice(9,11)}:${ts.slice(11,13)}:${ts.slice(13,15)}`}formatSize(bytes){return bytes<1024?bytes+" B":bytes<1048576?(bytes/1024).toFixed(1)+" KB":(bytes/1048576).toFixed(1)+" MB"}renderPrepare(){const{requests:requests,selectedIndex:selectedIndex,showAll:showAll,fileLoading:fileLoading,fileLoadingCount:fileLoadingCount,mainAgentSessions:mainAgentSessions,viewMode:viewMode}=this.state;this._filteredSource===requests&&this._filteredShowAll===showAll||(this._filteredSource=requests,this._filteredShowAll=showAll,this._filteredRequests=showAll?requests:filterRelevantRequests(requests));const filteredRequests=this._filteredRequests;this._cacheLossShowAll!==showAll&&(this._cacheLossShowAll=showAll,this._cacheLossMap=new Map,this._cacheLossLastMainAgent=null,this._cacheLossProcessedCount=0),filteredRequests.length<this._cacheLossProcessedCount&&(this._cacheLossMap=new Map,this._cacheLossLastMainAgent=null,this._cacheLossProcessedCount=0),filteredRequests.length>this._cacheLossProcessedCount&&(this._cacheLossLastMainAgent=appendCacheLossMap(this._cacheLossMap,filteredRequests,this._cacheLossProcessedCount,this._cacheLossLastMainAgent),this._cacheLossProcessedCount=filteredRequests.length);return{filteredRequests:filteredRequests,selectedRequest:null!==selectedIndex?filteredRequests[selectedIndex]:null,fileLoading:fileLoading,fileLoadingCount:fileLoadingCount,mainAgentSessions:mainAgentSessions,viewMode:viewMode}}renderWorkspaceMode(){return jsxRuntimeExports.jsx(ConfigProvider,{theme:this.themeConfig,children:jsxRuntimeExports.jsx(WorkspaceList,{onLaunch:this.handleWorkspaceLaunch})})}get themeConfig(){return"light"===this.state.themeColor?{algorithm:theme.defaultAlgorithm,token:{colorPrimary:"#0969DA",colorBgContainer:"#FFFFFF",colorBgLayout:"#FAFAFA",colorBgElevated:"#FFFFFF",colorBorder:"#E0E0E0",controlOutline:"transparent",controlOutlineWidth:0}}:{algorithm:theme.darkAlgorithm,token:{colorPrimary:"#1668dc",colorBgContainer:"#111",colorBgLayout:"#0a0a0a",colorBgElevated:"#1e1e1e",colorBorder:"#2a2a2a",controlOutline:"transparent",controlOutlineWidth:0}}}}!function(){if(_observerStarted||"undefined"==typeof document)return;_observerStarted=!0;const observer=new MutationObserver(mutations=>{var _a;for(const mutation of mutations)for(const node of mutation.addedNodes)if(1===node.nodeType&&(null==(_a=node.querySelector)?void 0:_a.call(node,"code.language-mermaid")))return _pendingNodes.add(node),void scheduleScan()}),start=()=>observer.observe(document.body,{childList:!0,subtree:!0});document.body?start():document.addEventListener("DOMContentLoaded",start)}();const _mdCache=new Map;function renderMarkdown(text){if(!text)return"";const hit=_mdCache.get(text);if(void 0!==hit)return hit;let html;try{html=(()=>purify.sanitize(g.parse(text,{breaks:!0})))()}catch(e){html=escapeHtml(text)}return _mdCache.size>=1024&&_mdCache.delete(_mdCache.keys().next().value),_mdCache.set(text,html),html}function useMarkdownExport({getText:getText,getSnapshotTarget:getSnapshotTarget,onDone:onDone}){const savingRef=reactExports.useRef(!1);return{handleCopy:reactExports.useCallback(e=>{null==e||e.stopPropagation();const text=getText();null!=text&&(navigator.clipboard.writeText(text).then(()=>staticMethods.success(t("ui.copySuccess"))).catch(()=>{}),null==onDone||onDone())},[getText,onDone]),handleSaveAs:reactExports.useCallback(async e=>{null==e||e.stopPropagation(),null==onDone||onDone();const text=getText();if(null==text)return;const blob=new Blob([text],{type:"text/markdown;charset=utf-8"}),defaultName=`content-${(new Date).toISOString().slice(0,19).replace(/[:.]/g,"-")}.md`;if(window.showSaveFilePicker)try{const handle=await window.showSaveFilePicker({suggestedName:defaultName,types:[{description:"Markdown",accept:{"text/markdown":[".md"]}}]}),writable=await handle.createWritable();return await writable.write(blob),void(await writable.close())}catch(err){if("AbortError"===err.name)return}const url=URL.createObjectURL(blob),a=document.createElement("a");a.href=url,a.download=defaultName,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(url)},[getText,onDone]),handleSaveAsImage:reactExports.useCallback(e=>{if(null==e||e.stopPropagation(),null==onDone||onDone(),savingRef.current)return;const target=null==getSnapshotTarget?void 0:getSnapshotTarget();if(!target)return;savingRef.current=!0;const prev={height:target.style.height,maxHeight:target.style.maxHeight,overflow:target.style.overflow,overflowY:target.style.overflowY,scrollTop:target.scrollTop},needsExpand=target.scrollHeight>target.clientHeight;needsExpand&&(target.scrollTop=0,target.style.height=target.scrollHeight+"px",target.style.maxHeight="none",target.style.overflow="visible",target.style.overflowY="visible");const restore=()=>{needsExpand&&(target.style.height=prev.height,target.style.maxHeight=prev.maxHeight,target.style.overflow=prev.overflow,target.style.overflowY=prev.overflowY,target.scrollTop=prev.scrollTop)},isDark="light"!==document.documentElement.getAttribute("data-theme");__vitePreload(async()=>{const{default:html2canvas}=await import("./html2canvas.esm-HFdlUwfn.js");return{default:html2canvas}},[]).then(({default:html2canvas})=>{html2canvas(target,{backgroundColor:isDark?"#0a0a0a":"#ffffff",scale:2,useCORS:!0}).then(canvas=>{restore(),canvas.toBlob(blob=>{if(!blob)return void(savingRef.current=!1);const url=URL.createObjectURL(blob),a=document.createElement("a");a.href=url,a.download=`content-${(new Date).toISOString().slice(0,19).replace(/[:.]/g,"-")}.png`,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(url),canvas.width=0,canvas.height=0,savingRef.current=!1},"image/png")}).catch(err=>{restore(),console.warn("html2canvas render failed:",err),savingRef.current=!1})}).catch(err=>{restore(),console.warn("html2canvas load failed:",err),savingRef.current=!1})},[getSnapshotTarget,onDone]),handleSaveToProject:reactExports.useCallback(async e=>{null==e||e.stopPropagation(),null==onDone||onDone();const text=getText();if(null==text)return;const defaultName=`content-${(new Date).toISOString().slice(0,19).replace(/[:.]/g,"-")}.md`,fileName2=window.prompt(t("ui.saveToProject.prompt"),defaultName);if(fileName2)try{const res=await fetch(apiUrl("/api/file-content"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:fileName2,content:text})});if(res.ok)staticMethods.success(t("ui.saveToProject.success",{name:fileName2}));else{const data=await res.json().catch(()=>({}));staticMethods.error(data.error||t("ui.saveFailed"))}}catch(err){staticMethods.error(err.message||t("ui.saveFailed"))}},[getText,onDone])}}const styles$m_mdBlockWrapper="_mdBlockWrapper_7yafy_1",styles$m_actionBar="_actionBar_7yafy_5",styles$m_hoverPad="_hoverPad_7yafy_28",styles$m_hoverPadTop="_hoverPadTop_7yafy_34",styles$m_hoverPadBottom="_hoverPadBottom_7yafy_37",styles$m_actionBtn="_actionBtn_7yafy_46",styles$m_saveAsWrap="_saveAsWrap_7yafy_68",styles$m_saveMenu="_saveMenu_7yafy_72",styles$m_saveMenuItem="_saveMenuItem_7yafy_87",styles$m_streamingTail="_streamingTail_7yafy_110";const MarkdownBlock$1=React.memo(function({text:text,className:className,style:style,trailingCursor:trailingCursor}){const[hovered,setHovered]=reactExports.useState(!1),[saveMenuOpen,setSaveMenuOpen]=reactExports.useState(!1),timerRef=reactExports.useRef(null),wrapRef=reactExports.useRef(null);reactExports.useRef(0);const textRef=reactExports.useRef(text);textRef.current=text;const{handleCopy:handleCopy,handleSaveAs:handleSaveAs,handleSaveAsImage:handleSaveAsImage,handleSaveToProject:handleSaveToProject}=useMarkdownExport({getText:reactExports.useCallback(()=>textRef.current,[]),getSnapshotTarget:reactExports.useCallback(()=>{var _a;return(null==(_a=wrapRef.current)?void 0:_a.closest('[class*="bubble"]'))||wrapRef.current},[]),onDone:reactExports.useCallback(()=>setSaveMenuOpen(!1),[])});reactExports.useEffect(()=>()=>clearTimeout(timerRef.current),[]);const html=reactExports.useMemo(()=>text?trailingCursor?function(text){const[frozen,tail]=function(text){if(!text)return["",""];if((text.match(/^```/gm)||[]).length%2==1)return["",text];if(/^\[[^\]]+\]:\s/m.test(text))return["",text];const idx=text.lastIndexOf("\n\n");if(idx<0)return["",text];const prevLineStart=text.lastIndexOf("\n",idx-1)+1,lineBefore=text.slice(prevLineStart,idx),nextLineEnd=text.indexOf("\n",idx+2),lineAfter=text.slice(idx+2,nextLineEnd<0?text.length:nextLineEnd);return lineBefore.trimStart().startsWith("|")||lineAfter.trimStart().startsWith("|")?["",text]:[text.slice(0,idx+2),text.slice(idx+2)]}(text);return renderMarkdown(frozen)+(tail?renderMarkdown(tail):"")}(text):renderMarkdown(text):"",[text,trailingCursor]);if(reactExports.useEffect(()=>{}),!text)return null;const handleMouseEnter=reactExports.useCallback(()=>{clearTimeout(timerRef.current),setHovered(!0)},[]),handleMouseLeave=reactExports.useCallback(()=>{timerRef.current=setTimeout(()=>{setHovered(!1),setSaveMenuOpen(!1)},150)},[]);return jsxRuntimeExports.jsxs("div",{ref:wrapRef,className:styles$m_mdBlockWrapper,onMouseEnter:isMobile&&!isPad?void 0:handleMouseEnter,onMouseLeave:isMobile&&!isPad?void 0:handleMouseLeave,children:[jsxRuntimeExports.jsx("div",{className:`chat-md ${className||""} ${trailingCursor?styles$m_streamingTail:""}`,style:style,dangerouslySetInnerHTML:{__html:html}}),(!isMobile||isPad)&&hovered&&jsxRuntimeExports.jsxs("div",{className:styles$m_actionBar,"data-html2canvas-ignore":!0,children:[jsxRuntimeExports.jsx("div",{className:`${styles$m_hoverPad} ${styles$m_hoverPadTop}`,"aria-hidden":"true"}),jsxRuntimeExports.jsxs("div",{className:styles$m_saveAsWrap,onMouseEnter:()=>setSaveMenuOpen(!0),onMouseLeave:()=>setSaveMenuOpen(!1),children:[jsxRuntimeExports.jsx(Tooltip,{title:saveMenuOpen?"":t("ui.saveAs"),mouseEnterDelay:.3,children:jsxRuntimeExports.jsx("span",{className:styles$m_actionBtn,children:jsxRuntimeExports.jsx(RefIcon$c,{})})}),saveMenuOpen&&jsxRuntimeExports.jsxs("div",{className:styles$m_saveMenu,children:[jsxRuntimeExports.jsxs("button",{className:styles$m_saveMenuItem,onClick:handleSaveAs,children:[jsxRuntimeExports.jsx(RefIcon$c,{}),jsxRuntimeExports.jsx("span",{children:t("ui.saveAsMd")})]}),jsxRuntimeExports.jsxs("button",{className:styles$m_saveMenuItem,onClick:handleCopy,children:[jsxRuntimeExports.jsx(RefIcon$d,{}),jsxRuntimeExports.jsx("span",{children:t("ui.copyTextContent")})]}),jsxRuntimeExports.jsxs("button",{className:styles$m_saveMenuItem,onClick:handleSaveAsImage,children:[jsxRuntimeExports.jsx(RefIcon$4,{}),jsxRuntimeExports.jsx("span",{children:t("ui.saveAsImage")})]}),jsxRuntimeExports.jsxs("button",{className:styles$m_saveMenuItem,onClick:handleSaveToProject,children:[jsxRuntimeExports.jsx(RefIcon$1,{}),jsxRuntimeExports.jsx("span",{children:t("ui.saveToProject")})]})]})]}),jsxRuntimeExports.jsx("div",{className:`${styles$m_hoverPad} ${styles$m_hoverPadBottom}`,"aria-hidden":"true"})]})]})}),ROLE_MAP={worker:{svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n \x3c!-- Wrench: represents hands-on execution and building --\x3e\n <path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/>\n</svg>\n'},reviewer:{svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n \x3c!-- Eye with checkmark: represents code review and approval --\x3e\n \x3c!-- Eye shape --\x3e\n <path d="M3 12s3-7 9-7 9 7 9 7-3 7-9 7-9-7-9-7z"/>\n \x3c!-- Checkmark inside eye (replaces pupil) --\x3e\n <path d="m9 12 2 2 4-4"/>\n</svg>\n'},researcher:{svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n \x3c!-- Microscope: eyepiece, tube, lens, stage, base --\x3e\n <path d="M14 4l2 1"/>\n <path d="M12 6l2-1"/>\n <path d="M13 5l-3 8"/>\n <circle cx="9" cy="15" r="2"/>\n <line x1="5" y1="18" x2="15" y2="18"/>\n <line x1="10" y1="18" x2="10" y2="21"/>\n <line x1="6" y1="21" x2="14" y2="21"/>\n</svg>\n'},explorer:{svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n \x3c!-- Compass: outer circle with diamond pointer --\x3e\n <circle cx="12" cy="12" r="9"/>\n <polygon points="12,4 14,11 12,9 10,11" fill="currentColor" stroke="none"/>\n <polygon points="12,20 10,13 12,15 14,13" fill="currentColor" stroke="none"/>\n <circle cx="12" cy="12" r="2"/>\n</svg>\n'},analyst:{svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n \x3c!-- Bar chart: represents data analysis --\x3e\n \x3c!-- Three vertical bars of varying height --\x3e\n <line x1="18" y1="20" x2="18" y2="10"/>\n <line x1="12" y1="20" x2="12" y2="4"/>\n <line x1="6" y1="20" x2="6" y2="14"/>\n</svg>\n'},tracer:{svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n \x3c!-- Winding path with waypoints: tracing execution flow --\x3e\n <path d="M4 6c4 0 4 4 8 4s4-4 8-4" stroke-dasharray="3 2"/>\n <path d="M4 18c4 0 4-4 8-4s4 4 8 4" stroke-dasharray="3 2"/>\n <circle cx="4" cy="6" r="1.5" fill="currentColor" stroke="none"/>\n <circle cx="12" cy="12" r="1.5" fill="currentColor" stroke="none"/>\n <circle cx="20" cy="18" r="1.5" fill="currentColor" stroke="none"/>\n</svg>\n'},investigator:{svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n <circle cx="10" cy="10" r="6"/>\n <line x1="14.2" y1="14.2" x2="20" y2="20"/>\n <path d="M8 8.5c0.5-0.5 1.5-1 2.5-0.5"/>\n <circle cx="10" cy="11" r="1.5"/>\n</svg>\n'},builder:{svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n <rect x="3" y="15" width="8" height="5" rx="0.5"/>\n <rect x="7" y="9" width="8" height="5" rx="0.5"/>\n <rect x="11" y="3" width="8" height="5" rx="0.5"/>\n</svg>\n'},implementer:{svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n <polyline points="5 7 3 12 5 17"/>\n <polyline points="19 7 21 12 19 17"/>\n <line x1="9" y1="12" x2="15" y2="12"/>\n <polyline points="13 9 15 12 13 15"/>\n</svg>\n'},auditor:{svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n <rect x="5" y="3" width="14" height="18" rx="2" />\n <rect x="9" y="2" width="6" height="3" rx="1" />\n <polyline points="9 13 11 15 15 11" />\n</svg>\n'},translator:{svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n <circle cx="10" cy="12" r="7" />\n <path d="M10 5 C7 5 5 8 5 12 S7 19 10 19" />\n <path d="M10 5 C13 5 15 8 15 12 S13 19 10 19" />\n <line x1="3" y1="12" x2="17" y2="12" />\n <line x1="10" y1="5" x2="10" y2="19" />\n <path d="M18 7 L20 7 L19 10" />\n <path d="M18 7 C18.5 8.5 20 10 21 10" />\n</svg>\n'},security:{svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n <path d="M12 3 L4 7 C4 7 3 16 12 21 C21 16 20 7 20 7 L12 3 Z" />\n <rect x="10" y="10" width="4" height="4" rx="1" />\n <path d="M12 10 V8 A2 2 0 0 1 14 8 V10" />\n</svg>\n'},scanner:{svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n <path d="M12 12L18 6"/>\n <path d="M12 12a3 3 0 0 1-2.12-5.12"/>\n <path d="M12 12a5 5 0 0 1-3.54-8.54"/>\n <path d="M12 12a8 8 0 0 1-5.66-2.34"/>\n <circle cx="12" cy="12" r="2"/>\n</svg>\n'},expert:{svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n <polygon points="12,4 14.5,9.5 20,10 16,14 17,20 12,17 7,20 8,14 4,10 9.5,9.5"/>\n <circle cx="12" cy="12" r="9"/>\n</svg>\n'},executor:{svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n <polygon points="13,2 5,14 12,14 11,22 19,10 12,10"/>\n</svg>\n'},designer:{svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n <path d="M12 19l7-7 3 3-7 7-3-3z"/>\n <path d="M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z"/>\n <path d="M2 2l7.586 7.586"/>\n <circle cx="11" cy="11" r="2"/>\n</svg>\n'},default:{svg:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n <circle cx="10" cy="7" r="4"/>\n <path d="M3 21v-2a7 7 0 0 1 14 0v2"/>\n <path d="M20 9v0a2 2 0 1 1 0 4"/>\n <path d="M20 17v1"/>\n</svg>\n'}},PREFIX_RULES=[{prefix:"worker-",role:"worker"},{prefix:"reviewer-",role:"reviewer"},{prefix:"researcher-",role:"researcher"},{prefix:"explorer-",role:"explorer"},{prefix:"explore-",role:"explorer"},{prefix:"translator-",role:"translator"},{prefix:"svg-creator-",role:"designer"}],SUFFIX_RULES=[{suffix:"-reviewer",role:"reviewer"},{suffix:"-analyst",role:"analyst"},{suffix:"-tracer",role:"tracer"},{suffix:"-investigator",role:"investigator"},{suffix:"-builder",role:"builder"},{suffix:"-impl",role:"implementer"},{suffix:"-auditor",role:"auditor"},{suffix:"-scanner",role:"scanner"},{suffix:"-expert",role:"expert"},{suffix:"-executor",role:"executor"}],CONTAINS_RULES=[{keyword:"security",role:"security"},{keyword:"implementer",role:"implementer"},{keyword:"review",role:"reviewer"},{keyword:"explor",role:"explorer"},{keyword:"research",role:"researcher"},{keyword:"analy",role:"analyst"},{keyword:"trac",role:"tracer"},{keyword:"investigat",role:"investigator"},{keyword:"build",role:"builder"},{keyword:"audit",role:"auditor"},{keyword:"translat",role:"translator"},{keyword:"scan",role:"scanner"},{keyword:"expert",role:"expert"},{keyword:"execut",role:"executor"},{keyword:"design",role:"designer"},{keyword:"work",role:"worker"}],ABBREV_PREFIX_RULES=[{prefix:"cr-",role:"reviewer"},{prefix:"r-",role:"reviewer"},{prefix:"ui-",role:"reviewer"},{prefix:"ux-",role:"reviewer"}],ROLE_KEYS=Object.keys(ROLE_MAP).filter(k=>"default"!==k);function getTeammateAvatar(name){let clean=(name||"").trim();clean=clean.replace(/^Teammate:\s*/i,""),clean=clean.replace(/\([^)]*\)\s*$/,"").trim();const role=function(name){const lower=name.toLowerCase();for(const{prefix:prefix2,role:role}of PREFIX_RULES)if(lower.startsWith(prefix2))return role;for(const{suffix:suffix,role:role}of SUFFIX_RULES)if(lower.endsWith(suffix))return role;for(const{keyword:keyword,role:role}of CONTAINS_RULES)if(lower.includes(keyword))return role;for(const{prefix:prefix2,role:role}of ABBREV_PREFIX_RULES)if(lower.startsWith(prefix2))return role;if(lower.length>0){let hash=0;for(let i=0;i<lower.length;i++)hash=lower.charCodeAt(i)+((hash<<5)-hash);return ROLE_KEYS[(hash%ROLE_KEYS.length+ROLE_KEYS.length)%ROLE_KEYS.length]}return"default"}(clean),entry=ROLE_MAP[role],color=`var(--avatar-bg-${function(name){let hash=0;for(let i=0;i<name.length;i++)hash=name.charCodeAt(i)+((hash<<5)-hash);return(hash%20+20)%20}(clean)})`;return{svg:entry.svg,color:color,role:role}}const SYSTEM_TAGS=["system-reminder","local-command-caveat","project-reminder","important-instruction-reminders","file-modified-reminder","todo-reminder","user-prompt-submit-hook","local-command-stdout","command-name","task-notification","environment_details","context"];const _tagCache=new Map;function renderAssistantText(text){if(!text)return{segments:[]};const hit=_tagCache.get(text);if(hit)return hit;const result=function(text){if(!text)return{segments:[]};const tagPattern=new RegExp("<("+SYSTEM_TAGS.join("|")+")\\b[^>]*>([\\s\\S]*?)</\\1>","gi"),segments=[];let match,lastIndex=0;for(;null!==(match=tagPattern.exec(text));){if(match.index>lastIndex){const before=text.slice(lastIndex,match.index).trim();before&&segments.push({type:"text",content:before})}segments.push({type:"system-tag",tag:match[1],content:match[2].trim()}),lastIndex=match.index+match[0].length}if(lastIndex<text.length){const rest=text.slice(lastIndex).trim();rest&&segments.push({type:"text",content:rest})}return{segments:segments}}(text);return _tagCache.size>=512&&_tagCache.delete(_tagCache.keys().next().value),_tagCache.set(text,result),result}const styles$l_avatar="_avatar_5zo1e_3",styles$l_avatarImg="_avatarImg_5zo1e_21",styles$l_messageRow="_messageRow_5zo1e_42",styles$l_messageRowEnd="_messageRowEnd_5zo1e_48",styles$l_contentCol="_contentCol_5zo1e_57",styles$l_contentColLimited="_contentColLimited_5zo1e_61",styles$l_labelRow="_labelRow_5zo1e_69",styles$l_labelRowEnd="_labelRowEnd_5zo1e_76",styles$l_labelRight="_labelRight_5zo1e_83",styles$l_labelText="_labelText_5zo1e_91",styles$l_timeText="_timeText_5zo1e_95",styles$l_timeTextNoMargin="_timeTextNoMargin_5zo1e_101",styles$l_labelTextRight="_labelTextRight_5zo1e_107",styles$l_bubbleUser="_bubbleUser_5zo1e_114 _bubble_5zo1e_29",styles$l_bubbleAssistant="_bubbleAssistant_5zo1e_126 _bubble_5zo1e_29",styles$l_bubbleHighlight="_bubbleHighlight_5zo1e_142",styles$l_bubbleHighlightFading="_bubbleHighlightFading_5zo1e_146",styles$l_borderSvg="_borderSvg_5zo1e_151",styles$l_borderSvgInset="_borderSvgInset_5zo1e_160",styles$l_borderSvgFading="_borderSvgFading_5zo1e_164",styles$l_borderRect="_borderRect_5zo1e_169",styles$l_bubblePlan="_bubblePlan_5zo1e_178 _bubble_5zo1e_29",styles$l_bubbleSubAgent="_bubbleSubAgent_5zo1e_186 _bubble_5zo1e_29",styles$l_systemTagLabel="_systemTagLabel_5zo1e_206",styles$l_skillLabel="_skillLabel_5zo1e_210",styles$l_systemTagPre="_systemTagPre_5zo1e_215",styles$l_collapseMargin="_collapseMargin_5zo1e_223",styles$l_collapseNoMargin="_collapseNoMargin_5zo1e_227",styles$l_collapseStream="_collapseStream_5zo1e_232",styles$l_thinkingLabel="_thinkingLabel_5zo1e_248",styles$l_thinkingEmptyHint="_thinkingEmptyHint_5zo1e_252",styles$l_thinkingEmptyText="_thinkingEmptyText_5zo1e_260",styles$l_enableThinkingBtn="_enableThinkingBtn_5zo1e_265",styles$l_bashCollapseLabel="_bashCollapseLabel_5zo1e_270",styles$l_toolBox="_toolBox_5zo1e_277",styles$l_toolLabel="_toolLabel_5zo1e_290",styles$l_simplifiedToolLabel="_simplifiedToolLabel_5zo1e_294",styles$l_simplifiedToolTag="_simplifiedToolTag_5zo1e_303",styles$l_simplifiedToolPopoverContent="_simplifiedToolPopoverContent_5zo1e_321",styles$l_codePre="_codePre_5zo1e_334",styles$l_pathTag="_pathTag_5zo1e_365",styles$l_pathTagClickable="_pathTagClickable_5zo1e_370",styles$l_descSpan="_descSpan_5zo1e_383",styles$l_secondarySpan="_secondarySpan_5zo1e_388",styles$l_patternSpan="_patternSpan_5zo1e_392",styles$l_kvContainer="_kvContainer_5zo1e_398",styles$l_kvItem="_kvItem_5zo1e_403",styles$l_kvKey="_kvKey_5zo1e_407",styles$l_kvValue="_kvValue_5zo1e_411",styles$l_teammateStatusRow="_teammateStatusRow_5zo1e_432",styles$l_teammateStatusRowCenter="_teammateStatusRowCenter_5zo1e_438",styles$l_teammateStatusBubble="_teammateStatusBubble_5zo1e_444",styles$l_taskNotifUsage="_taskNotifUsage_5zo1e_461",styles$l_sendMessageBlock="_sendMessageBlock_5zo1e_471",styles$l_sendMessageHeader="_sendMessageHeader_5zo1e_479",styles$l_compactLabel="_compactLabel_5zo1e_486",styles$l_compactPre="_compactPre_5zo1e_491",styles$l_viewRequestBtn="_viewRequestBtn_5zo1e_501",styles$l_optionList="_optionList_5zo1e_515",styles$l_optionDesc="_optionDesc_5zo1e_519",styles$l_questionSpacing="_questionSpacing_5zo1e_533",styles$l_askQuestionBox="_askQuestionBox_5zo1e_546",styles$l_askQuestionHeader="_askQuestionHeader_5zo1e_555",styles$l_askQuestionText="_askQuestionText_5zo1e_566",styles$l_askOptionItem="_askOptionItem_5zo1e_572",styles$l_askOptionSelected="_askOptionSelected_5zo1e_581",styles$l_askCheckSvg="_askCheckSvg_5zo1e_590",styles$l_planModeBox="_planModeBox_5zo1e_597",styles$l_planStatusPending="_planStatusPending_5zo1e_607",styles$l_planModeLabel="_planModeLabel_5zo1e_612",styles$l_planModePermissions="_planModePermissions_5zo1e_617",styles$l_planModePermLabel="_planModePermLabel_5zo1e_623",styles$l_planModeHeader="_planModeHeader_5zo1e_629",styles$l_planStatusBadge="_planStatusBadge_5zo1e_635",styles$l_planStatusApproved="_planStatusApproved_5zo1e_643",styles$l_planStatusRejected="_planStatusRejected_5zo1e_652",styles$l_planContentPreview="_planContentPreview_5zo1e_670",styles$l_planFeedback="_planFeedback_5zo1e_683",styles$l_planFeedbackLabel="_planFeedbackLabel_5zo1e_692",styles$l_planApprovalActions="_planApprovalActions_5zo1e_697",styles$l_planApproveBtn="_planApproveBtn_5zo1e_704",styles$l_planRejectBtn="_planRejectBtn_5zo1e_719",styles$l_planOptionBtn="_planOptionBtn_5zo1e_734",styles$l_dangerApprovalBox="_dangerApprovalBox_5zo1e_749",styles$l_dangerApprovalBoxDenied="_dangerApprovalBoxDenied_5zo1e_758",styles$l_ultraplanBadge="_ultraplanBadge_5zo1e_762",styles$l_dangerApprovalHeader="_dangerApprovalHeader_5zo1e_768",styles$l_dangerApprovalIcon="_dangerApprovalIcon_5zo1e_774",styles$l_dangerApprovalLabel="_dangerApprovalLabel_5zo1e_779",styles$l_dangerApprovalActions="_dangerApprovalActions_5zo1e_784",styles$l_dangerApproveBtn="_dangerApproveBtn_5zo1e_791",styles$l_dangerRejectBtn="_dangerRejectBtn_5zo1e_806",styles$l_dangerOptionBtn="_dangerOptionBtn_5zo1e_821",styles$l_dangerDeniedBadge="_dangerDeniedBadge_5zo1e_836",styles$l_dangerDeniedDetail="_dangerDeniedDetail_5zo1e_847",styles$l_planFeedbackInputWrap="_planFeedbackInputWrap_5zo1e_857",styles$l_planFeedbackTextarea="_planFeedbackTextarea_5zo1e_861",styles$l_planFeedbackBtnRow="_planFeedbackBtnRow_5zo1e_881",styles$l_planFeedbackSendBtn="_planFeedbackSendBtn_5zo1e_888",styles$l_planFeedbackCancelBtn="_planFeedbackCancelBtn_5zo1e_908",styles$l_askQuestionInteractive="_askQuestionInteractive_5zo1e_925",styles$l_askRadioGroup="_askRadioGroup_5zo1e_940",styles$l_askRadioItem="_askRadioItem_5zo1e_948",styles$l_askRadioItemSelected="_askRadioItemSelected_5zo1e_963",styles$l_askRadioDot="_askRadioDot_5zo1e_967",styles$l_askCheckboxGroup="_askCheckboxGroup_5zo1e_974",styles$l_askOtherInput="_askOtherInput_5zo1e_1000",styles$l_askSubmitRow="_askSubmitRow_5zo1e_1013",styles$l_askSubmitBtn="_askSubmitBtn_5zo1e_1019",styles$l_askMarkdownLayout="_askMarkdownLayout_5zo1e_1039",styles$l_askMarkdownPreview="_askMarkdownPreview_5zo1e_1050",styles$l_chatImageFallback="_chatImageFallback_5zo1e_1075",styles$l_chatImageImg="_chatImageImg_5zo1e_1080",styles$l_bubbleRelative="_bubbleRelative_5zo1e_1091",styles$l_skillSpacer="_skillSpacer_5zo1e_1097",styles$l_skillTimeIndent="_skillTimeIndent_5zo1e_1104",styles$l_previewPlaceholder="_previewPlaceholder_5zo1e_1108";class AskQuestionForm extends React.Component{constructor(props){super(props),this.state={selections:{},multiSelections:{},otherActive:{},otherText:{},submitting:!1}}componentWillUnmount(){this._submitTimeout&&clearTimeout(this._submitTimeout)}render(){const{questions:rawQuestions,onSubmit:onSubmit}=this.props,questions=Array.isArray(rawQuestions)?rawQuestions:[],{selections:selections,multiSelections:multiSelections,otherActive:otherActive,otherText:otherText,submitting:submitting}=this.state,allValid=questions.every((q,qi)=>{if(otherActive[qi])return(otherText[qi]||"").trim().length>0;if(q.multiSelect){const set=multiSelections[qi];return set&&set.size>0}return null!=selections[qi]}),handleSubmit=()=>{if(!allValid||submitting)return;this.setState({submitting:!0}),this._submitTimeout&&clearTimeout(this._submitTimeout),this._submitTimeout=setTimeout(()=>{this.setState({submitting:!1})},3e4);const answers=questions.map((q,qi)=>{if(otherActive[qi]){return{questionIndex:qi,type:"other",optionIndex:(q.options||[]).length,text:(otherText[qi]||"").trim(),isMultiSelect:!!q.multiSelect}}if(q.multiSelect){const set=multiSelections[qi]||new Set,selectedIndices=[];return(q.options||[]).forEach((opt,oi)=>{set.has(opt.label)&&selectedIndices.push(oi)}),{questionIndex:qi,type:"multi",selectedIndices:selectedIndices}}const selectedLabel=selections[qi];return{questionIndex:qi,type:"single",optionIndex:(q.options||[]).findIndex(o2=>o2.label===selectedLabel)}});onSubmit&&onSubmit(answers)};return jsxRuntimeExports.jsxs("div",{className:styles$l_askQuestionInteractive,children:[jsxRuntimeExports.jsx("svg",{className:`${styles$l_borderSvg} ${styles$l_borderSvgInset}`,preserveAspectRatio:"none",children:jsxRuntimeExports.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",rx:"6",ry:"6",fill:"none",stroke:"#1668dc",strokeWidth:"1",strokeDasharray:"6 4",className:styles$l_borderRect})}),questions.map((q,qi)=>{var _a;const isMulti=q.multiSelect,hasPreview=!isMulti&&(null==(_a=q.options)?void 0:_a.some(o2=>o2.preview)),selectedLabel=selections[qi],focusedPreview=hasPreview&&selectedLabel?(q.options.find(o2=>o2.label===selectedLabel)||{}).preview:null,optionsContent=jsxRuntimeExports.jsxs("div",{children:[q.header&&jsxRuntimeExports.jsx("span",{className:styles$l_askQuestionHeader,children:q.header}),jsxRuntimeExports.jsx("div",{className:styles$l_askQuestionText,children:q.question}),isMulti?jsxRuntimeExports.jsxs("div",{className:styles$l_askCheckboxGroup,children:[(q.options||[]).map((opt,oi)=>{const checked=!(!multiSelections[qi]||!multiSelections[qi].has(opt.label));return jsxRuntimeExports.jsxs("div",{className:`${styles$l_askRadioItem}${checked?" "+styles$l_askRadioItemSelected:""}`,onClick:()=>{this.setState(prev=>{const prevSet=prev.multiSelections[qi]||new Set,next=new Set(prevSet);return next.has(opt.label)?next.delete(opt.label):next.add(opt.label),{multiSelections:{...prev.multiSelections,[qi]:next},otherActive:{...prev.otherActive,[qi]:!1}}})},children:[jsxRuntimeExports.jsx("span",{className:styles$l_askRadioDot,children:checked?"☑":"☐"}),opt.label,opt.description&&jsxRuntimeExports.jsxs("span",{className:styles$l_optionDesc,children:["— ",opt.description]})]},oi)}),!(q.options||[]).some(o2=>/^other$/i.test(o2.label))&&jsxRuntimeExports.jsxs("div",{className:`${styles$l_askRadioItem}${otherActive[qi]?" "+styles$l_askRadioItemSelected:""}`,onClick:()=>{this.setState(prev=>({otherActive:{...prev.otherActive,[qi]:!0},multiSelections:{...prev.multiSelections,[qi]:new Set}}))},children:[jsxRuntimeExports.jsx("span",{className:styles$l_askRadioDot,children:otherActive[qi]?"☑":"☐"}),t("ui.askOther")]})]}):jsxRuntimeExports.jsxs("div",{className:styles$l_askRadioGroup,children:[(q.options||[]).map((opt,oi)=>{const isOtherOpt=/^other$/i.test(opt.label),isSelected=isOtherOpt?otherActive[qi]:!otherActive[qi]&&selectedLabel===opt.label;return jsxRuntimeExports.jsxs("div",{className:`${styles$l_askRadioItem}${isSelected?" "+styles$l_askRadioItemSelected:""}`,onClick:()=>{isOtherOpt?this.setState(prev=>({otherActive:{...prev.otherActive,[qi]:!0},selections:{...prev.selections,[qi]:void 0}})):this.setState(prev=>({selections:{...prev.selections,[qi]:opt.label},otherActive:{...prev.otherActive,[qi]:!1}}))},children:[jsxRuntimeExports.jsx("span",{className:styles$l_askRadioDot,children:isSelected?"◉":"○"}),opt.label,opt.description&&jsxRuntimeExports.jsxs("span",{className:styles$l_optionDesc,children:["— ",opt.description]})]},oi)}),!(q.options||[]).some(o2=>/^other$/i.test(o2.label))&&jsxRuntimeExports.jsxs("div",{className:`${styles$l_askRadioItem}${otherActive[qi]?" "+styles$l_askRadioItemSelected:""}`,onClick:()=>{this.setState(prev=>({otherActive:{...prev.otherActive,[qi]:!0},selections:{...prev.selections,[qi]:void 0}}))},children:[jsxRuntimeExports.jsx("span",{className:styles$l_askRadioDot,children:otherActive[qi]?"◉":"○"}),t("ui.askOther")]})]}),otherActive[qi]&&jsxRuntimeExports.jsx("div",{className:styles$l_askOtherInput,children:jsxRuntimeExports.jsx(Input,{size:"small",placeholder:t("ui.askOtherPlaceholder"),value:otherText[qi]||"",onChange:e=>this.setState(prev=>({otherText:{...prev.otherText,[qi]:e.target.value}})),onPressEnter:()=>{allValid&&!submitting&&handleSubmit()},autoFocus:!0})})]});return jsxRuntimeExports.jsx("div",{className:qi<questions.length-1?styles$l_questionSpacing:void 0,children:hasPreview?jsxRuntimeExports.jsxs("div",{className:styles$l_askMarkdownLayout,children:[optionsContent,jsxRuntimeExports.jsx("div",{className:styles$l_askMarkdownPreview,children:focusedPreview?jsxRuntimeExports.jsx("pre",{children:focusedPreview}):jsxRuntimeExports.jsx("span",{className:styles$l_previewPlaceholder,children:"—"})})]}):optionsContent},qi)}),jsxRuntimeExports.jsx("div",{className:styles$l_askSubmitRow,children:jsxRuntimeExports.jsx("button",{className:styles$l_askSubmitBtn,disabled:!allValid||submitting,onClick:handleSubmit,children:t(submitting?"ui.askSubmitting":"ui.askSubmit")})})]})}}function isPlanApprovalPrompt(prompt){if(!prompt||!prompt.question)return!1;const q=prompt.question.toLowerCase();return/plan/i.test(q)&&(/approv/i.test(q)||/proceed/i.test(q)||/accept/i.test(q))}function isDangerousOperationPrompt(prompt){if(!prompt||!prompt.question)return!1;const q=prompt.question;if(isPlanApprovalPrompt(prompt))return!1;if(/do you want to (make this edit|write|proceed|create|delete)|allow\b.*\bto\b|want to allow|wants to (execute|run|read|write|access|create|delete|modify|use)|may .*(read|write|execute|run|access|create|delete|modify)|grant .*(access|permission)|permit/i.test(q))return!0;if(prompt.options&&prompt.options.length>=2){const texts=prompt.options.map(o2=>(o2.text||"").toLowerCase()),hasAllow=texts.some(t2=>/^allow|^yes/i.test(t2)),hasDeny=texts.some(t2=>/^no$|^no[^a-z]|^deny|^reject/i.test(t2));if(hasAllow&&hasDeny)return!0}return!1}class Diff{diff(oldStr,newStr,options={}){let callback;"function"==typeof options?(callback=options,options={}):"callback"in options&&(callback=options.callback);const oldString=this.castInput(oldStr,options),newString=this.castInput(newStr,options),oldTokens=this.removeEmpty(this.tokenize(oldString,options)),newTokens=this.removeEmpty(this.tokenize(newString,options));return this.diffWithOptionsObj(oldTokens,newTokens,options,callback)}diffWithOptionsObj(oldTokens,newTokens,options,callback){var _a;const done=value=>(value=this.postProcess(value,options),callback?void setTimeout(function(){callback(value)},0):value),newLen=newTokens.length,oldLen=oldTokens.length;let editLength=1,maxEditLength=newLen+oldLen;null!=options.maxEditLength&&(maxEditLength=Math.min(maxEditLength,options.maxEditLength));const maxExecutionTime=null!==(_a=options.timeout)&&void 0!==_a?_a:1/0,abortAfterTimestamp=Date.now()+maxExecutionTime,bestPath=[{oldPos:-1,lastComponent:void 0}];let newPos=this.extractCommon(bestPath[0],newTokens,oldTokens,0,options);if(bestPath[0].oldPos+1>=oldLen&&newPos+1>=newLen)return done(this.buildValues(bestPath[0].lastComponent,newTokens,oldTokens));let minDiagonalToConsider=-1/0,maxDiagonalToConsider=1/0;const execEditLength=()=>{for(let diagonalPath=Math.max(minDiagonalToConsider,-editLength);diagonalPath<=Math.min(maxDiagonalToConsider,editLength);diagonalPath+=2){let basePath;const removePath=bestPath[diagonalPath-1],addPath=bestPath[diagonalPath+1];removePath&&(bestPath[diagonalPath-1]=void 0);let canAdd=!1;if(addPath){const addPathNewPos=addPath.oldPos-diagonalPath;canAdd=addPath&&0<=addPathNewPos&&addPathNewPos<newLen}const canRemove=removePath&&removePath.oldPos+1<oldLen;if(canAdd||canRemove){if(basePath=!canRemove||canAdd&&removePath.oldPos<addPath.oldPos?this.addToPath(addPath,!0,!1,0,options):this.addToPath(removePath,!1,!0,1,options),newPos=this.extractCommon(basePath,newTokens,oldTokens,diagonalPath,options),basePath.oldPos+1>=oldLen&&newPos+1>=newLen)return done(this.buildValues(basePath.lastComponent,newTokens,oldTokens))||!0;bestPath[diagonalPath]=basePath,basePath.oldPos+1>=oldLen&&(maxDiagonalToConsider=Math.min(maxDiagonalToConsider,diagonalPath-1)),newPos+1>=newLen&&(minDiagonalToConsider=Math.max(minDiagonalToConsider,diagonalPath+1))}else bestPath[diagonalPath]=void 0}editLength++};if(callback)!function exec(){setTimeout(function(){if(editLength>maxEditLength||Date.now()>abortAfterTimestamp)return callback(void 0);execEditLength()||exec()},0)}();else for(;editLength<=maxEditLength&&Date.now()<=abortAfterTimestamp;){const ret=execEditLength();if(ret)return ret}}addToPath(path,added,removed,oldPosInc,options){const last=path.lastComponent;return last&&!options.oneChangePerToken&&last.added===added&&last.removed===removed?{oldPos:path.oldPos+oldPosInc,lastComponent:{count:last.count+1,added:added,removed:removed,previousComponent:last.previousComponent}}:{oldPos:path.oldPos+oldPosInc,lastComponent:{count:1,added:added,removed:removed,previousComponent:last}}}extractCommon(basePath,newTokens,oldTokens,diagonalPath,options){const newLen=newTokens.length,oldLen=oldTokens.length;let oldPos=basePath.oldPos,newPos=oldPos-diagonalPath,commonCount=0;for(;newPos+1<newLen&&oldPos+1<oldLen&&this.equals(oldTokens[oldPos+1],newTokens[newPos+1],options);)newPos++,oldPos++,commonCount++,options.oneChangePerToken&&(basePath.lastComponent={count:1,previousComponent:basePath.lastComponent,added:!1,removed:!1});return commonCount&&!options.oneChangePerToken&&(basePath.lastComponent={count:commonCount,previousComponent:basePath.lastComponent,added:!1,removed:!1}),basePath.oldPos=oldPos,newPos}equals(left,right,options){return options.comparator?options.comparator(left,right):left===right||!!options.ignoreCase&&left.toLowerCase()===right.toLowerCase()}removeEmpty(array){const ret=[];for(let i=0;i<array.length;i++)array[i]&&ret.push(array[i]);return ret}castInput(value,options){return value}tokenize(value,options){return Array.from(value)}join(chars){return chars.join("")}postProcess(changeObjects,options){return changeObjects}get useLongestToken(){return!1}buildValues(lastComponent,newTokens,oldTokens){const components=[];let nextComponent;for(;lastComponent;)components.push(lastComponent),nextComponent=lastComponent.previousComponent,delete lastComponent.previousComponent,lastComponent=nextComponent;components.reverse();const componentLen=components.length;let componentPos=0,newPos=0,oldPos=0;for(;componentPos<componentLen;componentPos++){const component=components[componentPos];if(component.removed)component.value=this.join(oldTokens.slice(oldPos,oldPos+component.count)),oldPos+=component.count;else{if(!component.added&&this.useLongestToken){let value=newTokens.slice(newPos,newPos+component.count);value=value.map(function(value2,i){const oldValue=oldTokens[oldPos+i];return oldValue.length>value2.length?oldValue:value2}),component.value=this.join(value)}else component.value=this.join(newTokens.slice(newPos,newPos+component.count));newPos+=component.count,component.added||(oldPos+=component.count)}}return components}}const lineDiff=new class extends Diff{constructor(){super(...arguments),this.tokenize=tokenize}equals(left,right,options){return options.ignoreWhitespace?(options.newlineIsToken&&left.includes("\n")||(left=left.trim()),options.newlineIsToken&&right.includes("\n")||(right=right.trim())):options.ignoreNewlineAtEof&&!options.newlineIsToken&&(left.endsWith("\n")&&(left=left.slice(0,-1)),right.endsWith("\n")&&(right=right.slice(0,-1))),super.equals(left,right,options)}};function diffLines(oldStr,newStr,options){return lineDiff.diff(oldStr,newStr,options)}function tokenize(value,options){options.stripTrailingCr&&(value=value.replace(/\r\n/g,"\n"));const retLines=[],linesAndNewlines=value.split(/(\n|\r\n)/);linesAndNewlines[linesAndNewlines.length-1]||linesAndNewlines.pop();for(let i=0;i<linesAndNewlines.length;i++){const line=linesAndNewlines[i];i%2&&!options.newlineIsToken?retLines[retLines.length-1]+=line:retLines.push(line)}return retLines}const styles$k_wrapper="_wrapper_vsc0z_1",styles$k_header="_header_vsc0z_13",styles$k_headerRight="_headerRight_vsc0z_20",styles$k_filePath="_filePath_vsc0z_28",styles$k_filePathClickable="_filePathClickable_vsc0z_34",styles$k_toggle="_toggle_vsc0z_46",styles$k_diffSummary="_diffSummary_vsc0z_55",styles$k_diffBody="_diffBody_vsc0z_62",styles$k_gutter="_gutter_vsc0z_72",styles$k_gutterRow="_gutterRow_vsc0z_77",styles$k_lineNumOld="_lineNumOld_vsc0z_82",styles$k_lineNumNew="_lineNumNew_vsc0z_83",styles$k_prefix="_prefix_vsc0z_90",styles$k_codeWrap="_codeWrap_vsc0z_98",styles$k_codeInner="_codeInner_vsc0z_105",styles$k_codeLine="_codeLine_vsc0z_110",styles$k_rowContext="_rowContext_vsc0z_118",styles$k_rowDel="_rowDel_vsc0z_123",styles$k_rowAdd="_rowAdd_vsc0z_131",{Text:Text$3}=Typography;function DiffView({file_path:file_path,old_string:old_string,new_string:new_string,startLine:startLine=1,onOpenFile:onOpenFile}){const[collapsed,setCollapsed]=reactExports.useState(!1),diffLines2=reactExports.useMemo(()=>function(oldStr,newStr,startLine){const changes=diffLines(oldStr,newStr),lines=[];let oldLineNum2=startLine,newLineNum2=startLine;for(const part of changes){const partLines=part.value.replace(/\n$/,"").split("\n");if(""!==part.value)for(const text of partLines)part.added?lines.push({type:"add",oldNum:null,newNum:newLineNum2++,text:text}):part.removed?lines.push({type:"del",oldNum:oldLineNum2++,newNum:null,text:text}):lines.push({type:"context",oldNum:oldLineNum2++,newNum:newLineNum2++,text:text})}return lines}(old_string,new_string,startLine),[old_string,new_string,startLine]),added=diffLines2.filter(l=>"add"===l.type).length,removed=diffLines2.filter(l=>"del"===l.type).length,maxLineNum=reactExports.useMemo(()=>{let max=1;for(const dl of diffLines2)null!=dl.oldNum&&dl.oldNum>max&&(max=dl.oldNum),null!=dl.newNum&&dl.newNum>max&&(max=dl.newNum);return max},[diffLines2]),lineNumWidth=8*String(maxLineNum).length+10,rowCls=type=>"del"===type?styles$k_rowDel:"add"===type?styles$k_rowAdd:styles$k_rowContext;return jsxRuntimeExports.jsxs("div",{className:styles$k_wrapper,children:[jsxRuntimeExports.jsxs("div",{className:styles$k_header,children:[jsxRuntimeExports.jsxs(Text$3,{className:onOpenFile?styles$k_filePathClickable:styles$k_filePath,children:["Edit: ",jsxRuntimeExports.jsx("span",{onClick:onOpenFile?e=>{e.stopPropagation(),onOpenFile(file_path)}:void 0,children:file_path})]}),jsxRuntimeExports.jsxs("span",{className:styles$k_headerRight,children:[jsxRuntimeExports.jsx(Text$3,{className:styles$k_diffSummary,children:t("ui.diffSummary",{added:added,removed:removed})}),jsxRuntimeExports.jsx(Text$3,{className:styles$k_toggle,onClick:()=>setCollapsed(c=>!c),children:t(collapsed?"ui.expand":"ui.collapse")})]})]}),!collapsed&&jsxRuntimeExports.jsxs("div",{className:styles$k_diffBody,children:[jsxRuntimeExports.jsx("div",{className:styles$k_gutter,style:{"--line-num-w":`${lineNumWidth}px`},children:diffLines2.map((dl,i)=>{const prefix2="del"===dl.type?"-":"add"===dl.type?"+":" ";return jsxRuntimeExports.jsxs("div",{className:`${styles$k_gutterRow} ${rowCls(dl.type)}`,children:[jsxRuntimeExports.jsx("span",{className:styles$k_lineNumOld,style:{width:lineNumWidth},children:dl.oldNum??""}),jsxRuntimeExports.jsx("span",{className:styles$k_lineNumNew,style:{width:lineNumWidth},children:dl.newNum??""}),jsxRuntimeExports.jsx("span",{className:styles$k_prefix,children:prefix2})]},i)})}),jsxRuntimeExports.jsx("div",{className:styles$k_codeWrap,children:jsxRuntimeExports.jsx("div",{className:styles$k_codeInner,children:diffLines2.map((dl,i)=>jsxRuntimeExports.jsx("div",{className:`${styles$k_codeLine} ${rowCls(dl.type)}`,children:dl.text},i))})})]})]})}const styles$j_plainResult="_plainResult_hq7oa_1",styles$j_plainTitle="_plainTitle_hq7oa_14",styles$j_plainPre="_plainPre_hq7oa_18",styles$j_codeResult="_codeResult_hq7oa_27",styles$j_codeHeader="_codeHeader_hq7oa_39",styles$j_codeTitle="_codeTitle_hq7oa_51",styles$j_codeToggle="_codeToggle_hq7oa_56",styles$j_codePre="_codePre_hq7oa_63",styles$j_markdownBody="_markdownBody_hq7oa_73",{Text:Text$2}=Typography,EXT_LANG={js:"javascript",jsx:"javascript",ts:"typescript",tsx:"typescript",py:"python",rb:"ruby",go:"go",rs:"rust",java:"java",c:"c",cpp:"cpp",h:"c",hpp:"cpp",css:"css",scss:"css",less:"css",html:"html",htm:"html",xml:"xml",svg:"xml",json:"json",yaml:"yaml",yml:"yaml",toml:"toml",sh:"shell",bash:"shell",zsh:"shell",md:"markdown",sql:"sql"},CODE_TOOLS=["Read","Grep","Glob","Bash","Write","Edit"];const RULES={javascript:[{pattern:/(\/\/.*$)/gm,cls:"hl-comment"},{pattern:/(\/\*[\s\S]*?\*\/)/g,cls:"hl-comment"},{pattern:/('(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*`)/g,cls:"hl-string"},{pattern:/\b(const|let|var|function|return|if|else|for|while|class|import|export|from|default|new|this|async|await|try|catch|throw|switch|case|break|continue|typeof|instanceof|in|of|null|undefined|true|false)\b/g,cls:"hl-keyword"},{pattern:/\b(\d+\.?\d*)\b/g,cls:"hl-number"}],typescript:null,python:[{pattern:/(#.*$)/gm,cls:"hl-comment"},{pattern:/('''[\s\S]*?'''|"""[\s\S]*?"""|'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*")/g,cls:"hl-string"},{pattern:/\b(def|class|return|if|elif|else|for|while|import|from|as|try|except|finally|raise|with|yield|lambda|pass|break|continue|and|or|not|in|is|None|True|False|self|async|await)\b/g,cls:"hl-keyword"},{pattern:/\b(\d+\.?\d*)\b/g,cls:"hl-number"}],go:[{pattern:/(\/\/.*$)/gm,cls:"hl-comment"},{pattern:/(\/\*[\s\S]*?\*\/)/g,cls:"hl-comment"},{pattern:/('(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`[^`]*`)/g,cls:"hl-string"},{pattern:/\b(func|return|if|else|for|range|switch|case|default|break|continue|go|defer|select|chan|map|struct|interface|package|import|var|const|type|nil|true|false|make|new|append|len|cap)\b/g,cls:"hl-keyword"},{pattern:/\b(\d+\.?\d*)\b/g,cls:"hl-number"}],rust:[{pattern:/(\/\/.*$)/gm,cls:"hl-comment"},{pattern:/("(?:[^"\\]|\\.)*")/g,cls:"hl-string"},{pattern:/\b(fn|let|mut|return|if|else|for|while|loop|match|struct|enum|impl|trait|pub|use|mod|crate|self|super|where|async|await|move|ref|true|false|Some|None|Ok|Err)\b/g,cls:"hl-keyword"},{pattern:/\b(\d+\.?\d*)\b/g,cls:"hl-number"}],java:[{pattern:/(\/\/.*$)/gm,cls:"hl-comment"},{pattern:/(\/\*[\s\S]*?\*\/)/g,cls:"hl-comment"},{pattern:/("(?:[^"\\]|\\.)*")/g,cls:"hl-string"},{pattern:/\b(public|private|protected|class|interface|extends|implements|return|if|else|for|while|switch|case|break|continue|new|this|super|static|final|void|int|long|double|float|boolean|char|String|import|package|try|catch|throw|throws|null|true|false)\b/g,cls:"hl-keyword"},{pattern:/\b(\d+\.?\d*[fFdDlL]?)\b/g,cls:"hl-number"}],ruby:[{pattern:/(#.*$)/gm,cls:"hl-comment"},{pattern:/('(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*")/g,cls:"hl-string"},{pattern:/\b(def|end|class|module|return|if|elsif|else|unless|for|while|do|begin|rescue|ensure|raise|yield|block_given\?|nil|true|false|self|require|include|attr_accessor|attr_reader)\b/g,cls:"hl-keyword"},{pattern:/\b(\d+\.?\d*)\b/g,cls:"hl-number"}],css:[{pattern:/(\/\*[\s\S]*?\*\/)/g,cls:"hl-comment"},{pattern:/("(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')/g,cls:"hl-string"},{pattern:/([.#][\w-]+)/g,cls:"hl-keyword"},{pattern:/\b(\d+\.?\d*(px|em|rem|%|vh|vw|s|ms)?)\b/g,cls:"hl-number"}],json:[{pattern:/("(?:[^"\\]|\\.)*")\s*:/g,cls:"hl-keyword"},{pattern:/:\s*("(?:[^"\\]|\\.)*")/g,cls:"hl-string"},{pattern:/\b(true|false|null)\b/g,cls:"hl-keyword"},{pattern:/\b(-?\d+\.?\d*([eE][+-]?\d+)?)\b/g,cls:"hl-number"}],shell:[{pattern:/(#.*$)/gm,cls:"hl-comment"},{pattern:/('(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*")/g,cls:"hl-string"},{pattern:/\b(if|then|else|elif|fi|for|while|do|done|case|esac|function|return|exit|export|source|alias|cd|ls|grep|find|echo|cat|mkdir|rm|cp|mv|chmod|sudo|apt|npm|pip|git)\b/g,cls:"hl-keyword"}],sql:[{pattern:/(--.*$)/gm,cls:"hl-comment"},{pattern:/('(?:[^'\\]|\\.)*')/g,cls:"hl-string"},{pattern:/\b(SELECT|FROM|WHERE|INSERT|UPDATE|DELETE|CREATE|DROP|ALTER|TABLE|INDEX|JOIN|LEFT|RIGHT|INNER|OUTER|ON|AND|OR|NOT|IN|IS|NULL|AS|ORDER|BY|GROUP|HAVING|LIMIT|OFFSET|UNION|SET|VALUES|INTO|DISTINCT|COUNT|SUM|AVG|MAX|MIN|LIKE|BETWEEN|EXISTS|CASE|WHEN|THEN|ELSE|END)\b/gi,cls:"hl-keyword"},{pattern:/\b(\d+\.?\d*)\b/g,cls:"hl-number"}],html:[{pattern:/(<!--[\s\S]*?-->)/g,cls:"hl-comment"},{pattern:/("(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')/g,cls:"hl-string"},{pattern:/(<\/?[\w-]+|\/?>)/g,cls:"hl-keyword"}],xml:null,yaml:[{pattern:/(#.*$)/gm,cls:"hl-comment"},{pattern:/("(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')/g,cls:"hl-string"},{pattern:/^([\w.-]+)\s*:/gm,cls:"hl-keyword"},{pattern:/\b(true|false|null|yes|no)\b/gi,cls:"hl-keyword"},{pattern:/\b(\d+\.?\d*)\b/g,cls:"hl-number"}],markdown:[{pattern:/^(#{1,6}\s.*$)/gm,cls:"hl-keyword"},{pattern:/(`[^`]+`)/g,cls:"hl-string"},{pattern:/(\*\*[^*]+\*\*|__[^_]+__)/g,cls:"hl-keyword"},{pattern:/(\[[^\]]+\]\([^)]+\))/g,cls:"hl-string"}],toml:[{pattern:/(#.*$)/gm,cls:"hl-comment"},{pattern:/("(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')/g,cls:"hl-string"},{pattern:/^([\w.-]+)\s*=/gm,cls:"hl-keyword"},{pattern:/(\[[\w.-]+\])/g,cls:"hl-keyword"},{pattern:/\b(true|false)\b/g,cls:"hl-keyword"},{pattern:/\b(\d+\.?\d*)\b/g,cls:"hl-number"}]},FALLBACK_RULES=[{pattern:/(\/\/.*$|#.*$)/gm,cls:"hl-comment"},{pattern:/('(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*`)/g,cls:"hl-string"},{pattern:/\b(\d+\.?\d*)\b/g,cls:"hl-number"}],SHELL_OUTPUT_RULES=[{pattern:/^([\w/.~-]+:\d+[:-])/gm,cls:"hl-keyword"},{pattern:/('(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*")/g,cls:"hl-string"},{pattern:/\b(\d+\.?\d*)\b/g,cls:"hl-number"}],FILE_LIST_RULES=[{pattern:/^(.*\.(jsx?|tsx?|mjs|cjs))$/gm,cls:"hl-string"},{pattern:/^(.*\.(py|rb|go|rs|java|c|cpp|h))$/gm,cls:"hl-keyword"},{pattern:/^(.*\.(json|ya?ml|toml|xml|html?|css|scss|less|md))$/gm,cls:"hl-number"},{pattern:/^(.*\.(log|txt|csv|jsonl))$/gm,cls:"hl-comment"}],_hlCache=new Map;function ToolResultView({toolName:toolName2,toolInput:toolInput,resultText:resultText,defaultCollapsed:defaultCollapsed}){const[collapsed,setCollapsed]=reactExports.useState(defaultCollapsed??!1);reactExports.useEffect(()=>{setCollapsed(defaultCollapsed??!1)},[defaultCollapsed]);const isCodeTool=CODE_TOOLS.includes(toolName2),lang=isCodeTool?function(toolName2,toolInput,resultText){if(!toolInput)return null;const filePath2=toolInput.file_path||"";if(filePath2){const ext=filePath2.split(".").pop().toLowerCase();if(EXT_LANG[ext])return EXT_LANG[ext]}if("Bash"===toolName2)return"shell-output";if("Glob"===toolName2)return"file-list";if("Grep"===toolName2){const glob=toolInput.glob||"";if(glob){const parts=glob.replace(/[{}*]/g,",").split(",").filter(Boolean);for(const p of parts){const ext=p.replace(/^\./,"").toLowerCase();if(EXT_LANG[ext])return EXT_LANG[ext]}}if("files_with_matches"===toolInput.output_mode||!toolInput.output_mode)return"file-list";if("content"===toolInput.output_mode&&resultText){const match=resultText.match(/^[\w/.~-]+\.([\w]+):\d+/m);if(match&&EXT_LANG[match[1].toLowerCase()])return EXT_LANG[match[1].toLowerCase()]}return"shell-output"}return resultText?function(text){const sample=text.substring(0,2e3);return/^\s*[\[{]/.test(sample)&&/[}\]]\s*$/.test(sample.trimEnd())?"json":/^\s*<!DOCTYPE|^\s*<html|^\s*<\?xml/i.test(sample)?"html":/^#!.*python/m.test(sample)||/\bdef\s+\w+\s*\(.*\)\s*:/m.test(sample)||/\bclass\s+\w+.*:/m.test(sample)||/^\s*(from\s+\w+\s+import|import\s+\w+)/m.test(sample)&&/:$/.test(sample)?"python":/\bfn\s+\w+\s*\(/.test(sample)&&/\blet\s+(mut\s+)?\w+/.test(sample)?"rust":/^package\s+\w+/m.test(sample)&&/\bfunc\s+/.test(sample)?"go":/\bpublic\s+(class|interface|static)\b/.test(sample)?"java":/\bdef\s+\w+/.test(sample)&&/\bend\b/.test(sample)&&!/;/.test(sample)?"ruby":/^#!.*\b(bash|sh|zsh)\b/m.test(sample)?"shell":/\b(const|let|var)\s+\w+\s*=/.test(sample)&&(/=>/.test(sample)||/\brequire\s*\(/.test(sample))||/^\s*import\s+.*\s+from\s+['"]/.test(sample)||/^\s*export\s+(default\s+)?(function|class|const)\b/m.test(sample)?"javascript":/[.#][\w-]+\s*\{[\s\S]*?:\s*[\w#]/.test(sample)?"css":/^[\w-]+\s*:(\s+\S|$)/m.test(sample)&&!/[{;]/.test(sample)?"yaml":/\b(SELECT|INSERT|UPDATE|DELETE|CREATE\s+TABLE)\b/i.test(sample)?"sql":null}(resultText):null}(toolName2,toolInput,resultText):null,displayText=resultText.length>5e3?resultText.substring(0,5e3)+"\n... (truncated)":resultText;let title2=toolName2?t("ui.toolReturnNamed",{name:toolName2}):"Result";if(toolInput){const filePath2=toolInput.file_path||toolInput.path||"";if(filePath2){const parts=filePath2.split("/");title2=`${toolName2}: ${parts[parts.length-1]}`}}if(!isCodeTool)return"Task"===toolName2?jsxRuntimeExports.jsxs("div",{className:styles$j_plainResult,children:[jsxRuntimeExports.jsxs("div",{className:styles$j_codeHeader,children:[jsxRuntimeExports.jsx(Text$2,{type:"secondary",className:styles$j_plainTitle,children:title2}),jsxRuntimeExports.jsx(Text$2,{className:styles$j_codeToggle,onClick:()=>setCollapsed(c=>!c),children:t(collapsed?"ui.expand":"ui.collapse")})]}),!collapsed&&jsxRuntimeExports.jsx("div",{className:`chat-md ${styles$j_markdownBody}`,dangerouslySetInnerHTML:{__html:renderMarkdown(displayText)}})]}):jsxRuntimeExports.jsxs("div",{className:styles$j_plainResult,children:[jsxRuntimeExports.jsxs("div",{className:styles$j_codeHeader,children:[jsxRuntimeExports.jsx(Text$2,{type:"secondary",className:styles$j_plainTitle,children:title2}),jsxRuntimeExports.jsx(Text$2,{className:styles$j_codeToggle,onClick:()=>setCollapsed(c=>!c),children:t(collapsed?"ui.expand":"ui.collapse")})]}),!collapsed&&jsxRuntimeExports.jsx("pre",{className:styles$j_plainPre,children:displayText})]});const highlighted=function(text,lang){const cacheKey=`${lang}\0${text}`,hit=_hlCache.get(cacheKey);if(void 0!==hit)return hit;let rules,resolvedLang=lang;"typescript"===resolvedLang&&(resolvedLang="javascript"),"xml"===resolvedLang&&(resolvedLang="html"),"c"!==resolvedLang&&"cpp"!==resolvedLang||(resolvedLang="javascript"),rules="shell-output"===resolvedLang?SHELL_OUTPUT_RULES:"file-list"===resolvedLang?FILE_LIST_RULES:RULES[resolvedLang]||FALLBACK_RULES;const lineNums=[],escaped=escapeHtml(text.replace(/^(\s*\d+→)/gm,match=>{const idx=lineNums.length;return lineNums.push(match),`L${idx}`})),placeholders=[];let result=escaped;for(const rule of rules)rule.pattern.lastIndex=0,result=result.replace(rule.pattern,match=>{const idx=placeholders.length;return placeholders.push(`<span class="${rule.cls}">${match}</span>`),`P${idx}`});return result=result.replace(/\x02P(\d+)\x02/g,(_,idx)=>placeholders[parseInt(idx)]),result=result.replace(/\x01L(\d+)\x01/g,(_,idx)=>`<span class="hl-linenum">${escapeHtml(lineNums[parseInt(idx)])}</span>`),_hlCache.size>=512&&_hlCache.delete(_hlCache.keys().next().value),_hlCache.set(cacheKey,result),result}(displayText,lang||"fallback");return jsxRuntimeExports.jsxs("div",{className:`tool-result-code ${styles$j_codeResult}`,children:[jsxRuntimeExports.jsxs("div",{className:styles$j_codeHeader,children:[jsxRuntimeExports.jsxs(Text$2,{className:styles$j_codeTitle,children:[title2,lang?` (${lang})`:""]}),jsxRuntimeExports.jsx(Text$2,{className:styles$j_codeToggle,onClick:()=>setCollapsed(c=>!c),children:t(collapsed?"ui.expand":"ui.collapse")})]}),!collapsed&&jsxRuntimeExports.jsx("pre",{className:`code-highlight ${styles$j_codePre}`,dangerouslySetInnerHTML:{__html:highlighted}})]})}const styles$i={overlay:"_overlay_mhdoc_1",dragging:"_dragging_mhdoc_21",closing:"_closing_mhdoc_22",closeBtn:"_closeBtn_mhdoc_34",imageArea:"_imageArea_mhdoc_54",image:"_image_mhdoc_54",spinner:"_spinner_mhdoc_81",zoomLabel:"_zoomLabel_mhdoc_94",errorMsg:"_errorMsg_mhdoc_108"};function ImageLightbox({src:src,alt:alt,onClose:onClose,zIndex:zIndex}){const[zoom,setZoom]=reactExports.useState(1),[offset,setOffset]=reactExports.useState({x:0,y:0}),[dragging2,setDragging]=reactExports.useState(!1),[loaded,setLoaded]=reactExports.useState(!1),[error2,setError]=reactExports.useState(!1),[closing2,setClosing]=reactExports.useState(!1),dragRef=reactExports.useRef(null),imgRef=reactExports.useRef(null),touchRef=reactExports.useRef(null),overlayRef=reactExports.useRef(null),stateRef=reactExports.useRef({zoom:1,offset:{x:0,y:0}}),fitZoomRef=reactExports.useRef(1),mountedRef=reactExports.useRef(!0),clampZoom=z=>Math.min(10,Math.max(.1,z));reactExports.useEffect(()=>{stateRef.current.zoom=zoom},[zoom]),reactExports.useEffect(()=>{stateRef.current.offset=offset},[offset]),reactExports.useEffect(()=>()=>{mountedRef.current=!1},[]);const doClose=reactExports.useCallback(()=>{setClosing(!0)},[]);reactExports.useEffect(()=>{if(!closing2)return;const id=setTimeout(()=>{mountedRef.current&&onClose()},150);return()=>clearTimeout(id)},[closing2,onClose]),reactExports.useEffect(()=>{const onKey=e=>{"Escape"===e.key&&doClose()};window.addEventListener("keydown",onKey);const prevOverflow=document.body.style.overflow,prevScrollbarGutter=document.body.style.scrollbarGutter;return document.body.style.overflow="hidden",document.body.style.scrollbarGutter="stable",()=>{window.removeEventListener("keydown",onKey),document.body.style.overflow=prevOverflow,document.body.style.scrollbarGutter=prevScrollbarGutter}},[doClose]);const handleImageLoad=reactExports.useCallback(e=>{setLoaded(!0);const img=e.target,vw=.9*window.innerWidth,vh=.9*window.innerHeight,renderedW=img.clientWidth,renderedH=img.clientHeight,fit=Math.min(vw/renderedW,vh/renderedH);fitZoomRef.current=fit,fit>1.05&&setZoom(fit)},[]),handleWheel=reactExports.useCallback(e=>{e.preventDefault(),e.stopPropagation(),setZoom(prev=>{const next=clampZoom(prev*(e.deltaY<0?1.06:1/1.06)),ratio=next/prev;return setOffset(o2=>({x:o2.x*ratio,y:o2.y*ratio})),next})},[]);reactExports.useEffect(()=>{const el=overlayRef.current;if(el)return el.addEventListener("wheel",handleWheel,{passive:!1}),()=>el.removeEventListener("wheel",handleWheel)},[handleWheel]);const handleMouseDown=reactExports.useCallback(e=>{if(0!==e.button)return;e.preventDefault();const{offset:cur}=stateRef.current;dragRef.current={startX:e.clientX,startY:e.clientY,ox:cur.x,oy:cur.y},setDragging(!0);const onMove=ev=>{dragRef.current&&setOffset({x:dragRef.current.ox+ev.clientX-dragRef.current.startX,y:dragRef.current.oy+ev.clientY-dragRef.current.startY})},onUp=()=>{dragRef.current=null,mountedRef.current&&setDragging(!1),window.removeEventListener("mousemove",onMove),window.removeEventListener("mouseup",onUp)};window.addEventListener("mousemove",onMove),window.addEventListener("mouseup",onUp)},[]),handleTouchStart=reactExports.useCallback(e=>{const{zoom:z,offset:o2}=stateRef.current;if(2===e.touches.length){const dx=e.touches[0].clientX-e.touches[1].clientX,dy=e.touches[0].clientY-e.touches[1].clientY;touchRef.current={dist:Math.hypot(dx,dy),zoom:z,ox:o2.x,oy:o2.y,isPinch:!0}}else 1===e.touches.length&&(touchRef.current={startX:e.touches[0].clientX,startY:e.touches[0].clientY,ox:o2.x,oy:o2.y,isPinch:!1,moved:!1})},[]),handleTouchMove=reactExports.useCallback(e=>{if(touchRef.current)if(e.preventDefault(),touchRef.current.isPinch&&2===e.touches.length){const dx=e.touches[0].clientX-e.touches[1].clientX,dy=e.touches[0].clientY-e.touches[1].clientY,scale=Math.hypot(dx,dy)/touchRef.current.dist;setZoom(clampZoom(touchRef.current.zoom*scale))}else if(1===e.touches.length){if(touchRef.current.isPinch){const{offset:o2}=stateRef.current;return void(touchRef.current={startX:e.touches[0].clientX,startY:e.touches[0].clientY,ox:o2.x,oy:o2.y,isPinch:!1,moved:!1})}const dx=e.touches[0].clientX-touchRef.current.startX,dy=e.touches[0].clientY-touchRef.current.startY;(Math.abs(dx)>5||Math.abs(dy)>5)&&(touchRef.current.moved=!0),setOffset({x:touchRef.current.ox+dx,y:touchRef.current.oy+dy})}},[]),handleTouchEnd=reactExports.useCallback(e=>{if(touchRef.current)if(e.touches.length>0)touchRef.current=null;else{if(!touchRef.current.isPinch&&!touchRef.current.moved&&1===e.changedTouches.length){const target=e.target;(target===overlayRef.current||target.classList.contains(styles$i.imageArea))&&doClose()}touchRef.current=null}},[doClose]),handleOverlayClick=reactExports.useCallback(e=>{(e.target===overlayRef.current||e.target.classList.contains(styles$i.imageArea))&&doClose()},[doClose]),handleDoubleClick=reactExports.useCallback(e=>{e.stopPropagation(),setZoom(prev=>{setOffset({x:0,y:0});const fitZ=fitZoomRef.current;return Math.abs(prev-fitZ)<.05?1:fitZ})},[]),closeLabel=t("ui.imageLightbox.close"),overlayClass=[styles$i.overlay,dragging2&&styles$i.dragging,closing2&&styles$i.closing].filter(Boolean).join(" "),content2=jsxRuntimeExports.jsxs("div",{className:overlayClass,ref:overlayRef,role:"dialog","aria-modal":"true","aria-label":alt||"Image preview",style:null!=zIndex?{zIndex:zIndex}:void 0,onClick:handleOverlayClick,onTouchStart:handleTouchStart,onTouchMove:handleTouchMove,onTouchEnd:handleTouchEnd,children:[jsxRuntimeExports.jsx("button",{className:styles$i.closeBtn,onClick:doClose,title:closeLabel,"aria-label":closeLabel,children:jsxRuntimeExports.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),jsxRuntimeExports.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}),jsxRuntimeExports.jsx("div",{className:styles$i.imageArea,children:error2?jsxRuntimeExports.jsx("div",{className:styles$i.errorMsg,children:"Failed to load image"}):jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[!loaded&&jsxRuntimeExports.jsx("div",{className:styles$i.spinner}),jsxRuntimeExports.jsx("img",{ref:imgRef,className:styles$i.image,src:src,alt:alt||"",draggable:!1,onLoad:handleImageLoad,onError:()=>setError(!0),onMouseDown:handleMouseDown,onDoubleClick:handleDoubleClick,style:{transform:`translate(${offset.x}px, ${offset.y}px) scale(${zoom})`,opacity:loaded?1:0}})]})}),1!==zoom&&jsxRuntimeExports.jsxs("div",{className:styles$i.zoomLabel,children:[Math.round(100*zoom),"%"]})]});return ao.createPortal(content2,document.body)}const defaultAvatarUrl="/assets/default-avatar-CT9tlZjd.svg",{Text:Text$1}=Typography;function ChatImage({src:src,alt:alt,fallbackText:fallbackText}){const[failed,setFailed]=React.useState(!1),[lightboxOpen,setLightboxOpen]=React.useState(!1);return failed?jsxRuntimeExports.jsx("span",{className:styles$l_chatImageFallback,children:fallbackText}):jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("img",{src:src,alt:alt,className:styles$l_chatImageImg,loading:"lazy",decoding:"async",onClick:()=>setLightboxOpen(!0),onError:()=>setFailed(!0)}),lightboxOpen&&jsxRuntimeExports.jsx(ImageLightbox,{src:src,alt:alt,onClose:()=>setLightboxOpen(!1)})]})}const ModelAvatar=React.memo(function({modelInfo:modelInfo,streaming:streaming}){const svgSource=streaming&&(null==modelInfo?void 0:modelInfo.svgAnimated)||(null==modelInfo?void 0:modelInfo.svg);return svgSource?jsxRuntimeExports.jsx("div",{className:styles$l_avatar,style:{background:modelInfo.color||"var(--bg-model-avatar)"},dangerouslySetInnerHTML:{__html:svgSource}}):jsxRuntimeExports.jsx("img",{src:"/assets/default-model-avatar-DlbUPjyv.svg",className:styles$l_avatarImg,alt:(null==modelInfo?void 0:modelInfo.name)||"Agent"})}),AssistantLabel=React.memo(function({name:name,extra:extra,timeStr:timeStr,requestIndex:requestIndex,onViewRequest:onViewRequest}){const viewBtn=null!=requestIndex&&onViewRequest?jsxRuntimeExports.jsx("span",{className:styles$l_viewRequestBtn,onClick:e=>{e.stopPropagation(),onViewRequest(requestIndex)},children:t("ui.viewRequest")}):null;return jsxRuntimeExports.jsxs("div",{className:styles$l_labelRow,children:[jsxRuntimeExports.jsxs(Text$1,{type:"secondary",className:styles$l_labelText,children:[name,extra||""]}),jsxRuntimeExports.jsxs("span",{className:styles$l_labelRight,children:[viewBtn,timeStr&&jsxRuntimeExports.jsx(Text$1,{className:styles$l_timeText,children:timeStr})]})]})});class ChatMessage extends React.Component{constructor(props){super(props),this.state={planFeedbackInput:!1,planFeedbackText:"",planFeedbackOptNumber:null,planApprovalSubmitting:!1}}shouldComponentUpdate(nextProps,nextState){var _a,_b;if(this.state!==nextState)return!0;const p=this.props,n=nextProps;return p.role!==n.role||p.content!==n.content||p.text!==n.text||p.timestamp!==n.timestamp||p.highlight!==n.highlight||p.collapseToolResults!==n.collapseToolResults||p.expandThinking!==n.expandThinking||p.showFullToolContent!==n.showFullToolContent||p.showTrailingCursor!==n.showTrailingCursor||p.showThinkingSummaries!==n.showThinkingSummaries||p.toolResultMap!==n.toolResultMap||p.readContentMap!==n.readContentMap||p.editSnapshotMap!==n.editSnapshotMap||p.askAnswerMap!==n.askAnswerMap||p.planApprovalMap!==n.planApprovalMap||p.latestPlanContent!==n.latestPlanContent||p.ptyPrompt!==n.ptyPrompt||p.cliMode!==n.cliMode||p.lastPendingAskId!==n.lastPendingAskId||p.lastPendingPlanId!==n.lastPendingPlanId||p.activePlanPrompt!==n.activePlanPrompt||p.activeDangerousPrompt!==n.activeDangerousPrompt||p.requestIndex!==n.requestIndex||p.label!==n.label||p.isTeammate!==n.isTeammate||p.userProfile!==n.userProfile||p.modelInfo!==n.modelInfo||p.resultText!==n.resultText||p.toolName!==n.toolName||p.onViewRequest!==n.onViewRequest||p.onOpenFile!==n.onOpenFile||p.onPlanApprovalClick!==n.onPlanApprovalClick||p.onPlanFeedbackSubmit!==n.onPlanFeedbackSubmit||p.onDangerousApprovalClick!==n.onDangerousApprovalClick||p.onAskQuestionSubmit!==n.onAskQuestionSubmit||(null==(_a=p.taskNotification)?void 0:_a.taskId)!==(null==(_b=n.taskNotification)?void 0:_b.taskId)}componentDidUpdate(prevProps){prevProps.lastPendingAskId!==this.props.lastPendingAskId&&this.setState({askSelections:{},askMultiSelections:{},askOtherActive:{},askOtherText:{},askSubmitting:!1}),prevProps.lastPendingPlanId!==this.props.lastPendingPlanId&&this.setState({planApprovalSubmitting:!1})}formatTime(ts){if(!ts)return null;try{const d=new Date(ts),pad=n=>String(n).padStart(2,"0");return`${pad(d.getMonth()+1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`}catch{return null}}renderViewRequestBtn(){const{requestIndex:requestIndex,onViewRequest:onViewRequest}=this.props;return null!=requestIndex&&onViewRequest?jsxRuntimeExports.jsx("span",{className:styles$l_viewRequestBtn,onClick:e=>{e.stopPropagation(),onViewRequest(requestIndex)},children:t("ui.viewRequest")}):null}renderLabel(name,extra){const{timestamp:timestamp}=this.props,timeStr=this.formatTime(timestamp);return jsxRuntimeExports.jsxs("div",{className:styles$l_labelRow,children:[jsxRuntimeExports.jsxs(Text$1,{type:"secondary",className:styles$l_labelText,children:[name,extra||""]}),jsxRuntimeExports.jsxs("span",{className:styles$l_labelRight,children:[this.renderViewRequestBtn(),timeStr&&jsxRuntimeExports.jsx(Text$1,{className:styles$l_timeText,children:timeStr})]})]})}renderModelAvatar(modelInfo){return(null==modelInfo?void 0:modelInfo.svg)?jsxRuntimeExports.jsx("div",{className:styles$l_avatar,style:{background:modelInfo.color||"var(--bg-model-avatar)"},dangerouslySetInnerHTML:{__html:modelInfo.svg}}):jsxRuntimeExports.jsx("img",{src:"/assets/default-model-avatar-DlbUPjyv.svg",className:styles$l_avatarImg,alt:(null==modelInfo?void 0:modelInfo.name)||"Agent"})}renderUserAvatar(bgColor){const{userProfile:userProfile}=this.props;return(null==userProfile?void 0:userProfile.avatar)?jsxRuntimeExports.jsx("img",{src:userProfile.avatar,className:styles$l_avatarImg,alt:userProfile.name||"User",onError:e=>{e.target.onerror=null,e.target.src=defaultAvatarUrl}}):jsxRuntimeExports.jsx("img",{src:defaultAvatarUrl,className:styles$l_avatarImg,alt:(null==userProfile?void 0:userProfile.name)||"User"})}getUserName(){const{userProfile:userProfile}=this.props;return(null==userProfile?void 0:userProfile.name)||"User"}renderSegments(segments,trailingCursor=!1){let lastMdIdx=-1;if(trailingCursor)for(let j=segments.length-1;j>=0;j--)if("system-tag"!==segments[j].type&&segments[j].content&&segments[j].content.trim()){lastMdIdx=j;break}return segments.map((seg,i)=>"system-tag"===seg.type?jsxRuntimeExports.jsx(Collapse,{ghost:!0,size:"small",items:[{key:"1",label:jsxRuntimeExports.jsx(Text$1,{type:"secondary",className:styles$l_systemTagLabel,children:seg.tag}),children:jsxRuntimeExports.jsx("pre",{className:styles$l_systemTagPre,children:seg.content})}],className:styles$l_collapseMargin},i):jsxRuntimeExports.jsx(MarkdownBlock$1,{text:seg.content,trailingCursor:i===lastMdIdx},i))}renderToolCall(tu){var _a,_b;if("string"==typeof tu.input)try{const cleaned=tu.input.replace(/^\[object Object\]/,"");tu={...tu,input:JSON.parse(cleaned)}}catch{}if("Edit"===tu.name&&tu.input&&null!=tu.input.old_string&&null!=tu.input.new_string){const editSnapshotMap=this.props.editSnapshotMap||{},filePath2=tu.input.file_path||"";let startLine=1;const snapshot=editSnapshotMap[tu.id];if(snapshot&&tu.input.old_string){const idx=snapshot.plainText.indexOf(tu.input.old_string);if(idx>=0){const lineOffset=snapshot.plainText.substring(0,idx).split("\n").length-1;startLine=snapshot.lineNums[lineOffset]??lineOffset+1}}return jsxRuntimeExports.jsx(DiffView,{file_path:filePath2,old_string:tu.input.old_string,new_string:tu.input.new_string,startLine:startLine,onOpenFile:this.props.onOpenFile},tu.id)}const inp=tu.input&&"object"==typeof tu.input?tu.input:{},box=(label2,children)=>jsxRuntimeExports.jsxs("div",{className:styles$l_toolBox,children:[jsxRuntimeExports.jsx(Text$1,{strong:!0,className:styles$l_toolLabel,children:label2}),children]},tu.id),codePre2=text=>jsxRuntimeExports.jsx("pre",{className:styles$l_codePre,children:text}),onOpenFile=this.props.onOpenFile,pathTag2=p=>onOpenFile?jsxRuntimeExports.jsx("span",{className:styles$l_pathTagClickable,onClick:e=>{e.stopPropagation(),onOpenFile(p)},children:p}):jsxRuntimeExports.jsx("span",{className:styles$l_pathTag,children:p});if("Bash"===tu.name){const cmd=inp.command||"",desc=inp.description||"",lineCount=cmd.split("\n").length;return lineCount>5?jsxRuntimeExports.jsxs("div",{className:styles$l_toolBox,children:[jsxRuntimeExports.jsxs(Text$1,{strong:!0,className:styles$l_toolLabel,children:["Bash",desc?jsxRuntimeExports.jsxs("span",{className:styles$l_descSpan,children:[" — ",desc]}):""]}),jsxRuntimeExports.jsx(Collapse,{ghost:!0,size:"small",items:[{key:"1",label:jsxRuntimeExports.jsxs(Text$1,{type:"secondary",className:styles$l_bashCollapseLabel,children:[t("ui.bashCommand")," (",lineCount," ",t("ui.lines"),")"]}),children:codePre2(cmd)}],className:styles$l_collapseMargin})]},tu.id):box(jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:["Bash",desc?jsxRuntimeExports.jsxs("span",{className:styles$l_descSpan,children:[" — ",desc]}):""]}),codePre2(cmd))}if("Read"===tu.name){const fp=inp.file_path||"",parts=[];inp.offset&&parts.push(`offset: ${inp.offset}`),inp.limit&&parts.push(`limit: ${inp.limit}`);const range=parts.length?` (${parts.join(", ")})`:"";return box(jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:["Read: ",pathTag2(fp),jsxRuntimeExports.jsx("span",{className:styles$l_secondarySpan,children:range})]}),null)}if("Write"===tu.name){const fp=inp.file_path||"",content2=inp.content||"",lines=content2.split("\n");return box(jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:["Write: ",pathTag2(fp)," ",jsxRuntimeExports.jsxs("span",{className:styles$l_secondarySpan,children:["(",lines.length," lines)"]})]}),codePre2(content2))}if("Glob"===tu.name){const pattern=inp.pattern||"",path=inp.path||"";return box(jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:["Glob: ",jsxRuntimeExports.jsx("span",{className:styles$l_patternSpan,children:pattern}),path?jsxRuntimeExports.jsxs("span",{className:styles$l_secondarySpan,children:[" in ",path]}):""]}),null)}if("Grep"===tu.name){const pattern=inp.pattern||"",path=inp.path||"",opts=[];inp.glob&&opts.push(`glob: ${inp.glob}`),inp.output_mode&&opts.push(`mode: ${inp.output_mode}`),inp.head_limit&&opts.push(`limit: ${inp.head_limit}`);const optsStr=opts.length?` (${opts.join(", ")})`:"";return box(jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:["Grep: ",jsxRuntimeExports.jsxs("span",{className:styles$l_patternSpan,children:["/",pattern,"/"]}),path?jsxRuntimeExports.jsxs("span",{className:styles$l_secondarySpan,children:[" in ",path]}):"",jsxRuntimeExports.jsx("span",{className:styles$l_secondarySpan,children:optsStr})]}),null)}if("Task"===tu.name){const st=inp.subagent_type||"",desc=inp.description||"";return box(jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:["Task(",st,desc?": "+desc:"",")"]}),null)}if("AskUserQuestion"===tu.name){const questions=Array.isArray(inp.questions)?inp.questions:[],{askAnswerMap:askAnswerMap}=this.props,selectedAnswers=(null==askAnswerMap?void 0:askAnswerMap[tu.id])||{},isRejected=!0===selectedAnswers.__rejected__,hasAnswers=!isRejected&&Object.keys(selectedAnswers).length>0;if(!hasAnswers&&!isRejected&&this.props.onAskQuestionSubmit&&tu.id===this.props.lastPendingAskId)return this.renderAskQuestionInteractive(tu.id,questions);const checkSvg=jsxRuntimeExports.jsx("svg",{className:styles$l_askCheckSvg,width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:jsxRuntimeExports.jsx("path",{d:"M3 8.5L6.5 12L13 4",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})});return jsxRuntimeExports.jsx("div",{className:styles$l_askQuestionBox,children:questions.map((q,qi)=>{var _a2;const answer=selectedAnswers[q.question],answerLabels=null!=answer&&q.multiSelect?answer.split(",").map(s=>s.trim()):[],isOptionMatch=optLabel=>null!=answer&&(q.multiSelect?answerLabels.includes(optLabel):answer===optLabel),anyOptionMatched=null==(_a2=q.options)?void 0:_a2.some(opt=>isOptionMatch(opt.label)),isOtherAnswer=hasAnswers&&null!=answer&&!anyOptionMatched;return jsxRuntimeExports.jsxs("div",{className:qi<questions.length-1?styles$l_questionSpacing:void 0,children:[q.header&&jsxRuntimeExports.jsx("span",{className:styles$l_askQuestionHeader,children:q.header}),jsxRuntimeExports.jsx("div",{className:styles$l_askQuestionText,children:q.question}),jsxRuntimeExports.jsxs("div",{className:styles$l_optionList,children:[q.options&&q.options.map((opt,oi)=>{const selected=isOptionMatch(opt.label);return jsxRuntimeExports.jsxs("div",{className:`${styles$l_askOptionItem}${selected?" "+styles$l_askOptionSelected:""}`,children:[selected?checkSvg:"○"," ",opt.label,opt.description&&jsxRuntimeExports.jsxs("span",{className:styles$l_optionDesc,children:["— ",opt.description]})]},oi)}),isOtherAnswer&&jsxRuntimeExports.jsxs("div",{className:`${styles$l_askOptionItem} ${styles$l_askOptionSelected}`,children:[checkSvg," ",answer]})]})]},qi)})},tu.id)}if("EnterPlanMode"===tu.name)return jsxRuntimeExports.jsx("div",{className:styles$l_planModeBox,children:jsxRuntimeExports.jsx("span",{className:styles$l_planModeLabel,children:t("ui.enterPlanMode")})},tu.id);if("ExitPlanMode"===tu.name){const prompts=inp.allowedPrompts||[],{planApprovalMap:planApprovalMap}=this.props,approval=planApprovalMap&&planApprovalMap[tu.id]||{status:"pending"},isPending="pending"===approval.status,isInteractive=isPending&&this.props.cliMode&&tu.id===this.props.lastPendingPlanId;let planTextContent=null;if(isPending){if(planTextContent=this.props.latestPlanContent||null,!planTextContent&&Array.isArray(this.props.content))for(const b of this.props.content){if(b===tu)break;"tool_use"===b.type&&"Write"===b.name&&(null==(_a=b.input)?void 0:_a.file_path)&&/\.claude\/plans\//i.test(b.input.file_path)&&b.input.content&&(planTextContent=b.input.content)}if(!planTextContent&&Array.isArray(this.props.content)){const texts=[];for(const b of this.props.content){if(b===tu)break;"text"===b.type&&b.text&&texts.push(b.text)}planTextContent=texts.join("\n\n").trim()||null}}if("approved"===approval.status&&approval.planContent)return jsxRuntimeExports.jsx("div",{className:styles$l_bubblePlan,children:jsxRuntimeExports.jsx(MarkdownBlock$1,{text:approval.planContent})},tu.id);const detectedPrompt=isPlanApprovalPrompt(this.props.ptyPrompt)?this.props.ptyPrompt:this.props.activePlanPrompt||null,defaultPlanOptions=[{number:1,text:t("ui.planApprove"),selected:!0},{number:2,text:t("ui.planApproveWithEdits"),selected:!1},{number:3,text:t("ui.planReject"),selected:!1}],planOptions=(null==(_b=null==detectedPrompt?void 0:detectedPrompt.options)?void 0:_b.length)?detectedPrompt.options:defaultPlanOptions,statusClass="approved"===approval.status?styles$l_planStatusApproved:"rejected"===approval.status?styles$l_planStatusRejected:"ultraplan"===approval.status?styles$l_planStatusApproved:styles$l_planStatusPending,statusIcon="approved"===approval.status?"✓":"rejected"===approval.status?"✗":"ultraplan"===approval.status?"⚡":"●",statusKey="approved"===approval.status?"ui.planApproved":"rejected"===approval.status?"ui.planRejected":"ultraplan"===approval.status?"ui.planUltraplan":"ui.planPending";return jsxRuntimeExports.jsxs("div",{className:`${styles$l_planModeBox} ${statusClass}`,children:[isInteractive&&jsxRuntimeExports.jsx("svg",{className:`${styles$l_borderSvg} ${styles$l_borderSvgInset}`,preserveAspectRatio:"none",children:jsxRuntimeExports.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",rx:"6",ry:"6",fill:"none",stroke:"var(--color-primary)",strokeWidth:"1",strokeDasharray:"6 4",className:styles$l_borderRect})}),jsxRuntimeExports.jsxs("div",{className:styles$l_planModeHeader,children:[jsxRuntimeExports.jsx("span",{className:styles$l_planModeLabel,children:t(isPending?"ui.exitPlanMode":"ui.exitPlanModeResolved")}),!isInteractive&&jsxRuntimeExports.jsxs("span",{className:`${styles$l_planStatusBadge} ${statusClass}`,children:[statusIcon," ",t(statusKey)]})]}),isPending&&planTextContent&&jsxRuntimeExports.jsx("div",{className:styles$l_planContentPreview,children:jsxRuntimeExports.jsx(MarkdownBlock$1,{text:planTextContent})}),prompts.length>0&&jsxRuntimeExports.jsxs("div",{className:styles$l_planModePermissions,children:[jsxRuntimeExports.jsx("div",{className:styles$l_planModePermLabel,children:t("ui.allowedPrompts")}),prompts.map((p,pi)=>jsxRuntimeExports.jsxs("div",{className:styles$l_askOptionItem,children:["• ",p.prompt||p.tool]},pi))]}),isInteractive&&!this.state.planFeedbackInput&&jsxRuntimeExports.jsx("div",{className:styles$l_planApprovalActions,children:this.state.planApprovalSubmitting?jsxRuntimeExports.jsx("button",{className:styles$l_planOptionBtn,disabled:!0,children:t("ui.askSubmitting")}):planOptions.map((opt,optIdx)=>{const txt=(opt.text||"").toLowerCase();let btnCls=styles$l_planOptionBtn;/yes|approve|accept|proceed/i.test(txt)||null==detectedPrompt&&0===optIdx?btnCls=styles$l_planApproveBtn:(/no|reject|deny|feedback/i.test(txt)||null==detectedPrompt&&2===optIdx)&&(btnCls=styles$l_planRejectBtn);const isFeedbackOpt=/type|tell|change|feedback|edit/i.test(opt.text||"")||null==detectedPrompt&&1===optIdx;return jsxRuntimeExports.jsx("button",{className:btnCls,onClick:()=>{isFeedbackOpt?this.setState({planFeedbackInput:!0,planFeedbackOptNumber:opt.number,planFeedbackText:""}):(this.setState({planApprovalSubmitting:!0}),this.props.onPlanApprovalClick(opt.number))},children:opt.text},opt.number)})}),isInteractive&&this.state.planFeedbackInput&&jsxRuntimeExports.jsxs("div",{className:styles$l_planFeedbackInputWrap,children:[jsxRuntimeExports.jsx("textarea",{className:styles$l_planFeedbackTextarea,placeholder:t("ui.planFeedbackPlaceholder"),value:this.state.planFeedbackText,onChange:e=>this.setState({planFeedbackText:e.target.value}),onKeyDown:e=>{if((e.ctrlKey||e.metaKey)&&"Enter"===e.key){e.preventDefault();const text=this.state.planFeedbackText.trim();text&&this.props.onPlanFeedbackSubmit&&(this.props.onPlanFeedbackSubmit(this.state.planFeedbackOptNumber,text),this.setState({planFeedbackInput:!1,planFeedbackText:"",planFeedbackOptNumber:null}))}},autoFocus:!0,rows:3}),jsxRuntimeExports.jsxs("div",{className:styles$l_planFeedbackBtnRow,children:[jsxRuntimeExports.jsx("button",{className:styles$l_planFeedbackCancelBtn,onClick:()=>this.setState({planFeedbackInput:!1,planFeedbackText:"",planFeedbackOptNumber:null}),children:t("ui.cancel")}),jsxRuntimeExports.jsx("button",{className:styles$l_planFeedbackSendBtn,disabled:!this.state.planFeedbackText.trim(),onClick:()=>{const text=this.state.planFeedbackText.trim();text&&this.props.onPlanFeedbackSubmit&&(this.props.onPlanFeedbackSubmit(this.state.planFeedbackOptNumber,text),this.setState({planFeedbackInput:!1,planFeedbackText:"",planFeedbackOptNumber:null}))},children:t("ui.planFeedbackSubmit")})]})]}),"rejected"===approval.status&&approval.feedback&&jsxRuntimeExports.jsxs("div",{className:styles$l_planFeedback,children:[jsxRuntimeExports.jsxs("span",{className:styles$l_planFeedbackLabel,children:[t("ui.planFeedback"),":"]})," ",approval.feedback]})]},tu.id)}if("SendMessage"===tu.name&&null!=inp.message){const to=inp.to||"",msg=inp.message;if("object"==typeof msg&&msg.type){const statusKey=`ui.teammate.${msg.type}`,statusText=t(statusKey,{name:to}),display=statusText===statusKey?`${to}: ${msg.type}`:statusText;return jsxRuntimeExports.jsx("div",{className:styles$l_teammateStatusRow,children:jsxRuntimeExports.jsx("span",{className:styles$l_teammateStatusBubble,children:display})},tu.id)}if("string"==typeof msg){const header2=inp.summary?`→ ${to} — ${inp.summary}`:`→ ${to}`;return jsxRuntimeExports.jsxs("div",{className:styles$l_sendMessageBlock,children:[jsxRuntimeExports.jsx("div",{className:styles$l_sendMessageHeader,children:header2}),jsxRuntimeExports.jsx(MarkdownBlock$1,{text:msg})]},tu.id)}}let toolLabel2=tu.name;const keys=Object.keys(inp);if(0===keys.length)return box(toolLabel2,null);const items=keys.map(k=>{const v=inp[k],vs="string"==typeof v?v:JSON.stringify(v),display="Agent"===tu.name||"TaskCreate"===tu.name||"TaskUpdate"===tu.name||"SendMessage"===tu.name||vs.length<=200?vs:vs.substring(0,200)+"...";return jsxRuntimeExports.jsxs("div",{className:styles$l_kvItem,children:[jsxRuntimeExports.jsxs("span",{className:styles$l_kvKey,children:[k,": "]}),jsxRuntimeExports.jsx("span",{className:styles$l_kvValue,children:display})]},k)});return box(toolLabel2,jsxRuntimeExports.jsx("div",{className:styles$l_kvContainer,children:items}))}renderDangerApproval(toolId,dangerPrompt){if(!dangerPrompt)return null;const options=dangerPrompt.options||[];return jsxRuntimeExports.jsxs("div",{className:styles$l_dangerApprovalBox,children:[jsxRuntimeExports.jsxs("div",{className:styles$l_dangerApprovalHeader,children:[jsxRuntimeExports.jsx("span",{className:styles$l_dangerApprovalIcon,children:"⚠"}),jsxRuntimeExports.jsx("span",{className:styles$l_dangerApprovalLabel,children:t("ui.dangerApproval")})]}),jsxRuntimeExports.jsx("div",{className:styles$l_dangerApprovalActions,children:options.map(opt=>{const txt=(opt.text||"").toLowerCase();let btnCls=styles$l_dangerOptionBtn;return/^no/i.test(txt)||/deny/i.test(txt)?btnCls=styles$l_dangerRejectBtn:(/^yes/i.test(txt)||/allow/i.test(txt))&&(btnCls=styles$l_dangerApproveBtn),jsxRuntimeExports.jsx("button",{className:btnCls,onClick:()=>{this.props.onDangerousApprovalClick&&this.props.onDangerousApprovalClick(opt.number)},children:opt.text},opt.number)})})]},`danger-${toolId}`)}renderAskQuestionInteractive(toolId,questions){return jsxRuntimeExports.jsx(AskQuestionForm,{questions:questions,onSubmit:answers=>{this.props.onAskQuestionSubmit&&this.props.onAskQuestionSubmit(answers,toolId,questions)}},toolId)}renderHighlightBubble(bubbleClass,children){const{highlight:highlight2}=this.props,cls=`${bubbleClass}${"active"===highlight2?" "+styles$l_bubbleHighlight:""}${"fading"===highlight2?" "+styles$l_bubbleHighlightFading:""}`,isUser=bubbleClass===styles$l_bubbleUser;return jsxRuntimeExports.jsxs("div",{className:`${cls} ${styles$l_bubbleRelative}`,children:[("active"===highlight2||"fading"===highlight2)&&jsxRuntimeExports.jsx("svg",{className:`${styles$l_borderSvg}${"fading"===highlight2?" "+styles$l_borderSvgFading:""}`,preserveAspectRatio:"none",children:jsxRuntimeExports.jsx("rect",{x:"0.5",y:"0.5",width:"calc(100% - 1px)",height:"calc(100% - 1px)",rx:"8",ry:"8",fill:"none",stroke:isUser?"#fff":"var(--color-primary)",strokeWidth:"1",strokeDasharray:"6 4",className:styles$l_borderRect})}),children]})}renderUserMessage(){const{text:text,timestamp:timestamp}=this.props,timeStr=this.formatTime(timestamp),userName=this.getUserName();return text&&text.includes("This session is being continued from a previous conversation that ran out of context")?jsxRuntimeExports.jsxs("div",{className:styles$l_messageRowEnd,children:[jsxRuntimeExports.jsxs("div",{className:styles$l_contentColLimited,children:[jsxRuntimeExports.jsxs("div",{className:styles$l_labelRow,children:[timeStr&&jsxRuntimeExports.jsx(Text$1,{className:styles$l_timeTextNoMargin,children:timeStr}),this.renderViewRequestBtn(),jsxRuntimeExports.jsxs(Text$1,{type:"secondary",className:styles$l_labelTextRight,children:[userName," — /compact"]})]}),this.renderHighlightBubble(styles$l_bubbleUser,jsxRuntimeExports.jsx(Collapse,{ghost:!0,size:"small",items:[{key:"1",label:jsxRuntimeExports.jsx(Text$1,{className:styles$l_compactLabel,children:"Compact Summary"}),children:jsxRuntimeExports.jsx("pre",{className:styles$l_compactPre,children:text})}],className:styles$l_collapseNoMargin}))]}),this.renderUserAvatar("#1e40af")]}):jsxRuntimeExports.jsxs("div",{className:styles$l_messageRowEnd,children:[jsxRuntimeExports.jsxs("div",{className:styles$l_contentColLimited,children:[jsxRuntimeExports.jsxs("div",{className:styles$l_labelRow,children:[timeStr&&jsxRuntimeExports.jsx(Text$1,{className:styles$l_timeTextNoMargin,children:timeStr}),this.renderViewRequestBtn(),jsxRuntimeExports.jsx(Text$1,{type:"secondary",className:styles$l_labelTextRight,children:userName})]}),this.renderHighlightBubble(styles$l_bubbleUser,this.renderUserTextWithImages(text))]}),this.renderUserAvatar("#1e40af")]})}renderUserTextWithImages(text){if(!text)return text||"";const IMAGE_EXTS2=/\.(png|jpe?g|gif|webp|avif|svg|bmp|ico|icns)$/i,combinedPattern=/\[Image(?:\s*#\d+)?(?::?\s*source)?:\s*([^\]]+)\]|"(\/tmp\/cc-viewer-uploads\/[^"]+?)"/g,parts=[];let match,lastIndex=0;for(;null!==(match=combinedPattern.exec(text));){const filePath2=(match[1]||match[2]||"").trim();if(!filePath2||!IMAGE_EXTS2.test(filePath2))continue;match.index>lastIndex&&parts.push(jsxRuntimeExports.jsx("span",{children:text.slice(lastIndex,match.index)},`t-${lastIndex}`));const originalText=match[0];parts.push(jsxRuntimeExports.jsx(ChatImage,{src:apiUrl(`/api/file-raw?path=${encodeURIComponent(filePath2)}`),alt:filePath2.split("/").pop(),fallbackText:originalText},`img-${match.index}`)),lastIndex=match.index+match[0].length}return 0===parts.length?text:(lastIndex<text.length&&parts.push(jsxRuntimeExports.jsx("span",{children:text.slice(lastIndex)},`t-${lastIndex}`)),jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:parts}))}renderToolResult(tr){return tr?jsxRuntimeExports.jsx(ToolResultView,{toolName:tr.toolName,toolInput:tr.toolInput,resultText:tr.resultText,defaultCollapsed:this.props.collapseToolResults}):null}renderAssistantContent(content2,toolResultMap={}){const thinkingBlocks=content2.filter(b=>"thinking"===b.type),textBlocks=content2.filter(b=>"text"===b.type),toolUseBlocks=content2.filter(b=>"tool_use"===b.type),showTC=!!this.props.showTrailingCursor,hasTextWithContent=textBlocks.some(b=>b.text&&b.text.trim()),lastThinkingIdxWithContent=showTC&&!hasTextWithContent?thinkingBlocks.reduce((acc,b,i)=>b.thinking&&b.thinking.trim()?i:acc,-1):-1,lastTextIdxWithContent=showTC&&hasTextWithContent?textBlocks.reduce((acc,b,i)=>b.text&&b.text.trim()?i:acc,-1):-1,streamThinkingExpanded=!hasTextWithContent||!!this.props.expandThinking;let innerContent=[];thinkingBlocks.forEach((tb,i)=>{const thinkingText=tb.thinking||"",isEmpty=!thinkingText.trim(),isCursorTarget=i===lastThinkingIdxWithContent,collapseProps=showTC?{key:`think-stream-${i}`,activeKey:streamThinkingExpanded?["1"]:[]}:{key:`think-${i}-${this.props.expandThinking?"e":"c"}`,defaultActiveKey:this.props.expandThinking?["1"]:[]};innerContent.push(jsxRuntimeExports.jsx(Collapse,{...collapseProps,ghost:!0,size:"small",items:[{key:"1",label:jsxRuntimeExports.jsx(Text$1,{type:"secondary",className:styles$l_thinkingLabel,children:t("ui.thinking")}),children:isEmpty?jsxRuntimeExports.jsxs("div",{className:styles$l_thinkingEmptyHint,children:[jsxRuntimeExports.jsx(Text$1,{type:"secondary",className:styles$l_thinkingEmptyText,children:t("ui.thinkingEmpty")}),!this.props.showThinkingSummaries&&jsxRuntimeExports.jsx(Tooltip,{title:tc("ui.enableThinkingSummariesTip"),children:jsxRuntimeExports.jsx(Button,{size:"small",type:"primary",ghost:!0,className:styles$l_enableThinkingBtn,onClick:async e=>{e.stopPropagation();try{(await fetch(apiUrl("/api/claude-settings"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({showThinkingSummaries:!0})})).ok&&staticMethods.success(tc("ui.enableThinkingSummariesTip"))}catch{staticMethods.error("Failed to save setting")}},children:t("ui.enableThinkingSummaries")})})]}):jsxRuntimeExports.jsx(MarkdownBlock$1,{text:thinkingText,trailingCursor:isCursorTarget})}],className:`${styles$l_collapseMargin}${showTC?" "+styles$l_collapseStream:""}`}))}),textBlocks.forEach((tb,i)=>{if(tb.text){const{segments:segments}=renderAssistantText(tb.text),isCursorTarget=i===lastTextIdxWithContent;innerContent.push(jsxRuntimeExports.jsx("div",{className:"chat-boxer",children:this.renderSegments(segments,isCursorTarget)},`text-${i}`))}});const simplify=!this.props.showFullToolContent;let simplifiedLabelAdded=!1;return toolUseBlocks.forEach((tu,tuIdx)=>{const isFullDisplayTool="Edit"===tu.name||"Write"===tu.name||"EnterPlanMode"===tu.name||"ExitPlanMode"===tu.name||"AskUserQuestion"===tu.name||"Agent"===tu.name||"TaskCreate"===tu.name||"SendMessage"===tu.name;simplify&&!isFullDisplayTool?(simplifiedLabelAdded||(simplifiedLabelAdded=!0,innerContent.push(jsxRuntimeExports.jsx("span",{className:styles$l_simplifiedToolLabel,children:t("ui.toolsUsed")},`stag-label-${tuIdx}`))),innerContent.push(jsxRuntimeExports.jsx(Popover,{placement:"top",overlayClassName:"simplifiedToolPopover",overlayInnerStyle:{background:"var(--bg-elevated)",border:"1px solid var(--border-hover)",borderRadius:8,padding:0},content:jsxRuntimeExports.jsx("div",{className:styles$l_simplifiedToolPopoverContent,children:this.renderToolCall(tu)}),mouseEnterDelay:.3,...isMobile&&!isPad?{trigger:"click",...!isIOS&&{getPopupContainer:node=>node.parentElement}}:{},children:jsxRuntimeExports.jsx("span",{className:styles$l_simplifiedToolTag,children:tu.name})},`stag-${tu.id}`))):(simplifiedLabelAdded=!1,innerContent.push(this.renderToolCall(tu)));const tr=toolResultMap[tu.id];if(!tr&&!toolUseBlocks.slice(0,tuIdx).some(t2=>!toolResultMap[t2.id])&&this.props.activeDangerousPrompt&&this.props.cliMode){const dp=this.props.activeDangerousPrompt;innerContent.push(this.renderDangerApproval(tu.id,dp))}if(tr){const approval=(this.props.planApprovalMap||{})[tu.id];"ExitPlanMode"===tu.name&&approval&&"approved"===approval.status&&approval.planContent||(simplify?tr.isPermissionDenied&&innerContent.push(jsxRuntimeExports.jsx(React.Fragment,{children:tr.isUltraplan?jsxRuntimeExports.jsx("div",{className:styles$l_ultraplanBadge,children:"◇ UltraPlan"}):jsxRuntimeExports.jsxs("div",{className:`${styles$l_dangerApprovalBox} ${styles$l_dangerApprovalBoxDenied}`,children:[jsxRuntimeExports.jsxs("span",{className:styles$l_dangerDeniedBadge,children:["✗ ",t("ui.dangerDenied")]}),tr.resultText&&jsxRuntimeExports.jsx("div",{className:styles$l_dangerDeniedDetail,children:tr.resultText})]})},`tr-denied-${tu.id}`)):tr.isPermissionDenied?innerContent.push(jsxRuntimeExports.jsx(React.Fragment,{children:tr.isUltraplan?jsxRuntimeExports.jsx("div",{className:styles$l_ultraplanBadge,children:"◇ UltraPlan"}):jsxRuntimeExports.jsxs("div",{className:`${styles$l_dangerApprovalBox} ${styles$l_dangerApprovalBoxDenied}`,children:[jsxRuntimeExports.jsxs("span",{className:styles$l_dangerDeniedBadge,children:["✗ ",t("ui.dangerDenied")]}),tr.resultText&&jsxRuntimeExports.jsx("div",{className:styles$l_dangerDeniedDetail,children:tr.resultText})]})},`tr-denied-${tu.id}`)):innerContent.push(jsxRuntimeExports.jsx(React.Fragment,{children:this.renderToolResult(tr)},`tr-${tu.id}`)))}}),innerContent}renderAssistantMessage(){const{content:content2,toolResultMap:toolResultMap={},modelInfo:modelInfo,timestamp:timestamp,requestIndex:requestIndex,onViewRequest:onViewRequest,showTrailingCursor:showTrailingCursor}=this.props,innerContent=this.renderAssistantContent(content2,toolResultMap);return 0===innerContent.length?null:jsxRuntimeExports.jsxs("div",{className:styles$l_messageRow,children:[jsxRuntimeExports.jsx(ModelAvatar,{modelInfo:modelInfo,streaming:!!showTrailingCursor}),jsxRuntimeExports.jsxs("div",{className:styles$l_contentCol,children:[jsxRuntimeExports.jsx(AssistantLabel,{name:(null==modelInfo?void 0:modelInfo.name)||"MainAgent",timeStr:this.formatTime(timestamp),requestIndex:requestIndex,onViewRequest:onViewRequest}),this.renderHighlightBubble(styles$l_bubbleAssistant,innerContent)]})]})}_getSubAvatarType(){if(this.props.isTeammate)return"teammate";const match=(this.props.label||"").match(/SubAgent:\s*(\w+)/i),st=match?match[1].toLowerCase():"";return"explore"===st||"search"===st?"sub-search":"plan"===st?"sub-plan":"sub"}renderSubAgentChatMessage(){const{content:content2,toolResultMap:toolResultMap={},label:label2}=this.props,innerContent=this.renderAssistantContent(content2,toolResultMap);return 0===innerContent.length?null:jsxRuntimeExports.jsxs("div",{className:styles$l_messageRowEnd,children:[jsxRuntimeExports.jsxs("div",{className:styles$l_contentColLimited,children:[jsxRuntimeExports.jsxs("div",{className:styles$l_labelRowEnd,children:[this.formatTime(this.props.timestamp)&&jsxRuntimeExports.jsx(Text$1,{className:styles$l_timeText,children:this.formatTime(this.props.timestamp)}),this.renderViewRequestBtn(),jsxRuntimeExports.jsx(Text$1,{type:"secondary",className:styles$l_labelTextRight,children:label2||"SubAgent"})]}),this.renderHighlightBubble(styles$l_bubbleAssistant,innerContent)]}),(()=>{const ta=this.props.isTeammate?getTeammateAvatar(label2):null;return jsxRuntimeExports.jsx("div",{className:styles$l_avatar,style:{background:ta?ta.color:"var(--bg-sub-avatar)"},dangerouslySetInnerHTML:{__html:ta?ta.svg:getSvgAvatar(this._getSubAvatarType())}})})()]})}renderSubAgentMessage(){const{label:label2,resultText:resultText,toolName:toolName2,toolInput:toolInput}=this.props,tmAvatar=this.props.isTeammate?getTeammateAvatar(label2):null;return jsxRuntimeExports.jsxs("div",{className:styles$l_messageRow,children:[jsxRuntimeExports.jsx("div",{className:styles$l_avatar,style:{background:tmAvatar?tmAvatar.color:"var(--bg-sub-avatar)"},dangerouslySetInnerHTML:{__html:tmAvatar?tmAvatar.svg:getSvgAvatar(this._getSubAvatarType())}}),jsxRuntimeExports.jsxs("div",{className:styles$l_contentCol,children:[this.renderLabel(label2),jsxRuntimeExports.jsx("div",{className:styles$l_bubbleSubAgent,children:jsxRuntimeExports.jsx(ToolResultView,{toolName:toolName2,toolInput:toolInput,resultText:resultText})})]})]})}renderTeammateMessage(){const{text:text,label:label2,timestamp:timestamp}=this.props,timeStr=this.formatTime(timestamp),ta=getTeammateAvatar(label2);return jsxRuntimeExports.jsxs("div",{className:styles$l_messageRowEnd,children:[jsxRuntimeExports.jsxs("div",{className:styles$l_contentColLimited,children:[jsxRuntimeExports.jsxs("div",{className:styles$l_labelRowEnd,children:[timeStr&&jsxRuntimeExports.jsx(Text$1,{className:styles$l_timeText,children:timeStr}),this.renderViewRequestBtn(),jsxRuntimeExports.jsx(Text$1,{type:"secondary",className:styles$l_labelTextRight,children:label2||"Teammate"})]}),this.renderHighlightBubble(styles$l_bubbleAssistant,jsxRuntimeExports.jsx(MarkdownBlock$1,{text:text||""}))]}),jsxRuntimeExports.jsx("div",{className:styles$l_avatar,style:{background:ta?ta.color:"var(--bg-sub-avatar)"},dangerouslySetInnerHTML:{__html:ta?ta.svg:getSvgAvatar("sub")}})]})}renderTeammateStatus(){const{label:label2,toolName:toolName2}=this.props,statusKey=`ui.teammate.${toolName2}`,statusText=t(statusKey,{name:label2||"Teammate"}),display=statusText===statusKey?`${label2||"Teammate"}: ${toolName2}`:statusText;return jsxRuntimeExports.jsx("div",{className:styles$l_teammateStatusRowCenter,children:jsxRuntimeExports.jsx("span",{className:styles$l_teammateStatusBubble,children:display})})}renderPlanPromptMessage(){const{text:text,timestamp:timestamp,modelInfo:modelInfo}=this.props;this.formatTime(timestamp);const planContent=(text||"").replace(/^[\s\S]*?Implement the following plan:\s*/i,"");return jsxRuntimeExports.jsxs("div",{className:styles$l_messageRow,children:[this.renderModelAvatar(modelInfo),jsxRuntimeExports.jsxs("div",{className:styles$l_contentColLimited,children:[this.renderLabel((null==modelInfo?void 0:modelInfo.name)||"MainAgent"," (Plan)"),jsxRuntimeExports.jsx("div",{className:styles$l_bubblePlan,children:jsxRuntimeExports.jsx(MarkdownBlock$1,{text:planContent})})]})]})}renderSkillLoadedMessage(){const{text:text,skillName:skillName,timestamp:timestamp}=this.props,timeStr=this.formatTime(timestamp);return jsxRuntimeExports.jsxs("div",{className:styles$l_messageRow,children:[jsxRuntimeExports.jsx("div",{className:styles$l_skillSpacer}),jsxRuntimeExports.jsx("div",{className:styles$l_contentCol,children:jsxRuntimeExports.jsx(Collapse,{ghost:!0,size:"small",items:[{key:"1",label:jsxRuntimeExports.jsxs("span",{className:styles$l_skillLabel,children:["📦 ",t("ui.skillLoaded"),": ",skillName,timeStr&&jsxRuntimeExports.jsx(Text$1,{className:`${styles$l_timeTextNoMargin} ${styles$l_skillTimeIndent}`,children:timeStr})]}),children:jsxRuntimeExports.jsx(MarkdownBlock$1,{text:text})}],className:styles$l_collapseNoMargin})})]})}renderTaskNotification(){var _a,_b,_c;const{taskNotification:tn,modelInfo:modelInfo}=this.props;if(!tn)return null;const isError="error"===tn.status,statusIcon=isError?"✗":"✓",statusColor=isError?"#ff4d4f":"#52c41a",durationSec=(null==(_a=tn.usage)?void 0:_a.durationMs)?(tn.usage.durationMs/1e3).toFixed(1):null,tokens=(null==(_b=tn.usage)?void 0:_b.totalTokens)?tn.usage.totalTokens.toLocaleString():null,toolUses=(null==(_c=tn.usage)?void 0:_c.toolUses)||null,innerContent=[];return innerContent.push(jsxRuntimeExports.jsxs("div",{className:"chat-boxer",children:[jsxRuntimeExports.jsx("span",{style:{color:statusColor,fontWeight:"bold",marginRight:6},children:statusIcon}),tn.summary||"Background Task"]},"summary")),tn.result&&innerContent.push(jsxRuntimeExports.jsx(Collapse,{ghost:!0,size:"small",items:[{key:"1",label:jsxRuntimeExports.jsx(Typography.Text,{type:"secondary",children:t("ui.taskNotification.result")||"Result"}),children:jsxRuntimeExports.jsx(MarkdownBlock$1,{text:tn.result})}]},"result")),(durationSec||tokens||toolUses)&&innerContent.push(jsxRuntimeExports.jsxs("div",{className:styles$l_taskNotifUsage,children:[durationSec&&jsxRuntimeExports.jsxs("span",{children:[durationSec,"s"]}),tokens&&jsxRuntimeExports.jsxs("span",{children:[tokens," tokens"]}),toolUses&&jsxRuntimeExports.jsxs("span",{children:[toolUses," tool uses"]})]},"usage")),jsxRuntimeExports.jsxs("div",{className:styles$l_messageRow,children:[this.renderModelAvatar(modelInfo),jsxRuntimeExports.jsxs("div",{className:styles$l_contentCol,children:[this.renderLabel((null==modelInfo?void 0:modelInfo.name)||"MainAgent"),this.renderHighlightBubble(styles$l_bubbleAssistant,innerContent)]})]})}render(){const{role:role}=this.props;return"user"===role?this.renderUserMessage():"skill-loaded"===role?this.renderSkillLoadedMessage():"plan-prompt"===role?this.renderPlanPromptMessage():"assistant"===role?this.renderAssistantMessage():"task-notification"===role?this.renderTaskNotification():"teammate-message"===role?this.renderTeammateMessage():"teammate-status"===role?this.renderTeammateStatus():"sub-agent-chat"===role?this.renderSubAgentChatMessage():"sub-agent"===role?this.renderSubAgentMessage():null}}const styles$h_terminalPanel="_terminalPanel_1jqru_1",styles$h_terminalPanelFocused="_terminalPanelFocused_1jqru_10",styles$h_terminalContainer="_terminalContainer_1jqru_32",styles$h_pendingFileStrip="_pendingFileStrip_1jqru_45",styles$h_pendingFileTag="_pendingFileTag_1jqru_53",styles$h_pendingFileName="_pendingFileName_1jqru_70",styles$h_pendingFileClose="_pendingFileClose_1jqru_77",styles$h_pendingImageItem="_pendingImageItem_1jqru_91",styles$h_pendingImageThumb="_pendingImageThumb_1jqru_106",styles$h_pendingImageRemove="_pendingImageRemove_1jqru_113",styles$h_terminalToolbar="_terminalToolbar_1jqru_148",styles$h_toolbarBtn="_toolbarBtn_1jqru_159",styles$h_toolbarBtnDisabled="_toolbarBtnDisabled_1jqru_180",styles$h_virtualKeybar="_virtualKeybar_1jqru_195",styles$h_virtualKey="_virtualKey_1jqru_195",styles$h_virtualKeyPressed="_virtualKeyPressed_1jqru_226",styles$h_vkSeparator="_vkSeparator_1jqru_233",styles$h_vkAction="_vkAction_1jqru_242",styles$h_vkTeamLabel="_vkTeamLabel_1jqru_254",styles$h_vkTeamPreset="_vkTeamPreset_1jqru_263",styles$h_vkDisabled="_vkDisabled_1jqru_268",styles$h_presetList="_presetList_1jqru_274",styles$h_presetRow="_presetRow_1jqru_282",styles$h_presetRowDragging="_presetRowDragging_1jqru_294",styles$h_presetRowDragOver="_presetRowDragOver_1jqru_298",styles$h_dragHandle="_dragHandle_1jqru_303",styles$h_presetText="_presetText_1jqru_321",styles$h_presetMenu="_presetMenu_1jqru_331",styles$h_presetMenuItem="_presetMenuItem_1jqru_336",styles$h_presetMenuItemMuted="_presetMenuItemMuted_1jqru_355",styles$h_presetName="_presetName_1jqru_374",styles$h_presetInput="_presetInput_1jqru_384",styles$h_presetTextarea="_presetTextarea_1jqru_400",styles$h_hiddenFileInput="_hiddenFileInput_1jqru_417",styles$h_popoverEmptyHint="_popoverEmptyHint_1jqru_421",styles$h_agentTeamDisabledTip="_agentTeamDisabledTip_1jqru_428",styles$h_toolbarBtnRight="_toolbarBtnRight_1jqru_434",styles$h_presetSectionHeader="_presetSectionHeader_1jqru_438",styles$h_presetSectionTitle="_presetSectionTitle_1jqru_442",styles$h_presetListEmptyHint="_presetListEmptyHint_1jqru_448",styles$h_presetActions="_presetActions_1jqru_455",styles$h_presetFormField="_presetFormField_1jqru_461",styles$h_presetFormLabel="_presetFormLabel_1jqru_465",styles$h_ultraplanPanel="_ultraplanPanel_1jqru_473",styles$h_ultraplanHeader="_ultraplanHeader_1jqru_479",styles$h_ultraplanHeaderTitle="_ultraplanHeaderTitle_1jqru_490",styles$h_ultraplanCloseBtn="_ultraplanCloseBtn_1jqru_496",styles$h_ultraplanCustomWrap="_ultraplanCustomWrap_1jqru_515",styles$h_ultraplanCustomTitle="_ultraplanCustomTitle_1jqru_521",styles$h_ultraplanEditPencil="_ultraplanEditPencil_1jqru_528",styles$h_ultraplanVariantRow="_ultraplanVariantRow_1jqru_559",styles$h_ultraplanRoleBtn="_ultraplanRoleBtn_1jqru_567",styles$h_ultraplanAddExpertBtn="_ultraplanAddExpertBtn_1jqru_592",styles$h_ultraplanRoleBtnActive="_ultraplanRoleBtnActive_1jqru_615",styles$h_ultraplanContextWarning="_ultraplanContextWarning_1jqru_624",styles$h_ultraplanTextarea="_ultraplanTextarea_1jqru_635",styles$h_ultraplanFooter="_ultraplanFooter_1jqru_659",styles$h_ultraplanSendBtn="_ultraplanSendBtn_1jqru_666",styles$h_ultraplanUploadBtn="_ultraplanUploadBtn_1jqru_688",styles$h_ultraplanFileList="_ultraplanFileList_1jqru_710",styles$h_ultraplanFileChip="_ultraplanFileChip_1jqru_717",styles$h_ultraplanFileName="_ultraplanFileName_1jqru_740",styles$h_ultraplanFileRemove="_ultraplanFileRemove_1jqru_747",styles$h_ultraplanImageItem="_ultraplanImageItem_1jqru_760",styles$h_ultraplanImageThumb="_ultraplanImageThumb_1jqru_775",styles$h_ultraplanImageRemove="_ultraplanImageRemove_1jqru_782",BUILTIN_PRESETS=[{builtinId:"scout-regiment",version:1,teamName:"ui.preset.scoutRegiment.name",description:"ui.preset.scoutRegiment.desc"},{builtinId:"codereview-5",version:1,teamName:"ui.preset.codeReview5.name",description:"ui.preset.codeReview5.desc"},{builtinId:"codereview-2",version:1,teamName:"ui.preset.codeReview2.name",description:"ui.preset.codeReview2.desc"}],ULTRAPLAN_VARIANTS={codeExpert:'<system-reminder>\n[SCOPED INSTRUCTION] The following instructions are intended for the next 1–3 interactions. Once the task is complete, these instructions should be gradually deprioritized and no longer influence subsequent interactions.\n\nLeverage a multi-agent exploration mechanism to formulate a highly detailed implementation plan.\n\nInstructions:\n1. Use the Agent tool to spawn parallel agents to simultaneously explore different aspects of the codebase:\n- If necessary, designate a preliminary investigator to use `webSearch` to first research advanced solutions within the relevant industry domain;\n- One agent responsible for understanding the relevant existing code and architecture;\n- One agent responsible for identifying all files requiring modification;\n- One agent responsible for identifying potential risks, edge cases, and dependencies;\n- You may add other roles or deploy additional agents beyond the three defined above; the maximum limit for concurrently scheduled agents is 5.\n\n2. Synthesize the findings from the aforementioned agents into a detailed, step-by-step implementation plan.\n\n3. Use the Agent tool to spawn a review agent to scrutinize the plan from various perspectives, checking for any omitted steps, potential risks, or corresponding mitigation strategies.\n\n4. Incorporate the feedback from the review process, then invoke `ExitPlanMode` to submit your final plan.\n\n5. Once `ExitPlanMode` returns a result:\n- If approved: Proceed to execute the plan within this session.\n- If rejected: Revise the plan based on the feedback provided, and invoke `ExitPlanMode` again.\n- If an error occurs (including the message "Not in Plan Mode"): Do *not* follow the suggestions provided by the error message; instead, prompt the user for further instructions.\n\nYour final plan must include the following elements:\n- A clear summary of the implementation strategy;\n- An ordered list of files to be created or modified, specifying the exact changes required for each;\n- A step-by-step sequence for execution;\n- Testing and verification procedures;\n- Potential risks and their corresponding mitigation strategies.\n\n6. Upon the successful completion of the final plan\'s execution:\nIf code changes have been made and the project is Git-based, invoke `TeamCreate` to assemble a "Code Review Team." The team\'s objective is to analyze the current Git change log and validate the modifications from various perspectives and roles, specifically to:\n- Confirm that the original requirements and objectives have been met;\n- Review any newly added code for potential side effects or regressions that might disrupt existing functionality;\n- Review the implemented code for any oversights or errors.\nOnce the review report is generated, analyze it to formulate a set of recommended modifications; proceed to implement these recommended modifications by default.\n</system-reminder>',researchExpert:'<system-reminder>\n[SCOPED INSTRUCTION] The following instructions are intended for the next 1–3 interactions. Once the task is complete, these instructions should be gradually deprioritized and no longer influence subsequent interactions.\n\nLeverage a multi-agent exploration mechanism to formulate an exceptionally detailed implementation plan.\n\nInstructions:\n1. Utilize the Agent tool to spawn parallel agents that simultaneously explore various facets of the requirements:\n- If necessary, deploy a preliminary investigator to conduct an initial survey of industry-specific solutions using `webSearch`;\n- If necessary, deploy a specialized investigator to research authoritative sources—such as academic papers, news articles, and research reports—using `webSearch`;\n- Assign an agent to synthesize the target solution, while simultaneously verifying the rigor and credibility of the gathered papers, news, and research reports;\n- If necessary, assign an agent to analyze competitor data to provide supplementary analytical perspectives;\n- If necessary, assign an agent to handle the implementation of a product demo (generating outputs such as HTML, Markdown, etc.);\n- If the task is sufficiently complex, you may assign additional teammates to the roles defined above, or introduce other specialized roles; you are permitted to schedule up to 5 teammates concurrently.\n\n2. Synthesize the findings from the aforementioned agents into a comprehensive, step-by-step implementation plan.\n\n3. Utilize the Agent tool to spawn a set of parallel review agents; these agents shall scrutinize the plan from multiple roles and perspectives to identify any omitted steps and to propose reasonable additions or optimizations.\n\n4. Consolidate the feedback received from the review agents, then invoke `ExitPlanMode` to submit your final plan.\n\n5. Upon receiving the result from `ExitPlanMode`:\n- If Approved: Proceed to execute the plan within this current session.\n- If Rejected: Revise the plan based on the provided feedback, and then invoke `ExitPlanMode` once again.\n- If an Error Occurs (including the message "Not in Plan Mode"): Do *not* follow the suggestions provided by the error message; instead, prompt the user for further instructions.\n\nYour final plan must include the following elements:\n- A clear summary of the proposed implementation strategy;\n- An ordered list of files to be created or modified, specifying the exact changes required for each;\n- A step-by-step sequence for executing the implementation;\n- Identification of potential risks and corresponding mitigation strategies;\n- Creative ideation and suggestions for advanced enhancements;\n- If a product demo was generated, place the corresponding demo output in an appropriate location and notify the user.\n</system-reminder>'};function buildLocalUltraplan(userPrompt,variant="codeExpert",seedPlan,customContent){let template;if("custom"===variant){if(template=function(content2){const body2=(content2||"").trim();return body2?`<system-reminder>\n[SCOPED INSTRUCTION] The following instructions are intended for the next 1–3 interactions. Once the task is complete, these instructions should be gradually deprioritized and no longer influence subsequent interactions.\n\n${body2}\n</system-reminder>`:""}(customContent),!template)return""}else template=ULTRAPLAN_VARIANTS[variant]||ULTRAPLAN_VARIANTS.codeExpert;const parts=[];return parts.push(template),userPrompt&&parts.push("",userPrompt),parts.join("\n")}const styles$g_helpBtn="_helpBtn_19lpl_1",styles$g_modalBody="_modalBody_19lpl_25",styles$g_spinWrap="_spinWrap_19lpl_124",KNOWN_DOCS=new Set(["Tool-Bash","Tool-Read","Tool-Edit","Tool-Write","Tool-Glob","Tool-Grep","Tool-NotebookEdit","Tool-WebFetch","Tool-WebSearch","Tool-Agent","Tool-TaskOutput","Tool-TaskStop","Tool-TaskCreate","Tool-TaskGet","Tool-TaskUpdate","Tool-TaskList","Tool-TeamCreate","Tool-TeamDelete","Tool-SendMessage","SubAgent-Search","Tool-EnterPlanMode","Tool-ExitPlanMode","Tool-AskUserQuestion","Tool-Skill","Tool-getDiagnostics","Tool-executeCode","Tool-EnterWorktree","Tool-ExitWorktree","Tool-CronCreate","Tool-CronDelete","Tool-CronList","Tool-Monitor","Tool-PushNotification","Tool-RemoteTrigger","Tool-ScheduleWakeup","MainAgent","Teammate","BodyFields","ResponseFields","Tools","ToolsFirst","CacheRebuild","BodyDiffJSON","TranslateContextPollution","KVCacheContent","ProxySwitch","GlobalSettings","QRCode","UltraPlan","CustomUltraplanExpert"]);function ConceptHelp({doc:doc,zIndex:zIndex,children:children}){const[open,setOpen]=reactExports.useState(!1),[loading2,setLoading]=reactExports.useState(!1),[html,setHtml]=reactExports.useState(""),[title2,setTitle]=reactExports.useState("");if(!doc||!KNOWN_DOCS.has(doc))return children||null;const loadDoc=reactExports.useCallback(async()=>{setOpen(!0),setLoading(!0),setHtml(""),setTitle(doc);const lang=getLang();let md=null;try{const res=await fetch(apiUrl(`/api/concept?lang=${lang}&doc=${encodeURIComponent(doc)}`));res.ok&&(md=await res.text())}catch(_){}if(md){const firstLine=md.match(/^#\s+(.+)/m);firstLine&&setTitle(firstLine[1]),setHtml(renderMarkdown(md))}else setHtml("<p>Document not found.</p>");setLoading(!1)},[doc]),modalStyles=isMobile&&!isPad?{header:{padding:"8px 12px",margin:0},body:{maxHeight:"80vh",overflow:"auto",padding:"8px 10px"},content:{padding:0}}:{body:{padding:"16px 24px 24px",background:"var(--bg-container)",borderRadius:"4px"},content:{padding:"12px 20px"}},triggerHandlers={onClick:e=>{e.stopPropagation(),e.nativeEvent.stopImmediatePropagation(),loadDoc()},onMouseDown:e=>{e.stopPropagation(),e.nativeEvent.stopImmediatePropagation()},onPointerDown:e=>{e.stopPropagation(),e.nativeEvent.stopImmediatePropagation()}};return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[children?React.cloneElement(children,{...triggerHandlers,style:{cursor:"pointer",...children.props.style||{}}}):jsxRuntimeExports.jsx("span",{className:styles$g_helpBtn,...triggerHandlers,children:"?"}),jsxRuntimeExports.jsx(Modal,{title:title2,open:open,onCancel:()=>setOpen(!1),footer:null,width:isMobile&&!isPad?"98vw":800,centered:isMobile&&!isPad,styles:modalStyles,...zIndex?{zIndex:zIndex}:{},wrapProps:{onMouseDown:e=>e.stopPropagation()},children:loading2?jsxRuntimeExports.jsx("div",{className:styles$g_spinWrap,children:jsxRuntimeExports.jsx(Spin,{})}):jsxRuntimeExports.jsx("div",{className:styles$g_modalBody,dangerouslySetInnerHTML:{__html:html}})})]})}const styles$f={titleRow:"_titleRow_mfv69_1",field:"_field_mfv69_7",titleInput:"_titleInput_mfv69_11",contentTextarea:"_contentTextarea_mfv69_27",footer:"_footer_mfv69_48",footerRight:"_footerRight_mfv69_55"};function CustomUltraplanEditModal({open:open,initial:initial,onSave:onSave,onDelete:onDelete,onClose:onClose}){const[title2,setTitle]=reactExports.useState(""),[content2,setContent]=reactExports.useState("");reactExports.useEffect(()=>{open&&(setTitle((null==initial?void 0:initial.title)||""),setContent((null==initial?void 0:initial.content)||""))},[open,initial]);const canSave=title2.trim().length>0&&content2.trim().length>0,isEdit=!!(null==initial?void 0:initial.id),footer2=jsxRuntimeExports.jsxs("div",{className:styles$f.footer,children:[jsxRuntimeExports.jsx("div",{className:styles$f.footerLeft,children:isEdit&&jsxRuntimeExports.jsx(Popconfirm,{title:t("ui.ultraplan.customDeleteConfirm"),okText:t("ui.ultraplan.customDelete"),cancelText:t("ui.ultraplan.customCancel"),onConfirm:()=>{isEdit&&onDelete(initial.id)},children:jsxRuntimeExports.jsx(Button,{danger:!0,children:t("ui.ultraplan.customDelete")})})}),jsxRuntimeExports.jsxs("div",{className:styles$f.footerRight,children:[jsxRuntimeExports.jsx(Button,{onClick:onClose,children:t("ui.ultraplan.customCancel")}),jsxRuntimeExports.jsx(Button,{type:"primary",disabled:!canSave,onClick:()=>{if(!canSave)return;const id=isEdit?initial.id:`cue-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;onSave({id:id,title:title2.trim(),content:content2.trim()})},children:t("ui.ultraplan.customSave")})]})]});return jsxRuntimeExports.jsxs(Modal,{title:jsxRuntimeExports.jsxs("span",{className:styles$f.titleRow,children:[t(isEdit?"ui.ultraplan.customEditTitle":"ui.ultraplan.customCreateTitle"),jsxRuntimeExports.jsx(ConceptHelp,{doc:"CustomUltraplanExpert",zIndex:1300})]}),open:open,onCancel:onClose,footer:footer2,width:600,zIndex:1200,destroyOnClose:!0,styles:{content:{background:"var(--bg-elevated)",border:"1px solid var(--border-light)"},header:{background:"var(--bg-elevated)",borderBottom:"none"}},children:[jsxRuntimeExports.jsx("div",{className:styles$f.field,children:jsxRuntimeExports.jsx("input",{className:styles$f.titleInput,placeholder:t("ui.ultraplan.customTitlePlaceholder"),value:title2,maxLength:30,onChange:e=>setTitle(e.target.value),autoFocus:!0})}),jsxRuntimeExports.jsx("div",{className:styles$f.field,children:jsxRuntimeExports.jsx("textarea",{className:styles$f.contentTextarea,placeholder:t("ui.ultraplan.customContentPlaceholder"),value:content2,rows:10,onChange:e=>setContent(e.target.value)})})]})}function ConfirmRemoveButton({title:title2,onConfirm:onConfirm,className:className,ariaLabel:ariaLabel,tag:tag="button",children:children,onPopupOpenChange:onPopupOpenChange}){const Tag2=tag,role="button"===tag?void 0:"button";if(isMobile){const handleClick=e=>{e.stopPropagation(),null==onPopupOpenChange||onPopupOpenChange(!0),Modal.confirm({title:title2,okText:t("ui.common.confirmYes"),cancelText:t("ui.common.confirmCancel"),okButtonProps:{danger:!0},centered:!0,zIndex:1200,onOk:()=>{onConfirm(),null==onPopupOpenChange||onPopupOpenChange(!1)},onCancel:()=>null==onPopupOpenChange?void 0:onPopupOpenChange(!1)})};return jsxRuntimeExports.jsx(Tag2,{className:className,onClick:handleClick,"aria-label":ariaLabel,role:role,children:children})}return jsxRuntimeExports.jsx(Popconfirm,{title:title2,okText:t("ui.common.confirmYes"),cancelText:t("ui.common.confirmCancel"),okButtonProps:{danger:!0},onOpenChange:onPopupOpenChange,onConfirm:e=>{null==e||e.stopPropagation(),onConfirm()},onCancel:e=>null==e?void 0:e.stopPropagation(),children:jsxRuntimeExports.jsx(Tag2,{className:className,onClick:e=>e.stopPropagation(),"aria-label":ariaLabel,role:role,children:children})})}const KEEP_FORMAT=new Set(["image/png","image/webp"]);function loadViaImgElement(file){return new Promise((resolve,reject)=>{const url=URL.createObjectURL(file),img=new Image;img.onload=()=>{URL.revokeObjectURL(url),resolve(img)},img.onerror=e=>{URL.revokeObjectURL(url),reject(e)},img.src=url})}async function resizeImageIfNeeded(file,maxDim=2e3){var _a,_b,_c,_d,_e;if(!file||"object"!=typeof file)return file;const type=(file.type||"").toLowerCase();if(!type.startsWith("image/"))return file;if("image/gif"===type)return file;let source2;try{source2=await function(file){return"function"==typeof createImageBitmap?createImageBitmap(file).catch(()=>loadViaImgElement(file)):loadViaImgElement(file)}(file)}catch{return file}const srcW=source2.width||source2.naturalWidth,srcH=source2.height||source2.naturalHeight;if(!srcW||!srcH){try{null==(_a=source2.close)||_a.call(source2)}catch{}return file}const maxSide=Math.max(srcW,srcH);if(maxSide<=maxDim){try{null==(_b=source2.close)||_b.call(source2)}catch{}return file}const scale=maxDim/maxSide,dstW=Math.max(1,Math.round(srcW*scale)),dstH=Math.max(1,Math.round(srcH*scale)),canvas=document.createElement("canvas");canvas.width=dstW,canvas.height=dstH;const ctx=canvas.getContext("2d");if(!ctx){try{null==(_c=source2.close)||_c.call(source2)}catch{}return file}ctx.imageSmoothingEnabled=!0,ctx.imageSmoothingQuality="high";try{ctx.drawImage(source2,0,0,dstW,dstH)}catch{try{null==(_d=source2.close)||_d.call(source2)}catch{}return file}try{null==(_e=source2.close)||_e.call(source2)}catch{}const outType=(inputType=type,KEEP_FORMAT.has(inputType)?inputType:"image/jpeg");var inputType;const quality="image/png"===outType?void 0:.92;let blob;try{blob=await function(canvas,type,quality){return new Promise((resolve,reject)=>{canvas.toBlob(blob=>blob?resolve(blob):reject(new Error("toBlob returned null")),type,quality)})}(canvas,outType,quality)}catch{return file}const nameOut=function(originalName,outType){const ext="image/jpeg"===outType?"jpg":"image/png"===outType?"png":"image/webp"===outType?"webp":"img",dot=originalName.lastIndexOf(".");return`${dot>0?originalName.slice(0,dot):originalName}.${ext}`}(file.name||"image",outType);return new File([blob],nameOut,{type:outType,lastModified:Date.now()})}const darkTerminalTheme={background:"#0a0a0a",foreground:"#d4d4d4",cursor:"#0a0a0a",selectionBackground:"#264f78",black:"#000000",red:"#ef4444",green:"#73c991",yellow:"#fbbf24",blue:"#3b82f6",magenta:"#d946ef",cyan:"#06b6d4",white:"#e5e5e5",brightBlack:"#666666",brightRed:"#ff7b7b",brightGreen:"#9ddc6f",brightYellow:"#ffce5b",brightBlue:"#66b3ff",brightMagenta:"#e88ce8",brightCyan:"#7eddd9",brightWhite:"#ffffff"},lightTerminalTheme={background:"#ffffff",foreground:"#333333",cursor:"#333333",selectionBackground:"#cce5ff",black:"#000000",red:"#CD3131",green:"#107C10",yellow:"#949800",blue:"#0451A5",magenta:"#BC05BC",cyan:"#0598BC",white:"#555555",brightBlack:"#666666",brightRed:"#CD3131",brightGreen:"#14CE14",brightYellow:"#B5BA00",brightBlue:"#0451A5",brightMagenta:"#BC05BC",brightCyan:"#0598BC",brightWhite:"#A5A5A5"},VIRTUAL_KEYS=[{label:"↑",seq:""},{label:"↓",seq:""},{label:"←",seq:""},{label:"→",seq:""},{label:"Enter",seq:"\r"},{label:"Tab",seq:"\t"},{label:"Esc",seq:""},{label:"Ctrl+C",seq:""}];function UploadIcon(){return jsxRuntimeExports.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),jsxRuntimeExports.jsx("polyline",{points:"17 8 12 3 7 8"}),jsxRuntimeExports.jsx("line",{x1:"12",y1:"3",x2:"12",y2:"15"})]})}function UltraplanIcon(){return jsxRuntimeExports.jsxs("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("circle",{cx:"12",cy:"12",r:"2.5"}),jsxRuntimeExports.jsx("ellipse",{cx:"12",cy:"12",rx:"10",ry:"4"}),jsxRuntimeExports.jsx("ellipse",{cx:"12",cy:"12",rx:"10",ry:"4",transform:"rotate(60 12 12)"}),jsxRuntimeExports.jsx("ellipse",{cx:"12",cy:"12",rx:"10",ry:"4",transform:"rotate(120 12 12)"})]})}function AgentTeamIcon(){return jsxRuntimeExports.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("path",{d:"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"}),jsxRuntimeExports.jsx("circle",{cx:"9",cy:"7",r:"4"}),jsxRuntimeExports.jsx("path",{d:"M23 21v-2a4 4 0 0 0-3-3.87"}),jsxRuntimeExports.jsx("path",{d:"M16 3.13a4 4 0 0 1 0 7.75"})]})}async function uploadFileAndGetPath(file){let upload=file;try{upload=await resizeImageIfNeeded(file,2e3)}catch{upload=file}if(upload.size>104857600)throw new Error("File too large (max 100MB)");const form=new FormData;form.append("file",upload);const res=await fetch(apiUrl("/api/upload"),{method:"POST",body:form}),data=await res.json();if(!data.ok)throw new Error(data.error||"Upload failed");return data.path}class TerminalPanel extends React.Component{constructor(props){super(props),__publicField(this,"_handlePaste",e=>{var _a,_b,_c,_d;const items=null==(_a=e.clipboardData)?void 0:_a.items;if(items)for(const item of items)if(item.type.startsWith("image/")){e.preventDefault(),e.stopPropagation();const file=item.getAsFile();return void(file&&this._uploadClipboardImage(file))}if(null==(_c=null==(_b=this.terminal)?void 0:_b.modes)?void 0:_c.bracketedPasteMode)return;const text=null==(_d=e.clipboardData)?void 0:_d.getData("text");if(text&&this.ws&&this.ws.readyState===WebSocket.OPEN&&(text.includes("\n")||text.includes("\r"))){e.preventDefault(),e.stopPropagation();const wrapped=`[200~${text}[201~`;this.ws.send(JSON.stringify({type:"input",data:wrapped}))}}),__publicField(this,"_uploadClipboardImage",async file=>{try{const optimized=await this._downscaleForRetina(file),path=await uploadFileAndGetPath(optimized);this.props.onFilePath&&this.props.onFilePath(path),this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"image-upload-notify",path:path,source:"terminal"})),this.terminal&&this.terminal.focus()}catch(err){console.error("[CC Viewer] Clipboard image upload failed:",err),staticMethods.error(t("ui.terminal.pasteImageFailed"))}}),__publicField(this,"handleVirtualKey",seq=>{var _a,_b;if(this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"input",data:seq})),isMobile&&!isPad){const ta=null==(_a=this.containerRef.current)?void 0:_a.querySelector(".xterm-helper-textarea");ta&&ta.blur()}else null==(_b=this.terminal)||_b.focus()}),__publicField(this,"_vkTouchStart",e=>{e.preventDefault();const touch=e.touches[0];this._vkStartX=touch.clientX,this._vkStartY=touch.clientY,this._vkMoved=!1,this._vkTarget=e.currentTarget,this._vkTarget.classList.add(styles$h_virtualKeyPressed)}),__publicField(this,"_vkTouchMove",e=>{if(this._vkMoved)return;const touch=e.touches[0],dx=touch.clientX-this._vkStartX,dy=touch.clientY-this._vkStartY;dx*dx+dy*dy>64&&(this._vkMoved=!0)}),__publicField(this,"_vkTouchEnd",(action,e)=>{var _a;e.preventDefault(),null==(_a=this._vkTarget)||_a.classList.remove(styles$h_virtualKeyPressed),this._vkTarget=null,this._vkMoved||action()}),__publicField(this,"handleFileUpload",async e=>{var _a;const file=null==(_a=e.target.files)?void 0:_a[0];if(file){try{const path=await uploadFileAndGetPath(file);this.props.onFilePath&&this.props.onFilePath(path),this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"image-upload-notify",path:path,source:"terminal"})),isMobile&&!isPad||!this.terminal||this.terminal.focus()}catch(err){console.error("[CC Viewer] Upload failed:",err)}e.target.value=""}}),__publicField(this,"_savePresetShortcuts",(items,dismissed)=>{const payload={presetShortcuts:items.map(i=>{const o2={teamName:i.teamName,description:i.description};return i.builtinId&&(o2.builtinId=i.builtinId),i.modified&&(o2.modified=!0),o2})};dismissed&&(payload.dismissedBuiltinPresets=[...dismissed]),fetch(apiUrl("/api/preferences"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(payload)}).then(()=>{window.dispatchEvent(new Event("ccv-presets-changed"))}).catch(()=>{})}),__publicField(this,"handlePresetAdd",()=>{const description=this.state.presetAddText.trim(),teamName=this.state.presetAddName.trim();if(!description&&!teamName)return;const{presetEditId:presetEditId,presetItems:presetItems}=this.state;let next;next=presetEditId?presetItems.map(i=>{if(i.id!==presetEditId)return i;const updated={...i,teamName:teamName,description:description};return i.builtinId&&(updated.modified=!0),updated}):[...presetItems,{id:Date.now(),teamName:teamName,description:description}],this.setState({presetItems:next,presetAddVisible:!1,presetAddText:"",presetAddName:"",presetEditId:null}),this._savePresetShortcuts(next)}),__publicField(this,"handlePresetDelete",()=>{const{presetItems:presetItems,presetSelected:presetSelected}=this.state;if(0===presetSelected.size)return;const dismissed=new Set(this._dismissedBuiltinPresets||[]);for(const item of presetItems)presetSelected.has(item.id)&&item.builtinId&&dismissed.add(item.builtinId);this._dismissedBuiltinPresets=dismissed;const next=presetItems.filter(i=>!presetSelected.has(i.id));this.setState({presetItems:next,presetSelected:new Set}),this._savePresetShortcuts(next,dismissed)}),__publicField(this,"handlePresetToggle",id=>{this.setState(prev=>{const next=new Set(prev.presetSelected);return next.has(id)?next.delete(id):next.add(id),{presetSelected:next}})}),__publicField(this,"_dragIdx",null),__publicField(this,"_dragOverIdx",null),__publicField(this,"handleDragStart",(idx,e)=>{e.stopPropagation(),this._dragIdx=idx,e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text/x-preset-reorder",String(idx)),requestAnimationFrame(()=>this.forceUpdate())}),__publicField(this,"handleDragOver",(idx,e)=>{e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move",this._dragOverIdx!==idx&&(this._dragOverIdx=idx,this.forceUpdate())}),__publicField(this,"handleDragEnd",e=>{e&&e.stopPropagation(),this._dragIdx=null,this._dragOverIdx=null,this.forceUpdate()}),__publicField(this,"handleDragLeave",(idx,e)=>{e.stopPropagation(),this._dragOverIdx===idx&&(this._dragOverIdx=null,this.forceUpdate())}),__publicField(this,"handleDrop",(idx,e)=>{e.preventDefault(),e.stopPropagation();const from=this._dragIdx;if(null===from||from===idx)return void this.handleDragEnd();const items=[...this.state.presetItems],[moved]=items.splice(from,1);items.splice(from<idx?idx-1:idx,0,moved),this.setState({presetItems:items}),this._savePresetShortcuts(items),this.handleDragEnd()}),__publicField(this,"handlePresetSend",description=>{description&&(this.setState({agentTeamPopoverOpen:!1}),this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"input",data:`[200~${description}[201~`})),isMobile&&!isPad||!this.terminal||this.terminal.focus())}),__publicField(this,"handleUltraplanSend",()=>{const trimmed=this.state.ultraplanPrompt.trim();if(!trimmed&&0===this.state.ultraplanFiles.length)return;const filePaths=this.state.ultraplanFiles.map(f=>`"${f.path}"`).join(" "),userInput=filePaths?trimmed?`${filePaths} ${trimmed}`:filePaths:trimmed,variant=this.state.ultraplanVariant;let assembled;if("string"==typeof variant&&variant.startsWith("custom:")){const id=variant.slice(7),item=this.state.customUltraplanExperts.find(e=>e.id===id);if(!item)return;assembled=buildLocalUltraplan(userInput,"custom",0,item.content)}else assembled=buildLocalUltraplan(userInput,variant);assembled&&(this.setState({ultraplanOpen:!1,ultraplanPrompt:"",ultraplanVariant:"codeExpert",ultraplanFiles:[]}),this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"input",data:`[200~${assembled}[201~\r`})),isMobile&&!isPad||!this.terminal||this.terminal.focus())}),__publicField(this,"openCustomUltraplanEditor",item=>{this.setState(prev=>({customUltraplanEditOpen:!0,customUltraplanEditing:item||null,_ultraplanWasOpenBeforeEdit:prev.ultraplanOpen,ultraplanOpen:!1}))}),__publicField(this,"closeCustomUltraplanEditor",()=>{this.setState(prev=>({customUltraplanEditOpen:!1,customUltraplanEditing:null,ultraplanOpen:!!prev._ultraplanWasOpenBeforeEdit,_ultraplanWasOpenBeforeEdit:!1}))}),__publicField(this,"persistCustomUltraplanExperts",experts=>{this.setState({customUltraplanExperts:experts}),fetch(apiUrl("/api/preferences"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({customUltraplanExperts:experts})}).then(()=>window.dispatchEvent(new Event("ccv-presets-changed"))).catch(()=>{})}),__publicField(this,"saveCustomUltraplanExpert",item=>{const existing=this.state.customUltraplanExperts,next=existing.findIndex(e=>e.id===item.id)>=0?existing.map(e=>e.id===item.id?item:e):[...existing,item];this.persistCustomUltraplanExperts(next),this.closeCustomUltraplanEditor()}),__publicField(this,"deleteCustomUltraplanExpert",id=>{const next=this.state.customUltraplanExperts.filter(e=>e.id!==id);this.persistCustomUltraplanExperts(next),this.state.ultraplanVariant==="custom:"+id&&this.setState({ultraplanVariant:"codeExpert"}),this.closeCustomUltraplanEditor()}),__publicField(this,"handleUltraplanUpload",async()=>{const input=document.createElement("input");input.type="file",input.onchange=async e=>{var _a;const file=null==(_a=e.target.files)?void 0:_a[0];if(file)try{const path=await uploadFileAndGetPath(file);this.setState(prev=>({ultraplanFiles:[...prev.ultraplanFiles,{name:file.name,path:path}]}))}catch(err){console.error("Ultraplan upload failed:",err),staticMethods.error((null==err?void 0:err.message)||"Upload failed")}},input.click()}),__publicField(this,"handleUltraplanPaste",async e=>{var _a;const items=null==(_a=e.clipboardData)?void 0:_a.items;if(items)for(const item of items)if(item.type.startsWith("image/")){e.preventDefault();const file=item.getAsFile();if(!file)return;try{const path=await uploadFileAndGetPath(file),name=file.name||`paste-${Date.now()}.png`;this.setState(prev=>({ultraplanFiles:[...prev.ultraplanFiles,{name:name,path:path}]}))}catch(err){console.error("Ultraplan paste upload failed:",err),staticMethods.error((null==err?void 0:err.message)||"Upload failed")}return}}),__publicField(this,"handleUltraplanRemoveFile",idx=>{this.setState(prev=>({ultraplanFiles:prev.ultraplanFiles.filter((_,i)=>i!==idx)}))}),__publicField(this,"handleEnableAgentTeam",()=>{if(!this.state.agentTeamEnabling){if(this.setState({agentTeamEnabling:!0}),this.ws&&this.ws.readyState===WebSocket.OPEN){const settingsPath=`${_configDir}/settings.json`,prompt=`Add "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" to the env object in ${settingsPath}. If the env key does not exist, create it. Preserve all existing content. Only modify this one field. If ${settingsPath} does not exist, instead add the line: export CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 to the user's shell profile (~/.zshrc or ~/.bashrc).`;this.ws.send(JSON.stringify({type:"input",data:prompt+"\r"})),staticMethods.success("需要重启 Claude Code 才能生效")}isMobile&&!isPad||!this.terminal||this.terminal.focus()}}),this.containerRef=React.createRef(),this.fileInputRef=React.createRef(),this.terminal=null,this.fitAddon=null,this.ws=null,this.resizeObserver=null,this.state={terminalFocused:!1,agentTeamEnabled:!1,agentTeamPopoverOpen:!1,ultraplanOpen:!1,ultraplanVariant:"codeExpert",ultraplanPrompt:"",ultraplanFiles:[],customUltraplanExperts:[],customUltraplanEditOpen:!1,customUltraplanEditing:null,presetModalVisible:!1,presetItems:[],presetSelected:new Set,presetAddVisible:!1,presetAddText:"",presetAddName:"",presetEditId:null,lightbox:null,ultraplanLightbox:null,ultraplanConfirming:!1}}componentDidMount(){this.initTerminal(),this.connectWebSocket(),this.setupResizeObserver(),fetch(apiUrl("/api/claude-settings")).then(r=>r.json()).then(data=>{var _a;const enabled="1"===(null==(_a=null==data?void 0:data.env)?void 0:_a.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS);this.setState({agentTeamEnabled:enabled})}).catch(()=>{}),this._loadPresetShortcuts(),this._onPresetsChanged=()=>this._loadPresetShortcuts(),window.addEventListener("ccv-presets-changed",this._onPresetsChanged),this._onFocusTerminal=()=>{var _a,_b;this.terminal&&(null==(_b=null==(_a=this.containerRef)?void 0:_a.current)?void 0:_b.offsetWidth)>0&&this.terminal.focus()},window.addEventListener("ccv-focus-terminal",this._onFocusTerminal),this._themeObserver=new MutationObserver(()=>{if(this.terminal){const isDark="light"!==document.documentElement.getAttribute("data-theme");this.terminal.options.theme=isDark?darkTerminalTheme:lightTerminalTheme}}),this._themeObserver.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]})}_loadPresetShortcuts(){fetch(apiUrl("/api/preferences")).then(r=>r.json()).then(data=>{const dismissed=Array.isArray(data.dismissedBuiltinPresets)?new Set(data.dismissedBuiltinPresets):new Set;this._dismissedBuiltinPresets=dismissed;let items=[];Array.isArray(data.presetShortcuts)&&(items=data.presetShortcuts.map((item,i)=>"string"==typeof item?{id:Date.now()+i,teamName:"",description:item}:{id:Date.now()+i,teamName:item.teamName||"",description:item.description||"",...item.builtinId?{builtinId:item.builtinId}:{},...item.modified?{modified:!0}:{}}));const existingBuiltinIds=new Set(items.filter(i=>i.builtinId).map(i=>i.builtinId));for(const bp of BUILTIN_PRESETS)dismissed.has(bp.builtinId)||existingBuiltinIds.has(bp.builtinId)||items.unshift({id:Date.now()+Math.random(),builtinId:bp.builtinId,teamName:bp.teamName,description:bp.description});const customExperts=Array.isArray(data.customUltraplanExperts)?data.customUltraplanExperts:[],current=this.state.ultraplanVariant,next={presetItems:items,customUltraplanExperts:customExperts};if("string"==typeof current&&current.startsWith("custom:")){const id=current.slice(7);customExperts.some(e=>e.id===id)||(next.ultraplanVariant="codeExpert")}this.setState(next)}).catch(()=>{})}componentWillUnmount(){var _a;(null==(_a=this.terminal)?void 0:_a.textarea)&&(this.terminal.textarea.removeEventListener("focus",this._handleTermFocus),this.terminal.textarea.removeEventListener("blur",this._handleTermBlur)),this._themeObserver&&(this._themeObserver.disconnect(),this._themeObserver=null),window.removeEventListener("ccv-presets-changed",this._onPresetsChanged),window.removeEventListener("ccv-focus-terminal",this._onFocusTerminal),this._stopMobileMomentum&&this._stopMobileMomentum(),this._writeTimer&&cancelAnimationFrame(this._writeTimer),this._wsReconnectTimer&&clearTimeout(this._wsReconnectTimer),this.ws&&(this.ws.onclose=null,this.ws.close(),this.ws=null),this._resizeDebounceTimer&&clearTimeout(this._resizeDebounceTimer),this._webglRecoveryTimer&&clearTimeout(this._webglRecoveryTimer),this.resizeObserver&&this.resizeObserver.disconnect(),this.webglAddon&&(this.webglAddon.dispose(),this.webglAddon=null),this.terminal&&(this.terminal.textarea&&this.terminal.textarea.removeEventListener("paste",this._handlePaste,!0),this.terminal.dispose())}initTerminal(){const isDark="light"!==document.documentElement.getAttribute("data-theme");this.terminal=new Dl({cursorBlink:!1,cursorStyle:"bar",cursorWidth:1,cursorInactiveStyle:"none",fontSize:isMobile&&!isPad?11:13,fontFamily:'Menlo, Monaco, "Courier New", monospace',theme:isDark?darkTerminalTheme:lightTerminalTheme,allowProposedApi:!0,scrollback:isPad?3e3:isIOS?200:isMobile?1e3:3e3,smoothScrollDuration:0,scrollOnUserInput:!0}),this.fitAddon=new o,this.terminal.loadAddon(this.fitAddon),this.terminal.loadAddon(new L);const unicode11=new Ke;this.terminal.loadAddon(unicode11),this.terminal.unicode.activeVersion="11",this.terminal.open(this.containerRef.current),this._handleTermFocus=()=>this.setState({terminalFocused:!0}),this._handleTermBlur=()=>this.setState({terminalFocused:!1});const termTextarea=this.terminal.textarea;termTextarea&&(termTextarea.addEventListener("focus",this._handleTermFocus),termTextarea.addEventListener("blur",this._handleTermBlur)),isIOS||this._loadWebglAddon(!1),this._writeBuffer="",this._writeTimer=null,isMobile&&!isPad?requestAnimationFrame(()=>{this._mobileFixedResize()}):requestAnimationFrame(()=>{this.fitAddon.fit(),this.terminal.focus()}),this.terminal.attachCustomKeyEventHandler(e=>{var _a,_b,_c,_d,_e,_f;if("keydown"===e.type&&"Enter"===e.key&&e.shiftKey)return e.preventDefault(),e.stopPropagation(),this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"input",data:"\r"})),!1;if("keydown"===e.type&&"Enter"===e.key&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey){const pending=this.props.pendingImages,inAlternateScreen="alternate"===(null==(_c=null==(_b=null==(_a=this.terminal)?void 0:_a.buffer)?void 0:_b.active)?void 0:_c.type);if((null==pending?void 0:pending.length)>0&&!inAlternateScreen&&(null==(_d=this.ws)?void 0:_d.readyState)===WebSocket.OPEN){const paths=pending.map(img=>`'${img.path.replace(/'/g,"'\\''")}'`).join(" ");return this.ws.send(JSON.stringify({type:"input",data:paths+" "})),null==(_f=(_e=this.props).onClearPendingImages)||_f.call(_e),!1}}return!0}),this.terminal.attachCustomWheelEventHandler(ev=>{var _a,_b,_c,_d,_e;if("alternate"!==(null==(_c=null==(_b=null==(_a=this.terminal)?void 0:_a.buffer)?void 0:_b.active)?void 0:_c.type))return!0;const scroller=null==(_e=(_d=this.props).getChatScroller)?void 0:_e.call(_d);if(scroller){const px=1===ev.deltaMode?16*ev.deltaY:2===ev.deltaMode?ev.deltaY*(scroller.clientHeight||0):ev.deltaY;scroller.scrollTop+=px}return ev.preventDefault(),!1}),this.terminal.onData(data=>{this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"input",data:data}))}),this.terminal.textarea&&this.terminal.textarea.addEventListener("paste",this._handlePaste,!0),isMobile&&this._setupMobileTouchScroll()}_setupMobileTouchScroll(){var _a;const screen=null==(_a=this.containerRef.current)?void 0:_a.querySelector(".xterm-screen");if(!screen)return;const term=this.terminal,getLineHeight=()=>{var _a2,_b,_c,_d;const cellDims=null==(_d=null==(_c=null==(_b=null==(_a2=term._core)?void 0:_a2._renderService)?void 0:_b.dimensions)?void 0:_c.css)?void 0:_d.cell;return(null==cellDims?void 0:cellDims.height)||15};let lastY=0,lastTime=0,momentumRaf=null,pixelAccum=0,pendingDy=0,scrollRaf=null,velocitySamples=[];const stopMomentum=()=>{momentumRaf&&(cancelAnimationFrame(momentumRaf),momentumRaf=null),scrollRaf&&(cancelAnimationFrame(scrollRaf),scrollRaf=null),pendingDy=0,pixelAccum=0},flushScroll=()=>{if(scrollRaf=null,0===pendingDy)return;pixelAccum+=pendingDy,pendingDy=0;const lh=getLineHeight(),lines=Math.trunc(pixelAccum/lh);0!==lines&&(term.scrollLines(lines),pixelAccum-=lines*lh)};screen.addEventListener("touchstart",e=>{stopMomentum(),1===e.touches.length&&(lastY=e.touches[0].clientY,lastTime=performance.now(),velocitySamples=[])},{passive:!0}),screen.addEventListener("touchmove",e=>{if(1!==e.touches.length)return;const y=e.touches[0].clientY,now=performance.now(),dt=now-lastTime,dy=lastY-y;if(dt>0){const v=dy/dt*16;for(velocitySamples.push({v:v,t:now});velocitySamples.length>0&&now-velocitySamples[0].t>100;)velocitySamples.shift()}pendingDy+=dy,scrollRaf||(scrollRaf=requestAnimationFrame(flushScroll)),lastY=y,lastTime=now},{passive:!0}),screen.addEventListener("touchend",()=>{if(scrollRaf&&(cancelAnimationFrame(scrollRaf),scrollRaf=null),0!==pendingDy){pixelAccum+=pendingDy,pendingDy=0;const lh=getLineHeight(),lines=Math.trunc(pixelAccum/lh);0!==lines&&term.scrollLines(lines),pixelAccum=0}let velocity=0;if(velocitySamples.length>=2){let totalWeight=0,weightedV=0;const latest=velocitySamples[velocitySamples.length-1].t;for(const s of velocitySamples){const w=Math.max(0,1-(latest-s.t)/100);weightedV+=s.v*w,totalWeight+=w}velocity=totalWeight>0?weightedV/totalWeight:0}if(velocitySamples=[],Math.abs(velocity)<.5)return;let mAccum=0;const tick=()=>{if(Math.abs(velocity)<.3){const lh2=getLineHeight(),rest=Math.round(mAccum/lh2);return 0!==rest&&term.scrollLines(rest),void(momentumRaf=null)}mAccum+=velocity;const lh=getLineHeight(),lines=Math.trunc(mAccum/lh);0!==lines&&(term.scrollLines(lines),mAccum-=lines*lh),velocity*=.95,momentumRaf=requestAnimationFrame(tick)};momentumRaf=requestAnimationFrame(tick)},{passive:!0}),this._stopMobileMomentum=stopMomentum}connectWebSocket(){const wsUrl=`${"https:"===window.location.protocol?"wss:":"ws:"}//${window.location.host}/ws/terminal`;this.ws=new WebSocket(wsUrl),this.ws.onmessage=event=>{try{const msg=JSON.parse(event.data);"data"===msg.type?this._throttledWrite(msg.data):"exit"===msg.type?(this._flushWrite(),this.terminal.write(`\r\n${t("ui.terminal.exited",{code:msg.exitCode??"?"})}\r\n`),this.terminal.write(`${t("ui.terminal.pressEnterForShell")}\r\n`)):"editor-open"===msg.type?this.props.onEditorOpen&&this.props.onEditorOpen(msg.sessionId,msg.filePath):"state"===msg.type?msg.running||null===msg.exitCode||(this._flushWrite(),this.terminal.write(`${t("ui.terminal.exited",{code:msg.exitCode})}\r\n`),this.terminal.write(`${t("ui.terminal.pressEnterForShell")}\r\n`)):"toast"===msg.type&&(this._flushWrite(),this.terminal.write(`\r\n⚠ ${msg.message}\r\n`))}catch{}},this.ws.onclose=()=>{this._wsReconnectTimer=setTimeout(()=>{var _a;this.containerRef.current&&(null==(_a=this.terminal)||_a.reset(),this.connectWebSocket())},2e3)},this.ws.onopen=()=>{this.sendResize()}}sendResize(){if(this.ws&&this.ws.readyState===WebSocket.OPEN&&this.terminal){const msg={type:"resize",cols:this.terminal.cols,rows:this.terminal.rows};isMobile&&(msg.mobile=!0),this.ws.send(JSON.stringify(msg))}}setupResizeObserver(){isMobile&&!isPad||(this.resizeObserver=new ResizeObserver(()=>{this._resizeDebounceTimer&&clearTimeout(this._resizeDebounceTimer),this._resizeDebounceTimer=setTimeout(()=>{if(this._resizeDebounceTimer=null,this.fitAddon&&this.containerRef.current)try{const vp=this.containerRef.current.querySelector(".xterm-viewport"),prevScrollTop=(null==vp?void 0:vp.scrollTop)??0,prevScrollHeight=(null==vp?void 0:vp.scrollHeight)??1,wasAtBottom=!vp||prevScrollTop+vp.clientHeight>=prevScrollHeight-5;if(this.fitAddon.fit(),vp)if(wasAtBottom)vp.scrollTop=vp.scrollHeight;else{const ratio=prevScrollHeight>0?prevScrollTop/prevScrollHeight:0;vp.scrollTop=ratio*vp.scrollHeight}this.sendResize()}catch{}},150)}),this.containerRef.current&&this.resizeObserver.observe(this.containerRef.current))}_loadWebglAddon(isRetry){try{this.webglAddon=new xr,this.webglAddon.onContextLoss(()=>{var _a;null==(_a=this.webglAddon)||_a.dispose(),this.webglAddon=null,isRetry||(this._webglRecoveryTimer=setTimeout(()=>{this._webglRecoveryTimer=null,this._loadWebglAddon(!0)},1e3))}),this.terminal.loadAddon(this.webglAddon)}catch{this.webglAddon=null}}_mobileFixedResize(){var _a,_b,_c,_d;if(!this.terminal)return;const cellDims=null==(_d=null==(_c=null==(_b=null==(_a=this.terminal._core)?void 0:_a._renderService)?void 0:_b.dimensions)?void 0:_c.css)?void 0:_d.cell;if(!cellDims||!cellDims.width||!cellDims.height)return void setTimeout(()=>this._mobileFixedResize(),50);const availableWidth=window.innerWidth-16,availableHeight=window.innerHeight-40-52-8,currentFontSize=this.terminal.options.fontSize,currentCharWidth=cellDims.width,targetFontSize=Math.floor(currentFontSize*availableWidth/(60*currentCharWidth)*10)/10;this.terminal.options.fontSize=targetFontSize,requestAnimationFrame(()=>{var _a2,_b2,_c2,_d2;const newCellDims=null==(_d2=null==(_c2=null==(_b2=null==(_a2=this.terminal._core)?void 0:_a2._renderService)?void 0:_b2.dimensions)?void 0:_c2.css)?void 0:_d2.cell,lineHeight=(null==newCellDims?void 0:newCellDims.height)||cellDims.height,rows=Math.max(5,Math.min(Math.floor(availableHeight/lineHeight),100));this.terminal.resize(60,rows),this.sendResize()})}_throttledWrite(data){this._writeBuffer+=data,this._writeTimer||(this._writeTimer=requestAnimationFrame(()=>{this._flushWrite()}))}_flushWrite(){if(this._writeTimer&&(cancelAnimationFrame(this._writeTimer),this._writeTimer=null),!this._writeBuffer||!this.terminal)return;if(this._writeBuffer.length<=32768){const buf=this._writeBuffer;this._writeBuffer="",this.terminal.write(buf)}else{const chunk=this._writeBuffer.slice(0,32768);this._writeBuffer=this._writeBuffer.slice(32768),this.terminal.write(chunk),this._writeTimer=requestAnimationFrame(()=>{this._flushWrite()})}}_downscaleForRetina(file){const dpr=window.devicePixelRatio||1;return dpr<=1?Promise.resolve(file):new Promise(resolve=>{const img=new Image,url=URL.createObjectURL(file);img.onload=()=>{URL.revokeObjectURL(url);const w=Math.round(img.width/dpr),h=Math.round(img.height/dpr),canvas=document.createElement("canvas");canvas.width=w,canvas.height=h;const ctx=canvas.getContext("2d");ctx?(ctx.drawImage(img,0,0,w,h),canvas.toBlob(blob=>{resolve(blob?new File([blob],file.name||"clipboard.png",{type:file.type}):file)},file.type)):resolve(file)},img.onerror=()=>{URL.revokeObjectURL(url),resolve(file)},img.src=url})}render(){const{pendingImages:pendingImages,onRemovePendingImage:onRemovePendingImage}=this.props;return jsxRuntimeExports.jsxs("div",{className:`${styles$h_terminalPanel}${this.state.terminalFocused?` ${styles$h_terminalPanelFocused}`:""}`,children:[jsxRuntimeExports.jsx("div",{ref:this.containerRef,className:styles$h_terminalContainer}),(null==pendingImages?void 0:pendingImages.length)>0&&jsxRuntimeExports.jsx("div",{className:styles$h_pendingFileStrip,children:pendingImages.map((img,i)=>{const fileName2=img.path.split("/").pop()||img.path,isImage=/\.(png|jpe?g|gif|svg|bmp|webp|avif|ico|icns)$/i.test(fileName2),src=apiUrl(`/api/file-raw?path=${encodeURIComponent(img.path)}`);return isImage?jsxRuntimeExports.jsxs("div",{className:styles$h_pendingImageItem,children:[jsxRuntimeExports.jsx("img",{src:src,className:styles$h_pendingImageThumb,alt:fileName2,role:"button",tabIndex:0,onClick:()=>this.setState({lightbox:{src:src,alt:fileName2}}),onKeyDown:e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),this.setState({lightbox:{src:src,alt:fileName2}}))}}),jsxRuntimeExports.jsx(ConfirmRemoveButton,{title:t("ui.chatInput.confirmRemoveImage"),onConfirm:()=>null==onRemovePendingImage?void 0:onRemovePendingImage(i),className:styles$h_pendingImageRemove,ariaLabel:t("ui.chatInput.removeImage"),children:"×"})]},img.path):jsxRuntimeExports.jsxs("span",{className:styles$h_pendingFileTag,children:[jsxRuntimeExports.jsx("span",{className:styles$h_pendingFileName,children:fileName2}),jsxRuntimeExports.jsx(ConfirmRemoveButton,{title:t("ui.chatInput.confirmRemoveFile"),onConfirm:()=>null==onRemovePendingImage?void 0:onRemovePendingImage(i),className:styles$h_pendingFileClose,ariaLabel:t("ui.chatInput.removeImage"),children:"×"})]},img.path)})}),jsxRuntimeExports.jsx("input",{type:"file",ref:this.fileInputRef,className:styles$h_hiddenFileInput,onChange:this.handleFileUpload}),(!isMobile||isPad)&&jsxRuntimeExports.jsxs("div",{className:styles$h_terminalToolbar,children:[jsxRuntimeExports.jsxs("button",{className:styles$h_toolbarBtn,onClick:()=>{var _a;return null==(_a=this.fileInputRef.current)?void 0:_a.click()},title:t("ui.terminal.upload"),children:[jsxRuntimeExports.jsx(UploadIcon,{}),jsxRuntimeExports.jsx("span",{children:t("ui.terminal.upload")})]}),this.state.agentTeamEnabled?jsxRuntimeExports.jsx(Popover,{trigger:"hover",placement:"top",open:this.state.agentTeamPopoverOpen,onOpenChange:v=>this.setState({agentTeamPopoverOpen:v}),overlayInnerStyle:{background:"var(--bg-elevated)",border:"1px solid var(--border-hover)",borderRadius:8,padding:4,minWidth:140},content:jsxRuntimeExports.jsxs("div",{className:styles$h_presetMenu,children:[jsxRuntimeExports.jsx("button",{className:`${styles$h_presetMenuItem} ${styles$h_presetMenuItemMuted}`,onClick:()=>{this.setState({agentTeamPopoverOpen:!1,presetModalVisible:!0})},children:t("ui.terminal.customShortcuts")}),0===this.state.presetItems.length?jsxRuntimeExports.jsx("div",{className:styles$h_popoverEmptyHint,children:"—"}):this.state.presetItems.map(item=>{const isBuiltinRaw=item.builtinId&&!item.modified,name=isBuiltinRaw?t(item.teamName):item.teamName,desc=isBuiltinRaw?t(item.description):item.description;return jsxRuntimeExports.jsx("button",{className:styles$h_presetMenuItem,onClick:()=>this.handlePresetSend(desc),title:desc,children:name||desc},item.id)})]}),children:jsxRuntimeExports.jsxs("button",{className:styles$h_toolbarBtn,title:t("ui.terminal.agentTeam"),children:[jsxRuntimeExports.jsx(AgentTeamIcon,{}),jsxRuntimeExports.jsx("span",{children:t("ui.terminal.agentTeam")})]})}):jsxRuntimeExports.jsx(Popover,{trigger:"click",placement:"top",overlayInnerStyle:{background:"var(--bg-elevated)",border:"1px solid var(--border-hover)",borderRadius:8,padding:"12px 16px",maxWidth:360},content:jsxRuntimeExports.jsxs("div",{children:[jsxRuntimeExports.jsx("div",{className:styles$h_agentTeamDisabledTip,children:tc("ui.terminal.agentTeamDisabledTip")}),jsxRuntimeExports.jsx(Button,{type:"primary",size:"small",loading:this.state.agentTeamEnabling,disabled:this.state.agentTeamEnabling,onClick:this.handleEnableAgentTeam,children:this.state.agentTeamEnabling?t("ui.terminal.agentTeamEnabling"):t("ui.terminal.agentTeamEnable")})]}),children:jsxRuntimeExports.jsxs("button",{className:`${styles$h_toolbarBtn} ${styles$h_toolbarBtnDisabled}`,title:t("ui.terminal.agentTeam"),children:[jsxRuntimeExports.jsx(AgentTeamIcon,{}),jsxRuntimeExports.jsx("span",{children:t("ui.terminal.agentTeam")})]})}),this.state.agentTeamEnabled?jsxRuntimeExports.jsx(Popover,{trigger:"click",placement:"top",open:this.state.ultraplanOpen,onOpenChange:v=>{!v&&(this.state.lightbox||this.state.ultraplanLightbox||this.state.ultraplanConfirming)||v||this.setState({ultraplanOpen:!1})},overlayInnerStyle:{background:"var(--bg-elevated)",border:"1px solid var(--border-hover)",borderRadius:8,padding:0,width:420},content:jsxRuntimeExports.jsxs("div",{className:styles$h_ultraplanPanel,children:[jsxRuntimeExports.jsxs("div",{className:styles$h_ultraplanHeader,children:[jsxRuntimeExports.jsxs("span",{className:styles$h_ultraplanHeaderTitle,children:[t("ui.ultraplan.title"),jsxRuntimeExports.jsx(ConceptHelp,{doc:"UltraPlan",zIndex:1100})]}),jsxRuntimeExports.jsx("button",{type:"button",className:styles$h_ultraplanCloseBtn,onClick:()=>this.setState({ultraplanOpen:!1}),children:jsxRuntimeExports.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[jsxRuntimeExports.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),jsxRuntimeExports.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),jsxRuntimeExports.jsxs("div",{className:styles$h_ultraplanVariantRow,children:[jsxRuntimeExports.jsxs("button",{className:`${styles$h_ultraplanRoleBtn} ${"codeExpert"===this.state.ultraplanVariant?styles$h_ultraplanRoleBtnActive:""}`,onClick:()=>this.setState({ultraplanVariant:"codeExpert"}),children:[jsxRuntimeExports.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("polyline",{points:"16 18 22 12 16 6"}),jsxRuntimeExports.jsx("polyline",{points:"8 6 2 12 8 18"})]}),t("ui.ultraplan.roleCodeExpert")]}),jsxRuntimeExports.jsxs("button",{className:`${styles$h_ultraplanRoleBtn} ${"researchExpert"===this.state.ultraplanVariant?styles$h_ultraplanRoleBtnActive:""}`,onClick:()=>this.setState({ultraplanVariant:"researchExpert"}),children:[jsxRuntimeExports.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("circle",{cx:"11",cy:"11",r:"8"}),jsxRuntimeExports.jsx("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]}),t("ui.ultraplan.roleResearchExpert")]}),this.state.customUltraplanExperts.map(item=>{const vkey="custom:"+item.id;return jsxRuntimeExports.jsxs("span",{className:styles$h_ultraplanCustomWrap,children:[jsxRuntimeExports.jsxs("button",{className:`${styles$h_ultraplanRoleBtn} ${this.state.ultraplanVariant===vkey?styles$h_ultraplanRoleBtnActive:""}`,onClick:()=>this.setState({ultraplanVariant:vkey}),title:item.title,children:[jsxRuntimeExports.jsx("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntimeExports.jsx("path",{d:"M12 2l2.4 7.2L22 12l-7.6 2.8L12 22l-2.4-7.2L2 12l7.6-2.8z"})}),jsxRuntimeExports.jsx("span",{className:styles$h_ultraplanCustomTitle,children:item.title})]}),jsxRuntimeExports.jsx("span",{className:styles$h_ultraplanEditPencil,onClick:e=>{e.stopPropagation(),this.openCustomUltraplanEditor(item)},title:t("ui.ultraplan.customEditTitle"),children:jsxRuntimeExports.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("path",{d:"M12 20h9"}),jsxRuntimeExports.jsx("path",{d:"M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4z"})]})})]},item.id)}),jsxRuntimeExports.jsx("button",{type:"button",className:styles$h_ultraplanAddExpertBtn,onClick:()=>this.openCustomUltraplanEditor(null),title:t("ui.ultraplan.customAdd"),"aria-label":t("ui.ultraplan.customAdd"),children:jsxRuntimeExports.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:jsxRuntimeExports.jsx("path",{d:"M12 5v14M5 12h14"})})})]}),(!this.props.modelName||getModelMaxTokens(this.props.modelName)<1e6)&&jsxRuntimeExports.jsx("div",{className:styles$h_ultraplanContextWarning,children:t("ui.ultraplan.contextWarning")}),this.state.ultraplanFiles.length>0&&jsxRuntimeExports.jsx("div",{className:styles$h_ultraplanFileList,children:this.state.ultraplanFiles.map((f,i)=>{const isImage=/\.(png|jpe?g|gif|svg|bmp|webp|avif|ico|icns)$/i.test(f.name),src=apiUrl(`/api/file-raw?path=${encodeURIComponent(f.path)}`);return isImage?jsxRuntimeExports.jsxs("div",{className:styles$h_ultraplanImageItem,title:f.name,children:[jsxRuntimeExports.jsx("img",{src:src,className:styles$h_ultraplanImageThumb,alt:f.name,role:"button",tabIndex:0,onClick:e=>{e.stopPropagation(),this.setState({ultraplanLightbox:{src:src,alt:f.name}})},onKeyDown:e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),this.setState({ultraplanLightbox:{src:src,alt:f.name}}))}}),jsxRuntimeExports.jsx(ConfirmRemoveButton,{title:t("ui.chatInput.confirmRemoveImage"),onConfirm:()=>this.handleUltraplanRemoveFile(i),onPopupOpenChange:open=>this.setState({ultraplanConfirming:open}),className:styles$h_ultraplanImageRemove,ariaLabel:t("ui.chatInput.removeImage"),children:"×"})]},i):jsxRuntimeExports.jsxs("span",{className:styles$h_ultraplanFileChip,title:f.name,children:[jsxRuntimeExports.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[jsxRuntimeExports.jsx("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),jsxRuntimeExports.jsx("polyline",{points:"14 2 14 8 20 8"})]}),jsxRuntimeExports.jsx("span",{className:styles$h_ultraplanFileName,children:f.name}),jsxRuntimeExports.jsx(ConfirmRemoveButton,{tag:"span",title:t("ui.chatInput.confirmRemoveFile"),onConfirm:()=>this.handleUltraplanRemoveFile(i),onPopupOpenChange:open=>this.setState({ultraplanConfirming:open}),className:styles$h_ultraplanFileRemove,ariaLabel:t("ui.chatInput.removeImage"),children:"×"})]},i)})}),jsxRuntimeExports.jsx("textarea",{className:styles$h_ultraplanTextarea,value:this.state.ultraplanPrompt,onChange:e=>this.setState({ultraplanPrompt:e.target.value}),onKeyDown:e=>{"Enter"===e.key&&(e.metaKey||e.ctrlKey)&&(this.state.ultraplanPrompt.trim()||this.state.ultraplanFiles.length>0)&&(e.preventDefault(),this.handleUltraplanSend())},onPaste:this.handleUltraplanPaste,placeholder:t("ui.ultraplan.placeholder"),rows:5,autoFocus:!0}),jsxRuntimeExports.jsxs("div",{className:styles$h_ultraplanFooter,children:[jsxRuntimeExports.jsx("button",{className:styles$h_ultraplanSendBtn,disabled:!this.state.ultraplanPrompt.trim()&&0===this.state.ultraplanFiles.length,onClick:this.handleUltraplanSend,children:t("ui.ultraplan.send")}),jsxRuntimeExports.jsxs("button",{className:styles$h_ultraplanUploadBtn,onClick:this.handleUltraplanUpload,children:[jsxRuntimeExports.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntimeExports.jsx("path",{d:"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"})}),t("ui.ultraplan.upload")]})]})]}),children:jsxRuntimeExports.jsxs("button",{className:styles$h_toolbarBtn,onClick:()=>this.setState({ultraplanOpen:!0}),title:t("ui.ultraplan"),children:[jsxRuntimeExports.jsx(UltraplanIcon,{}),jsxRuntimeExports.jsx("span",{children:"UltraPlan"})]})}):jsxRuntimeExports.jsx(Popover,{trigger:"click",placement:"top",overlayInnerStyle:{background:"var(--bg-elevated)",border:"1px solid var(--border-hover)",borderRadius:8,padding:"12px 16px",maxWidth:360},content:jsxRuntimeExports.jsxs("div",{children:[jsxRuntimeExports.jsx("div",{className:styles$h_agentTeamDisabledTip,children:t("ui.ultraplan.agentTeamRequired")}),jsxRuntimeExports.jsx(Button,{type:"primary",size:"small",loading:this.state.agentTeamEnabling,disabled:this.state.agentTeamEnabling,onClick:this.handleEnableAgentTeam,children:this.state.agentTeamEnabling?t("ui.terminal.agentTeamEnabling"):t("ui.terminal.agentTeamEnable")})]}),children:jsxRuntimeExports.jsxs("button",{className:`${styles$h_toolbarBtn} ${styles$h_toolbarBtnDisabled}`,title:t("ui.ultraplan"),children:[jsxRuntimeExports.jsx(UltraplanIcon,{}),jsxRuntimeExports.jsx("span",{children:"UltraPlan"})]})}),jsxRuntimeExports.jsx("button",{className:`${styles$h_toolbarBtn} ${styles$h_toolbarBtnRight}`,onClick:()=>this.setState({presetModalVisible:!0}),title:t("ui.terminal.presetShortcuts"),children:jsxRuntimeExports.jsxs("svg",{viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("circle",{cx:"12",cy:"12",r:"3"}),jsxRuntimeExports.jsx("path",{d:"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"})]})})]}),isMobile&&!isPad&&jsxRuntimeExports.jsxs("div",{className:styles$h_virtualKeybar,children:[VIRTUAL_KEYS.map(k=>jsxRuntimeExports.jsx("button",{className:styles$h_virtualKey,onTouchStart:this._vkTouchStart,onTouchMove:this._vkTouchMove,onTouchEnd:e=>this._vkTouchEnd(()=>this.handleVirtualKey(k.seq),e),children:k.label},k.label)),this.state.agentTeamEnabled?this.state.presetItems.length>0&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("span",{className:styles$h_vkSeparator}),this.state.presetItems.map(item=>{const isBuiltinRaw=item.builtinId&&!item.modified,name=isBuiltinRaw?t(item.teamName):item.teamName,desc=isBuiltinRaw?t(item.description):item.description;return jsxRuntimeExports.jsxs("button",{className:`${styles$h_virtualKey} ${styles$h_vkAction} ${styles$h_vkTeamPreset}`,onTouchStart:this._vkTouchStart,onTouchMove:this._vkTouchMove,onTouchEnd:e=>this._vkTouchEnd(()=>this.handlePresetSend(desc),e),title:desc,children:[jsxRuntimeExports.jsx(AgentTeamIcon,{}),jsxRuntimeExports.jsx("span",{className:styles$h_vkTeamLabel,children:name||desc})]},item.id)})]}):jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("span",{className:styles$h_vkSeparator}),jsxRuntimeExports.jsxs("button",{className:`${styles$h_virtualKey} ${styles$h_vkAction} ${styles$h_vkDisabled}`,onTouchStart:this._vkTouchStart,onTouchMove:this._vkTouchMove,onTouchEnd:e=>this._vkTouchEnd(()=>this.handleEnableAgentTeam(),e),children:[jsxRuntimeExports.jsx(AgentTeamIcon,{}),jsxRuntimeExports.jsx("span",{className:styles$h_vkTeamLabel,children:t("ui.terminal.agentTeam")})]})]})]}),jsxRuntimeExports.jsxs(Modal,{title:t("ui.terminal.presetShortcuts"),open:this.state.presetModalVisible,onCancel:()=>this.setState({presetModalVisible:!1,presetSelected:new Set}),footer:null,width:800,styles:{content:{background:"var(--bg-elevated)",border:"1px solid var(--border-light)"},header:{background:"var(--bg-elevated)",borderBottom:"none"}},children:[jsxRuntimeExports.jsx("div",{className:styles$h_presetSectionHeader,children:jsxRuntimeExports.jsx("span",{className:styles$h_presetSectionTitle,children:t("ui.terminal.agentTeamCustom")})}),jsxRuntimeExports.jsx("div",{className:styles$h_presetList,onDragOver:e=>{e.preventDefault(),e.stopPropagation()},onDrop:e=>{e.preventDefault(),e.stopPropagation()},children:0===this.state.presetItems.length?jsxRuntimeExports.jsx("div",{className:styles$h_presetListEmptyHint,children:"—"}):this.state.presetItems.map((item,idx)=>{const isBuiltinRaw=item.builtinId&&!item.modified,name=isBuiltinRaw?t(item.teamName):item.teamName,desc=isBuiltinRaw?t(item.description):item.description,isDragging=this._dragIdx===idx,isDragOver=this._dragOverIdx===idx&&this._dragIdx!==idx;return jsxRuntimeExports.jsxs("div",{className:`${styles$h_presetRow} ${isDragging?styles$h_presetRowDragging:""} ${isDragOver?styles$h_presetRowDragOver:""}`,onDragOver:e=>this.handleDragOver(idx,e),onDragLeave:e=>this.handleDragLeave(idx,e),onDrop:e=>this.handleDrop(idx,e),onDragEnd:this.handleDragEnd,children:[jsxRuntimeExports.jsx("span",{className:styles$h_dragHandle,draggable:!0,onDragStart:e=>this.handleDragStart(idx,e),children:jsxRuntimeExports.jsxs("svg",{viewBox:"0 0 10 16",width:"10",height:"16",fill:"currentColor",children:[jsxRuntimeExports.jsx("circle",{cx:"3",cy:"3",r:"1.2"}),jsxRuntimeExports.jsx("circle",{cx:"7",cy:"3",r:"1.2"}),jsxRuntimeExports.jsx("circle",{cx:"3",cy:"8",r:"1.2"}),jsxRuntimeExports.jsx("circle",{cx:"7",cy:"8",r:"1.2"}),jsxRuntimeExports.jsx("circle",{cx:"3",cy:"13",r:"1.2"}),jsxRuntimeExports.jsx("circle",{cx:"7",cy:"13",r:"1.2"})]})}),jsxRuntimeExports.jsx(Checkbox,{checked:this.state.presetSelected.has(item.id),onChange:()=>this.handlePresetToggle(item.id)}),jsxRuntimeExports.jsx("span",{className:styles$h_presetName,title:name,children:name||"—"}),jsxRuntimeExports.jsx("span",{className:styles$h_presetText,title:desc,children:desc}),jsxRuntimeExports.jsx(Button,{size:"small",type:"link",onClick:()=>this.setState({presetAddVisible:!0,presetAddName:isBuiltinRaw?t(item.teamName):item.teamName,presetAddText:isBuiltinRaw?t(item.description):item.description,presetEditId:item.id}),children:t("ui.terminal.editItem")})]},item.id)})}),jsxRuntimeExports.jsxs("div",{className:styles$h_presetActions,children:[jsxRuntimeExports.jsx(Button,{size:"small",danger:!0,disabled:0===this.state.presetSelected.size,onClick:this.handlePresetDelete,children:t("ui.terminal.deleteSelected")}),jsxRuntimeExports.jsx(Button,{size:"small",onClick:()=>this.setState({presetAddVisible:!0,presetAddName:"",presetAddText:"",presetEditId:null}),children:t("ui.terminal.addItem")})]})]}),jsxRuntimeExports.jsxs(Modal,{title:this.state.presetEditId?t("ui.terminal.editItem"):t("ui.terminal.addItem"),open:this.state.presetAddVisible,onCancel:()=>this.setState({presetAddVisible:!1,presetAddName:"",presetAddText:"",presetEditId:null}),onOk:this.handlePresetAdd,okText:this.state.presetEditId?t("ui.ok"):t("ui.terminal.addItem"),cancelText:t("ui.cancel"),okButtonProps:{disabled:!this.state.presetAddText.trim()&&!this.state.presetAddName.trim()},width:"fit-content",styles:{content:{background:"var(--bg-elevated)",border:"1px solid var(--border-light)"},header:{background:"var(--bg-elevated)",borderBottom:"none"}},children:[jsxRuntimeExports.jsxs("div",{className:styles$h_presetFormField,children:[jsxRuntimeExports.jsxs("label",{className:styles$h_presetFormLabel,children:["Team ",t("ui.terminal.teamName")]}),jsxRuntimeExports.jsx("input",{className:styles$h_presetInput,placeholder:t("ui.terminal.teamNamePlaceholder"),value:this.state.presetAddName,onChange:e=>this.setState({presetAddName:e.target.value})})]}),jsxRuntimeExports.jsxs("div",{children:[jsxRuntimeExports.jsxs("label",{className:styles$h_presetFormLabel,children:["Team ",t("ui.terminal.teamDesc")]}),jsxRuntimeExports.jsx("textarea",{className:styles$h_presetTextarea,rows:6,placeholder:t("ui.terminal.presetInputPlaceholder"),value:this.state.presetAddText,onChange:e=>this.setState({presetAddText:e.target.value}),onKeyDown:e=>{"Enter"===e.key&&e.stopPropagation()}})]})]}),jsxRuntimeExports.jsx(CustomUltraplanEditModal,{open:this.state.customUltraplanEditOpen,initial:this.state.customUltraplanEditing,onSave:this.saveCustomUltraplanExpert,onDelete:this.deleteCustomUltraplanExpert,onClose:this.closeCustomUltraplanEditor}),this.state.lightbox&&jsxRuntimeExports.jsx(ImageLightbox,{src:this.state.lightbox.src,alt:this.state.lightbox.alt,onClose:()=>this.setState({lightbox:null})}),this.state.ultraplanLightbox&&jsxRuntimeExports.jsx(ImageLightbox,{src:this.state.ultraplanLightbox.src,alt:this.state.ultraplanLightbox.alt,zIndex:1200,onClose:()=>this.setState({ultraplanLightbox:null})})]})}}const EXT_COLORS={js:"#e8d44d",jsx:"#61dafb",ts:"#3178c6",tsx:"#3178c6",json:"#999",md:"#519aba",css:"#a86fd9",scss:"#cd6799",less:"#a86fd9",html:"#e34c26",htm:"#e34c26",xml:"#e34c26",py:"#3572a5",go:"#00add8",rs:"#dea584",rb:"#cc342d",java:"#b07219",c:"#555",cpp:"#f34b7d",h:"#555",sh:"#4eaa25",bash:"#4eaa25",zsh:"#4eaa25",yml:"#cb171e",yaml:"#cb171e",toml:"#999",svg:"#e34c26",png:"#a86fd9",jpg:"#a86fd9",jpeg:"#a86fd9",gif:"#a86fd9",bmp:"#a86fd9",ico:"#a86fd9",icns:"#a86fd9",webp:"#a86fd9",avif:"#a86fd9"};function getFileIcon(name,type){if("directory"===type)return jsxRuntimeExports.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"var(--color-accent-yellow)",stroke:"none",children:jsxRuntimeExports.jsx("path",{d:"M2 6c0-1.1.9-2 2-2h5l2 2h9a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6z"})});const ext=name.includes(".")?name.split(".").pop().toLowerCase():"",color=EXT_COLORS[ext]||"#888";return jsxRuntimeExports.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:color,strokeWidth:"1.5",children:[jsxRuntimeExports.jsx("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),jsxRuntimeExports.jsx("polyline",{points:"14 2 14 8 20 8"})]})}const styles$e_fileExplorer="_fileExplorer_11rd4_1",styles$e_header="_header_11rd4_10",styles$e_headerTitle="_headerTitle_11rd4_20",styles$e_collapseBtn="_collapseBtn_11rd4_31",styles$e_treeContainer="_treeContainer_11rd4_50",styles$e_treeItem="_treeItem_11rd4_56",styles$e_treeItemSelected="_treeItemSelected_11rd4_72",styles$e_arrow="_arrow_11rd4_76",styles$e_icon="_icon_11rd4_85",styles$e_fileName="_fileName_11rd4_95",styles$e_fileNameInput="_fileNameInput_11rd4_100",styles$e_loading="_loading_11rd4_116",styles$e_error="_error_11rd4_122",styles$e_treeItemGitIgnored="_treeItemGitIgnored_11rd4_128",styles$e_treeItemDragging="_treeItemDragging_11rd4_132",styles$e_treeItemDragOver="_treeItemDragOver_11rd4_136",styles$e_arrowIcon="_arrowIcon_11rd4_141";function isExternalFileDrag(e){return e.dataTransfer.types.includes("Files")&&!e.dataTransfer.types.includes("text/x-internal-move")}function getTopLevelEntries(items){if(!items||!items.length)return null;if("function"!=typeof items[0].webkitGetAsEntry)return null;const entries=[];for(let i=0;i<items.length;i++){if("file"!==items[i].kind)continue;const entry=items[i].webkitGetAsEntry();entry&&entries.push(entry)}return entries.length?entries:null}function readAllEntries(reader){return new Promise((resolve,reject)=>{const acc=[],readBatch=()=>{reader.readEntries(batch=>{0===batch.length?resolve(acc):(acc.push(...batch),readBatch())},reject)};readBatch()})}const SKIP_ENTRY_NAMES=new Set([".DS_Store","Thumbs.db",".localized"]);async function expandEntries(entries,depth){if(depth>32)return[];const results=[];for(const entry of entries)if(entry&&!SKIP_ENTRY_NAMES.has(entry.name))if(entry.isFile)try{const file=await new Promise((resolve,reject)=>entry.file(resolve,reject)),rel=entry.fullPath?entry.fullPath.startsWith("/")?entry.fullPath.slice(1):entry.fullPath:file.name;results.push({file:file,relPath:rel})}catch(e){console.warn("[FileExplorer] skip unreadable file",entry.name,e&&e.message)}else if(entry.isDirectory)try{const reader=entry.createReader(),children=await readAllEntries(reader),sub=await expandEntries(children,depth+1);results.push(...sub)}catch(e){console.warn("[FileExplorer] skip unreadable dir",entry.name,e&&e.message)}return results}function TreeNode({item:item,path:path,depth:depth,onFileClick:onFileClick,expandedPaths:expandedPaths,onToggleExpand:onToggleExpand,currentFile:currentFile,onFileRenamed:onFileRenamed,refreshTrigger:refreshTrigger,onHtmlPreview:onHtmlPreview,onAttachToChat:onAttachToChat,onInsertPathToChat:onInsertPathToChat,onImportFiles:onImportFiles}){const[children,setChildren]=reactExports.useState(null),[loading2,setLoading]=reactExports.useState(!1),[error2,setError]=reactExports.useState(null),[editing,setEditing]=reactExports.useState(!1),[editName,setEditName]=reactExports.useState(""),[dragging2,setDragging]=reactExports.useState(!1),[dragOver,setDragOver]=reactExports.useState(!1),inputRef=reactExports.useRef(null),submittingRef=reactExports.useRef(!1),itemRef=reactExports.useRef(null),childPath=path?`${path}/${item.name}`:item.name,expanded=expandedPaths.has(childPath),isGitIgnored=item.gitIgnored||!1,fetchChildren=reactExports.useCallback(async()=>{setLoading(!0),setError(null);try{const res=await fetch(apiUrl(`/api/files?path=${encodeURIComponent(childPath)}`));if(!res.ok)throw new Error("Failed");const data=await res.json();setChildren(data)}catch{setError("Error")}finally{setLoading(!1)}},[childPath]);reactExports.useEffect(()=>{"directory"===item.type&&expanded&&null===children&&!loading2&&fetchChildren()},[expanded]),reactExports.useEffect(()=>{refreshTrigger>0&&"directory"===item.type&&expanded&&null!==children&&fetchChildren()},[refreshTrigger]);const toggle2=reactExports.useCallback(async()=>{if("directory"!==item.type){const ext=(childPath||"").split(".").pop().toLowerCase();return"html"===ext||"htm"===ext?void(onHtmlPreview&&onHtmlPreview(childPath)):void(onFileClick&&onFileClick(childPath))}expanded||null===children&&await fetchChildren(),onToggleExpand(childPath)},[expanded,children,childPath,item,onFileClick,onToggleExpand,fetchChildren,onHtmlPreview]),isDir="directory"===item.type,isSelected=currentFile&&currentFile===childPath;reactExports.useEffect(()=>{isSelected&&itemRef.current&&requestAnimationFrame(()=>{var _a;null==(_a=itemRef.current)||_a.scrollIntoView({block:"nearest",behavior:"instant"})})},[isSelected]);const startEditing=reactExports.useCallback(()=>{setEditName(item.name),setEditing(!0),submittingRef.current=!1},[item.name]);reactExports.useEffect(()=>{if(editing&&inputRef.current){inputRef.current.focus();const dotIdx=item.name.lastIndexOf(".");dotIdx>0&&"directory"!==item.type?inputRef.current.setSelectionRange(0,dotIdx):inputRef.current.select()}},[editing,item.name,item.type]);const submitRename=reactExports.useCallback(async()=>{if(submittingRef.current)return;const trimmed=editName.trim();if(trimmed&&trimmed!==item.name){submittingRef.current=!0;try{const res=await fetch(apiUrl("/api/rename-file"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({oldPath:childPath,newName:trimmed})}),data=await res.json();if(!res.ok)return alert(t("ui.renameFailed",{error:data.error||res.statusText})),void setEditing(!1);setEditing(!1),onFileRenamed&&onFileRenamed(childPath,data.newPath)}catch(err){alert(t("ui.renameFailed",{error:err.message})),setEditing(!1)}}else setEditing(!1)},[editName,item.name,childPath,onFileRenamed]),cancelEditing=reactExports.useCallback(()=>{setEditing(!1)},[]),handleDoubleClick=reactExports.useCallback(e=>{e.stopPropagation(),isSelected&&startEditing()},[isSelected,startEditing]),handleKeyDown=reactExports.useCallback(e=>{editing||"Enter"!==e.key&&"F2"!==e.key||!isSelected||(e.preventDefault(),e.stopPropagation(),startEditing())},[editing,isSelected,startEditing]),handleInputKeyDown=reactExports.useCallback(e=>{"Enter"===e.key?(e.preventDefault(),submitRename()):"Escape"===e.key&&(e.preventDefault(),cancelEditing()),e.stopPropagation()},[submitRename,cancelEditing]),handleClick=reactExports.useCallback(e=>{editing?e.stopPropagation():toggle2()},[editing,toggle2]),handleDragStart=reactExports.useCallback(e=>{editing?e.preventDefault():(e.dataTransfer.setData("text/plain",childPath),e.dataTransfer.setData("text/x-internal-move","1"),e.dataTransfer.effectAllowed="move",setDragging(!0))},[childPath,editing]),handleDragEnd=reactExports.useCallback(()=>{setDragging(!1)},[]),autoExpandTimer=reactExports.useRef(null),handleDragOver=reactExports.useCallback(e=>{const isExternal=isExternalFileDrag(e),isInternal=e.dataTransfer.types.includes("text/x-internal-move");isInternal&&!isDir||(isExternal||isInternal)&&(e.preventDefault(),e.dataTransfer.dropEffect=isExternal?"copy":"move",setDragOver(!0),!isDir||expanded||autoExpandTimer.current||(autoExpandTimer.current=setTimeout(()=>{onToggleExpand(childPath),autoExpandTimer.current=null},500)))},[isDir,expanded,childPath,onToggleExpand]),handleDragLeave=reactExports.useCallback(e=>{itemRef.current&&!itemRef.current.contains(e.relatedTarget)&&(setDragOver(!1),autoExpandTimer.current&&(clearTimeout(autoExpandTimer.current),autoExpandTimer.current=null))},[]),handleDrop=reactExports.useCallback(async e=>{if(e.preventDefault(),setDragOver(!1),isExternalFileDrag(e)&&(e.dataTransfer.files.length>0||e.dataTransfer.items&&e.dataTransfer.items.length>0)){e.stopPropagation();const topEntries=getTopLevelEntries(e.dataTransfer.items),flatFiles=Array.from(e.dataTransfer.files),targetDir=isDir?childPath:childPath.includes("/")?childPath.substring(0,childPath.lastIndexOf("/")):"";return void(onImportFiles&&onImportFiles({topEntries:topEntries,flatFiles:flatFiles},targetDir))}const fromPath=e.dataTransfer.getData("text/plain");if(!fromPath||!isDir)return;if(fromPath===childPath)return;if(childPath.startsWith(fromPath+"/"))return;if((fromPath.includes("/")?fromPath.substring(0,fromPath.lastIndexOf("/")):"")!==childPath)try{const res=await fetch(apiUrl("/api/move-file"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fromPath:fromPath,toDir:childPath})}),data=await res.json();if(!res.ok)return void staticMethods.error(data.error||"Move failed");onFileRenamed&&onFileRenamed(fromPath,data.newPath)}catch(err){staticMethods.error(err.message||"Move failed")}},[childPath,isDir,onFileRenamed,onImportFiles]),contextMenuItems=reactExports.useMemo(()=>isDir?[{key:"reveal",label:t("ui.contextMenu.revealInExplorer")},{key:"openTerminal",label:t("ui.contextMenu.openTerminal")},{key:"newFile",label:t("ui.contextMenu.newFile")},{key:"newDir",label:t("ui.contextMenu.newDir")},{type:"divider"},{key:"copyPath",label:t("ui.contextMenu.copyPath")},{key:"copyRelPath",label:t("ui.contextMenu.copyRelativePath")},{type:"divider"},{key:"rename",label:t("ui.contextMenu.rename")},{key:"delete",label:t("ui.contextMenu.delete"),danger:!0}]:[{key:"reveal",label:t("ui.contextMenu.revealInExplorer")},{key:"copyPath",label:t("ui.contextMenu.copyPath")},{key:"copyRelPath",label:t("ui.contextMenu.copyRelativePath")},{key:"attachToChat",label:t("ui.contextMenu.attachToChat")},{key:"insertPathToChat",label:t("ui.contextMenu.insertPathToChat")},{type:"divider"},{key:"rename",label:t("ui.contextMenu.rename")},{key:"delete",label:t("ui.contextMenu.delete"),danger:!0}],[isDir]),handleMenuClick=reactExports.useCallback(({key:key})=>{switch(key){case"reveal":fetch(apiUrl("/api/reveal-file"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:childPath})}).catch(()=>{});break;case"openTerminal":fetch(apiUrl("/api/open-terminal"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:childPath})}).catch(()=>{});break;case"copyPath":fetch(apiUrl("/api/resolve-path"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:childPath})}).then(r=>r.json()).then(data=>{data.fullPath&&navigator.clipboard.writeText(data.fullPath).then(()=>staticMethods.success(t("ui.copied"))).catch(()=>{})}).catch(()=>{});break;case"copyRelPath":navigator.clipboard.writeText(childPath).then(()=>staticMethods.success(t("ui.copied"))).catch(()=>{});break;case"attachToChat":null==onAttachToChat||onAttachToChat(childPath);break;case"insertPathToChat":null==onInsertPathToChat||onInsertPathToChat(childPath);break;case"rename":startEditing();break;case"newFile":{const inputId=`ccv-newfile-${Date.now()}`;Modal.confirm({title:t("ui.contextMenu.newFile"),content:jsxRuntimeExports.jsx(Input,{id:inputId,autoFocus:!0,placeholder:"filename.ext",style:{background:"var(--bg-container)",borderColor:"var(--border-primary)",color:"var(--text-secondary)",caretColor:"var(--text-secondary)"},onPressEnter:()=>{var _a;null==(_a=document.querySelector(".ant-modal-confirm-btns .ant-btn-primary"))||_a.click()}}),okText:t("ui.contextMenu.newFile"),onOk:()=>{const input=document.getElementById(inputId),name=((null==input?void 0:input.value)||"").trim();return name?fetch(apiUrl("/api/create-file"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({dirPath:childPath,name:name})}).then(r=>{r.ok&&onFileRenamed&&onFileRenamed(null,`${childPath}/${name}`)}):Promise.reject()}});break}case"newDir":{const inputId=`ccv-newdir-${Date.now()}`;Modal.confirm({title:t("ui.contextMenu.newDir"),content:jsxRuntimeExports.jsx(Input,{id:inputId,autoFocus:!0,placeholder:"folder-name",style:{background:"var(--bg-container)",borderColor:"var(--border-primary)",color:"var(--text-secondary)",caretColor:"var(--text-secondary)"},onPressEnter:()=>{var _a;null==(_a=document.querySelector(".ant-modal-confirm-btns .ant-btn-primary"))||_a.click()}}),okText:t("ui.contextMenu.newDir"),onOk:()=>{const input=document.getElementById(inputId),name=((null==input?void 0:input.value)||"").trim();return name?fetch(apiUrl("/api/create-dir"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({dirPath:childPath,name:name})}).then(r=>{r.ok&&onFileRenamed&&onFileRenamed(null,`${childPath}/${name}`)}):Promise.reject()}});break}case"delete":Modal.confirm({title:t(isDir?"ui.contextMenu.deleteDirConfirm":"ui.contextMenu.deleteConfirm",{name:item.name}),okType:"danger",okText:t("ui.contextMenu.delete"),onOk:()=>fetch(apiUrl("/api/delete-file"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:childPath})}).then(r=>{r.ok&&onFileRenamed&&onFileRenamed(childPath,null)}).catch(()=>{})})}},[childPath,item.name,isDir,startEditing,onFileRenamed,onAttachToChat,onInsertPathToChat]),treeItemDiv=jsxRuntimeExports.jsxs("div",{ref:itemRef,className:`${styles$e_treeItem}${isSelected?" "+styles$e_treeItemSelected:""}${isGitIgnored?" "+styles$e_treeItemGitIgnored:""}${dragging2?" "+styles$e_treeItemDragging:""}${dragOver?" "+styles$e_treeItemDragOver:""}`,style:{paddingLeft:8+16*depth},onClick:handleClick,onDoubleClick:handleDoubleClick,onKeyDown:handleKeyDown,tabIndex:0,draggable:!editing,onDragStart:handleDragStart,onDragEnd:handleDragEnd,onDragOver:handleDragOver,onDragLeave:handleDragLeave,onDrop:handleDrop,children:[jsxRuntimeExports.jsx("span",{className:styles$e_arrow,children:isDir?jsxRuntimeExports.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",className:styles$e_arrowIcon,style:{transform:expanded?"rotate(90deg)":"none"},children:jsxRuntimeExports.jsx("polyline",{points:"9 6 15 12 9 18"})}):""}),jsxRuntimeExports.jsx("span",{className:styles$e_icon,children:getFileIcon(item.name,item.type)}),editing?jsxRuntimeExports.jsx("input",{ref:inputRef,className:styles$e_fileNameInput,value:editName,onChange:e=>setEditName(e.target.value),onKeyDown:handleInputKeyDown,onBlur:submitRename,onClick:e=>e.stopPropagation()}):jsxRuntimeExports.jsx("span",{className:styles$e_fileName,children:item.name})]});return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(Dropdown,{menu:{items:contextMenuItems,onClick:handleMenuClick},trigger:["contextMenu"],children:treeItemDiv}),expanded&&loading2&&jsxRuntimeExports.jsx("div",{className:styles$e_loading,style:{paddingLeft:24+16*depth},children:"..."}),expanded&&error2&&jsxRuntimeExports.jsx("div",{className:styles$e_error,style:{paddingLeft:24+16*depth},children:error2}),expanded&&children&&children.map(child=>jsxRuntimeExports.jsx(TreeNode,{item:child,path:childPath,depth:depth+1,onFileClick:onFileClick,expandedPaths:expandedPaths,onToggleExpand:onToggleExpand,currentFile:currentFile,onFileRenamed:onFileRenamed,refreshTrigger:refreshTrigger,onHtmlPreview:onHtmlPreview,onAttachToChat:onAttachToChat,onInsertPathToChat:onInsertPathToChat,onImportFiles:onImportFiles},child.name))]})}function FileExplorer({style:style,onClose:onClose,onFileClick:onFileClick,expandedPaths:expandedPaths,onToggleExpand:onToggleExpand,currentFile:currentFile,refreshTrigger:refreshTrigger,onFileRenamed:onFileRenamed,onAttachToChat:onAttachToChat,onInsertPathToChat:onInsertPathToChat}){const[items,setItems]=reactExports.useState(null),[error2,setError]=reactExports.useState(null),[htmlPreviewPath,setHtmlPreviewPath]=reactExports.useState(null),[externalDragOver,setExternalDragOver]=reactExports.useState(!1),mounted=reactExports.useRef(!0),containerRef=reactExports.useRef(null),refreshRoot=reactExports.useCallback(()=>{mounted.current&&fetch(apiUrl("/api/files?path=")).then(r=>r.ok?r.json():Promise.reject()).then(data=>{mounted.current&&setItems(data)}).catch(()=>{mounted.current&&setError("Failed to load")})},[]);reactExports.useEffect(()=>(mounted.current=!0,fetch(apiUrl("/api/files?path=")).then(r=>r.ok?r.json():Promise.reject()).then(data=>{mounted.current&&setItems(data)}).catch(()=>{mounted.current&&setError("Failed to load")}),()=>{mounted.current=!1}),[]),reactExports.useEffect(()=>{refreshTrigger>0&&refreshRoot()},[refreshTrigger]);const headerMenuItems=reactExports.useMemo(()=>[{key:"reveal",label:t("ui.contextMenu.revealInExplorer")},{key:"openTerminal",label:t("ui.contextMenu.openTerminal")},{key:"newFile",label:t("ui.contextMenu.newFile")},{key:"newDir",label:t("ui.contextMenu.newDir")},{type:"divider"},{key:"copyPath",label:t("ui.contextMenu.copyPath")},{key:"copyRelPath",label:t("ui.contextMenu.copyRelativePath")}],[]),handleHeaderMenuClick=reactExports.useCallback(({key:key})=>{switch(key){case"reveal":fetch(apiUrl("/api/open-project-dir"),{method:"POST"}).catch(()=>{});break;case"openTerminal":fetch(apiUrl("/api/open-terminal"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:""})}).catch(()=>{});break;case"newFile":{const inputId=`ccv-newfile-root-${Date.now()}`;Modal.confirm({title:t("ui.contextMenu.newFile"),content:jsxRuntimeExports.jsx(Input,{id:inputId,autoFocus:!0,placeholder:"filename.ext",style:{background:"var(--bg-container)",borderColor:"var(--border-primary)",color:"var(--text-secondary)",caretColor:"var(--text-secondary)"},onPressEnter:()=>{var _a;null==(_a=document.querySelector(".ant-modal-confirm-btns .ant-btn-primary"))||_a.click()}}),okText:t("ui.contextMenu.newFile"),onOk:()=>{const input=document.getElementById(inputId),name=((null==input?void 0:input.value)||"").trim();return name?fetch(apiUrl("/api/create-file"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({dirPath:"",name:name})}).then(r=>{r.ok&&onFileRenamed&&onFileRenamed(null,name)}):Promise.reject()}});break}case"newDir":{const inputId=`ccv-newdir-root-${Date.now()}`;Modal.confirm({title:t("ui.contextMenu.newDir"),content:jsxRuntimeExports.jsx(Input,{id:inputId,autoFocus:!0,placeholder:"folder-name",style:{background:"var(--bg-container)",borderColor:"var(--border-primary)",color:"var(--text-secondary)",caretColor:"var(--text-secondary)"},onPressEnter:()=>{var _a;null==(_a=document.querySelector(".ant-modal-confirm-btns .ant-btn-primary"))||_a.click()}}),okText:t("ui.contextMenu.newDir"),onOk:()=>{const input=document.getElementById(inputId),name=((null==input?void 0:input.value)||"").trim();return name?fetch(apiUrl("/api/create-dir"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({dirPath:"",name:name})}).then(r=>{r.ok&&onFileRenamed&&onFileRenamed(null,name)}):Promise.reject()}});break}case"copyPath":fetch(apiUrl("/api/resolve-path"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:""})}).then(r=>r.json()).then(data=>{data.fullPath&&navigator.clipboard.writeText(data.fullPath).then(()=>staticMethods.success(t("ui.copied"))).catch(()=>{})}).catch(()=>{});break;case"copyRelPath":navigator.clipboard.writeText(".").then(()=>staticMethods.success(t("ui.copied"))).catch(()=>{})}},[onFileRenamed]),importFiles=reactExports.useCallback(async(payload,targetDir)=>{let entries=[];const topEntries=payload&&payload.topEntries,flatFiles=payload&&payload.flatFiles,isEntryShape=Array.isArray(topEntries)||Array.isArray(flatFiles);if(isEntryShape&&topEntries&&topEntries.length>0){const hideScan=staticMethods.loading(t("ui.importScanning"),0);let scanFailed=!1;try{entries=await expandEntries(topEntries,0)}catch(e){console.warn("[FileExplorer] expandEntries failed, falling back to flat files",e),scanFailed=!0}finally{hideScan()}(scanFailed||0===entries.length)&&flatFiles&&flatFiles.length>0&&(entries=flatFiles.map(f=>({file:f,relPath:f.name})))}else isEntryShape&&flatFiles&&flatFiles.length>0?entries=flatFiles.map(f=>({file:f,relPath:f.name})):Array.isArray(payload)&&(entries=payload.map(f=>({file:f,relPath:f.name})));if(0===entries.length)return void((topEntries&&topEntries.length>0||flatFiles&&flatFiles.length>0)&&staticMethods.info(t("ui.importNoFiles")));if(entries.length>1e3){if(!(await new Promise(resolve=>{Modal.confirm({title:t("ui.importConfirmLarge",{count:entries.length}),okText:t("ui.ok"),cancelText:t("ui.cancel"),onOk:()=>resolve(!0),onCancel:()=>resolve(!1)})})))return}const total=entries.length;let successCount=0;const failures=[];let firstOkRelPath=null;const hideLoading=staticMethods.loading(t("ui.importingProgress",{total:total}),0);let idx=0;const parallel=Math.min(3,entries.length);if(await Promise.all(Array.from({length:parallel},()=>(async()=>{for(;idx<entries.length;){const myIdx=idx++,{file:file,relPath:relPath}=entries[myIdx],lastSlash=relPath.lastIndexOf("/"),subDir=lastSlash>=0?relPath.slice(0,lastSlash):"",finalDir=[targetDir,subDir].filter(Boolean).join("/"),form=new FormData;form.append("file",file);try{const res=await fetch(apiUrl(`/api/import-file?dir=${encodeURIComponent(finalDir)}`),{method:"POST",body:form}),data=await res.json();res.ok?(successCount++,firstOkRelPath||(firstOkRelPath=data.relPath||relPath)):failures.push({name:relPath,error:data.error||"Import failed"})}catch(err){failures.push({name:relPath,error:err.message||"Import failed"})}}})())),hideLoading(),0===failures.length)1===successCount?staticMethods.success(t("ui.fileImported",{name:firstOkRelPath})):staticMethods.success(t("ui.filesImported",{count:successCount}));else{const preview=failures.slice(0,3).map(f=>f.name).join(", "),more=failures.length>3?` (+${failures.length-3})`:"";successCount>0?staticMethods.warning(t("ui.importPartialFailed",{ok:successCount,failed:failures.length,names:preview+more})):staticMethods.error(t("ui.importAllFailed",{failed:failures.length,names:preview+more}))}successCount>0&&onFileRenamed&&onFileRenamed(null,firstOkRelPath)},[onFileRenamed]),dragTimerRef=reactExports.useRef(null),resetDragState=reactExports.useCallback(()=>{dragTimerRef.current&&(clearTimeout(dragTimerRef.current),dragTimerRef.current=null),setExternalDragOver(!1)},[]);reactExports.useEffect(()=>{const handler=()=>resetDragState();return document.addEventListener("drop",handler),document.addEventListener("dragend",handler),()=>{document.removeEventListener("drop",handler),document.removeEventListener("dragend",handler)}},[resetDragState]);const handleContainerDragOver=reactExports.useCallback(e=>{isExternalFileDrag(e)&&(e.preventDefault(),e.dataTransfer.dropEffect="copy",externalDragOver||setExternalDragOver(!0),dragTimerRef.current&&clearTimeout(dragTimerRef.current),dragTimerRef.current=setTimeout(()=>{setExternalDragOver(!1),dragTimerRef.current=null},300))},[externalDragOver]),handleContainerDrop=reactExports.useCallback(e=>{if(resetDragState(),!isExternalFileDrag(e))return;e.preventDefault(),e.stopPropagation();const topEntries=getTopLevelEntries(e.dataTransfer.items),flatFiles=Array.from(e.dataTransfer.files);(topEntries&&topEntries.length>0||flatFiles.length>0)&&importFiles({topEntries:topEntries,flatFiles:flatFiles},"")},[importFiles,resetDragState]);return jsxRuntimeExports.jsxs("div",{ref:containerRef,className:styles$e_fileExplorer,style:style,"data-file-explorer":!0,onDragOver:handleContainerDragOver,onDrop:handleContainerDrop,children:[jsxRuntimeExports.jsxs("div",{className:styles$e_header,children:[jsxRuntimeExports.jsx(Dropdown,{menu:{items:headerMenuItems,onClick:handleHeaderMenuClick},trigger:["contextMenu"],children:jsxRuntimeExports.jsxs("span",{className:styles$e_headerTitle,children:[jsxRuntimeExports.jsx(OpenFolderIcon,{apiEndpoint:apiUrl("/api/open-project-dir"),title:t("ui.openProjectDir"),size:14}),t("ui.fileExplorer")]})}),jsxRuntimeExports.jsx("button",{className:styles$e_collapseBtn,onClick:onClose,title:"Close",children:jsxRuntimeExports.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("polyline",{points:"11 17 6 12 11 7"}),jsxRuntimeExports.jsx("polyline",{points:"18 17 13 12 18 7"})]})})]}),jsxRuntimeExports.jsxs("div",{className:styles$e_treeContainer,children:[error2&&jsxRuntimeExports.jsx("div",{className:styles$e_error,children:error2}),!items&&!error2&&jsxRuntimeExports.jsx("div",{className:styles$e_loading,children:"Loading..."}),items&&items.map(item=>jsxRuntimeExports.jsx(TreeNode,{item:item,path:"",depth:0,onFileClick:onFileClick,expandedPaths:expandedPaths,onToggleExpand:onToggleExpand,currentFile:currentFile,onFileRenamed:onFileRenamed,refreshTrigger:refreshTrigger,onHtmlPreview:setHtmlPreviewPath,onAttachToChat:onAttachToChat,onInsertPathToChat:onInsertPathToChat,onImportFiles:importFiles},item.name))]}),htmlPreviewPath&&jsxRuntimeExports.jsx(Modal,{open:!0,onCancel:()=>setHtmlPreviewPath(null),footer:null,closable:!0,maskClosable:!0,zIndex:1100,width:"calc(100vw - 80px)",title:jsxRuntimeExports.jsx("span",{style:{color:"var(--text-primary)",fontSize:14},children:htmlPreviewPath.split("/").pop()||"Preview"}),styles:{header:{background:"var(--bg-container)",borderBottom:"1px solid var(--border-primary)",padding:"12px 20px"},body:{background:"#fff",height:"calc(100vh - 160px)",overflow:"hidden",padding:0},mask:{background:"rgba(0,0,0,0.7)"},content:{background:"var(--bg-container)",border:"1px solid var(--border-primary)",borderRadius:8,padding:0}},centered:!0,children:jsxRuntimeExports.jsx("iframe",{src:apiUrl(`/api/file-raw?path=${encodeURIComponent(htmlPreviewPath)}`),style:{width:"100%",height:"100%",border:"none"},title:htmlPreviewPath,sandbox:"allow-scripts allow-popups allow-forms"})})]})}const styles$d_fileContentView="_fileContentView_p8e81_1",styles$d_closing="_closing_p8e81_20",styles$d_editorBanner="_editorBanner_p8e81_35",styles$d_header="_header_p8e81_52",styles$d_headerLeft="_headerLeft_p8e81_62",styles$d_headerRight="_headerRight_p8e81_70",styles$d_backBtn="_backBtn_p8e81_77",styles$d_filePath="_filePath_p8e81_98",styles$d_fileSize="_fileSize_p8e81_106",styles$d_closeBtn="_closeBtn_p8e81_113",styles$d_viewToggleBtn="_viewToggleBtn_p8e81_133",styles$d_viewToggleActive="_viewToggleActive_p8e81_161",styles$d_downloadWrap="_downloadWrap_p8e81_167",styles$d_downloadMenu="_downloadMenu_p8e81_172",styles$d_downloadMenuItem="_downloadMenuItem_p8e81_185",styles$d_markdownPreview="_markdownPreview_p8e81_211",styles$d_saveBtn="_saveBtn_p8e81_290",styles$d_saveStatus="_saveStatus_p8e81_316",styles$d_saveStatusSaved="_saveStatusSaved_p8e81_322",styles$d_saveStatusFailed="_saveStatusFailed_p8e81_326",styles$d_contentContainer="_contentContainer_p8e81_330",styles$d_editorWrapper="_editorWrapper_p8e81_339",styles$d_lineNumCol="_lineNumCol_p8e81_347",styles$d_lineNumRow="_lineNumRow_p8e81_357",styles$d_editorCol="_editorCol_p8e81_367",styles$d_loading="_loading_p8e81_387",styles$d_error="_error_p8e81_397",LANG_MAP$1={js:javascript$2,jsx:javascript$2,ts:javascript$2,tsx:javascript$2,py:python$1,java:java$1,c:cpp$1,cpp:cpp$1,cc:cpp$1,cxx:cpp$1,h:cpp$1,hpp:cpp$1,go:go$1,rs:rust$1,php:php$1,html:xml$1,htm:xml$1,xml:xml$1,svg:xml$1,json:json$1,yml:yaml$1,yaml:yaml$1,md:markdown$1,markdown:markdown$1,css:css$1,scss:css$1,sass:css$1,less:css$1,sql:sql$1};function getLanguageExtension(filePath2){var _a;const ext=null==(_a=filePath2.split(".").pop())?void 0:_a.toLowerCase();return LANG_MAP$1[ext]?[LANG_MAP$1[ext]()]:[]}const editorTheme=EditorView.theme({"&":{backgroundColor:"var(--bg-base-alt)",color:"var(--text-primary)",height:"100%",overflow:"visible"},".cm-gutters:not(.cm-minimap-gutter)":{display:"none"},"& .cm-scroller":{position:"absolute",inset:"0",fontFamily:"'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace",fontSize:"13px",lineHeight:"1.5"},".cm-minimap-gutter":{background:"var(--bg-base-alt)",borderLeft:"1px solid var(--border-primary)"},".cm-minimap-overlay":{border:"1px solid rgba(158, 174, 235, 0.8)",background:"rgba(95, 110, 185, 0.45)",borderRadius:"2px",transition:"opacity 0.2s ease"},".cm-minimap-gutter:hover .cm-minimap-overlay":{border:"1px solid rgba(178, 194, 255, 0.95)",background:"rgba(95, 110, 225, 0.45)"},".cm-activeLine":{backgroundColor:"var(--overlay-light-faint)"},".cm-cursor":{borderLeftColor:"var(--text-primary)"},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground":{backgroundColor:"var(--color-selection-bg)"},".cm-panels":{backgroundColor:"var(--bg-container)",borderBottom:"1px solid var(--border-secondary)"},".cm-panel.cm-search":{padding:"8px 12px 10px",fontSize:"13px",color:"var(--text-primary)",backgroundColor:"var(--bg-container)"},".cm-panel.cm-search input[type=text], .cm-panel.cm-search input[main]":{height:"26px",padding:"2px 11px",fontSize:"100%",color:"var(--text-primary)",backgroundColor:"var(--bg-elevated)",border:"1px solid var(--border-light)",borderRadius:"6px",outline:"none",transition:"border-color 0.2s",verticalAlign:"middle",boxSizing:"border-box"},".cm-panel.cm-search input[type=text]:focus":{borderColor:"var(--color-primary)",boxShadow:"0 0 0 2px var(--color-primary-bg-light)"},".cm-textfield":{height:"26px",padding:"2px 11px",fontSize:"100%",color:"var(--text-primary) !important",backgroundColor:"var(--bg-elevated) !important",border:"1px solid var(--border-light) !important",borderRadius:"6px",outline:"none",verticalAlign:"middle",boxSizing:"border-box"},".cm-textfield:focus":{borderColor:"var(--color-primary) !important",boxShadow:"0 0 0 2px var(--color-primary-bg-light)"},".cm-panel.cm-search input[type=checkbox]":{accentColor:"var(--color-primary)",width:"14px",height:"14px",verticalAlign:"middle",marginRight:"4px",cursor:"pointer"},".cm-panel.cm-search button":{height:"26px",padding:"2px 12px",fontSize:"100%",color:"var(--text-primary)",backgroundColor:"transparent",backgroundImage:"none !important",border:"1px solid var(--border-light)",borderRadius:"6px",cursor:"pointer",transition:"background 0.2s, border-color 0.2s, color 0.2s",verticalAlign:"middle",lineHeight:"1"},".cm-panel.cm-search button:hover":{color:"var(--text-white)",backgroundColor:"var(--overlay-light-faint)",backgroundImage:"none !important",borderColor:"var(--text-disabled)"},".cm-panel.cm-search button:active":{backgroundColor:"var(--overlay-light-medium)",backgroundImage:"none !important"},".cm-button":{height:"26px",padding:"2px 12px",fontSize:"100%",color:"var(--text-primary) !important",backgroundColor:"transparent !important",backgroundImage:"none !important",border:"1px solid var(--border-light) !important",borderRadius:"6px",cursor:"pointer",lineHeight:"1"},".cm-button:hover":{color:"var(--text-white) !important",backgroundColor:"var(--overlay-light-faint) !important",backgroundImage:"none !important",borderColor:"var(--text-disabled) !important"},".cm-panel.cm-search button[name=close]":{position:"absolute",top:"8px",right:"8px",width:"28px",height:"28px",padding:"0",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"16px",color:"var(--text-muted)",backgroundColor:"transparent",border:"none",borderRadius:"6px"},".cm-panel.cm-search button[name=close]:hover":{color:"var(--text-primary)",backgroundColor:"var(--bg-surface)"},".cm-panel.cm-search label":{fontSize:"13px",color:"var(--text-light)",verticalAlign:"middle",cursor:"pointer"},".cm-panel.cm-search label:hover":{color:"var(--text-primary)"},".cm-panel.cm-search [name=close]":{fontSize:"16px"},".cm-searchMatch":{backgroundColor:"rgba(255, 213, 79, 0.25)",outline:"1px solid rgba(255, 213, 79, 0.4)"},".cm-searchMatch-selected":{backgroundColor:"rgba(255, 152, 0, 0.35)"}},{dark:"undefined"==typeof document||"light"!==document.documentElement.getAttribute("data-theme")}),syntaxTheme=syntaxHighlighting(HighlightStyle.define([{tag:tags.keyword,color:"var(--code-keyword, #ff7b72)"},{tag:[tags.name,tags.deleted,tags.character,tags.propertyName,tags.macroName],color:"var(--code-name, #ffa657)"},{tag:[tags.function(tags.variableName),tags.labelName],color:"var(--code-function, #d2a8ff)"},{tag:[tags.color,tags.constant(tags.name),tags.standard(tags.name)],color:"var(--code-constant, #79c0ff)"},{tag:[tags.definition(tags.name),tags.separator],color:"var(--text-primary, #e0e0e0)"},{tag:[tags.typeName,tags.className,tags.number,tags.changed,tags.annotation,tags.modifier,tags.self,tags.namespace],color:"var(--code-name, #ffa657)"},{tag:[tags.operator,tags.operatorKeyword,tags.url,tags.escape,tags.regexp,tags.link,tags.special(tags.string)],color:"var(--code-constant, #79c0ff)"},{tag:[tags.meta,tags.comment],color:"var(--code-comment, #8b949e)",fontStyle:"italic"},{tag:tags.strong,fontWeight:"bold"},{tag:tags.emphasis,fontStyle:"italic"},{tag:tags.strikethrough,textDecoration:"line-through"},{tag:tags.link,color:"var(--code-constant, #79c0ff)",textDecoration:"underline"},{tag:tags.heading,fontWeight:"bold",color:"var(--code-name, #ffa657)"},{tag:[tags.atom,tags.bool,tags.special(tags.variableName)],color:"var(--code-constant, #79c0ff)"},{tag:[tags.processingInstruction,tags.string,tags.inserted],color:"var(--code-string, #a5d6ff)"},{tag:tags.invalid,color:"var(--code-error, #f85149)"}]));function FileContentView({filePath:filePath2,onClose:onClose,editorSession:editorSession,scrollToLine:scrollToLine}){const[content2,setContent]=reactExports.useState(null),[currentContent,setCurrentContent]=reactExports.useState(null),[error2,setError]=reactExports.useState(null),[fileSize2,setFileSize]=reactExports.useState(0),[loading2,setLoading]=reactExports.useState(!0),[saveStatus2,setSaveStatus]=reactExports.useState(null),[lineCount,setLineCount]=reactExports.useState(0),[closing2,setClosing]=reactExports.useState(!1),isMdFile=/\.md$/i.test(filePath2),[viewMode,setViewMode]=reactExports.useState(isMdFile?"markdown":"text"),[downloadMenuOpen,setDownloadMenuOpen]=reactExports.useState(!1),containerRef=reactExports.useRef(null),mounted=reactExports.useRef(!0),saveTimeoutRef=reactExports.useRef(null),saveRef=reactExports.useRef(null),lineNumRef=reactExports.useRef(null),editorViewRef=reactExports.useRef(null),markdownPreviewRef=reactExports.useRef(null),downloadWrapRef=reactExports.useRef(null),editorWrapperRef=reactExports.useRef(null),isDirty=null!==content2&&null!==currentContent&&content2!==currentContent,{handleCopy:handleCopy,handleSaveAs:handleSaveAs,handleSaveAsImage:handleSaveAsImage}=useMarkdownExport({getText:reactExports.useCallback(()=>(isDirty?currentContent:content2)??"",[isDirty,currentContent,content2]),getSnapshotTarget:reactExports.useCallback(()=>markdownPreviewRef.current,[]),onDone:reactExports.useCallback(()=>setDownloadMenuOpen(!1),[])});reactExports.useEffect(()=>{if(!downloadMenuOpen)return;const onDocClick=e=>{downloadWrapRef.current&&!downloadWrapRef.current.contains(e.target)&&setDownloadMenuOpen(!1)},onKey=e=>{"Escape"===e.key&&setDownloadMenuOpen(!1)};return document.addEventListener("mousedown",onDocClick),document.addEventListener("keydown",onKey),()=>{document.removeEventListener("mousedown",onDocClick),document.removeEventListener("keydown",onKey)}},[downloadMenuOpen]);const handleClose=reactExports.useCallback(()=>{if(closing2)return;setClosing(!0);const el=containerRef.current;el?el.addEventListener("animationend",()=>onClose(),{once:!0}):onClose()},[closing2,onClose]),doSave=reactExports.useCallback(async()=>{if(isDirty){setSaveStatus("saving");try{const res=await fetch(apiUrl("/api/file-content"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:filePath2,content:currentContent,...editorSession?{editorSession:!0}:{}})});if(!res.ok){const err=await res.json().catch(()=>({}));throw new Error(err.error||`HTTP ${res.status}`)}const data=await res.json();mounted.current&&(setContent(currentContent),setFileSize(data.size),setSaveStatus("saved"),saveTimeoutRef.current&&clearTimeout(saveTimeoutRef.current),saveTimeoutRef.current=setTimeout(()=>{mounted.current&&setSaveStatus(null)},2e3))}catch(err){mounted.current&&(setSaveStatus("failed"),saveTimeoutRef.current&&clearTimeout(saveTimeoutRef.current),saveTimeoutRef.current=setTimeout(()=>{mounted.current&&setSaveStatus(null)},3e3))}}},[isDirty,filePath2,currentContent]);saveRef.current=doSave;const scrollSyncExtension=reactExports.useMemo(()=>EditorView.updateListener.of(update=>{if(update.geometryChanged||update.viewportChanged){const scroller=update.view.scrollDOM;lineNumRef.current&&(lineNumRef.current.scrollTop=scroller.scrollTop)}}),[]),onEditorCreate=reactExports.useCallback(view=>{editorViewRef.current=view;const scroller=view.scrollDOM,syncScroll=()=>{lineNumRef.current&&(lineNumRef.current.scrollTop=scroller.scrollTop)};scroller.addEventListener("scroll",syncScroll),syncScroll()},[]),loadFileContent=reactExports.useCallback(()=>{mounted.current=!0,setContent(null),setCurrentContent(null),setError(null),setLoading(!0),setLineCount(0),fetch(apiUrl(`/api/file-content?path=${encodeURIComponent(filePath2)}${editorSession?"&editorSession=true":""}`)).then(r=>r.ok?r.json():r.json().then(err=>{throw new Error(err.error||"Failed to load")}).catch(()=>{throw new Error(`HTTP ${r.status}`)})).then(data=>{mounted.current&&(setContent(data.content),setCurrentContent(data.content),setFileSize(data.size),setLineCount(data.content.split("\n").length),setLoading(!1))}).catch(err=>{mounted.current&&(setError(`${t("ui.fileLoadError")}: ${err.message}`),setLoading(!1))})},[filePath2,editorSession]);reactExports.useEffect(()=>(loadFileContent(),()=>{mounted.current=!1,saveTimeoutRef.current&&clearTimeout(saveTimeoutRef.current)}),[loadFileContent]),reactExports.useEffect(()=>{if(scrollToLine&&editorViewRef.current&&!loading2&&null!==content2){const view=editorViewRef.current,lineNum=Math.min(scrollToLine,view.state.doc.lines),line=view.state.doc.line(lineNum);view.dispatch({effects:EditorView.scrollIntoView(line.from,{y:"start"})})}},[scrollToLine,loading2,content2]);const extensions=reactExports.useMemo(()=>{const exts=[...getLanguageExtension(filePath2),syntaxTheme,scrollSyncExtension,keymap.of([{key:"Mod-s",run:()=>{var _a;return null==(_a=saveRef.current)||_a.call(saveRef),!0}}])];return exts.push(showMinimap.compute(["doc"],state=>({create:view=>({dom:document.createElement("div")}),displayText:"characters",showOverlay:"mouse-over"}))),exts},[filePath2,scrollSyncExtension]),handleChange=reactExports.useCallback(value=>{setCurrentContent(value),setLineCount(value.split("\n").length)},[]),saveStatusText="saving"===saveStatus2?t("ui.saving"):"saved"===saveStatus2?t("ui.saved"):"failed"===saveStatus2?t("ui.saveFailed"):null,lineNumbers=reactExports.useMemo(()=>{if(lineCount<=0)return null;const lines=[];for(let i=1;i<=lineCount;i++)lines.push(jsxRuntimeExports.jsx("div",{className:styles$d_lineNumRow,children:i},i));return lines},[lineCount]);return jsxRuntimeExports.jsxs("div",{ref:containerRef,className:`${styles$d_fileContentView}${closing2?` ${styles$d_closing}`:""}`,children:[editorSession&&jsxRuntimeExports.jsx("div",{className:styles$d_editorBanner,onClick:handleClose,role:"button",tabIndex:0,onKeyDown:e=>{"Enter"!==e.key&&" "!==e.key||handleClose()},children:t("ui.editorSession.banner")}),jsxRuntimeExports.jsxs("div",{className:styles$d_header,children:[jsxRuntimeExports.jsxs("div",{className:styles$d_headerLeft,children:[jsxRuntimeExports.jsx("button",{className:styles$d_backBtn,onClick:handleClose,title:t("ui.backToChat"),children:jsxRuntimeExports.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntimeExports.jsx("polyline",{points:"15 18 9 12 15 6"})})}),jsxRuntimeExports.jsx("span",{className:styles$d_filePath,children:filePath2}),fileSize2>0&&jsxRuntimeExports.jsx("span",{className:styles$d_fileSize,children:(bytes=fileSize2,bytes<1024?`${bytes} B`:bytes<1048576?`${(bytes/1024).toFixed(1)} KB`:`${(bytes/1048576).toFixed(1)} MB`)})]}),jsxRuntimeExports.jsxs("div",{className:styles$d_headerRight,children:[saveStatusText&&jsxRuntimeExports.jsx("span",{className:`${styles$d_saveStatus} ${"failed"===saveStatus2?styles$d_saveStatusFailed:"saved"===saveStatus2?styles$d_saveStatusSaved:""}`,children:saveStatusText}),isMdFile&&jsxRuntimeExports.jsxs("div",{className:styles$d_downloadWrap,ref:downloadWrapRef,children:[jsxRuntimeExports.jsx("button",{className:styles$d_viewToggleBtn,onClick:()=>setDownloadMenuOpen(v=>!v),title:t("ui.saveAs"),"aria-label":t("ui.saveAs"),"aria-expanded":downloadMenuOpen,children:jsxRuntimeExports.jsx(RefIcon$c,{})}),downloadMenuOpen&&jsxRuntimeExports.jsxs("div",{className:styles$d_downloadMenu,children:[jsxRuntimeExports.jsxs("button",{className:styles$d_downloadMenuItem,onClick:handleSaveAs,children:[jsxRuntimeExports.jsx(RefIcon$c,{}),jsxRuntimeExports.jsx("span",{children:t("ui.saveAsMd")})]}),jsxRuntimeExports.jsxs("button",{className:styles$d_downloadMenuItem,onClick:handleCopy,children:[jsxRuntimeExports.jsx(RefIcon$d,{}),jsxRuntimeExports.jsx("span",{children:t("ui.copyTextContent")})]}),jsxRuntimeExports.jsxs("button",{className:styles$d_downloadMenuItem,onClick:handleSaveAsImage,disabled:"markdown"!==viewMode,title:"markdown"!==viewMode?t("ui.saveAsImageHintMd"):void 0,children:[jsxRuntimeExports.jsx(RefIcon$4,{}),jsxRuntimeExports.jsx("span",{children:t("ui.saveAsImage")})]})]})]}),isMdFile&&jsxRuntimeExports.jsxs("button",{className:`${styles$d_viewToggleBtn}${"markdown"===viewMode?` ${styles$d_viewToggleActive}`:""}`,onClick:()=>setViewMode(v=>"markdown"===v?"text":"markdown"),title:t("markdown"===viewMode?"ui.viewText":"ui.viewMarkdown"),children:["markdown"===viewMode?jsxRuntimeExports.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("polyline",{points:"16 18 22 12 16 6"}),jsxRuntimeExports.jsx("polyline",{points:"8 6 2 12 8 18"})]}):jsxRuntimeExports.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("path",{d:"M2 3h20v18H2z"}),jsxRuntimeExports.jsx("path",{d:"M7 15V9l2 3 2-3v6"}),jsxRuntimeExports.jsx("path",{d:"M17 9l-2 3h4l-2 3"})]}),t("markdown"===viewMode?"ui.viewText":"ui.viewMarkdown")]}),jsxRuntimeExports.jsxs("button",{className:styles$d_saveBtn,onClick:doSave,disabled:!isDirty||"saving"===saveStatus2,title:`${t("ui.save")} (Ctrl+S)`,children:[jsxRuntimeExports.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("path",{d:"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"}),jsxRuntimeExports.jsx("polyline",{points:"17 21 17 13 7 13 7 21"}),jsxRuntimeExports.jsx("polyline",{points:"7 3 7 8 15 8"})]}),t("ui.save")]}),jsxRuntimeExports.jsx("button",{className:styles$d_closeBtn,onClick:handleClose,title:t("ui.backToChat"),children:jsxRuntimeExports.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),jsxRuntimeExports.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})]}),jsxRuntimeExports.jsxs("div",{className:styles$d_contentContainer,children:[error2&&jsxRuntimeExports.jsx("div",{className:styles$d_error,children:error2}),loading2&&!error2&&jsxRuntimeExports.jsx("div",{className:styles$d_loading,children:t("ui.loading")}),!loading2&&null!==content2&&"markdown"===viewMode&&isMdFile&&jsxRuntimeExports.jsx("div",{ref:markdownPreviewRef,className:styles$d_markdownPreview,dangerouslySetInnerHTML:{__html:renderMarkdown(isDirty?currentContent:content2)}}),!loading2&&null!==content2&&!("markdown"===viewMode&&isMdFile)&&jsxRuntimeExports.jsxs("div",{className:styles$d_editorWrapper,ref:editorWrapperRef,children:[jsxRuntimeExports.jsx("div",{className:styles$d_lineNumCol,ref:lineNumRef,children:lineNumbers}),jsxRuntimeExports.jsx("div",{className:styles$d_editorCol,children:jsxRuntimeExports.jsx(ReactCodeMirror,{value:content2,height:"100%",theme:editorTheme,extensions:extensions,onChange:handleChange,onCreateEditor:onEditorCreate,basicSetup:{lineNumbers:!1,foldGutter:!1,highlightActiveLine:!0,highlightSelectionMatches:!0,bracketMatching:!0,autocompletion:!1}})})]})]})]});var bytes}const styles$c_imageViewer="_imageViewer_cvqfs_1",styles$c_header="_header_cvqfs_8",styles$c_headerLeft="_headerLeft_cvqfs_18",styles$c_headerRight="_headerRight_cvqfs_26",styles$c_backBtn="_backBtn_cvqfs_33",styles$c_closeBtn="_closeBtn_cvqfs_54",styles$c_filePath="_filePath_cvqfs_73",styles$c_fileSize="_fileSize_cvqfs_81",styles$c_toolbar="_toolbar_cvqfs_87",styles$c_toolBtn="_toolBtn_cvqfs_97",styles$c_zoomLabel="_zoomLabel_cvqfs_118",styles$c_canvasArea="_canvasArea_cvqfs_126",styles$c_dragging="_dragging_cvqfs_141",styles$c_imageWrap="_imageWrap_cvqfs_145",styles$c_svgInline="_svgInline_cvqfs_158",styles$c_statusBar="_statusBar_cvqfs_173",styles$c_loading="_loading_cvqfs_185",styles$c_error="_error_cvqfs_195";function ImageViewer({filePath:filePath2,onClose:onClose,editorSession:editorSession}){const[zoom,setZoom]=reactExports.useState(1),[offset,setOffset]=reactExports.useState({x:0,y:0}),[naturalSize,setNaturalSize]=reactExports.useState(null),[fileSize2,setFileSize]=reactExports.useState(0),[loading2,setLoading]=reactExports.useState(!0),[error2,setError]=reactExports.useState(null),[svgContent,setSvgContent]=reactExports.useState(null),canvasRef=reactExports.useRef(null),dragRef=reactExports.useRef(null),isSvg=(filePath2||"").toLowerCase().endsWith(".svg"),imgSrc=apiUrl(`/api/file-raw?path=${encodeURIComponent(filePath2)}${editorSession?"&editorSession=true":""}`);reactExports.useEffect(()=>{isSvg?(setLoading(!0),fetch(imgSrc).then(r=>r.text()).then(text=>{setSvgContent(purify.sanitize(text,{USE_PROFILES:{svg:!0}}));const vb=text.match(/viewBox=["']([^"']+)["']/),aspect=(vb&&vb[1].split(/[\s,]+/).map(Number)[2]||24)/(vb&&vb[1].split(/[\s,]+/).map(Number)[3]||24);setNaturalSize({w:Math.round(200*aspect),h:200}),setLoading(!1)}).catch(()=>{setError("Failed to load SVG"),setLoading(!1)})):setSvgContent(null)},[isSvg,imgSrc]),reactExports.useEffect(()=>{fetch(imgSrc,{method:"HEAD"}).then(r=>{const len=r.headers.get("content-length");len&&setFileSize(parseInt(len,10))}).catch(()=>{})},[filePath2,editorSession,imgSrc]);const fitToWindow=reactExports.useCallback(()=>{if(!naturalSize||!canvasRef.current)return;const rect=canvasRef.current.getBoundingClientRect(),scaleX=(rect.width-40)/naturalSize.w,scaleY=(rect.height-40)/naturalSize.h,fit=Math.min(scaleX,scaleY);setZoom(fit),setOffset({x:(rect.width-naturalSize.w*fit)/2,y:(rect.height-naturalSize.h*fit)/2})},[naturalSize]),handleImageLoad=reactExports.useCallback(e=>{const img=e.target;setNaturalSize({w:img.naturalWidth,h:img.naturalHeight}),setLoading(!1)},[]);reactExports.useEffect(()=>{if(!naturalSize)return;const raf=requestAnimationFrame(()=>fitToWindow());let resizeRaf;const ro=new ResizeObserver(()=>{cancelAnimationFrame(resizeRaf),resizeRaf=requestAnimationFrame(()=>fitToWindow())});return canvasRef.current&&ro.observe(canvasRef.current),()=>{cancelAnimationFrame(raf),cancelAnimationFrame(resizeRaf),ro.disconnect()}},[naturalSize]);const handleImageError=reactExports.useCallback(()=>{setError("Failed to load image"),setLoading(!1)},[]),clampZoom=z=>Math.min(10,Math.max(.1,z)),handleWheel=reactExports.useCallback(e=>{e.preventDefault();const rect=canvasRef.current.getBoundingClientRect(),mx=e.clientX-rect.left,my=e.clientY-rect.top;setZoom(prev=>{const next=clampZoom(prev*(e.deltaY<0?1.15:1/1.15)),ratio=next/prev;return setOffset(o2=>({x:mx-ratio*(mx-o2.x),y:my-ratio*(my-o2.y)})),next})},[]),handleMouseDown=reactExports.useCallback(e=>{if(0!==e.button)return;dragRef.current={startX:e.clientX,startY:e.clientY,startOx:offset.x,startOy:offset.y};const canvas=canvasRef.current;canvas.classList.add(styles$c_dragging);const onMove=ev=>{dragRef.current&&setOffset({x:dragRef.current.startOx+ev.clientX-dragRef.current.startX,y:dragRef.current.startOy+ev.clientY-dragRef.current.startY})},onUp=()=>{dragRef.current=null,canvas.classList.remove(styles$c_dragging),window.removeEventListener("mousemove",onMove),window.removeEventListener("mouseup",onUp)};window.addEventListener("mousemove",onMove),window.addEventListener("mouseup",onUp)},[offset]);return jsxRuntimeExports.jsxs("div",{className:styles$c_imageViewer,children:[jsxRuntimeExports.jsxs("div",{className:styles$c_header,children:[jsxRuntimeExports.jsxs("div",{className:styles$c_headerLeft,children:[jsxRuntimeExports.jsx("button",{className:styles$c_backBtn,onClick:onClose,title:t("ui.backToChat"),children:jsxRuntimeExports.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntimeExports.jsx("polyline",{points:"15 18 9 12 15 6"})})}),jsxRuntimeExports.jsx("span",{className:styles$c_filePath,children:filePath2})]}),jsxRuntimeExports.jsxs("div",{className:styles$c_headerRight,children:[fileSize2>0&&jsxRuntimeExports.jsx("span",{className:styles$c_fileSize,children:(bytes=fileSize2,bytes<1024?bytes+" B":bytes<1048576?(bytes/1024).toFixed(1)+" KB":(bytes/1048576).toFixed(1)+" MB")}),jsxRuntimeExports.jsx("button",{className:styles$c_closeBtn,onClick:onClose,title:t("ui.backToChat"),children:jsxRuntimeExports.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),jsxRuntimeExports.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})]}),jsxRuntimeExports.jsxs("div",{className:styles$c_toolbar,children:[jsxRuntimeExports.jsx("button",{className:styles$c_toolBtn,onClick:()=>{setZoom(prev=>{const next=clampZoom(prev+.25),rect=canvasRef.current.getBoundingClientRect(),cx=rect.width/2,cy=rect.height/2,ratio=next/prev;return setOffset(o2=>({x:cx-ratio*(cx-o2.x),y:cy-ratio*(cy-o2.y)})),next})},title:t("ui.imageViewer.zoomIn"),children:jsxRuntimeExports.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("circle",{cx:"11",cy:"11",r:"8"}),jsxRuntimeExports.jsx("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"}),jsxRuntimeExports.jsx("line",{x1:"11",y1:"8",x2:"11",y2:"14"}),jsxRuntimeExports.jsx("line",{x1:"8",y1:"11",x2:"14",y2:"11"})]})}),jsxRuntimeExports.jsx("button",{className:styles$c_toolBtn,onClick:()=>{setZoom(prev=>{const next=clampZoom(prev-.25),rect=canvasRef.current.getBoundingClientRect(),cx=rect.width/2,cy=rect.height/2,ratio=next/prev;return setOffset(o2=>({x:cx-ratio*(cx-o2.x),y:cy-ratio*(cy-o2.y)})),next})},title:t("ui.imageViewer.zoomOut"),children:jsxRuntimeExports.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("circle",{cx:"11",cy:"11",r:"8"}),jsxRuntimeExports.jsx("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"}),jsxRuntimeExports.jsx("line",{x1:"8",y1:"11",x2:"14",y2:"11"})]})}),jsxRuntimeExports.jsx("button",{className:styles$c_toolBtn,onClick:()=>{if(!canvasRef.current)return;const rect=canvasRef.current.getBoundingClientRect(),w=naturalSize?naturalSize.w:0,h=naturalSize?naturalSize.h:0;setZoom(1),setOffset({x:(rect.width-w)/2,y:(rect.height-h)/2})},title:t("ui.imageViewer.resetZoom"),children:jsxRuntimeExports.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("path",{d:"M3 3h7v7H3z"}),jsxRuntimeExports.jsx("path",{d:"M14 3h7v7h-7z"}),jsxRuntimeExports.jsx("path",{d:"M3 14h7v7H3z"}),jsxRuntimeExports.jsx("path",{d:"M14 14h7v7h-7z"})]})}),jsxRuntimeExports.jsx("button",{className:styles$c_toolBtn,onClick:fitToWindow,title:t("ui.imageViewer.fitToWindow"),children:jsxRuntimeExports.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("path",{d:"M8 3H5a2 2 0 0 0-2 2v3"}),jsxRuntimeExports.jsx("path",{d:"M21 8V5a2 2 0 0 0-2-2h-3"}),jsxRuntimeExports.jsx("path",{d:"M3 16v3a2 2 0 0 0 2 2h3"}),jsxRuntimeExports.jsx("path",{d:"M16 21h3a2 2 0 0 0 2-2v-3"})]})}),jsxRuntimeExports.jsxs("span",{className:styles$c_zoomLabel,children:[Math.round(100*zoom),"%"]})]}),jsxRuntimeExports.jsxs("div",{className:styles$c_canvasArea,ref:canvasRef,onWheel:handleWheel,onMouseDown:handleMouseDown,children:[loading2&&!error2&&jsxRuntimeExports.jsx("div",{className:styles$c_loading,children:t("ui.loading")}),error2&&jsxRuntimeExports.jsx("div",{className:styles$c_error,children:error2}),jsxRuntimeExports.jsx("div",{className:styles$c_imageWrap,style:{transform:`translate(${offset.x}px, ${offset.y}px) scale(${zoom})`},children:isSvg&&svgContent?jsxRuntimeExports.jsx("div",{className:styles$c_svgInline,dangerouslySetInnerHTML:{__html:svgContent}}):jsxRuntimeExports.jsx("img",{src:imgSrc,onLoad:handleImageLoad,onError:handleImageError,alt:filePath2,draggable:!1,style:{display:loading2?"none":"block"}})})]}),naturalSize&&jsxRuntimeExports.jsxs("div",{className:styles$c_statusBar,children:[jsxRuntimeExports.jsxs("span",{children:[naturalSize.w," × ",naturalSize.h]}),jsxRuntimeExports.jsxs("span",{children:[Math.round(100*zoom),"%"]})]})]});var bytes}async function fetchAllRepos(){let repoList;try{const repoRes=await fetch(apiUrl("/api/git-repos"));if(!repoRes.ok)throw new Error("No git-repos endpoint");repoList=(await repoRes.json()).repos||[]}catch{try{const statusRes=await fetch(apiUrl("/api/git-status"));if(!statusRes.ok)return[];const data=await statusRes.json();return[{name:".",path:".",isRoot:!0,changes:data.changes||[],insertions:data.insertions||0,deletions:data.deletions||0}]}catch{return[]}}return await Promise.all(repoList.map(async repo=>{try{const statusRes=await fetch(apiUrl(`/api/git-status?repo=${encodeURIComponent(repo.path)}`));if(!statusRes.ok)return{...repo,changes:[]};const data=await statusRes.json();return{...repo,changes:data.changes||[],insertions:data.insertions||0,deletions:data.deletions||0}}catch{return{...repo,changes:[],insertions:0,deletions:0}}}))}function buildGitTree(changes){const root2={dirs:{},files:[]};for(const change of changes){if(!change.file||change.file.endsWith("/"))continue;const parts=change.file.split("/").filter(Boolean);if(0===parts.length)continue;let node=root2;for(let i=0;i<parts.length-1;i++)node.dirs[parts[i]]||(node.dirs[parts[i]]={dirs:{},files:[]}),node=node.dirs[parts[i]];node.files.push({name:parts[parts.length-1],status:change.status,fullPath:change.file})}return root2}const styles$b_gitChanges="_gitChanges_obtg5_1",styles$b_header="_header_obtg5_10",styles$b_headerTitle="_headerTitle_obtg5_19",styles$b_collapseBtn="_collapseBtn_obtg5_27",styles$b_changesContainer="_changesContainer_obtg5_46",styles$b_changeItem="_changeItem_obtg5_52",styles$b_changeItemSelected="_changeItemSelected_obtg5_69",styles$b_dirItem="_dirItem_obtg5_73",styles$b_dirArrow="_dirArrow_obtg5_84",styles$b_dirName="_dirName_obtg5_93",styles$b_status="_status_obtg5_98",styles$b_icon="_icon_obtg5_107",styles$b_fileName="_fileName_obtg5_116",styles$b_actions="_actions_obtg5_122",styles$b_loading="_loading_obtg5_150",styles$b_error="_error_obtg5_156",styles$b_empty="_empty_obtg5_162",styles$b_rotated90="_rotated90_obtg5_169",styles$b_repoHeader="_repoHeader_obtg5_174",styles$b_repoArrow="_repoArrow_obtg5_193",styles$b_repoArrowExpanded="_repoArrowExpanded_obtg5_204",styles$b_repoName="_repoName_obtg5_208",styles$b_repoBadge="_repoBadge_obtg5_215",styles$b_statBadge="_statBadge_obtg5_224",styles$b_statInsert="_statInsert_obtg5_232",styles$b_statDelete="_statDelete_obtg5_236",STATUS_COLORS={M:"#e2c08d",A:"#73c991",D:"#f14c4c",R:"#73c991",C:"#73c991",U:"#e2c08d","?":"#73c991","??":"#73c991"},STATUS_LABELS={"??":"U"};function TreeDir({name:name,node:node,depth:depth,repoPath:repoPath,onFileClick:onFileClick,onOpenFile:onOpenFile,onRestore:onRestore,selectedFile:selectedFile,selectedRepo:selectedRepo}){const dirNames=Object.keys(node.dirs).sort(),files=[...node.files].sort((a,b)=>a.name.localeCompare(b.name));return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[name&&jsxRuntimeExports.jsxs("div",{className:styles$b_dirItem,style:{paddingLeft:8+16*depth},children:[jsxRuntimeExports.jsx("span",{className:styles$b_dirArrow,children:jsxRuntimeExports.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",className:styles$b_rotated90,children:jsxRuntimeExports.jsx("polyline",{points:"9 6 15 12 9 18"})})}),jsxRuntimeExports.jsx("span",{className:styles$b_icon,children:getFileIcon("","directory")}),jsxRuntimeExports.jsx("span",{className:styles$b_dirName,children:name})]}),dirNames.map(dir=>jsxRuntimeExports.jsx(TreeDir,{name:dir,node:node.dirs[dir],depth:name?depth+1:depth,repoPath:repoPath,onFileClick:onFileClick,onOpenFile:onOpenFile,onRestore:onRestore,selectedFile:selectedFile,selectedRepo:selectedRepo},dir)),files.map(file=>jsxRuntimeExports.jsx(Dropdown,{menu:{items:[{key:"reveal",label:t("ui.contextMenu.revealInExplorer")},{key:"copyPath",label:t("ui.contextMenu.copyPath")},{key:"copyRelPath",label:t("ui.contextMenu.copyRelativePath")}],onClick:({key:key})=>{const resolvedPath=repoPath&&"."!==repoPath?`${repoPath}/${file.fullPath}`:file.fullPath;"reveal"===key?fetch(apiUrl("/api/reveal-file"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:resolvedPath})}).catch(()=>{}):"copyPath"===key?fetch(apiUrl("/api/resolve-path"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:resolvedPath})}).then(r=>r.json()).then(data=>{data.fullPath&&navigator.clipboard.writeText(data.fullPath).then(()=>staticMethods.success(t("ui.copied"))).catch(()=>{})}).catch(()=>{}):"copyRelPath"===key&&navigator.clipboard.writeText(resolvedPath).then(()=>staticMethods.success(t("ui.copied"))).catch(()=>{})}},trigger:["contextMenu"],children:jsxRuntimeExports.jsxs("div",{className:`${styles$b_changeItem} ${selectedFile===file.fullPath&&selectedRepo===repoPath?styles$b_changeItemSelected:""}`,style:{paddingLeft:8+16*(name?depth+1:depth)},onClick:()=>onFileClick&&onFileClick(repoPath,file.fullPath),children:[jsxRuntimeExports.jsx("span",{className:styles$b_icon,children:getFileIcon(file.name)}),jsxRuntimeExports.jsx("span",{className:styles$b_fileName,children:file.name}),jsxRuntimeExports.jsxs("span",{className:styles$b_actions,children:[jsxRuntimeExports.jsx("span",{title:t("ui.gitChanges.openFile"),onClick:e=>{e.stopPropagation(),onOpenFile&&onOpenFile(repoPath,file.fullPath)},children:jsxRuntimeExports.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),jsxRuntimeExports.jsx("polyline",{points:"14 2 14 8 20 8"})]})}),jsxRuntimeExports.jsx("span",{title:t("ui.gitChanges.restoreFile"),onClick:e=>{e.stopPropagation(),onRestore&&onRestore(repoPath,file.fullPath,file.name)},children:jsxRuntimeExports.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("polyline",{points:"1 4 1 10 7 10"}),jsxRuntimeExports.jsx("path",{d:"M3.51 15a9 9 0 1 0 2.13-9.36L1 10"})]})})]}),jsxRuntimeExports.jsx("span",{className:styles$b_status,style:{color:STATUS_COLORS[file.status]||"#888"},children:STATUS_LABELS[file.status]||file.status})]})},file.fullPath))]})}function GitChanges({style:style,onClose:onClose,onFileClick:onFileClick,onOpenFile:onOpenFile,refreshTrigger:refreshTrigger}){const[repos,setRepos]=reactExports.useState(null),[error2,setError]=reactExports.useState(null),[loading2,setLoading]=reactExports.useState(!0),[selectedFile,setSelectedFile]=reactExports.useState(null),[selectedRepo,setSelectedRepo]=reactExports.useState(null),[collapsedRepos,setCollapsedRepos]=reactExports.useState(new Set),mounted=reactExports.useRef(!0),refreshAllRepos=reactExports.useCallback(()=>{fetchAllRepos().then(results=>{mounted.current&&setRepos(results)}).catch(()=>{})},[]),handleRestore=reactExports.useCallback((repoPath,filePath2,fileName2)=>{Modal.confirm({title:t("ui.gitChanges.restoreConfirm",{name:fileName2}),okType:"danger",okText:t("ui.gitChanges.restoreFile"),onOk:()=>fetch(apiUrl("/api/git-restore"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:filePath2,repo:repoPath})}).then(r=>{r.ok&&refreshAllRepos()})})},[refreshAllRepos]);reactExports.useEffect(()=>(mounted.current=!0,setLoading(!0),fetchAllRepos().then(results=>{mounted.current&&(setRepos(results),setLoading(!1))}).catch(()=>{mounted.current&&(setError("Failed to load git status"),setLoading(!1))}),()=>{mounted.current=!1}),[]),reactExports.useEffect(()=>{refreshTrigger>0&&refreshAllRepos()},[refreshTrigger]);const isSingleRepo=!repos||repos.length<=1,totalInsertions=repos?repos.reduce((sum,r)=>sum+(r.insertions||0),0):0,totalDeletions=repos?repos.reduce((sum,r)=>sum+(r.deletions||0),0):0;return jsxRuntimeExports.jsxs("div",{className:styles$b_gitChanges,style:style,children:[jsxRuntimeExports.jsxs("div",{className:styles$b_header,children:[jsxRuntimeExports.jsxs("span",{className:styles$b_headerTitle,children:[t("ui.gitChanges"),(totalInsertions>0||totalDeletions>0)&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[" ",jsxRuntimeExports.jsxs("span",{className:`${styles$b_statBadge} ${styles$b_statInsert}`,children:["+",totalInsertions]})," ",jsxRuntimeExports.jsxs("span",{className:`${styles$b_statBadge} ${styles$b_statDelete}`,children:["-",totalDeletions]})]})]}),jsxRuntimeExports.jsx("button",{className:styles$b_collapseBtn,onClick:onClose,title:"Close",children:jsxRuntimeExports.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("polyline",{points:"11 17 6 12 11 7"}),jsxRuntimeExports.jsx("polyline",{points:"18 17 13 12 18 7"})]})})]}),jsxRuntimeExports.jsxs("div",{className:styles$b_changesContainer,children:[loading2&&jsxRuntimeExports.jsx("div",{className:styles$b_loading,children:"Loading..."}),error2&&jsxRuntimeExports.jsx("div",{className:styles$b_error,children:error2}),!loading2&&!error2&&(!repos||0===repos.length)&&jsxRuntimeExports.jsx("div",{className:styles$b_empty,children:"No changes"}),!loading2&&!error2&&repos&&repos.map(repo=>{const collapsed=collapsedRepos.has(repo.path);return isSingleRepo?jsxRuntimeExports.jsx(TreeDir,{name:"",node:buildGitTree(repo.changes),depth:0,repoPath:repo.path,onFileClick:(rp,fp)=>{setSelectedFile(fp),setSelectedRepo(rp),onFileClick&&onFileClick(rp,fp)},onOpenFile:onOpenFile,onRestore:handleRestore,selectedFile:selectedFile,selectedRepo:selectedRepo},repo.path):jsxRuntimeExports.jsxs(React.Fragment,{children:[jsxRuntimeExports.jsxs("div",{className:styles$b_repoHeader,onClick:()=>setCollapsedRepos(prev=>{const next=new Set(prev);return collapsed?next.delete(repo.path):next.add(repo.path),next}),children:[jsxRuntimeExports.jsx("span",{className:`${styles$b_repoArrow} ${collapsed?"":styles$b_repoArrowExpanded}`,children:jsxRuntimeExports.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntimeExports.jsx("polyline",{points:"9 6 15 12 9 18"})})}),jsxRuntimeExports.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-muted)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{flexShrink:0},children:[jsxRuntimeExports.jsx("line",{x1:"6",y1:"3",x2:"6",y2:"15"}),jsxRuntimeExports.jsx("circle",{cx:"18",cy:"6",r:"3"}),jsxRuntimeExports.jsx("circle",{cx:"6",cy:"18",r:"3"}),jsxRuntimeExports.jsx("path",{d:"M18 9a9 9 0 0 1-9 9"})]}),jsxRuntimeExports.jsx("span",{className:styles$b_repoName,children:repo.name}),(repo.insertions>0||repo.deletions>0)&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs("span",{className:`${styles$b_statBadge} ${styles$b_statInsert}`,children:["+",repo.insertions]}),jsxRuntimeExports.jsxs("span",{className:`${styles$b_statBadge} ${styles$b_statDelete}`,children:["-",repo.deletions]})]}),jsxRuntimeExports.jsx("span",{className:styles$b_repoBadge,children:repo.changes.length})]}),!collapsed&&jsxRuntimeExports.jsx(TreeDir,{name:"",node:buildGitTree(repo.changes),depth:1,repoPath:repo.path,onFileClick:(rp,fp)=>{setSelectedFile(fp),setSelectedRepo(rp),onFileClick&&onFileClick(rp,fp)},onOpenFile:onOpenFile,onRestore:handleRestore,selectedFile:selectedFile,selectedRepo:selectedRepo})]},repo.path)})]})]})}const IMAGE_EXTS=new Set(["png","jpg","jpeg","gif","svg","bmp","ico","icns","webp","avif"]);function isImageFile(path){const ext=(path||"").split(".").pop().toLowerCase();return IMAGE_EXTS.has(ext)}const MUTATING_CMD_RE=/\b(rm|mkdir|mv|cp|touch|chmod|chown|ln|git\s+(checkout|reset|stash|merge|rebase|cherry-pick|restore|clean|rm)|npm\s+(install|uninstall|ci)|yarn\s+(add|remove)|pnpm\s+(add|remove|install)|pip\s+install|tar|unzip|curl\s+-[^\s]*o|wget)\b|[^>]>(?!>)|>>/;function isMutatingCommand(cmd){return MUTATING_CMD_RE.test(cmd)}const HighlightJS=getDefaultExportFromCjs(requireCore()),KEYWORDS$1=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],LITERALS$1=["true","false","null","undefined","NaN","Infinity"],TYPES$1=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],ERROR_TYPES$1=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],BUILT_IN_GLOBALS$1=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],BUILT_IN_VARIABLES$1=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],BUILT_INS$1=[].concat(BUILT_IN_GLOBALS$1,TYPES$1,ERROR_TYPES$1);const IDENT_RE="[A-Za-z$_][0-9A-Za-z$_]*",KEYWORDS=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],LITERALS=["true","false","null","undefined","NaN","Infinity"],TYPES=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],ERROR_TYPES=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],BUILT_IN_GLOBALS=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],BUILT_IN_VARIABLES=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],BUILT_INS=[].concat(BUILT_IN_GLOBALS,TYPES,ERROR_TYPES);var frac$1="\\.([0-9](_*[0-9])*)",hexDigits$1="[0-9a-fA-F](_*[0-9a-fA-F])*",NUMERIC$1={className:"number",variants:[{begin:`(\\b([0-9](_*[0-9])*)((${frac$1})|\\.)?|(${frac$1}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:`\\b([0-9](_*[0-9])*)((${frac$1})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${frac$1})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{begin:`\\b0[xX]((${hexDigits$1})\\.?|(${hexDigits$1})?\\.(${hexDigits$1}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${hexDigits$1})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function recurRegex(re,substitution,depth){return-1===depth?"":re.replace(substitution,_=>recurRegex(re,substitution,depth-1))}function source(re){return re?"string"==typeof re?re:re.source:null}function lookahead(re){return concat("(?=",re,")")}function concat(...args){return args.map(x=>source(x)).join("")}function either(...args){const opts=function(args){const opts=args[args.length-1];return"object"==typeof opts&&opts.constructor===Object?(args.splice(args.length-1,1),opts):{}}(args);return"("+(opts.capture?"":"?:")+args.map(x=>source(x)).join("|")+")"}const keywordWrapper=keyword=>concat(/\b/,keyword,/\w$/.test(keyword)?/\b/:/\B/),dotKeywords=["Protocol","Type"].map(keywordWrapper),optionalDotKeywords=["init","self"].map(keywordWrapper),keywordTypes=["Any","Self"],keywords=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","borrowing","break","case","catch","class","consume","consuming","continue","convenience","copy","default","defer","deinit","didSet","distributed","do","dynamic","each","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","macro","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","package","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],literals=["false","nil","true"],precedencegroupKeywords=["assignment","associativity","higherThan","left","lowerThan","none","right"],numberSignKeywords=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warning"],builtIns=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],operatorHead=either(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),operatorCharacter=either(operatorHead,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),operator=concat(operatorHead,operatorCharacter,"*"),identifierHead=either(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),identifierCharacter=either(identifierHead,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),identifier=concat(identifierHead,identifierCharacter,"*"),typeIdentifier=concat(/[A-Z]/,identifierCharacter,"*"),keywordAttributes=["attached","autoclosure",concat(/convention\(/,either("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",concat(/objc\(/,identifier,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","Sendable","testable","UIApplicationMain","unchecked","unknown","usableFromInline","warn_unqualified_access"],availabilityKeywords=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"];var frac="\\.([0-9](_*[0-9])*)",hexDigits="[0-9a-fA-F](_*[0-9a-fA-F])*",NUMERIC={className:"number",variants:[{begin:`(\\b([0-9](_*[0-9])*)((${frac})|\\.)?|(${frac}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:`\\b([0-9](_*[0-9])*)((${frac})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${frac})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{begin:`\\b0[xX]((${hexDigits})\\.?|(${hexDigits})?\\.(${hexDigits}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${hexDigits})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};const TAGS$1=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video","defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],MEDIA_FEATURES$1=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),PSEUDO_CLASSES$1=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),PSEUDO_ELEMENTS$1=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),ATTRIBUTES$1=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();const TAGS=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video","defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],MEDIA_FEATURES=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),PSEUDO_CLASSES=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),PSEUDO_ELEMENTS=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),ATTRIBUTES=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();const styles$a_fullFileDiffView="_fullFileDiffView_1a9ry_1",styles$a_diffSummary="_diffSummary_1a9ry_12",styles$a_addedBadge="_addedBadge_1a9ry_22",styles$a_deletedBadge="_deletedBadge_1a9ry_33",styles$a_codeContainer="_codeContainer_1a9ry_44",styles$a_lineNumberCol="_lineNumberCol_1a9ry_54",styles$a_lineNumRow="_lineNumRow_1a9ry_62",styles$a_oldLineNum="_oldLineNum_1a9ry_67",styles$a_newLineNum="_newLineNum_1a9ry_68",styles$a_lineNumNormal="_lineNumNormal_1a9ry_77",styles$a_lineNumAdd="_lineNumAdd_1a9ry_82",styles$a_lineNumDelete="_lineNumDelete_1a9ry_95",styles$a_codeColWrap="_codeColWrap_1a9ry_108",styles$a_codeCol="_codeCol_1a9ry_108",styles$a_codeInner="_codeInner_1a9ry_122",styles$a_codeLine="_codeLine_1a9ry_127",styles$a_linePrefix="_linePrefix_1a9ry_138",styles$a_lineContent="_lineContent_1a9ry_147",styles$a_lineNormal="_lineNormal_1a9ry_153",styles$a_lineAdd="_lineAdd_1a9ry_157",styles$a_lineDelete="_lineDelete_1a9ry_165",styles$9_miniMap="_miniMap_1ho3j_1",styles$9_marker="_marker_1ho3j_11";function DiffMiniMap({diffLines:diffLines2,scrollRef:scrollRef}){const mapRef=reactExports.useRef(null),[visible,setVisible]=reactExports.useState(!1);reactExports.useEffect(()=>{const el=null==scrollRef?void 0:scrollRef.current;if(!el)return;let prevScrollHeight=0,rafId=null;const check=()=>{const overflow=el.scrollHeight>el.clientHeight+1;setVisible(overflow),prevScrollHeight=el.scrollHeight};let stableCount=0;const poll=()=>{el.scrollHeight!==prevScrollHeight?(check(),stableCount=0):stableCount++,stableCount<30&&(rafId=requestAnimationFrame(poll))};check(),rafId=requestAnimationFrame(poll);const ro=new ResizeObserver(check);return ro.observe(el),()=>{ro.disconnect(),rafId&&cancelAnimationFrame(rafId)}},[scrollRef,diffLines2]);const handleClick=reactExports.useCallback(e=>{const el=null==scrollRef?void 0:scrollRef.current,map=mapRef.current;if(!el||!map)return;const rect=map.getBoundingClientRect(),ratio=(e.clientY-rect.top)/rect.height;el.scrollTop=ratio*(el.scrollHeight-el.clientHeight)},[scrollRef]);if(!visible||!diffLines2.length)return null;const totalLines=diffLines2.length,markers=[];for(let i=0;i<totalLines;i++){const type=diffLines2[i].type;if("context"===type)continue;const start=i;for(;i+1<totalLines&&diffLines2[i+1].type===type;)i++;markers.push({type:type,start:start,end:i})}return jsxRuntimeExports.jsx("div",{className:styles$9_miniMap,ref:mapRef,onClick:handleClick,children:markers.map((m,idx)=>{const topPct=m.start/totalLines*100,heightPct=(m.end-m.start+1)/totalLines*100,color="add"===m.type?"rgba(115, 201, 145, 0.7)":"rgba(241, 76, 76, 0.7)";return jsxRuntimeExports.jsx("div",{className:styles$9_marker,style:{top:`${topPct}%`,height:`max(2px, ${heightPct}%)`,backgroundColor:color}},idx)})})}HighlightJS.registerLanguage("javascript",function(hljs){const regex=hljs.regex,IDENT_RE$1$1="[A-Za-z$_][0-9A-Za-z$_]*",FRAGMENT_begin="<>",FRAGMENT_end="</>",XML_TAG={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(match,response)=>{const afterMatchIndex=match[0].length+match.index,nextChar=match.input[afterMatchIndex];if("<"===nextChar||","===nextChar)return void response.ignoreMatch();let m;">"===nextChar&&(((match,{after:after})=>{const tag="</"+match[0].slice(1);return-1!==match.input.indexOf(tag,after)})(match,{after:afterMatchIndex})||response.ignoreMatch());const afterMatch=match.input.substring(afterMatchIndex);((m=afterMatch.match(/^\s*=/))||(m=afterMatch.match(/^\s+extends\s+/))&&0===m.index)&&response.ignoreMatch()}},KEYWORDS$1$1={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:KEYWORDS$1,literal:LITERALS$1,built_in:BUILT_INS$1,"variable.language":BUILT_IN_VARIABLES$1},frac2="\\.([0-9](_?[0-9])*)",NUMBER={className:"number",variants:[{begin:`(\\b(0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*)((${frac2})|\\.)?|(${frac2}))[eE][+-]?([0-9](_?[0-9])*)\\b`},{begin:`\\b(0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*)\\b((${frac2})\\b|\\.)?|(${frac2})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},SUBST={className:"subst",begin:"\\$\\{",end:"\\}",keywords:KEYWORDS$1$1,contains:[]},HTML_TEMPLATE={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[hljs.BACKSLASH_ESCAPE,SUBST],subLanguage:"xml"}},CSS_TEMPLATE={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[hljs.BACKSLASH_ESCAPE,SUBST],subLanguage:"css"}},GRAPHQL_TEMPLATE={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[hljs.BACKSLASH_ESCAPE,SUBST],subLanguage:"graphql"}},TEMPLATE_STRING={className:"string",begin:"`",end:"`",contains:[hljs.BACKSLASH_ESCAPE,SUBST]},COMMENT={className:"comment",variants:[hljs.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:IDENT_RE$1$1+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),hljs.C_BLOCK_COMMENT_MODE,hljs.C_LINE_COMMENT_MODE]},SUBST_INTERNALS=[hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE,HTML_TEMPLATE,CSS_TEMPLATE,GRAPHQL_TEMPLATE,TEMPLATE_STRING,{match:/\$\d+/},NUMBER];SUBST.contains=SUBST_INTERNALS.concat({begin:/\{/,end:/\}/,keywords:KEYWORDS$1$1,contains:["self"].concat(SUBST_INTERNALS)});const SUBST_AND_COMMENTS=[].concat(COMMENT,SUBST.contains),PARAMS_CONTAINS=SUBST_AND_COMMENTS.concat([{begin:/(\s*)\(/,end:/\)/,keywords:KEYWORDS$1$1,contains:["self"].concat(SUBST_AND_COMMENTS)}]),PARAMS={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:KEYWORDS$1$1,contains:PARAMS_CONTAINS},CLASS_OR_EXTENDS={variants:[{match:[/class/,/\s+/,IDENT_RE$1$1,/\s+/,/extends/,/\s+/,regex.concat(IDENT_RE$1$1,"(",regex.concat(/\./,IDENT_RE$1$1),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,IDENT_RE$1$1],scope:{1:"keyword",3:"title.class"}}]},CLASS_REFERENCE={relevance:0,match:regex.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...TYPES$1,...ERROR_TYPES$1]}},FUNCTION_DEFINITION={variants:[{match:[/function/,/\s+/,IDENT_RE$1$1,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[PARAMS],illegal:/%/},FUNCTION_CALL={match:regex.concat(/\b/,(list=[...BUILT_IN_GLOBALS$1,"super","import"].map(x=>`${x}\\s*\\(`),regex.concat("(?!",list.join("|"),")")),IDENT_RE$1$1,regex.lookahead(/\s*\(/)),className:"title.function",relevance:0};var list;const PROPERTY_ACCESS={begin:regex.concat(/\./,regex.lookahead(regex.concat(IDENT_RE$1$1,/(?![0-9A-Za-z$_(])/))),end:IDENT_RE$1$1,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},GETTER_OR_SETTER={match:[/get|set/,/\s+/,IDENT_RE$1$1,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},PARAMS]},FUNC_LEAD_IN_RE="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+hljs.UNDERSCORE_IDENT_RE+")\\s*=>",FUNCTION_VARIABLE={match:[/const|var|let/,/\s+/,IDENT_RE$1$1,/\s*/,/=\s*/,/(async\s*)?/,regex.lookahead(FUNC_LEAD_IN_RE)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[PARAMS]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:KEYWORDS$1$1,exports:{PARAMS_CONTAINS:PARAMS_CONTAINS,CLASS_REFERENCE:CLASS_REFERENCE},illegal:/#(?![$_A-z])/,contains:[hljs.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE,HTML_TEMPLATE,CSS_TEMPLATE,GRAPHQL_TEMPLATE,TEMPLATE_STRING,COMMENT,{match:/\$\d+/},NUMBER,CLASS_REFERENCE,{scope:"attr",match:IDENT_RE$1$1+regex.lookahead(":"),relevance:0},FUNCTION_VARIABLE,{begin:"("+hljs.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[COMMENT,hljs.REGEXP_MODE,{className:"function",begin:FUNC_LEAD_IN_RE,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:hljs.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:KEYWORDS$1$1,contains:PARAMS_CONTAINS}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:FRAGMENT_begin,end:FRAGMENT_end},{match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:XML_TAG.begin,"on:begin":XML_TAG.isTrulyOpeningTag,end:XML_TAG.end}],subLanguage:"xml",contains:[{begin:XML_TAG.begin,end:XML_TAG.end,skip:!0,contains:["self"]}]}]},FUNCTION_DEFINITION,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+hljs.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[PARAMS,hljs.inherit(hljs.TITLE_MODE,{begin:IDENT_RE$1$1,className:"title.function"})]},{match:/\.\.\./,relevance:0},PROPERTY_ACCESS,{match:"\\$"+IDENT_RE$1$1,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[PARAMS]},FUNCTION_CALL,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},CLASS_OR_EXTENDS,GETTER_OR_SETTER,{match:/\$[(.]/}]}}),HighlightJS.registerLanguage("typescript",function(hljs){const regex=hljs.regex,tsLanguage=function(hljs){const regex=hljs.regex,IDENT_RE$12=IDENT_RE,FRAGMENT_begin="<>",FRAGMENT_end="</>",XML_TAG={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(match,response)=>{const afterMatchIndex=match[0].length+match.index,nextChar=match.input[afterMatchIndex];if("<"===nextChar||","===nextChar)return void response.ignoreMatch();let m;">"===nextChar&&(((match,{after:after})=>{const tag="</"+match[0].slice(1);return-1!==match.input.indexOf(tag,after)})(match,{after:afterMatchIndex})||response.ignoreMatch());const afterMatch=match.input.substring(afterMatchIndex);((m=afterMatch.match(/^\s*=/))||(m=afterMatch.match(/^\s+extends\s+/))&&0===m.index)&&response.ignoreMatch()}},KEYWORDS$12={$pattern:IDENT_RE,keyword:KEYWORDS,literal:LITERALS,built_in:BUILT_INS,"variable.language":BUILT_IN_VARIABLES},frac2="\\.([0-9](_?[0-9])*)",NUMBER={className:"number",variants:[{begin:`(\\b(0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*)((${frac2})|\\.)?|(${frac2}))[eE][+-]?([0-9](_?[0-9])*)\\b`},{begin:`\\b(0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*)\\b((${frac2})\\b|\\.)?|(${frac2})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},SUBST={className:"subst",begin:"\\$\\{",end:"\\}",keywords:KEYWORDS$12,contains:[]},HTML_TEMPLATE={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[hljs.BACKSLASH_ESCAPE,SUBST],subLanguage:"xml"}},CSS_TEMPLATE={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[hljs.BACKSLASH_ESCAPE,SUBST],subLanguage:"css"}},GRAPHQL_TEMPLATE={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[hljs.BACKSLASH_ESCAPE,SUBST],subLanguage:"graphql"}},TEMPLATE_STRING={className:"string",begin:"`",end:"`",contains:[hljs.BACKSLASH_ESCAPE,SUBST]},COMMENT={className:"comment",variants:[hljs.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:IDENT_RE$12+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),hljs.C_BLOCK_COMMENT_MODE,hljs.C_LINE_COMMENT_MODE]},SUBST_INTERNALS=[hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE,HTML_TEMPLATE,CSS_TEMPLATE,GRAPHQL_TEMPLATE,TEMPLATE_STRING,{match:/\$\d+/},NUMBER];SUBST.contains=SUBST_INTERNALS.concat({begin:/\{/,end:/\}/,keywords:KEYWORDS$12,contains:["self"].concat(SUBST_INTERNALS)});const SUBST_AND_COMMENTS=[].concat(COMMENT,SUBST.contains),PARAMS_CONTAINS=SUBST_AND_COMMENTS.concat([{begin:/(\s*)\(/,end:/\)/,keywords:KEYWORDS$12,contains:["self"].concat(SUBST_AND_COMMENTS)}]),PARAMS={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:KEYWORDS$12,contains:PARAMS_CONTAINS},CLASS_OR_EXTENDS={variants:[{match:[/class/,/\s+/,IDENT_RE$12,/\s+/,/extends/,/\s+/,regex.concat(IDENT_RE$12,"(",regex.concat(/\./,IDENT_RE$12),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,IDENT_RE$12],scope:{1:"keyword",3:"title.class"}}]},CLASS_REFERENCE={relevance:0,match:regex.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...TYPES,...ERROR_TYPES]}},FUNCTION_DEFINITION={variants:[{match:[/function/,/\s+/,IDENT_RE$12,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[PARAMS],illegal:/%/},FUNCTION_CALL={match:regex.concat(/\b/,(list=[...BUILT_IN_GLOBALS,"super","import"].map(x=>`${x}\\s*\\(`),regex.concat("(?!",list.join("|"),")")),IDENT_RE$12,regex.lookahead(/\s*\(/)),className:"title.function",relevance:0};var list;const PROPERTY_ACCESS={begin:regex.concat(/\./,regex.lookahead(regex.concat(IDENT_RE$12,/(?![0-9A-Za-z$_(])/))),end:IDENT_RE$12,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},GETTER_OR_SETTER={match:[/get|set/,/\s+/,IDENT_RE$12,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},PARAMS]},FUNC_LEAD_IN_RE="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+hljs.UNDERSCORE_IDENT_RE+")\\s*=>",FUNCTION_VARIABLE={match:[/const|var|let/,/\s+/,IDENT_RE$12,/\s*/,/=\s*/,/(async\s*)?/,regex.lookahead(FUNC_LEAD_IN_RE)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[PARAMS]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:KEYWORDS$12,exports:{PARAMS_CONTAINS:PARAMS_CONTAINS,CLASS_REFERENCE:CLASS_REFERENCE},illegal:/#(?![$_A-z])/,contains:[hljs.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE,HTML_TEMPLATE,CSS_TEMPLATE,GRAPHQL_TEMPLATE,TEMPLATE_STRING,COMMENT,{match:/\$\d+/},NUMBER,CLASS_REFERENCE,{scope:"attr",match:IDENT_RE$12+regex.lookahead(":"),relevance:0},FUNCTION_VARIABLE,{begin:"("+hljs.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[COMMENT,hljs.REGEXP_MODE,{className:"function",begin:FUNC_LEAD_IN_RE,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:hljs.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:KEYWORDS$12,contains:PARAMS_CONTAINS}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:FRAGMENT_begin,end:FRAGMENT_end},{match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:XML_TAG.begin,"on:begin":XML_TAG.isTrulyOpeningTag,end:XML_TAG.end}],subLanguage:"xml",contains:[{begin:XML_TAG.begin,end:XML_TAG.end,skip:!0,contains:["self"]}]}]},FUNCTION_DEFINITION,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+hljs.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[PARAMS,hljs.inherit(hljs.TITLE_MODE,{begin:IDENT_RE$12,className:"title.function"})]},{match:/\.\.\./,relevance:0},PROPERTY_ACCESS,{match:"\\$"+IDENT_RE$12,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[PARAMS]},FUNCTION_CALL,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},CLASS_OR_EXTENDS,GETTER_OR_SETTER,{match:/\$[(.]/}]}}(hljs),IDENT_RE$12=IDENT_RE,TYPES2=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],NAMESPACE={begin:[/namespace/,/\s+/,hljs.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}},INTERFACE={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:TYPES2},contains:[tsLanguage.exports.CLASS_REFERENCE]},KEYWORDS$12={$pattern:IDENT_RE,keyword:KEYWORDS.concat(["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"]),literal:LITERALS,built_in:BUILT_INS.concat(TYPES2),"variable.language":BUILT_IN_VARIABLES},DECORATOR={className:"meta",begin:"@"+IDENT_RE$12},swapMode=(mode,label2,replacement)=>{const indx=mode.contains.findIndex(m=>m.label===label2);if(-1===indx)throw new Error("can not find mode to replace");mode.contains.splice(indx,1,replacement)};Object.assign(tsLanguage.keywords,KEYWORDS$12),tsLanguage.exports.PARAMS_CONTAINS.push(DECORATOR);const ATTRIBUTE_HIGHLIGHT=tsLanguage.contains.find(c=>"attr"===c.scope),OPTIONAL_KEY_OR_ARGUMENT=Object.assign({},ATTRIBUTE_HIGHLIGHT,{match:regex.concat(IDENT_RE$12,regex.lookahead(/\s*\?:/))});return tsLanguage.exports.PARAMS_CONTAINS.push([tsLanguage.exports.CLASS_REFERENCE,ATTRIBUTE_HIGHLIGHT,OPTIONAL_KEY_OR_ARGUMENT]),tsLanguage.contains=tsLanguage.contains.concat([DECORATOR,NAMESPACE,INTERFACE,OPTIONAL_KEY_OR_ARGUMENT]),swapMode(tsLanguage,"shebang",hljs.SHEBANG()),swapMode(tsLanguage,"use_strict",{className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/}),tsLanguage.contains.find(m=>"func.def"===m.label).relevance=0,Object.assign(tsLanguage,{name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),tsLanguage}),HighlightJS.registerLanguage("python",function(hljs){const regex=hljs.regex,IDENT_RE2=new RegExp("[\\p{XID_Start}_]\\p{XID_Continue}*","u"),RESERVED_WORDS=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],KEYWORDS2={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:RESERVED_WORDS,built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},PROMPT={className:"meta",begin:/^(>>>|\.\.\.) /},SUBST={className:"subst",begin:/\{/,end:/\}/,keywords:KEYWORDS2,illegal:/#/},LITERAL_BRACKET={begin:/\{\{/,relevance:0},STRING={className:"string",contains:[hljs.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[hljs.BACKSLASH_ESCAPE,PROMPT],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[hljs.BACKSLASH_ESCAPE,PROMPT],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[hljs.BACKSLASH_ESCAPE,PROMPT,LITERAL_BRACKET,SUBST]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[hljs.BACKSLASH_ESCAPE,PROMPT,LITERAL_BRACKET,SUBST]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[hljs.BACKSLASH_ESCAPE,LITERAL_BRACKET,SUBST]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[hljs.BACKSLASH_ESCAPE,LITERAL_BRACKET,SUBST]},hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE]},digitpart="[0-9](_?[0-9])*",pointfloat=`(\\b(${digitpart}))?\\.(${digitpart})|\\b(${digitpart})\\.`,lookahead2=`\\b|${RESERVED_WORDS.join("|")}`,NUMBER={className:"number",relevance:0,variants:[{begin:`(\\b(${digitpart})|(${pointfloat}))[eE][+-]?(${digitpart})[jJ]?(?=${lookahead2})`},{begin:`(${pointfloat})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${lookahead2})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${lookahead2})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${lookahead2})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${lookahead2})`},{begin:`\\b(${digitpart})[jJ](?=${lookahead2})`}]},COMMENT_TYPE={className:"comment",begin:regex.lookahead(/# type:/),end:/$/,keywords:KEYWORDS2,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},PARAMS={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:KEYWORDS2,contains:["self",PROMPT,NUMBER,STRING,hljs.HASH_COMMENT_MODE]}]};return SUBST.contains=[STRING,NUMBER,PROMPT],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:KEYWORDS2,illegal:/(<\/|\?)|=>/,contains:[PROMPT,NUMBER,{scope:"variable.language",match:/\bself\b/},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"},STRING,COMMENT_TYPE,hljs.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,IDENT_RE2],scope:{1:"keyword",3:"title.function"},contains:[PARAMS]},{variants:[{match:[/\bclass/,/\s+/,IDENT_RE2,/\s*/,/\(\s*/,IDENT_RE2,/\s*\)/]},{match:[/\bclass/,/\s+/,IDENT_RE2]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[NUMBER,PARAMS,STRING]}]}}),HighlightJS.registerLanguage("java",function(hljs){const regex=hljs.regex,JAVA_IDENT_RE="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",GENERIC_IDENT_RE=JAVA_IDENT_RE+recurRegex("(?:<"+JAVA_IDENT_RE+"~~~(?:\\s*,\\s*"+JAVA_IDENT_RE+"~~~)*>)?",/~~~/g,2),KEYWORDS2={keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits","goto","when"],literal:["false","true","null"],type:["char","boolean","long","float","int","byte","short","double"],built_in:["super","this"]},ANNOTATION={className:"meta",begin:"@"+JAVA_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},PARAMS={className:"params",begin:/\(/,end:/\)/,keywords:KEYWORDS2,relevance:0,contains:[hljs.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:"Java",aliases:["jsp"],keywords:KEYWORDS2,illegal:/<\/|#/,contains:[hljs.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},hljs.C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:"string",contains:[hljs.BACKSLASH_ESCAPE]},hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,JAVA_IDENT_RE],className:{1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{begin:[regex.concat(/(?!else)/,JAVA_IDENT_RE),/\s+/,JAVA_IDENT_RE,/\s+/,/=(?!=)/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,JAVA_IDENT_RE],className:{1:"keyword",3:"title.class"},contains:[PARAMS,hljs.C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+GENERIC_IDENT_RE+"\\s+)",hljs.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:KEYWORDS2,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:KEYWORDS2,relevance:0,contains:[ANNOTATION,hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE,NUMERIC$1,hljs.C_BLOCK_COMMENT_MODE]},hljs.C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE]},NUMERIC$1,ANNOTATION]}}),HighlightJS.registerLanguage("cpp",function(hljs){const regex=hljs.regex,C_LINE_COMMENT_MODE=hljs.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),FUNCTION_TYPE_RE="(?!struct)(decltype\\(auto\\)|"+regex.optional("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+regex.optional("<[^<>]+>")+")",CPP_PRIMITIVE_TYPES={className:"type",begin:"\\b[a-z\\d_]*_t\\b"},STRINGS={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[hljs.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},hljs.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},NUMBERS={className:"number",variants:[{begin:"[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)"},{begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)"}],relevance:0},PREPROCESSOR={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},hljs.inherit(STRINGS,{className:"string"}),{className:"string",begin:/<.*?>/},C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE]},TITLE_MODE={className:"title",begin:regex.optional("[a-zA-Z_]\\w*::")+hljs.IDENT_RE,relevance:0},FUNCTION_TITLE=regex.optional("[a-zA-Z_]\\w*::")+hljs.IDENT_RE+"\\s*\\(",CPP_KEYWORDS={type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","flat_map","flat_set","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"]},FUNCTION_DISPATCH={className:"function.dispatch",relevance:0,keywords:{_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"]},begin:regex.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,hljs.IDENT_RE,regex.lookahead(/(<[^<>]+>|)\s*\(/))},EXPRESSION_CONTAINS=[FUNCTION_DISPATCH,PREPROCESSOR,CPP_PRIMITIVE_TYPES,C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE,NUMBERS,STRINGS],EXPRESSION_CONTEXT={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:CPP_KEYWORDS,contains:EXPRESSION_CONTAINS.concat([{begin:/\(/,end:/\)/,keywords:CPP_KEYWORDS,contains:EXPRESSION_CONTAINS.concat(["self"]),relevance:0}]),relevance:0},FUNCTION_DECLARATION={className:"function",begin:"("+FUNCTION_TYPE_RE+"[\\*&\\s]+)+"+FUNCTION_TITLE,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:CPP_KEYWORDS,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:"decltype\\(auto\\)",keywords:CPP_KEYWORDS,relevance:0},{begin:FUNCTION_TITLE,returnBegin:!0,contains:[TITLE_MODE],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[STRINGS,NUMBERS]},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:CPP_KEYWORDS,relevance:0,contains:[C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE,STRINGS,NUMBERS,CPP_PRIMITIVE_TYPES,{begin:/\(/,end:/\)/,keywords:CPP_KEYWORDS,relevance:0,contains:["self",C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE,STRINGS,NUMBERS,CPP_PRIMITIVE_TYPES]}]},CPP_PRIMITIVE_TYPES,C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE,PREPROCESSOR]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:CPP_KEYWORDS,illegal:"</",classNameAliases:{"function.dispatch":"built_in"},contains:[].concat(EXPRESSION_CONTEXT,FUNCTION_DECLARATION,FUNCTION_DISPATCH,EXPRESSION_CONTAINS,[PREPROCESSOR,{begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function|flat_map|flat_set)\\s*<(?!<)",end:">",keywords:CPP_KEYWORDS,contains:["self",CPP_PRIMITIVE_TYPES]},{begin:hljs.IDENT_RE+"::",keywords:CPP_KEYWORDS},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:"keyword",3:"title.class"}}])}}),HighlightJS.registerLanguage("csharp",function(hljs){const KEYWORDS2={keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","args","async","await","by","descending","dynamic","equals","file","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","record","remove","required","scoped","select","set","unmanaged","value|0","var","when","where","with","yield"]),built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"],literal:["default","false","null","true"]},TITLE_MODE=hljs.inherit(hljs.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),NUMBERS={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},VERBATIM_STRING={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},VERBATIM_STRING_NO_LF=hljs.inherit(VERBATIM_STRING,{illegal:/\n/}),SUBST={className:"subst",begin:/\{/,end:/\}/,keywords:KEYWORDS2},SUBST_NO_LF=hljs.inherit(SUBST,{illegal:/\n/}),INTERPOLATED_STRING={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},hljs.BACKSLASH_ESCAPE,SUBST_NO_LF]},INTERPOLATED_VERBATIM_STRING={className:"string",begin:/\$@"/,end:'"',contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},SUBST]},INTERPOLATED_VERBATIM_STRING_NO_LF=hljs.inherit(INTERPOLATED_VERBATIM_STRING,{illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},SUBST_NO_LF]});SUBST.contains=[INTERPOLATED_VERBATIM_STRING,INTERPOLATED_STRING,VERBATIM_STRING,hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE,NUMBERS,hljs.C_BLOCK_COMMENT_MODE],SUBST_NO_LF.contains=[INTERPOLATED_VERBATIM_STRING_NO_LF,INTERPOLATED_STRING,VERBATIM_STRING_NO_LF,hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE,NUMBERS,hljs.inherit(hljs.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];const STRING={variants:[{className:"string",begin:/"""("*)(?!")(.|\n)*?"""\1/,relevance:1},INTERPOLATED_VERBATIM_STRING,INTERPOLATED_STRING,VERBATIM_STRING,hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE]},GENERIC_MODIFIER={begin:"<",end:">",contains:[{beginKeywords:"in out"},TITLE_MODE]},TYPE_IDENT_RE=hljs.IDENT_RE+"(<"+hljs.IDENT_RE+"(\\s*,\\s*"+hljs.IDENT_RE+")*>)?(\\[\\])?",AT_IDENTIFIER={begin:"@"+hljs.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:KEYWORDS2,illegal:/::/,contains:[hljs.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:"</?",end:">"}]}]}),hljs.C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{keyword:"if else elif endif define undef warning error line region endregion pragma checksum"}},STRING,NUMBERS,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},TITLE_MODE,GENERIC_MODIFIER,hljs.C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[TITLE_MODE,hljs.C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE]},{beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[TITLE_MODE,GENERIC_MODIFIER,hljs.C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+TYPE_IDENT_RE+"\\s+)+"+hljs.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:KEYWORDS2,contains:[{beginKeywords:["public","private","protected","static","internal","protected","abstract","async","extern","override","unsafe","virtual","new","sealed","partial"].join(" "),relevance:0},{begin:hljs.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,contains:[hljs.TITLE_MODE,GENERIC_MODIFIER],relevance:0},{match:/\(\)/},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:KEYWORDS2,relevance:0,contains:[STRING,NUMBERS,hljs.C_BLOCK_COMMENT_MODE]},hljs.C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE]},AT_IDENTIFIER]}}),HighlightJS.registerLanguage("go",function(hljs){const KEYWORDS2={keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"],type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"],literal:["true","false","iota","nil"],built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"]};return{name:"Go",aliases:["golang"],keywords:KEYWORDS2,illegal:"</",contains:[hljs.C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE,{className:"string",variants:[hljs.QUOTE_STRING_MODE,hljs.APOS_STRING_MODE,{begin:"`",end:"`"}]},{className:"number",variants:[{match:/-?\b0[xX]\.[a-fA-F0-9](_?[a-fA-F0-9])*[pP][+-]?\d(_?\d)*i?/,relevance:0},{match:/-?\b0[xX](_?[a-fA-F0-9])+((\.([a-fA-F0-9](_?[a-fA-F0-9])*)?)?[pP][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b0[oO](_?[0-7])*i?/,relevance:0},{match:/-?\.\d(_?\d)*([eE][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b\d(_?\d)*(\.(\d(_?\d)*)?)?([eE][+-]?\d(_?\d)*)?i?/,relevance:0}]},{begin:/:=/},{className:"function",beginKeywords:"func",end:"\\s*(\\{|$)",excludeEnd:!0,contains:[hljs.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:KEYWORDS2,illegal:/["']/}]}]}}),HighlightJS.registerLanguage("rust",function(hljs){const regex=hljs.regex,RAW_IDENTIFIER=/(r#)?/,UNDERSCORE_IDENT_RE=regex.concat(RAW_IDENTIFIER,hljs.UNDERSCORE_IDENT_RE),IDENT_RE2=regex.concat(RAW_IDENTIFIER,hljs.IDENT_RE),FUNCTION_INVOKE={className:"title.function.invoke",relevance:0,begin:regex.concat(/\b/,/(?!let|for|while|if|else|match\b)/,IDENT_RE2,regex.lookahead(/\s*\(/))},NUMBER_SUFFIX="([ui](8|16|32|64|128|size)|f(32|64))?",BUILTINS=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],TYPES2=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"];return{name:"Rust",aliases:["rs"],keywords:{$pattern:hljs.IDENT_RE+"!?",type:TYPES2,keyword:["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","union","unsafe","unsized","use","virtual","where","while","yield"],literal:["true","false","Some","None","Ok","Err"],built_in:BUILTINS},illegal:"</",contains:[hljs.C_LINE_COMMENT_MODE,hljs.COMMENT("/\\*","\\*/",{contains:["self"]}),hljs.inherit(hljs.QUOTE_STRING_MODE,{begin:/b?"/,illegal:null}),{className:"symbol",begin:/'[a-zA-Z_][a-zA-Z0-9_]*(?!')/},{scope:"string",variants:[{begin:/b?r(#*)"(.|\n)*?"\1(?!#)/},{begin:/b?'/,end:/'/,contains:[{scope:"char.escape",match:/\\('|\w|x\w{2}|u\w{4}|U\w{8})/}]}]},{className:"number",variants:[{begin:"\\b0b([01_]+)"+NUMBER_SUFFIX},{begin:"\\b0o([0-7_]+)"+NUMBER_SUFFIX},{begin:"\\b0x([A-Fa-f0-9_]+)"+NUMBER_SUFFIX},{begin:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+NUMBER_SUFFIX}],relevance:0},{begin:[/fn/,/\s+/,UNDERSCORE_IDENT_RE],className:{1:"keyword",3:"title.function"}},{className:"meta",begin:"#!?\\[",end:"\\]",contains:[{className:"string",begin:/"/,end:/"/,contains:[hljs.BACKSLASH_ESCAPE]}]},{begin:[/let/,/\s+/,/(?:mut\s+)?/,UNDERSCORE_IDENT_RE],className:{1:"keyword",3:"keyword",4:"variable"}},{begin:[/for/,/\s+/,UNDERSCORE_IDENT_RE,/\s+/,/in/],className:{1:"keyword",3:"variable",5:"keyword"}},{begin:[/type/,/\s+/,UNDERSCORE_IDENT_RE],className:{1:"keyword",3:"title.class"}},{begin:[/(?:trait|enum|struct|union|impl|for)/,/\s+/,UNDERSCORE_IDENT_RE],className:{1:"keyword",3:"title.class"}},{begin:hljs.IDENT_RE+"::",keywords:{keyword:"Self",built_in:BUILTINS,type:TYPES2}},{className:"punctuation",begin:"->"},FUNCTION_INVOKE]}}),HighlightJS.registerLanguage("php",function(hljs){const regex=hljs.regex,NOT_PERL_ETC=/(?![A-Za-z0-9])(?![$])/,IDENT_RE2=regex.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,NOT_PERL_ETC),PASCAL_CASE_CLASS_NAME_RE=regex.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,NOT_PERL_ETC),UPCASE_NAME_RE=regex.concat(/[A-Z]+/,NOT_PERL_ETC),VARIABLE={scope:"variable",match:"\\$+"+IDENT_RE2},SUBST={scope:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},SINGLE_QUOTED=hljs.inherit(hljs.APOS_STRING_MODE,{illegal:null}),STRING={scope:"string",variants:[hljs.inherit(hljs.QUOTE_STRING_MODE,{illegal:null,contains:hljs.QUOTE_STRING_MODE.contains.concat(SUBST)}),SINGLE_QUOTED,{begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/,contains:hljs.QUOTE_STRING_MODE.contains.concat(SUBST),"on:begin":(m,resp)=>{resp.data._beginMatch=m[1]||m[2]},"on:end":(m,resp)=>{resp.data._beginMatch!==m[1]&&resp.ignoreMatch()}},hljs.END_SAME_AS_BEGIN({begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/})]},NUMBER={scope:"number",variants:[{begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?"}],relevance:0},LITERALS2=["false","null","true"],KWS=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],BUILT_INS2=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],KEYWORDS2={keyword:KWS,literal:(items=>{const result=[];return items.forEach(item=>{result.push(item),item.toLowerCase()===item?result.push(item.toUpperCase()):result.push(item.toLowerCase())}),result})(LITERALS2),built_in:BUILT_INS2},normalizeKeywords=items=>items.map(item=>item.replace(/\|\d+$/,"")),CONSTRUCTOR_CALL={variants:[{match:[/new/,regex.concat("[ \t\n]","+"),regex.concat("(?!",normalizeKeywords(BUILT_INS2).join("\\b|"),"\\b)"),PASCAL_CASE_CLASS_NAME_RE],scope:{1:"keyword",4:"title.class"}}]},CONSTANT_REFERENCE=regex.concat(IDENT_RE2,"\\b(?!\\()"),LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON={variants:[{match:[regex.concat(/::/,regex.lookahead(/(?!class\b)/)),CONSTANT_REFERENCE],scope:{2:"variable.constant"}},{match:[/::/,/class/],scope:{2:"variable.language"}},{match:[PASCAL_CASE_CLASS_NAME_RE,regex.concat(/::/,regex.lookahead(/(?!class\b)/)),CONSTANT_REFERENCE],scope:{1:"title.class",3:"variable.constant"}},{match:[PASCAL_CASE_CLASS_NAME_RE,regex.concat("::",regex.lookahead(/(?!class\b)/))],scope:{1:"title.class"}},{match:[PASCAL_CASE_CLASS_NAME_RE,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]},NAMED_ARGUMENT={scope:"attr",match:regex.concat(IDENT_RE2,regex.lookahead(":"),regex.lookahead(/(?!::)/))},PARAMS_MODE={relevance:0,begin:/\(/,end:/\)/,keywords:KEYWORDS2,contains:[NAMED_ARGUMENT,VARIABLE,LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,hljs.C_BLOCK_COMMENT_MODE,STRING,NUMBER,CONSTRUCTOR_CALL]},FUNCTION_INVOKE={relevance:0,match:[/\b/,regex.concat("(?!fn\\b|function\\b|",normalizeKeywords(KWS).join("\\b|"),"|",normalizeKeywords(BUILT_INS2).join("\\b|"),"\\b)"),IDENT_RE2,regex.concat("[ \t\n]","*"),regex.lookahead(/(?=\()/)],scope:{3:"title.function.invoke"},contains:[PARAMS_MODE]};PARAMS_MODE.contains.push(FUNCTION_INVOKE);const ATTRIBUTE_CONTAINS=[NAMED_ARGUMENT,LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,hljs.C_BLOCK_COMMENT_MODE,STRING,NUMBER,CONSTRUCTOR_CALL],ATTRIBUTES2={begin:regex.concat(/#\[\s*\\?/,regex.either(PASCAL_CASE_CLASS_NAME_RE,UPCASE_NAME_RE)),beginScope:"meta",end:/]/,endScope:"meta",keywords:{literal:LITERALS2,keyword:["new","array"]},contains:[{begin:/\[/,end:/]/,keywords:{literal:LITERALS2,keyword:["new","array"]},contains:["self",...ATTRIBUTE_CONTAINS]},...ATTRIBUTE_CONTAINS,{scope:"meta",variants:[{match:PASCAL_CASE_CLASS_NAME_RE},{match:UPCASE_NAME_RE}]}]};return{case_insensitive:!1,keywords:KEYWORDS2,contains:[ATTRIBUTES2,hljs.HASH_COMMENT_MODE,hljs.COMMENT("//","$"),hljs.COMMENT("/\\*","\\*/",{contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,keywords:"__halt_compiler",starts:{scope:"comment",end:hljs.MATCH_NOTHING_RE,contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},{scope:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},{scope:"variable.language",match:/\$this\b/},VARIABLE,FUNCTION_INVOKE,LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,{match:[/const/,/\s/,IDENT_RE2],scope:{1:"keyword",3:"variable.constant"}},CONSTRUCTOR_CALL,{scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},hljs.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:KEYWORDS2,contains:["self",ATTRIBUTES2,VARIABLE,LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,hljs.C_BLOCK_COMMENT_MODE,STRING,NUMBER]}]},{scope:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},hljs.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[hljs.inherit(hljs.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{beginKeywords:"use",relevance:0,end:";",contains:[{match:/\b(as|const|function)\b/,scope:"keyword"},hljs.UNDERSCORE_TITLE_MODE]},STRING,NUMBER]}}),HighlightJS.registerLanguage("ruby",function(hljs){const regex=hljs.regex,RUBY_METHOD_RE="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",CLASS_NAME_RE=regex.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),CLASS_NAME_WITH_NAMESPACE_RE=regex.concat(CLASS_NAME_RE,/(::\w+)*/),RUBY_KEYWORDS={"variable.constant":["__FILE__","__LINE__","__ENCODING__"],"variable.language":["self","super"],keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield","include","extend","prepend","public","private","protected","raise","throw"],built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"],literal:["true","false","nil"]},YARDOCTAG={className:"doctag",begin:"@[A-Za-z]+"},IRB_OBJECT={begin:"#<",end:">"},COMMENT_MODES=[hljs.COMMENT("#","$",{contains:[YARDOCTAG]}),hljs.COMMENT("^=begin","^=end",{contains:[YARDOCTAG],relevance:10}),hljs.COMMENT("^__END__",hljs.MATCH_NOTHING_RE)],SUBST={className:"subst",begin:/#\{/,end:/\}/,keywords:RUBY_KEYWORDS},STRING={className:"string",contains:[hljs.BACKSLASH_ESCAPE,SUBST],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?</,end:/>/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{begin:regex.concat(/<<[-~]?'?/,regex.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),contains:[hljs.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[hljs.BACKSLASH_ESCAPE,SUBST]})]}]},NUMBER={className:"number",relevance:0,variants:[{begin:"\\b([1-9](_?[0-9])*|0)(\\.([0-9](_?[0-9])*))?([eE][+-]?([0-9](_?[0-9])*)|r)?i?\\b"},{begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{begin:"\\b0(_?[0-7])+r?i?\\b"}]},PARAMS={variants:[{match:/\(\)/},{className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,keywords:RUBY_KEYWORDS}]},RUBY_DEFAULT_CONTAINS=[STRING,{variants:[{match:[/class\s+/,CLASS_NAME_WITH_NAMESPACE_RE,/\s+<\s+/,CLASS_NAME_WITH_NAMESPACE_RE]},{match:[/\b(class|module)\s+/,CLASS_NAME_WITH_NAMESPACE_RE]}],scope:{2:"title.class",4:"title.class.inherited"},keywords:RUBY_KEYWORDS},{match:[/(include|extend)\s+/,CLASS_NAME_WITH_NAMESPACE_RE],scope:{2:"title.class"},keywords:RUBY_KEYWORDS},{relevance:0,match:[CLASS_NAME_WITH_NAMESPACE_RE,/\.new[. (]/],scope:{1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},{relevance:0,match:CLASS_NAME_RE,scope:"title.class"},{match:[/def/,/\s+/,RUBY_METHOD_RE],scope:{1:"keyword",3:"title.function"},contains:[PARAMS]},{begin:hljs.IDENT_RE+"::"},{className:"symbol",begin:hljs.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[STRING,{begin:RUBY_METHOD_RE}],relevance:0},NUMBER,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{className:"params",begin:/\|(?!=)/,end:/\|/,excludeBegin:!0,excludeEnd:!0,relevance:0,keywords:RUBY_KEYWORDS},{begin:"("+hljs.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{className:"regexp",contains:[hljs.BACKSLASH_ESCAPE,SUBST],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(IRB_OBJECT,COMMENT_MODES),relevance:0}].concat(IRB_OBJECT,COMMENT_MODES);SUBST.contains=RUBY_DEFAULT_CONTAINS,PARAMS.contains=RUBY_DEFAULT_CONTAINS;const IRB_DEFAULT=[{begin:/^\s*=>/,starts:{end:"$",contains:RUBY_DEFAULT_CONTAINS}},{className:"meta.prompt",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])",starts:{end:"$",keywords:RUBY_KEYWORDS,contains:RUBY_DEFAULT_CONTAINS}}];return COMMENT_MODES.unshift(IRB_OBJECT),{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:RUBY_KEYWORDS,illegal:/\/\*/,contains:[hljs.SHEBANG({binary:"ruby"})].concat(IRB_DEFAULT).concat(COMMENT_MODES).concat(RUBY_DEFAULT_CONTAINS)}}),HighlightJS.registerLanguage("swift",function(hljs){const WHITESPACE={match:/\s+/,relevance:0},BLOCK_COMMENT=hljs.COMMENT("/\\*","\\*/",{contains:["self"]}),COMMENTS=[hljs.C_LINE_COMMENT_MODE,BLOCK_COMMENT],DOT_KEYWORD={match:[/\./,either(...dotKeywords,...optionalDotKeywords)],className:{2:"keyword"}},KEYWORD_GUARD={match:concat(/\./,either(...keywords)),relevance:0},PLAIN_KEYWORDS=keywords.filter(kw=>"string"==typeof kw).concat(["_|0"]),KEYWORD={variants:[{className:"keyword",match:either(...keywords.filter(kw=>"string"!=typeof kw).concat(keywordTypes).map(keywordWrapper),...optionalDotKeywords)}]},KEYWORDS2={$pattern:either(/\b\w+/,/#\w+/),keyword:PLAIN_KEYWORDS.concat(numberSignKeywords),literal:literals},KEYWORD_MODES=[DOT_KEYWORD,KEYWORD_GUARD,KEYWORD],BUILT_INS2=[{match:concat(/\./,either(...builtIns)),relevance:0},{className:"built_in",match:concat(/\b/,either(...builtIns),/(?=\()/)}],OPERATOR_GUARD={match:/->/,relevance:0},OPERATORS=[OPERATOR_GUARD,{className:"operator",relevance:0,variants:[{match:operator},{match:`\\.(\\.|${operatorCharacter})+`}]}],NUMBER={className:"number",relevance:0,variants:[{match:"\\b(([0-9]_*)+)(\\.(([0-9]_*)+))?([eE][+-]?(([0-9]_*)+))?\\b"},{match:"\\b0x(([0-9a-fA-F]_*)+)(\\.(([0-9a-fA-F]_*)+))?([pP][+-]?(([0-9]_*)+))?\\b"},{match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},ESCAPED_CHARACTER=(rawDelimiter="")=>({className:"subst",variants:[{match:concat(/\\/,rawDelimiter,/[0\\tnr"']/)},{match:concat(/\\/,rawDelimiter,/u\{[0-9a-fA-F]{1,8}\}/)}]}),ESCAPED_NEWLINE=(rawDelimiter="")=>({className:"subst",match:concat(/\\/,rawDelimiter,/[\t ]*(?:[\r\n]|\r\n)/)}),INTERPOLATION=(rawDelimiter="")=>({className:"subst",label:"interpol",begin:concat(/\\/,rawDelimiter,/\(/),end:/\)/}),MULTILINE_STRING=(rawDelimiter="")=>({begin:concat(rawDelimiter,/"""/),end:concat(/"""/,rawDelimiter),contains:[ESCAPED_CHARACTER(rawDelimiter),ESCAPED_NEWLINE(rawDelimiter),INTERPOLATION(rawDelimiter)]}),SINGLE_LINE_STRING=(rawDelimiter="")=>({begin:concat(rawDelimiter,/"/),end:concat(/"/,rawDelimiter),contains:[ESCAPED_CHARACTER(rawDelimiter),INTERPOLATION(rawDelimiter)]}),STRING={className:"string",variants:[MULTILINE_STRING(),MULTILINE_STRING("#"),MULTILINE_STRING("##"),MULTILINE_STRING("###"),SINGLE_LINE_STRING(),SINGLE_LINE_STRING("#"),SINGLE_LINE_STRING("##"),SINGLE_LINE_STRING("###")]},REGEXP_CONTENTS=[hljs.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[hljs.BACKSLASH_ESCAPE]}],BARE_REGEXP_LITERAL={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//,contains:REGEXP_CONTENTS},EXTENDED_REGEXP_LITERAL=rawDelimiter=>{const begin=concat(rawDelimiter,/\//),end=concat(/\//,rawDelimiter);return{begin:begin,end:end,contains:[...REGEXP_CONTENTS,{scope:"comment",begin:`#(?!.*${end})`,end:/$/}]}},REGEXP={scope:"regexp",variants:[EXTENDED_REGEXP_LITERAL("###"),EXTENDED_REGEXP_LITERAL("##"),EXTENDED_REGEXP_LITERAL("#"),BARE_REGEXP_LITERAL]},QUOTED_IDENTIFIER={match:concat(/`/,identifier,/`/)},IDENTIFIERS=[QUOTED_IDENTIFIER,{className:"variable",match:/\$\d+/},{className:"variable",match:`\\$${identifierCharacter}+`}],ATTRIBUTES2=[{match:/(@|#(un)?)available/,scope:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:availabilityKeywords,contains:[...OPERATORS,NUMBER,STRING]}]}},{scope:"keyword",match:concat(/@/,either(...keywordAttributes),lookahead(either(/\(/,/\s+/)))},{scope:"meta",match:concat(/@/,identifier)}],TYPE={match:lookahead(/\b[A-Z]/),relevance:0,contains:[{className:"type",match:concat(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,identifierCharacter,"+")},{className:"type",match:typeIdentifier,relevance:0},{match:/[?!]+/,relevance:0},{match:/\.\.\./,relevance:0},{match:concat(/\s+&\s+/,lookahead(typeIdentifier)),relevance:0}]},GENERIC_ARGUMENTS={begin:/</,end:/>/,keywords:KEYWORDS2,contains:[...COMMENTS,...KEYWORD_MODES,...ATTRIBUTES2,OPERATOR_GUARD,TYPE]};TYPE.contains.push(GENERIC_ARGUMENTS);const TUPLE={begin:/\(/,end:/\)/,relevance:0,keywords:KEYWORDS2,contains:["self",{match:concat(identifier,/\s*:/),keywords:"_|0",relevance:0},...COMMENTS,REGEXP,...KEYWORD_MODES,...BUILT_INS2,...OPERATORS,NUMBER,STRING,...IDENTIFIERS,...ATTRIBUTES2,TYPE]},GENERIC_PARAMETERS={begin:/</,end:/>/,keywords:"repeat each",contains:[...COMMENTS,TYPE]},FUNCTION_PARAMETERS={begin:/\(/,end:/\)/,keywords:KEYWORDS2,contains:[{begin:either(lookahead(concat(identifier,/\s*:/)),lookahead(concat(identifier,/\s+/,identifier,/\s*:/))),end:/:/,relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:identifier}]},...COMMENTS,...KEYWORD_MODES,...OPERATORS,NUMBER,STRING,...ATTRIBUTES2,TYPE,TUPLE],endsParent:!0,illegal:/["']/},FUNCTION_OR_MACRO={match:[/(func|macro)/,/\s+/,either(QUOTED_IDENTIFIER.match,identifier,operator)],className:{1:"keyword",3:"title.function"},contains:[GENERIC_PARAMETERS,FUNCTION_PARAMETERS,WHITESPACE],illegal:[/\[/,/%/]},INIT_SUBSCRIPT={match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"},contains:[GENERIC_PARAMETERS,FUNCTION_PARAMETERS,WHITESPACE],illegal:/\[|%/},OPERATOR_DECLARATION={match:[/operator/,/\s+/,operator],className:{1:"keyword",3:"title"}},PRECEDENCEGROUP={begin:[/precedencegroup/,/\s+/,typeIdentifier],className:{1:"keyword",3:"title"},contains:[TYPE],keywords:[...precedencegroupKeywords,...literals],end:/}/},TYPE_DECLARATION={begin:[/(struct|protocol|class|extension|enum|actor)/,/\s+/,identifier,/\s*/],beginScope:{1:"keyword",3:"title.class"},keywords:KEYWORDS2,contains:[GENERIC_PARAMETERS,...KEYWORD_MODES,{begin:/:/,end:/\{/,keywords:KEYWORDS2,contains:[{scope:"title.class.inherited",match:typeIdentifier},...KEYWORD_MODES],relevance:0}]};for(const variant of STRING.variants){const interpolation=variant.contains.find(mode=>"interpol"===mode.label);interpolation.keywords=KEYWORDS2;const submodes=[...KEYWORD_MODES,...BUILT_INS2,...OPERATORS,NUMBER,STRING,...IDENTIFIERS];interpolation.contains=[...submodes,{begin:/\(/,end:/\)/,contains:["self",...submodes]}]}return{name:"Swift",keywords:KEYWORDS2,contains:[...COMMENTS,FUNCTION_OR_MACRO,INIT_SUBSCRIPT,{match:[/class\b/,/\s+/,/func\b/,/\s+/,/\b[A-Za-z_][A-Za-z0-9_]*\b/],scope:{1:"keyword",3:"keyword",5:"title.function"}},{match:[/class\b/,/\s+/,/var\b/],scope:{1:"keyword",3:"keyword"}},TYPE_DECLARATION,OPERATOR_DECLARATION,PRECEDENCEGROUP,{beginKeywords:"import",end:/$/,contains:[...COMMENTS],relevance:0},REGEXP,...KEYWORD_MODES,...BUILT_INS2,...OPERATORS,NUMBER,STRING,...IDENTIFIERS,...ATTRIBUTES2,TYPE,TUPLE]}}),HighlightJS.registerLanguage("kotlin",function(hljs){const KEYWORDS2={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},LABEL={className:"symbol",begin:hljs.UNDERSCORE_IDENT_RE+"@"},SUBST={className:"subst",begin:/\$\{/,end:/\}/,contains:[hljs.C_NUMBER_MODE]},VARIABLE={className:"variable",begin:"\\$"+hljs.UNDERSCORE_IDENT_RE},STRING={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[VARIABLE,SUBST]},{begin:"'",end:"'",illegal:/\n/,contains:[hljs.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[hljs.BACKSLASH_ESCAPE,VARIABLE,SUBST]}]};SUBST.contains.push(STRING);const ANNOTATION_USE_SITE={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+hljs.UNDERSCORE_IDENT_RE+")?"},ANNOTATION={className:"meta",begin:"@"+hljs.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[hljs.inherit(STRING,{className:"string"}),"self"]}]},KOTLIN_NUMBER_MODE=NUMERIC,KOTLIN_NESTED_COMMENT=hljs.COMMENT("/\\*","\\*/",{contains:[hljs.C_BLOCK_COMMENT_MODE]}),KOTLIN_PAREN_TYPE={variants:[{className:"type",begin:hljs.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},KOTLIN_PAREN_TYPE2=KOTLIN_PAREN_TYPE;return KOTLIN_PAREN_TYPE2.variants[1].contains=[KOTLIN_PAREN_TYPE],KOTLIN_PAREN_TYPE.variants[1].contains=[KOTLIN_PAREN_TYPE2],{name:"Kotlin",aliases:["kt","kts"],keywords:KEYWORDS2,contains:[hljs.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),hljs.C_LINE_COMMENT_MODE,KOTLIN_NESTED_COMMENT,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},LABEL,ANNOTATION_USE_SITE,ANNOTATION,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:KEYWORDS2,relevance:5,contains:[{begin:hljs.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[hljs.UNDERSCORE_TITLE_MODE]},{className:"type",begin:/</,end:/>/,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:KEYWORDS2,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[KOTLIN_PAREN_TYPE,hljs.C_LINE_COMMENT_MODE,KOTLIN_NESTED_COMMENT],relevance:0},hljs.C_LINE_COMMENT_MODE,KOTLIN_NESTED_COMMENT,ANNOTATION_USE_SITE,ANNOTATION,STRING,hljs.C_NUMBER_MODE]},KOTLIN_NESTED_COMMENT]},{begin:[/class|interface|trait/,/\s+/,hljs.UNDERSCORE_IDENT_RE],beginScope:{3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},hljs.UNDERSCORE_TITLE_MODE,{className:"type",begin:/</,end:/>/,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/,excludeBegin:!0,returnEnd:!0},ANNOTATION_USE_SITE,ANNOTATION]},STRING,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},KOTLIN_NUMBER_MODE]}}),HighlightJS.registerLanguage("css",function(hljs){const regex=hljs.regex,modes=(hljs=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:hljs.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:hljs.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}))(hljs),STRINGS=[hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[modes.BLOCK_COMMENT,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/},modes.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},modes.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+PSEUDO_CLASSES$1.join("|")+")"},{begin:":(:)?("+PSEUDO_ELEMENTS$1.join("|")+")"}]},modes.CSS_VARIABLE,{className:"attribute",begin:"\\b("+ATTRIBUTES$1.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[modes.BLOCK_COMMENT,modes.HEXCOLOR,modes.IMPORTANT,modes.CSS_NUMBER_MODE,...STRINGS,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...STRINGS,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},modes.FUNCTION_DISPATCH]},{begin:regex.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only",attribute:MEDIA_FEATURES$1.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...STRINGS,modes.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+TAGS$1.join("|")+")\\b"}]}}),HighlightJS.registerLanguage("scss",function(hljs){const modes=(hljs=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:hljs.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[hljs.APOS_STRING_MODE,hljs.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:hljs.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}))(hljs),PSEUDO_ELEMENTS$12=PSEUDO_ELEMENTS,PSEUDO_CLASSES$12=PSEUDO_CLASSES,VARIABLE={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b",relevance:0};return{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[hljs.C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE,modes.CSS_NUMBER_MODE,{className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},modes.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag",begin:"\\b("+TAGS.join("|")+")\\b",relevance:0},{className:"selector-pseudo",begin:":("+PSEUDO_CLASSES$12.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+PSEUDO_ELEMENTS$12.join("|")+")"},VARIABLE,{begin:/\(/,end:/\)/,contains:[modes.CSS_NUMBER_MODE]},modes.CSS_VARIABLE,{className:"attribute",begin:"\\b("+ATTRIBUTES.join("|")+")\\b"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:/:/,end:/[;}{]/,relevance:0,contains:[modes.BLOCK_COMMENT,VARIABLE,modes.HEXCOLOR,modes.CSS_NUMBER_MODE,hljs.QUOTE_STRING_MODE,hljs.APOS_STRING_MODE,modes.IMPORTANT,modes.FUNCTION_DISPATCH]},{begin:"@(page|font-face)",keywords:{$pattern:"@[a-z-]+",keyword:"@page @font-face"}},{begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only",attribute:MEDIA_FEATURES.join(" ")},contains:[{begin:"@[a-z-]+",className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"},VARIABLE,hljs.QUOTE_STRING_MODE,hljs.APOS_STRING_MODE,modes.HEXCOLOR,modes.CSS_NUMBER_MODE]},modes.FUNCTION_DISPATCH]}}),HighlightJS.registerLanguage("xml",function(hljs){const regex=hljs.regex,TAG_NAME_RE=regex.concat(/[\p{L}_]/u,regex.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),XML_ENTITIES={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},XML_META_KEYWORDS={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},XML_META_PAR_KEYWORDS=hljs.inherit(XML_META_KEYWORDS,{begin:/\(/,end:/\)/}),APOS_META_STRING_MODE=hljs.inherit(hljs.APOS_STRING_MODE,{className:"string"}),QUOTE_META_STRING_MODE=hljs.inherit(hljs.QUOTE_STRING_MODE,{className:"string"}),TAG_INTERNALS={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:/[\p{L}0-9._:-]+/u,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[XML_ENTITIES]},{begin:/'/,end:/'/,contains:[XML_ENTITIES]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,relevance:10,contains:[XML_META_KEYWORDS,QUOTE_META_STRING_MODE,APOS_META_STRING_MODE,XML_META_PAR_KEYWORDS,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,contains:[XML_META_KEYWORDS,XML_META_PAR_KEYWORDS,QUOTE_META_STRING_MODE,APOS_META_STRING_MODE]}]}]},hljs.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,relevance:10},XML_ENTITIES,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[QUOTE_META_STRING_MODE]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/<style(?=\s|>)/,end:/>/,keywords:{name:"style"},contains:[TAG_INTERNALS],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/<script(?=\s|>)/,end:/>/,keywords:{name:"script"},contains:[TAG_INTERNALS],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:regex.concat(/</,regex.lookahead(regex.concat(TAG_NAME_RE,regex.either(/\/>/,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:TAG_NAME_RE,relevance:0,starts:TAG_INTERNALS}]},{className:"tag",begin:regex.concat(/<\//,regex.lookahead(regex.concat(TAG_NAME_RE,/>/))),contains:[{className:"name",begin:TAG_NAME_RE,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}),HighlightJS.registerLanguage("json",function(hljs){const LITERALS2=["true","false","null"],LITERALS_MODE={scope:"literal",beginKeywords:LITERALS2.join(" ")};return{name:"JSON",aliases:["jsonc"],keywords:{literal:LITERALS2},contains:[{className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},{match:/[{}[\],:]/,className:"punctuation",relevance:0},hljs.QUOTE_STRING_MODE,LITERALS_MODE,hljs.C_NUMBER_MODE,hljs.C_LINE_COMMENT_MODE,hljs.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}),HighlightJS.registerLanguage("yaml",function(hljs){const LITERALS2="true false yes no null",URI_CHARACTERS="[\\w#;/?:@&=+$,.~*'()[\\]]+",STRING={className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[hljs.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},CONTAINER_STRING=hljs.inherit(STRING,{variants:[{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),TIMESTAMP={className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},VALUE_CONTAINER={end:",",endsWithParent:!0,excludeEnd:!0,keywords:LITERALS2,relevance:0},OBJECT={begin:/\{/,end:/\}/,contains:[VALUE_CONTAINER],illegal:"\\n",relevance:0},ARRAY={begin:"\\[",end:"\\]",contains:[VALUE_CONTAINER],illegal:"\\n",relevance:0},MODES2=[{className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+URI_CHARACTERS},{className:"type",begin:"!<"+URI_CHARACTERS+">"},{className:"type",begin:"!"+URI_CHARACTERS},{className:"type",begin:"!!"+URI_CHARACTERS},{className:"meta",begin:"&"+hljs.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+hljs.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},hljs.HASH_COMMENT_MODE,{beginKeywords:LITERALS2,keywords:{literal:LITERALS2}},TIMESTAMP,{className:"number",begin:hljs.C_NUMBER_RE+"\\b",relevance:0},OBJECT,ARRAY,{className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:"char.escape",relevance:0}]},STRING],VALUE_MODES=[...MODES2];return VALUE_MODES.pop(),VALUE_MODES.push(CONTAINER_STRING),VALUE_CONTAINER.contains=VALUE_MODES,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:MODES2}}),HighlightJS.registerLanguage("markdown",function(hljs){const INLINE_HTML={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},LINK={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:hljs.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},BOLD={className:"strong",contains:[],variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]},ITALIC={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{begin:/_(?![_\s])/,end:/_/,relevance:0}]},BOLD_WITHOUT_ITALIC=hljs.inherit(BOLD,{contains:[]}),ITALIC_WITHOUT_BOLD=hljs.inherit(ITALIC,{contains:[]});BOLD.contains.push(ITALIC_WITHOUT_BOLD),ITALIC.contains.push(BOLD_WITHOUT_ITALIC);let CONTAINABLE=[INLINE_HTML,LINK];return[BOLD,ITALIC,BOLD_WITHOUT_ITALIC,ITALIC_WITHOUT_BOLD].forEach(m=>{m.contains=m.contains.concat(CONTAINABLE)}),CONTAINABLE=CONTAINABLE.concat(BOLD,ITALIC),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:CONTAINABLE},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:CONTAINABLE}]}]},INLINE_HTML,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},BOLD,ITALIC,{className:"quote",begin:"^>\\s+",contains:CONTAINABLE,end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},LINK,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},{scope:"literal",match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}),HighlightJS.registerLanguage("bash",function(hljs){const regex=hljs.regex,VAR={},BRACED_VAR={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[VAR]}]};Object.assign(VAR,{className:"variable",variants:[{begin:regex.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},BRACED_VAR]});const SUBST={className:"subst",begin:/\$\(/,end:/\)/,contains:[hljs.BACKSLASH_ESCAPE]},COMMENT=hljs.inherit(hljs.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),HERE_DOC={begin:/<<-?\s*(?=\w+)/,starts:{contains:[hljs.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},QUOTE_STRING={className:"string",begin:/"/,end:/"/,contains:[hljs.BACKSLASH_ESCAPE,VAR,SUBST]};SUBST.contains.push(QUOTE_STRING);const ARITHMETIC={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},hljs.NUMBER_MODE,VAR]},KNOWN_SHEBANG=hljs.SHEBANG({binary:`(${["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"].join("|")})`,relevance:10}),FUNCTION={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[hljs.inherit(hljs.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],literal:["true","false"],built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"]},contains:[KNOWN_SHEBANG,hljs.SHEBANG(),FUNCTION,ARITHMETIC,COMMENT,HERE_DOC,{match:/(\/[a-z._-]+)+/},QUOTE_STRING,{match:/\\"/},{className:"string",begin:/'/,end:/'/},{match:/\\'/},VAR]}}),HighlightJS.registerLanguage("sql",function(hljs){const regex=hljs.regex,COMMENT_MODE=hljs.COMMENT("--","$"),RESERVED_FUNCTIONS=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],FUNCTIONS=RESERVED_FUNCTIONS,KEYWORDS2=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter(keyword=>!RESERVED_FUNCTIONS.includes(keyword)),FUNCTION_CALL={match:regex.concat(/\b/,regex.either(...FUNCTIONS),/\s*\(/),relevance:0,keywords:{built_in:FUNCTIONS}};function kws_to_regex(list){return regex.concat(/\b/,regex.either(...list.map(kw=>kw.replace(/\s+/,"\\s+"))),/\b/)}const MULTI_WORD_KEYWORDS={scope:"keyword",match:kws_to_regex(["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"]),relevance:0};return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:function(list,{exceptions:exceptions,when:when}={}){const qualifyFn=when;return exceptions=exceptions||[],list.map(item=>item.match(/\|\d+$/)||exceptions.includes(item)?item:qualifyFn(item)?`${item}|0`:item)}(KEYWORDS2,{when:x=>x.length<3}),literal:["true","false","unknown"],type:["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"]},contains:[{scope:"type",match:kws_to_regex(["double precision","large object","with timezone","without timezone"])},MULTI_WORD_KEYWORDS,FUNCTION_CALL,{scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},{scope:"string",variants:[{begin:/'/,end:/'/,contains:[{match:/''/}]}]},{begin:/"/,end:/"/,contains:[{match:/""/}]},hljs.C_NUMBER_MODE,hljs.C_BLOCK_COMMENT_MODE,COMMENT_MODE,{scope:"operator",match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}});const LANG_MAP={js:"javascript",jsx:"javascript",ts:"typescript",tsx:"typescript",py:"python",java:"java",c:"cpp",cpp:"cpp",cc:"cpp",cxx:"cpp",h:"cpp",hpp:"cpp",cs:"csharp",go:"go",rs:"rust",php:"php",rb:"ruby",swift:"swift",kt:"kotlin",css:"css",scss:"scss",sass:"scss",less:"css",html:"xml",htm:"xml",xml:"xml",svg:"xml",json:"json",yml:"yaml",yaml:"yaml",md:"markdown",markdown:"markdown",sh:"bash",bash:"bash",zsh:"bash",sql:"sql"};function highlightLines(content2,lang){if(!content2)return[];const lines=content2.split("\n");if(lang)try{return HighlightJS.highlight(content2,{language:lang}).value.split("\n")}catch{return lines}return lines}function FullFileDiffView({file_path:file_path,old_string:old_string,new_string:new_string}){const lineNumScrollRef=reactExports.useRef(null),codeScrollRef=reactExports.useRef(null);reactExports.useEffect(()=>{const codeEl=codeScrollRef.current,lineEl=lineNumScrollRef.current;if(!codeEl||!lineEl)return;const onScroll=()=>{lineEl.scrollTop=codeEl.scrollTop};return codeEl.addEventListener("scroll",onScroll),()=>codeEl.removeEventListener("scroll",onScroll)});const isDeleted=!new_string||""===new_string.trim(),isNew=!old_string||""===old_string.trim(),lang=function(filePath2){var _a;const ext=null==(_a=filePath2.split(".").pop())?void 0:_a.toLowerCase();return LANG_MAP[ext]||null}(file_path),oldHighlightedLines=reactExports.useMemo(()=>highlightLines(old_string||"",lang),[old_string,lang]),newHighlightedLines=reactExports.useMemo(()=>highlightLines(new_string||"",lang),[new_string,lang]),diffLines2=reactExports.useMemo(()=>{if(isNew){return(new_string||"").split("\n").map((text,i)=>({type:"add",oldNum:null,newNum:i+1,text:text}))}if(isDeleted){return(old_string||"").split("\n").map((text,i)=>({type:"del",oldNum:i+1,newNum:null,text:text}))}return function(oldStr,newStr){const changes=diffLines(oldStr,newStr),lines=[];let oldLineNum2=1,newLineNum2=1;for(const part of changes){const partLines=part.value.replace(/\n$/,"").split("\n");if(""!==part.value)for(const text of partLines)part.added?lines.push({type:"add",oldNum:null,newNum:newLineNum2++,text:text,oldIdx:null,newIdx:lines.filter(l=>"del"!==l.type).length}):part.removed?lines.push({type:"del",oldNum:oldLineNum2++,newNum:null,text:text,oldIdx:null,newIdx:null}):lines.push({type:"context",oldNum:oldLineNum2++,newNum:newLineNum2++,text:text,oldIdx:null,newIdx:null})}return lines}(old_string,new_string)},[old_string,new_string,isDeleted,isNew]),highlightedDiffLines=reactExports.useMemo(()=>{let oldIdx=0,newIdx=0;return diffLines2.map(dl=>{let html;return"del"===dl.type?(html=oldHighlightedLines[oldIdx]??"",oldIdx++):"add"===dl.type?(html=newHighlightedLines[newIdx]??"",newIdx++):(html=newHighlightedLines[newIdx]??"",oldIdx++,newIdx++),{...dl,html:html}})},[diffLines2,oldHighlightedLines,newHighlightedLines]),addedCount=highlightedDiffLines.filter(l=>"add"===l.type).length,deletedCount=highlightedDiffLines.filter(l=>"del"===l.type).length;return jsxRuntimeExports.jsxs("div",{className:styles$a_fullFileDiffView,children:[jsxRuntimeExports.jsxs("div",{className:styles$a_diffSummary,children:[addedCount>0&&jsxRuntimeExports.jsxs("span",{className:styles$a_addedBadge,children:["+",addedCount]}),deletedCount>0&&jsxRuntimeExports.jsxs("span",{className:styles$a_deletedBadge,children:["-",deletedCount]})]}),jsxRuntimeExports.jsxs("div",{className:styles$a_codeContainer,children:[jsxRuntimeExports.jsx("div",{className:styles$a_lineNumberCol,ref:lineNumScrollRef,children:highlightedDiffLines.map((dl,idx)=>{let numClass=styles$a_lineNumNormal;return"add"===dl.type?numClass=styles$a_lineNumAdd:"del"===dl.type&&(numClass=styles$a_lineNumDelete),jsxRuntimeExports.jsxs("div",{className:`${styles$a_lineNumRow} ${numClass}`,children:[jsxRuntimeExports.jsx("span",{className:styles$a_oldLineNum,children:dl.oldNum??""}),jsxRuntimeExports.jsx("span",{className:styles$a_newLineNum,children:dl.newNum??""})]},idx)})}),jsxRuntimeExports.jsxs("div",{className:styles$a_codeColWrap,children:[jsxRuntimeExports.jsx("div",{className:styles$a_codeCol,ref:codeScrollRef,children:jsxRuntimeExports.jsx("div",{className:styles$a_codeInner,children:highlightedDiffLines.map((dl,idx)=>{let lineClass;lineClass="add"===dl.type?styles$a_lineAdd:"del"===dl.type?styles$a_lineDelete:styles$a_lineNormal;const prefix2="add"===dl.type?"+":"del"===dl.type?"-":" ";return jsxRuntimeExports.jsxs("div",{className:`${styles$a_codeLine} ${lineClass}`,children:[jsxRuntimeExports.jsx("span",{className:styles$a_linePrefix,children:prefix2}),jsxRuntimeExports.jsx("span",{className:styles$a_lineContent,dangerouslySetInnerHTML:{__html:dl.html||" "}})]},idx)})})}),jsxRuntimeExports.jsx(DiffMiniMap,{diffLines:highlightedDiffLines,scrollRef:codeScrollRef})]})]})]})}const styles$8_gitDiffView="_gitDiffView_ypk84_1",styles$8_closing="_closing_ypk84_21",styles$8_header="_header_ypk84_36",styles$8_headerLeft="_headerLeft_ypk84_46",styles$8_backBtn="_backBtn_ypk84_54",styles$8_filePath="_filePath_ypk84_75",styles$8_diffBadge="_diffBadge_ypk84_91",styles$8_headerRight="_headerRight_ypk84_103",styles$8_closeBtn="_closeBtn_ypk84_109",styles$8_contentContainer="_contentContainer_ypk84_129",styles$8_loading="_loading_ypk84_135",styles$8_error="_error_ypk84_144",styles$8_binaryNotice="_binaryNotice_ypk84_155",styles$8_largeFileWarning="_largeFileWarning_ypk84_167",styles$8_fileSize="_fileSize_ypk84_180",styles$8_imagePreviewWrap="_imagePreviewWrap_ypk84_186",styles$8_imagePreview="_imagePreview_ypk84_186";function getFirstChangedLine(oldStr,newStr){const oldLines=(oldStr||"").split("\n"),newLines=(newStr||"").split("\n");for(let i=0;i<newLines.length;i++)if(oldLines[i]!==newLines[i])return i+1;return 1}function GitDiffView({filePath:filePath2,repoPath:repoPath,onClose:onClose,onOpenFile:onOpenFile}){const[diffData,setDiffData]=reactExports.useState(null),[error2,setError]=reactExports.useState(null),[loading2,setLoading]=reactExports.useState(!0),[closing2,setClosing]=reactExports.useState(!1),[lightboxOpen,setLightboxOpen]=reactExports.useState(!1),mounted=reactExports.useRef(!0),containerRef=reactExports.useRef(null),handleClose=reactExports.useCallback(()=>{if(closing2)return;setClosing(!0);const el=containerRef.current;el?el.addEventListener("animationend",()=>onClose(),{once:!0}):onClose()},[closing2,onClose]);reactExports.useEffect(()=>{mounted.current=!0,setLoading(!0),setDiffData(null),setError(null),setLightboxOpen(!1);const repoParam=repoPath&&"."!==repoPath?`&repo=${encodeURIComponent(repoPath)}`:"";return fetch(apiUrl(`/api/git-diff?files=${encodeURIComponent(filePath2)}${repoParam}`)).then(r=>r.ok?r.json():r.json().then(err=>{throw new Error(err.error||"Failed to load diff")}).catch(()=>{throw new Error(`HTTP ${r.status}`)})).then(data=>{mounted.current&&(data.diffs&&data.diffs[0]?setDiffData(data.diffs[0]):setError("No diff data available"),setLoading(!1))}).catch(err=>{mounted.current&&(setError(`${t("ui.fileLoadError")}: ${err.message}`),setLoading(!1))}),()=>{mounted.current=!1}},[filePath2,repoPath]);const resolvedPath=repoPath&&"."!==repoPath?`${repoPath}/${filePath2}`:filePath2;return jsxRuntimeExports.jsxs("div",{ref:containerRef,className:`${styles$8_gitDiffView}${closing2?` ${styles$8_closing}`:""}`,children:[jsxRuntimeExports.jsxs("div",{className:styles$8_header,children:[jsxRuntimeExports.jsxs("div",{className:styles$8_headerLeft,children:[jsxRuntimeExports.jsx("button",{className:styles$8_backBtn,onClick:handleClose,title:t("ui.backToChat"),children:jsxRuntimeExports.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntimeExports.jsx("polyline",{points:"15 18 9 12 15 6"})})}),jsxRuntimeExports.jsx("span",{className:styles$8_filePath,onClick:()=>{if(onOpenFile&&diffData){const line=getFirstChangedLine(diffData.old_content,diffData.new_content);onOpenFile(filePath2,line)}},role:"button",tabIndex:0,onKeyDown:e=>{if(("Enter"===e.key||" "===e.key)&&onOpenFile&&diffData){const line=getFirstChangedLine(diffData.old_content,diffData.new_content);onOpenFile(filePath2,line)}},children:resolvedPath}),jsxRuntimeExports.jsx("span",{className:styles$8_diffBadge,children:"DIFF"})]}),jsxRuntimeExports.jsx("div",{className:styles$8_headerRight,children:jsxRuntimeExports.jsx("button",{className:styles$8_closeBtn,onClick:handleClose,title:t("ui.backToChat"),children:jsxRuntimeExports.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),jsxRuntimeExports.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})})]}),jsxRuntimeExports.jsxs("div",{className:styles$8_contentContainer,children:[loading2&&jsxRuntimeExports.jsx("div",{className:styles$8_loading,children:t("ui.loading")}),error2&&jsxRuntimeExports.jsx("div",{className:styles$8_error,children:error2}),!loading2&&!error2&&diffData&&jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:diffData.is_large?jsxRuntimeExports.jsxs("div",{className:styles$8_largeFileWarning,children:[jsxRuntimeExports.jsx("p",{children:t("ui.largeFileWarning")}),jsxRuntimeExports.jsxs("p",{className:styles$8_fileSize,children:[t("ui.fileSize"),": ",(diffData.size/1048576).toFixed(2)," MB"]})]}):isImageFile(filePath2)&&!diffData.is_deleted?jsxRuntimeExports.jsxs("div",{className:styles$8_imagePreviewWrap,children:[jsxRuntimeExports.jsx("img",{className:styles$8_imagePreview,src:apiUrl(`/api/file-raw?path=${encodeURIComponent(resolvedPath)}`),alt:resolvedPath,onClick:()=>setLightboxOpen(!0)}),lightboxOpen&&jsxRuntimeExports.jsx(ImageLightbox,{src:apiUrl(`/api/file-raw?path=${encodeURIComponent(resolvedPath)}`),alt:resolvedPath,onClose:()=>setLightboxOpen(!1)})]}):diffData.is_binary?jsxRuntimeExports.jsx("div",{className:styles$8_binaryNotice,children:t("ui.binaryFileNotice")}):jsxRuntimeExports.jsx(FullFileDiffView,{file_path:filePath2,old_string:diffData.old_content,new_string:diffData.new_content})})]})]})}const styles$7_panel="_panel_1qfnj_1",styles$7_panelGlobal="_panelGlobal_1qfnj_20",styles$7_toolName="_toolName_1qfnj_41",styles$7_command="_command_1qfnj_45",styles$7_allowBtn="_allowBtn_1qfnj_51",styles$7_allowSessionBtn="_allowSessionBtn_1qfnj_52",styles$7_denyBtn="_denyBtn_1qfnj_53",styles$7_borderSvg="_borderSvg_1qfnj_58",styles$7_borderSvgInset="_borderSvgInset_1qfnj_67",styles$7_borderRect="_borderRect_1qfnj_71",styles$7_exiting="_exiting_1qfnj_90",styles$7_header="_header_1qfnj_94",styles$7_label="_label_1qfnj_108",styles$7_subAgentBadge="_subAgentBadge_1qfnj_115",styles$7_body="_body_1qfnj_126",styles$7_detail="_detail_1qfnj_146",styles$7_actions="_actions_1qfnj_157",styles$7_autoApproveBtn="_autoApproveBtn_1qfnj_163",styles$7_autoApproveActive="_autoApproveActive_1qfnj_181";function ToolApprovalPanel({toolName:toolName2,toolInput:toolInput,requestId:requestId,onAllow:onAllow,onAllowSession:onAllowSession,onDeny:onDeny,visible:visible,global:isGlobal,autoApproveSeconds:autoApproveSeconds=0,onAutoApproveChange:onAutoApproveChange,modelName:modelName2,source:source2,queueDepth:queueDepth=0}){const panelRef=reactExports.useRef(null),allowRef=reactExports.useRef(null),prevFocusRef=reactExports.useRef(null),[show,setShow]=reactExports.useState(!1),[exiting2,setExiting]=reactExports.useState(!1),[countdown,setCountdown]=reactExports.useState(-1),countdownRef=reactExports.useRef(null),deniedRef=reactExports.useRef(!1);reactExports.useEffect(()=>{if(visible)setShow(!0),setExiting(!1),deniedRef.current=!1,autoApproveSeconds<=0&&(prevFocusRef.current=document.activeElement,requestAnimationFrame(()=>{var _a;return null==(_a=allowRef.current)?void 0:_a.focus()}));else if(show){setExiting(!0);const timer=setTimeout(()=>{setShow(!1),setExiting(!1)},200);return()=>clearTimeout(timer)}},[visible]),reactExports.useEffect(()=>(countdownRef.current&&(clearInterval(countdownRef.current),countdownRef.current=null),visible&&autoApproveSeconds>0&&requestId?(deniedRef.current=!1,setCountdown(autoApproveSeconds),countdownRef.current=setInterval(()=>{setCountdown(prev=>prev<=1?(clearInterval(countdownRef.current),countdownRef.current=null,0):prev-1)},1e3)):setCountdown(-1),()=>{countdownRef.current&&(clearInterval(countdownRef.current),countdownRef.current=null)}),[visible,autoApproveSeconds,requestId]),reactExports.useEffect(()=>{0===countdown&&!deniedRef.current&&visible&&requestId&&onAllow(requestId)},[countdown,visible,requestId,onAllow]);const handleDeny=reactExports.useCallback(id=>{deniedRef.current=!0,countdownRef.current&&(clearInterval(countdownRef.current),countdownRef.current=null),setCountdown(-1),onDeny(id)},[onDeny]),handleAutoApproveToggle=reactExports.useCallback(()=>{if(onAutoApproveChange){const enabling=autoApproveSeconds<=0;onAutoApproveChange(enabling?getAutoApproveDefault(modelName2):0),enabling&&requestId&&onAllow&&onAllow(requestId)}},[onAutoApproveChange,autoApproveSeconds,modelName2,requestId,onAllow]),handleKeyDown=reactExports.useCallback(e=>{var _a;if("Escape"!==e.key){if("Tab"===e.key){e.preventDefault();const buttons=null==(_a=panelRef.current)?void 0:_a.querySelectorAll("button");if(!(null==buttons?void 0:buttons.length))return;const arr=Array.from(buttons),idx=arr.indexOf(document.activeElement);arr[e.shiftKey?idx<=0?arr.length-1:idx-1:idx>=arr.length-1?0:idx+1].focus()}}else handleDeny(requestId)},[handleDeny,requestId]),displayText=reactExports.useMemo(()=>{if(!toolInput)return"";switch(toolName2){case"Bash":return toolInput.command||toolInput.description||"";case"Edit":case"Write":return toolInput.file_path||toolInput.description||"";case"NotebookEdit":return toolInput.notebook_path||toolInput.description||"";default:return toolInput.description?toolInput.description:JSON.stringify(toolInput,null,2).slice(0,500)}},[toolName2,toolInput]),detailText=reactExports.useMemo(()=>{if(!toolInput)return null;if("Bash"===toolName2&&toolInput.description)return toolInput.description;if("Edit"===toolName2&&null!=toolInput.old_string){return`${String(toolInput.old_string).slice(0,80)} → ${String(toolInput.new_string).slice(0,80)}`}return null},[toolName2,toolInput]);if(!show)return null;const allowLabel=countdown>0?t("ui.permission.allowCountdown",{seconds:countdown}):t("ui.permission.allow"),autoApproveBtnLabel=autoApproveSeconds>0?t("ui.permission.autoApprove.disable"):t("ui.permission.autoApprove.enable",{seconds:getAutoApproveDefault(modelName2)});return jsxRuntimeExports.jsxs("div",{ref:panelRef,className:`${isGlobal?styles$7_panelGlobal:styles$7_panel}${exiting2?` ${styles$7_exiting}`:""}`,onKeyDown:handleKeyDown,children:[jsxRuntimeExports.jsx("svg",{className:`${styles$7_borderSvg} ${styles$7_borderSvgInset}`,preserveAspectRatio:"none",children:jsxRuntimeExports.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",rx:"12",ry:"12",fill:"none",stroke:"var(--color-approval-border)",strokeWidth:"1",strokeDasharray:"6 4",className:styles$7_borderRect})}),jsxRuntimeExports.jsxs("div",{className:styles$7_header,children:[jsxRuntimeExports.jsx("span",{className:styles$7_toolName,children:toolName2}),"pty"===source2&&jsxRuntimeExports.jsx("span",{className:styles$7_subAgentBadge,children:t("ui.subAgentApproval")}),queueDepth>0&&jsxRuntimeExports.jsx("span",{className:styles$7_subAgentBadge,children:t("ui.permission.queued",{n:queueDepth})}),jsxRuntimeExports.jsx("span",{className:styles$7_label,children:t("ui.permission.approvalRequired")})]}),jsxRuntimeExports.jsxs("div",{className:styles$7_body,children:[jsxRuntimeExports.jsx("pre",{className:styles$7_command,children:displayText}),detailText&&jsxRuntimeExports.jsx("div",{className:styles$7_detail,children:detailText})]}),jsxRuntimeExports.jsxs("div",{className:styles$7_actions,children:[onAutoApproveChange&&jsxRuntimeExports.jsx("button",{className:`${styles$7_autoApproveBtn}${autoApproveSeconds>0?` ${styles$7_autoApproveActive}`:""}`,onClick:handleAutoApproveToggle,children:autoApproveBtnLabel}),jsxRuntimeExports.jsx("button",{className:styles$7_denyBtn,onClick:()=>handleDeny(requestId),children:t("ui.permission.deny")}),onAllowSession&&jsxRuntimeExports.jsx("button",{className:styles$7_allowSessionBtn,onClick:()=>onAllowSession(requestId),children:t("ui.permission.allowSession")}),jsxRuntimeExports.jsx("button",{ref:allowRef,className:styles$7_allowBtn,onClick:()=>onAllow(requestId),children:allowLabel})]})]})}function getMessageText(msg){const c=null==msg?void 0:msg.content;if("string"==typeof c)return c;if(Array.isArray(c))for(const block of c)if("text"===(null==block?void 0:block.type)&&block.text)return block.text;return""}function classifyRequest(req,nextReq){var _a;if(isTeammate(req))return req.teammate?{type:"Teammate",subType:req.teammate}:(void 0===req._cachedTeammateName&&(req._cachedTeammateName=function(body2){var _a;const msgs=null==body2?void 0:body2.messages;if(!Array.isArray(msgs))return null;for(let i=msgs.length-1;i>=0;i--){const content2=msgs[i].content;if(Array.isArray(content2))for(const block of content2){if("tool_result"!==block.type)continue;const items=Array.isArray(block.content)?block.content:[block];for(const item of items){const text=item.text||("string"==typeof item.content?item.content:"");if(text&&text.includes('"sender"'))try{const parsed=JSON.parse(text);if(null==(_a=null==parsed?void 0:parsed.routing)?void 0:_a.sender)return parsed.routing.sender}catch{}}}}return null}(req.body)||null),{type:"Teammate",subType:req._cachedTeammateName});const syntheticSub=function(req){var _a;if(!isMainAgent(req))return null;const msgs=(null==(_a=req.body)?void 0:_a.messages)||[];if(!msgs.length)return null;const last=msgs[msgs.length-1];if(!last||"user"!==last.role)return null;const text=getMessageText(last).trim();if(!text)return null;for(const{subType:subType,pattern:pattern}of SYNTHETIC_PROMPTS)if(pattern.test(text))return subType;return null}(req);if(syntheticSub)return{type:"Synthetic",subType:syntheticSub};if(isMainAgent(req))return{type:"MainAgent",subType:null};if(req.isCountTokens||function(req){var _a;const msgs=null==(_a=req.body)?void 0:_a.messages;if(!Array.isArray(msgs)||1!==msgs.length)return!1;const msg=msgs[0];return"user"===msg.role&&"count"===msg.content}(req))return{type:"Count",subType:null};if(function(req,nextReq){var _a;const body2=req.body||{},tools=body2.tools,msgs=body2.messages||[];if(Array.isArray(tools)&&tools.length>0)return!1;if(1!==msgs.length||"user"!==msgs[0].role)return!1;const text=getMessageText(msgs[0]);if(!text)return!1;if("count"===text.trim())return!1;const trimmed=text.trim();if(/^Command:/m.test(text)||/^<policy_spec>/i.test(trimmed)||/^<task-notification>/i.test(trimmed))return!1;const sysText=getSystemText(body2);if(!sysText.includes("Claude Code"))return!1;if(/process Bash commands/i.test(sysText))return!1;if(/Extract any file paths/i.test(sysText))return!1;if(nextReq){const nextMsgs=(null==(_a=nextReq.body)?void 0:_a.messages)||[],sig=text.slice(0,80);if(nextMsgs.some(m=>{const c=null==m?void 0:m.content;return"string"==typeof c?c.includes(sig):!!Array.isArray(c)&&c.some(block=>"text"===(null==block?void 0:block.type)&&block.text&&block.text.includes(sig))}))return!0}return!1}(req,nextReq)){const text=getMessageText(((null==(_a=req.body)?void 0:_a.messages)||[])[0]);return/Implement the following plan:/i.test(text.trim())?{type:"Plan",subType:"Prompt"}:{type:"Preflight",subType:null}}const subType=function(req){const body2=req.body||{},sysText=getSystemText(body2);if(/Extract any file paths/i.test(sysText))return"Bash";if(/process Bash commands/i.test(sysText))return"Bash";if(/command execution specialist/i.test(sysText))return"Bash";if(/file search specialist/i.test(sysText))return"Search";if(/planning specialist/i.test(sysText))return"Plan";if(/general-purpose agent/i.test(sysText))return"General";const msgs=body2.messages||[];for(let i=msgs.length-1;i>=0;i--){if("user"!==msgs[i].role)continue;const text=getMessageText(msgs[i]);if(/^Command:/m.test(text))return"Bash";break}return null}(req);return{type:"SubAgent",subType:subType}}function formatRequestTag(type,subType){return"Teammate"===type&&subType?`Teammate:${subType}`:"Plan"===type&&subType?`Plan:${subType}`:"SubAgent"===type&&subType?`SubAgent:${subType}`:"Synthetic"===type&&subType?`Synthetic:${subType}`:type}function formatTeammateLabel(name,model){const displayName=name||"X";if(!model)return`Teammate: ${displayName}`;return`Teammate: ${displayName}(${model.replace(/^claude-/i,"").replace(/-\d{8}$/,"")})`}function buildArrows(currentIdx,targetIdx){const chunks=[],diff=targetIdx-currentIdx,arrow2=diff>0?"":"";for(let i=0;i<Math.abs(diff);i++)chunks.push(arrow2);return chunks}function getCursorIdx(prompt){if(prompt&&prompt.options){const idx=prompt.options.findIndex(o2=>o2.selected);return idx>=0?idx:0}return 0}function buildChunksForAnswer(answer,prompt,isMultiQuestion=!1){return"multi"===answer.type?function(answer,prompt,isMultiQuestion=!1){const chunks=[],indices=(answer.selectedIndices||[]).slice().sort((a,b)=>a-b);let currentIdx=getCursorIdx(prompt);for(const targetIdx of indices)chunks.push(...buildArrows(currentIdx,targetIdx)),chunks.push(" "),currentIdx=targetIdx;return chunks.push(""),!answer.isLast&&isMultiQuestion||chunks.push("\r"),chunks}(answer,prompt,isMultiQuestion):"other"===answer.type&&answer.isMultiSelect?function(answer,prompt,isMultiQuestion=!1){const chunks=[];let currentIdx=getCursorIdx(prompt);const targetIdx=answer.optionIndex;chunks.push(...buildArrows(currentIdx,targetIdx));const text=answer.text||"";for(const ch of text)chunks.push(ch);if(text.length>0){const chars=[...text];chunks.push(chars[chars.length-1])}return chunks.push(""),chunks.push(""),chunks.push(""),!answer.isLast&&isMultiQuestion||chunks.push("\r"),chunks}(answer,prompt,isMultiQuestion):"other"===answer.type?function(answer,prompt,isMultiQuestion=!1){const chunks=[];let currentIdx=getCursorIdx(prompt);const targetIdx=answer.optionIndex;chunks.push(...buildArrows(currentIdx,targetIdx));const text=answer.text||"";for(const ch of text)chunks.push(ch);return chunks.push("\r"),isMultiQuestion&&answer.isLast&&chunks.push("\r"),chunks}(answer,prompt,isMultiQuestion):function(answer,prompt,isMultiQuestion=!1){const chunks=[];let currentIdx=getCursorIdx(prompt),targetIdx=answer.optionIndex;if(prompt&&prompt.options){const targetNumber=answer.optionIndex+1,found=prompt.options.findIndex(o2=>o2.number===targetNumber);found>=0&&(targetIdx=found)}return chunks.push(...buildArrows(currentIdx,targetIdx)),chunks.push("\r"),isMultiQuestion&&answer.isLast&&chunks.push("\r"),chunks}(answer,prompt,isMultiQuestion)}const _toolResultCache=new WeakMap;function getToolResultCache(messages){return _toolResultCache.get(messages)||null}function appendToolResultMap(state,messages,startIndex){var _a,_b;const{toolUseMap:toolUseMap,toolResultMap:toolResultMap,readContentMap:readContentMap,editSnapshotMap:editSnapshotMap,askAnswerMap:askAnswerMap,planApprovalMap:planApprovalMap,_fileState:_fileState}=state;for(let i=startIndex;i<messages.length;i++){const msg=messages[i];if("assistant"===msg.role&&Array.isArray(msg.content)){for(const block of msg.content)if("tool_use"===block.type){let parsed=block;if("string"==typeof block.input)try{const cleaned=block.input.replace(/^\[object Object\]/,"");parsed={...block,input:JSON.parse(cleaned)}}catch{}if(toolUseMap[parsed.id]=parsed,"Write"===parsed.name&&(null==(_a=parsed.input)?void 0:_a.file_path)&&/[/\\]\.claude[/\\]plans[/\\]/.test(parsed.input.file_path)&&parsed.input.content&&(state.latestPlanContent=parsed.input.content),"Edit"===parsed.name&&parsed.input){const fp=parsed.input.file_path,oldStr=parsed.input.old_string,newStr=parsed.input.new_string;if(fp&&null!=oldStr&&null!=newStr&&_fileState[fp]){const entry=_fileState[fp];if(!(parsed.id in editSnapshotMap)&&(editSnapshotMap[parsed.id]={plainText:entry.plainText,lineNums:entry.lineNums.slice()},state._editOrder.push(parsed.id),state._editOrder.length>300)){editSnapshotMap[state._editOrder.shift()]=null}const idx=entry.plainText.indexOf(oldStr);if(idx>=0){const lineOffset=entry.plainText.substring(0,idx).split("\n").length-1,oldLineCount=oldStr.split("\n").length,newLineCount=newStr.split("\n").length,lineDelta=newLineCount-oldLineCount;if(entry.plainText=entry.plainText.substring(0,idx)+newStr+entry.plainText.substring(idx+oldStr.length),0!==lineDelta){const startNum=entry.lineNums[lineOffset]||lineOffset+1,newNums=[];for(let j=0;j<newLineCount;j++)newNums.push(startNum+j);entry.lineNums=[...entry.lineNums.slice(0,lineOffset),...newNums,...entry.lineNums.slice(lineOffset+oldLineCount).map(n=>n+lineDelta)]}/[/\\]\.claude[/\\]plans[/\\]/.test(fp)&&(state.latestPlanContent=entry.plainText)}}}}}else if("user"===msg.role&&Array.isArray(msg.content))for(const block of msg.content)if("tool_result"===block.type){const matchedTool=toolUseMap[block.tool_use_id];let label2=t("ui.toolReturn"),toolName2=null,toolInput=null;if(matchedTool)if(toolName2=matchedTool.name,toolInput=matchedTool.input,"Task"===matchedTool.name&&matchedTool.input){const st=matchedTool.input.subagent_type||"",desc=matchedTool.input.description||"";label2=`SubAgent: ${st}${desc?" — "+desc:""}`}else label2=t("ui.toolReturnNamed",{name:matchedTool.name});const resultText=extractToolResultText(block),isError=!!block.is_error,isPermissionDenied=isError&&resultText&&/doesn't want to proceed|Permission.*denied|rejected.*tool use|interrupted by user for tool use/i.test(resultText),isUltraplan=isPermissionDenied&&resultText&&/ultraplan/i.test(resultText);if(toolResultMap[block.tool_use_id]={label:label2,toolName:toolName2,toolInput:toolInput,resultText:resultText,isError:isError,isPermissionDenied:isPermissionDenied,isUltraplan:isUltraplan},matchedTool&&"Read"===matchedTool.name&&(null==(_b=matchedTool.input)?void 0:_b.file_path)){readContentMap[matchedTool.input.file_path]=resultText;const readLines=resultText.split("\n"),plainLines=[],lineNums=[];for(const rl of readLines){const m=rl.match(/^\s*(\d+)[\t→](.*)$/);m&&(lineNums.push(parseInt(m[1],10)),plainLines.push(m[2]))}if(plainLines.length>0){const existing=_fileState[matchedTool.input.file_path];if(existing){const mergedMap=new Map,existingLines=existing.plainText.split("\n");for(let j=0;j<existing.lineNums.length;j++)mergedMap.set(existing.lineNums[j],existingLines[j]);for(let j=0;j<lineNums.length;j++)mergedMap.set(lineNums[j],plainLines[j]);const sortedKeys=[...mergedMap.keys()].sort((a,b)=>a-b);_fileState[matchedTool.input.file_path]={plainText:sortedKeys.map(k=>mergedMap.get(k)).join("\n"),lineNums:sortedKeys}}else _fileState[matchedTool.input.file_path]={plainText:plainLines.join("\n"),lineNums:lineNums}}}if(matchedTool&&"AskUserQuestion"===matchedTool.name){const parsed=parseAskAnswerText(resultText);0===Object.keys(parsed).length&&isPermissionDenied?askAnswerMap[block.tool_use_id]={__rejected__:!0}:askAnswerMap[block.tool_use_id]=parsed,state._askDirty=(state._askDirty||0)+1}if(matchedTool&&"ExitPlanMode"===matchedTool.name){if(isPermissionDenied){const userSaid=resultText.match(/the user said:\s*([\s\S]*)/i);planApprovalMap[block.tool_use_id]={status:isUltraplan?"ultraplan":"rejected",feedback:userSaid?userSaid[1].trim():""}}else planApprovalMap[block.tool_use_id]=parsePlanApproval(resultText);state._planDirty=(state._planDirty||0)+1,state.latestPlanContent=null}}}}function cachedBuildToolResultMap(messages){let cached=_toolResultCache.get(messages);return cached||(cached=function(messages){const state={toolUseMap:{},toolResultMap:{},readContentMap:{},editSnapshotMap:{},askAnswerMap:{},planApprovalMap:{},latestPlanContent:null,_fileState:{},_editOrder:[]};return appendToolResultMap(state,messages,0),state}(messages),_toolResultCache.set(messages,cached)),cached}function parseAskAnswerText(text){const answers={},re=/"([^"]+)"="([^"]*)"/g;let m;for(;null!==(m=re.exec(text));)answers[m[1]]=m[2];return answers}function parsePlanApproval(text){if(!text)return{status:"pending"};if(/User has approved/i.test(text)){const planMatch=text.match(/##\s*Approved Plan:\s*\n([\s\S]*)/i);return{status:"approved",planContent:planMatch?planMatch[1].trim():""}}if(/User rejected/i.test(text)){const feedbackMatch=text.match(/feedback:\s*(.+)/i)||text.match(/User rejected[^:]*:\s*(.+)/i);return{status:"rejected",feedback:feedbackMatch?feedbackMatch[1].trim():""}}return{status:"pending"}}const END_REASON=Object.freeze({DELETE_CONFIRMED:"deleteConfirmed",SUCCESSOR_CREATE:"successorCreate",SHUTDOWN_REQUEST:"shutdownRequest",LOG_TAIL:"logTail"});const styles$6_teamActiveSpinner="_teamActiveSpinner_9y80g_1",styles$6_teamPopover="_teamPopover_9y80g_17",styles$6_teamPopoverTitle="_teamPopoverTitle_9y80g_23",styles$6_teamPopoverItem="_teamPopoverItem_9y80g_31",styles$6_teamPopoverName="_teamPopoverName_9y80g_45",styles$6_teamPopoverMeta="_teamPopoverMeta_9y80g_53",styles$6_teamPopoverTime="_teamPopoverTime_9y80g_60",styles$6_teamModalBody="_teamModalBody_9y80g_66",styles$6_teamGanttToggle="_teamGanttToggle_9y80g_76",styles$6_ganttExportBtn="_ganttExportBtn_9y80g_90",styles$6_teamGanttWrap="_teamGanttWrap_9y80g_106",styles$6_teamGanttResizer="_teamGanttResizer_9y80g_115",styles$6_teamGanttRow="_teamGanttRow_9y80g_128",styles$6_teamGanttLabel="_teamGanttLabel_9y80g_135",styles$6_teamGanttTrack="_teamGanttTrack_9y80g_147",styles$6_teamGanttBar="_teamGanttBar_9y80g_156",styles$6_teamGanttDiamond="_teamGanttDiamond_9y80g_164",styles$6_teamGanttArrows="_teamGanttArrows_9y80g_181",styles$6_teamGanttIndicator="_teamGanttIndicator_9y80g_191",styles$6_teamModalLayout="_teamModalLayout_9y80g_203",styles$6_teamAgentCards="_teamAgentCards_9y80g_208",styles$6_teamAgentCard="_teamAgentCard_9y80g_208",styles$6_teamAgentCardActive="_teamAgentCardActive_9y80g_230",styles$6_teamAgentCardHeader="_teamAgentCardHeader_9y80g_234",styles$6_teamAgentAvatar="_teamAgentAvatar_9y80g_240",styles$6_teamAgentName="_teamAgentName_9y80g_258",styles$6_teamAgentType="_teamAgentType_9y80g_267",styles$6_teamAgentStatus="_teamAgentStatus_9y80g_273",styles$6_teamAgentPopover="_teamAgentPopover_9y80g_278",styles$6_teamAgentPopTeammateMsg="_teamAgentPopTeammateMsg_9y80g_283",styles$6_teamAgentPopTmSummary="_teamAgentPopTmSummary_9y80g_291",styles$6_teamAgentPopTmContent="_teamAgentPopTmContent_9y80g_298",styles$6_teamAgentPopTask="_teamAgentPopTask_9y80g_304",styles$6_teamAgentPopMsg="_teamAgentPopMsg_9y80g_313",styles$6_teammateReportEntry="_teammateReportEntry_9y80g_326",styles$6_teammateReportHeader="_teammateReportHeader_9y80g_334",styles$6_teammateReportName="_teammateReportName_9y80g_343",styles$6_teammateReportSummary="_teammateReportSummary_9y80g_349",styles$6_teammateReportBody="_teammateReportBody_9y80g_358",styles$6_teamModalContent="_teamModalContent_9y80g_364",styles$6_teamBtnRelative="_teamBtnRelative_9y80g_372",styles$6_ganttLabelLead="_ganttLabelLead_9y80g_376",styles$6_ganttLabelAgent="_ganttLabelAgent_9y80g_381",styles$6_ganttTimeAxisRow="_ganttTimeAxisRow_9y80g_385",styles$6_ganttTimeAxisTrack="_ganttTimeAxisTrack_9y80g_389",styles$6_ganttTickLabel="_ganttTickLabel_9y80g_395",styles$6_teamPopoverStatus="_teamPopoverStatus_9y80g_403",styles$6_statusConverged="_statusConverged_9y80g_409",styles$6_statusPending="_statusPending_9y80g_415",styles$6_statusPossiblyAlive="_statusPossiblyAlive_9y80g_420",styles$6_statusReused="_statusReused_9y80g_425",styles$6_ganttIndicatorInitial="_ganttIndicatorInitial_9y80g_430",styles$6_teamModalTitle="_teamModalTitle_9y80g_434",styles$6_teamLeadCard="_teamLeadCard_9y80g_439",styles$6_agentNoMessages="_agentNoMessages_9y80g_443",styles$6_teamAgentCardClickable="_teamAgentCardClickable_9y80g_448",styles$6_agentStatusDurSuffix="_agentStatusDurSuffix_9y80g_453";function deriveDisplayStatus(team,runtimeStatus){if(!team.endTime)return{glyph:"●",className:"",tooltipKey:"ui.teamSession.status.active"};if(function(team){return!!team&&(team.endReason===END_REASON.DELETE_CONFIRMED||team.endReason===END_REASON.SUCCESSOR_CREATE)}(team))return{glyph:"✓",className:"",colorVar:"var(--color-success)",tooltipKey:team.endReason===END_REASON.SUCCESSOR_CREATE?"ui.teamSession.status.successorCreate":"ui.teamSession.status.done"};const rt=runtimeStatus;if(rt){if("dead"===rt.state||"residue"===rt.state)return{glyph:"✓",className:styles$6_statusConverged,tooltipKey:"residue"===rt.state?"ui.teamSession.status.residue":"ui.teamSession.status.converged"};if("possiblyAlive"===rt.state)return{glyph:"⏱",className:styles$6_statusPossiblyAlive,tooltipKey:"ui.teamSession.status.possiblyAlive"};if("reused"===rt.state)return{glyph:"⏱",className:styles$6_statusReused,tooltipKey:"ui.teamSession.status.reused"}}return{glyph:"⏱",className:styles$6_statusPending,colorVar:"var(--text-tertiary)",tooltipKey:"ui.teamSession.status.pending"}}function isWeakEnd(team){const r=team.endReason;return r===END_REASON.SHUTDOWN_REQUEST||r===END_REASON.LOG_TAIL||!(r||!team._hasInferredEnd&&!team._inferredEnd)}function TeamButton({requests:requests,onOpenSession:onOpenSession,navBtnClass:navBtnClass}){const teamSessions=reactExports.useMemo(()=>function(requests){var _a,_b,_c,_d,_e,_f,_g,_h,_i,_j,_k,_l,_m,_n,_o,_p,_q,_r,_s;const teams=[];let currentTeamIdx=-1;function findToolResult(toolUseId,fromRequestIdx){var _a2,_b2;for(let j=fromRequestIdx+1;j<requests.length&&j<=fromRequestIdx+10;j++){const entry=(null==(_a2=requests[j])?void 0:_a2._slimmed)?restoreSlimmedEntry(requests[j],requests):requests[j],msgs=null==(_b2=null==entry?void 0:entry.body)?void 0:_b2.messages;if(Array.isArray(msgs))for(const msg of msgs){const blocks="user"===msg.role&&Array.isArray(msg.content)?msg.content:[];for(const b of blocks)if("tool_result"===b.type&&b.tool_use_id===toolUseId)return"string"==typeof b.content?b.content:JSON.stringify(b.content||"")}}return null}function isDeleteSuccessful(resultText){return!(resultText&&!resultText.includes('"success":true')&&!resultText.includes('"success": true')&&!resultText.includes("Cleaned up")&&resultText.includes("Cannot cleanup"))}for(let i=0;i<requests.length;i++){const req=requests[i],respContent=null==(_b=null==(_a=req.response)?void 0:_a.body)?void 0:_b.content;if(Array.isArray(respContent))for(const block of respContent){if("tool_use"!==block.type)continue;const name=block.name,input="string"==typeof block.input?(()=>{try{return JSON.parse(block.input)}catch{return{}}})():block.input||{};if("TeamCreate"===name){const createResult=findToolResult(block.id,i);if(createResult&&(createResult.includes('"error":')||createResult.includes('"error" :')||createResult.includes("Already leading team")))continue;const teamName=input.team_name||input.teamName||"unknown",ts=req.timestamp||(null==(_c=req.response)?void 0:_c.timestamp);currentTeamIdx>=0&&!teams[currentTeamIdx].endTime&&(teams[currentTeamIdx].endTime=ts,teams[currentTeamIdx].endRequestIndex=Math.max(teams[currentTeamIdx].requestIndex,i-1),teams[currentTeamIdx].endReason=END_REASON.SUCCESSOR_CREATE,teams[currentTeamIdx]._hasInferredEnd=!0);const team={name:teamName,startTime:ts,endTime:null,requestIndex:i,endRequestIndex:null,taskCount:0,teammateCount:0,_teammates:new Set};teams.push(team),currentTeamIdx=teams.length-1}else if("TeamDelete"===name){const resultText=findToolResult(block.id,i);if(!isDeleteSuccessful(resultText))continue;const ts=req.timestamp||(null==(_d=req.response)?void 0:_d.timestamp);if(currentTeamIdx<0){let teamName="unknown";try{teamName=JSON.parse(resultText).team_name||teamName}catch{}let startIdx=0,startTs=(null==(_e=requests[0])?void 0:_e.timestamp)||(null==(_g=null==(_f=requests[0])?void 0:_f.response)?void 0:_g.timestamp);for(let k=0;k<i;k++){const kResp=null==(_j=null==(_i=null==(_h=requests[k])?void 0:_h.response)?void 0:_i.body)?void 0:_j.content;if(Array.isArray(kResp)){for(const kb of kResp)if("tool_use"===kb.type&&"Agent"===kb.name){const kInp="string"==typeof kb.input?(()=>{try{return JSON.parse(kb.input)}catch{return{}}})():kb.input||{};if((kInp.team_name||kInp.teamName)===teamName){startIdx=k,startTs=(null==(_k=requests[k])?void 0:_k.timestamp)||(null==(_m=null==(_l=requests[k])?void 0:_l.response)?void 0:_m.timestamp);break}}if(startIdx>0)break}}const team={name:teamName,startTime:startTs,endTime:ts,endReason:END_REASON.DELETE_CONFIRMED,requestIndex:startIdx,endRequestIndex:i,taskCount:0,teammateCount:0,_teammates:new Set,_inferredStart:!0};for(let k=startIdx;k<i;k++){const kResp=null==(_p=null==(_o=null==(_n=requests[k])?void 0:_n.response)?void 0:_o.body)?void 0:_p.content;if(Array.isArray(kResp))for(const kb of kResp)if("tool_use"===kb.type)if("Agent"===kb.name){const an=("string"==typeof kb.input?(()=>{try{return JSON.parse(kb.input)}catch{return{}}})():kb.input||{}).name||"";team._teammates.has(an)||(team._teammates.add(an),team.teammateCount++)}else"TaskCreate"!==kb.name&&"TaskUpdate"!==kb.name||team.taskCount++}teams.push(team);continue}teams[currentTeamIdx].endTime=ts,teams[currentTeamIdx].endRequestIndex=i,teams[currentTeamIdx].endReason=END_REASON.DELETE_CONFIRMED,currentTeamIdx=-1}else if("SendMessage"===name){if(currentTeamIdx>=0&&"shutdown_request"===(null==(_q=input.message)?void 0:_q.type)){const shutdownTs=req.timestamp||(null==(_r=req.response)?void 0:_r.timestamp);teams[currentTeamIdx]._lastShutdownTime=shutdownTs,teams[currentTeamIdx]._lastShutdownRequestIdx=i}}else if("TaskCreate"===name||"TaskUpdate"===name)currentTeamIdx>=0&&teams[currentTeamIdx].taskCount++;else if("Agent"===name){const teamName=input.team_name||input.teamName,agentName=input.name||"";let targetIdx=-1;if(teamName)for(let ti=teams.length-1;ti>=0;ti--)if(teams[ti].name===teamName&&!teams[ti].endTime){targetIdx=ti;break}if(targetIdx<0&&currentTeamIdx>=0&&(targetIdx=currentTeamIdx),targetIdx>=0){const t2=teams[targetIdx];t2._teammates.has(agentName)||(t2._teammates.add(agentName),t2.teammateCount++)}}}}for(const team of teams)if(!team.endTime)if(team._lastShutdownTime)team.endTime=team._lastShutdownTime,team.endRequestIndex=team._lastShutdownRequestIdx,team.endReason=END_REASON.SHUTDOWN_REQUEST,team._hasInferredEnd=!0;else{const lastReq=requests[requests.length-1],lastTs=(null==(_s=null==lastReq?void 0:lastReq.response)?void 0:_s.timestamp)||(null==lastReq?void 0:lastReq.timestamp);lastTs&&team.startTime!==lastTs&&(team.endTime=lastTs,team.endRequestIndex=requests.length-1,team.endReason=END_REASON.LOG_TAIL,team._hasInferredEnd=!0)}return teams}(requests),[requests]),[popoverOpen,setPopoverOpen]=reactExports.useState(!1),[runtimeMap,setRuntimeMap]=reactExports.useState({}),classifyTeams=reactExports.useCallback((teams,nowMs)=>{const historical={},fresh=[];for(const team of teams){if(!isWeakEnd(team))continue;const key=`${team.name}@${team.startTime}`,endMs=team.endTime?Date.parse(team.endTime):null;endMs&&nowMs-endMs>864e5?historical[key]={state:"dead",queriedAt:nowMs,historical:!0}:fresh.push({key:key,name:team.name,endTime:endMs})}return{historical:historical,fresh:fresh}},[]);if(reactExports.useEffect(()=>{if(!popoverOpen||0===teamSessions.length)return;const now=Date.now(),{historical:historical,fresh:fresh}=classifyTeams(teamSessions,now),ctrl=new AbortController;return setRuntimeMap(prev=>{const merged={...prev};for(const[k,v]of Object.entries(historical))merged[k]||(merged[k]=v);const needQuery=fresh.filter(q=>{const c=merged[q.key];return!c||now-c.queriedAt>=3e5});return needQuery.length>0&&fetch(apiUrl("/api/team-status"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({teams:needQuery.map(q=>({name:q.name,endTime:q.endTime}))}),signal:ctrl.signal}).then(r=>r.ok?r.json():Promise.reject(new Error("HTTP "+r.status))).then(data=>{var _a;const addl={},t2=Date.now();for(const q of needQuery){const st=null==(_a=null==data?void 0:data.statuses)?void 0:_a[q.name];st&&(addl[q.key]={...st,queriedAt:t2})}Object.keys(addl).length>0&&setRuntimeMap(p=>({...p,...addl}))}).catch(err=>{err.name}),merged}),()=>ctrl.abort()},[popoverOpen,teamSessions,classifyTeams]),0===teamSessions.length)return null;const content2=jsxRuntimeExports.jsxs("div",{className:styles$6_teamPopover,children:[jsxRuntimeExports.jsxs("div",{className:styles$6_teamPopoverTitle,children:[t("ui.teamSessions")," (",teamSessions.length,")"]}),teamSessions.map((team,i)=>{const time=team.startTime?new Date(team.startTime).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):"",rtKey=`${team.name}@${team.startTime}`,rt=runtimeMap[rtKey],disp=deriveDisplayStatus(team,rt),style=disp.colorVar?{color:disp.colorVar}:void 0,statusEl=jsxRuntimeExports.jsx("span",{className:`${styles$6_teamPopoverStatus} ${disp.className||""}`,style:style,children:disp.glyph});return jsxRuntimeExports.jsxs("div",{className:styles$6_teamPopoverItem,onClick:()=>onOpenSession(team),children:[jsxRuntimeExports.jsx(Tooltip,{title:t(disp.tooltipKey),children:statusEl}),jsxRuntimeExports.jsx("span",{className:styles$6_teamPopoverName,children:team.name}),jsxRuntimeExports.jsxs("span",{className:styles$6_teamPopoverMeta,children:[team.teammateCount,"p · ",team.taskCount,"t"]}),jsxRuntimeExports.jsx("span",{className:styles$6_teamPopoverTime,children:time})]},i)})]}),hasActiveTeam=teamSessions.some(s=>!s.endTime||isWeakEnd(s));return jsxRuntimeExports.jsx(Popover,{content:content2,trigger:"hover",placement:"rightTop",onOpenChange:setPopoverOpen,overlayInnerStyle:{background:"var(--bg-elevated)",border:"1px solid var(--border-light)",padding:0},children:jsxRuntimeExports.jsxs("button",{className:`${navBtnClass||""} ${styles$6_teamBtnRelative}`,title:t("ui.teamSessions"),children:[jsxRuntimeExports.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("path",{d:"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"}),jsxRuntimeExports.jsx("circle",{cx:"9",cy:"7",r:"4"}),jsxRuntimeExports.jsx("path",{d:"M23 21v-2a4 4 0 0 0-3-3.87"}),jsxRuntimeExports.jsx("path",{d:"M16 3.13a4 4 0 0 1 0 7.75"})]}),hasActiveTeam&&jsxRuntimeExports.jsx("span",{className:styles$6_teamActiveSpinner})]})})}function TeamGantt({teamAgents:teamAgents,teamTotalStart:teamTotalStart,teamTotalEnd:teamTotalEnd,leadSegments:leadSegments,ganttWrapRef:ganttWrapRef,ganttIndicatorRef:ganttIndicatorRef,ganttHeight:ganttHeight,onGanttHeightChange:onGanttHeightChange}){const[ganttOpen,setGanttOpen]=reactExports.useState(!0);if(!teamAgents||0===teamAgents.length)return null;const totalMs=teamTotalEnd-teamTotalStart||1,pct=ms=>((ms-teamTotalStart)/totalMs*100).toFixed(2),widthPct=(start,end)=>((end-start)/totalMs*100).toFixed(2),ticks=[];for(let i=0;i<=4;i++){const d=new Date(teamTotalStart+totalMs*i/4);ticks.push({pct:25*i,label:d.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})})}return jsxRuntimeExports.jsxs("div",{children:[jsxRuntimeExports.jsxs("div",{className:styles$6_teamGanttToggle,onClick:()=>setGanttOpen(prev=>!prev),children:[ganttOpen?"▼":"▶"," Timeline",ganttOpen&&jsxRuntimeExports.jsx("span",{className:styles$6_ganttExportBtn,title:t("ui.exportTimelinePng")||"Export as PNG",onClick:e=>{e.stopPropagation();const wrap=ganttWrapRef.current;if(!wrap)return;const prevMaxH=wrap.style.maxHeight,prevH=wrap.style.height,prevOverflow=wrap.style.overflow;wrap.style.maxHeight="none",wrap.style.height="auto",wrap.style.overflow="visible",__vitePreload(async()=>{const{default:html2canvas}=await import("./html2canvas.esm-HFdlUwfn.js");return{default:html2canvas}},[]).then(({default:html2canvas})=>{html2canvas(wrap,{backgroundColor:"#0a0a0a",scale:2,useCORS:!0}).then(canvas=>{wrap.style.maxHeight=prevMaxH,wrap.style.height=prevH,wrap.style.overflow=prevOverflow;const link=document.createElement("a");link.download=`team-timeline-${Date.now()}.png`,link.href=canvas.toDataURL("image/png"),link.click()}).catch(()=>{wrap.style.maxHeight=prevMaxH,wrap.style.height=prevH,wrap.style.overflow=prevOverflow})}).catch(()=>{wrap.style.maxHeight=prevMaxH,wrap.style.height=prevH,wrap.style.overflow=prevOverflow})},children:jsxRuntimeExports.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),jsxRuntimeExports.jsx("polyline",{points:"7 10 12 15 17 10"}),jsxRuntimeExports.jsx("line",{x1:"12",y1:"15",x2:"12",y2:"3"})]})})]}),ganttOpen&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs("div",{ref:ganttWrapRef,className:styles$6_teamGanttWrap,style:ganttHeight?{maxHeight:"none",height:ganttHeight}:void 0,children:[jsxRuntimeExports.jsxs("div",{className:styles$6_teamGanttRow,children:[jsxRuntimeExports.jsx("div",{className:`${styles$6_teamGanttLabel} ${styles$6_ganttLabelLead}`,children:"team-lead"}),jsxRuntimeExports.jsxs("div",{className:styles$6_teamGanttTrack,children:[leadSegments&&leadSegments.map((seg,i)=>{const bgColor="thinking"===seg.label?"var(--color-code-purple)":"report-received"===seg.label?"var(--color-success)":"var(--color-primary)",op="idle"===seg.label?.25:"text"===seg.label?.5:"thinking"===seg.label?.4:"report-received"===seg.label?.6:.7;return jsxRuntimeExports.jsx("div",{className:styles$6_teamGanttBar,title:seg.label,style:{left:pct(seg.start)+"%",width:widthPct(seg.start,seg.end)+"%",background:bgColor,opacity:op}},`b${i}`)}),leadSegments&&leadSegments.filter(s=>"idle"!==s.label).map((seg,i)=>{const dColor="thinking"===seg.label?"var(--color-code-purple)":"report-received"===seg.label?"var(--color-success)":"var(--color-primary)";return jsxRuntimeExports.jsx(Tooltip,{title:{create:"Team Created",tasks:"Tasks Created",spawn:"Agents Spawned",msg:"SendMessage",cleanup:"Team Cleanup",text:"Status Update",thinking:"Thinking...","report-received":"Report Received"}[seg.label]||seg.label,children:jsxRuntimeExports.jsx("span",{className:styles$6_teamGanttDiamond,style:{left:pct(seg.start)+"%",color:dColor},children:"◆"})},`d${i}`)})]})]}),teamAgents.map((ag,i)=>jsxRuntimeExports.jsxs("div",{className:styles$6_teamGanttRow,children:[jsxRuntimeExports.jsx("div",{className:`${styles$6_teamGanttLabel} ${styles$6_ganttLabelAgent}`,children:ag.name}),jsxRuntimeExports.jsxs("div",{className:styles$6_teamGanttTrack,children:[ag.segments.map((seg,si)=>{seg.label.startsWith("tool:");const op="spawn"===seg.label?.2:"claim"===seg.label?.7:"done"===seg.label?.4:"shutdown"===seg.label?.1:"report"===seg.label?.9:.5;return jsxRuntimeExports.jsx("div",{className:styles$6_teamGanttBar,title:seg.label,style:{left:pct(seg.start)+"%",width:widthPct(seg.start,seg.end)+"%",background:"var(--text-tertiary)",opacity:op}},`b${si}`)}),ag.events.filter(ev=>!ev.label.startsWith("tool:")).map((ev,ei)=>{const tip={spawn:"Agent Spawned",claim:"Task Claimed",done:"Task Completed",shutdown:"Shutdown Request","msg-in":"Message Received",report:"Report Submitted"}[ev.label]||ev.label;return jsxRuntimeExports.jsx(Tooltip,{title:`${ag.name}: ${tip}`,children:jsxRuntimeExports.jsx("span",{className:`${styles$6_teamGanttDiamond} ${styles$6_ganttLabelAgent}`,style:{left:pct(ev.ts)+"%"},children:"◆"})},`d${ei}`)})]})]},i)),jsxRuntimeExports.jsxs("div",{className:`${styles$6_teamGanttRow} ${styles$6_ganttTimeAxisRow}`,children:[jsxRuntimeExports.jsx("div",{className:styles$6_teamGanttLabel}),jsxRuntimeExports.jsx("div",{className:`${styles$6_teamGanttTrack} ${styles$6_ganttTimeAxisTrack}`,children:ticks.map((tk,i)=>jsxRuntimeExports.jsx("span",{className:styles$6_ganttTickLabel,style:{left:tk.pct+"%"},children:tk.label},i))})]}),(()=>{const arrows=[];if(teamAgents.forEach((ag,ai)=>{const agentY=25*(ai+1)+12.5;if(ag.doneTime){const doneMs=new Date(ag.doneTime).getTime();arrows.push({key:`${ai}-done`,xPct:pct(doneMs),fromY:agentY,toY:12.5,color:"var(--color-warning-light)"})}ag.events.filter(ev=>"report"===ev.label).forEach((ev,ei)=>{arrows.push({key:`${ai}-rpt-${ei}`,xPct:pct(ev.ts),fromY:agentY,toY:12.5,color:"var(--color-success)"})})}),0===arrows.length)return null;const totalH=25*(teamAgents.length+2);return jsxRuntimeExports.jsxs("svg",{className:styles$6_teamGanttArrows,style:{height:totalH},children:[jsxRuntimeExports.jsxs("defs",{children:[jsxRuntimeExports.jsx("marker",{id:"gantt-arrow-yellow",markerWidth:"8",markerHeight:"8",refX:"6",refY:"4",orient:"auto",children:jsxRuntimeExports.jsx("path",{d:"M0,1 L7,4 L0,7 Z",fill:"var(--color-warning-light)"})}),jsxRuntimeExports.jsx("marker",{id:"gantt-arrow-green",markerWidth:"8",markerHeight:"8",refX:"6",refY:"4",orient:"auto",children:jsxRuntimeExports.jsx("path",{d:"M0,1 L7,4 L0,7 Z",fill:"var(--color-success)"})})]}),arrows.map(a=>jsxRuntimeExports.jsx("line",{x1:a.xPct+"%",y1:a.fromY,x2:a.xPct+"%",y2:a.toY+5,stroke:a.color,strokeWidth:"1.5",strokeDasharray:"4,3",opacity:"0.7",markerEnd:"var(--color-success)"===a.color?"url(#gantt-arrow-green)":"url(#gantt-arrow-yellow)"},a.key))]})})(),jsxRuntimeExports.jsx("div",{ref:ganttIndicatorRef,className:`${styles$6_teamGanttIndicator} ${styles$6_ganttIndicatorInitial}`})]}),jsxRuntimeExports.jsx("div",{className:styles$6_teamGanttResizer,onMouseDown:e=>{e.preventDefault();const wrap=ganttWrapRef.current;if(!wrap)return;const startY=e.clientY,startH=wrap.getBoundingClientRect().height,onMove=ev=>{const h=Math.max(60,startH+ev.clientY-startY);onGanttHeightChange(h)},onUp=()=>{document.removeEventListener("mousemove",onMove),document.removeEventListener("mouseup",onUp)};document.addEventListener("mousemove",onMove),document.addEventListener("mouseup",onUp)}})]})]})}function TeamModal({session:session,requests:requests,mainAgentSessions:mainAgentSessions,collapseToolResults:collapseToolResults,expandThinking:expandThinking,userProfile:userProfile,onViewRequest:onViewRequest,onClose:onClose}){const modalBodyRef=reactExports.useRef(null),ganttIndicatorRef=reactExports.useRef(null),ganttWrapRef=reactExports.useRef(null),ganttTrackElRef=reactExports.useRef(null),scrollRafRef=reactExports.useRef(null),[activeAgentCard,setActiveAgentCard]=reactExports.useState(null),[ganttHeight,setGanttHeight]=reactExports.useState(null);reactExports.useEffect(()=>()=>{scrollRafRef.current&&cancelAnimationFrame(scrollRafRef.current)},[]);const dataCacheRef=reactExports.useRef({team:null,requests:null,mainAgentSessions:null,result:null}),modalData=reactExports.useMemo(()=>{if(!session)return null;const c=dataCacheRef.current;if(c.team===session&&c.requests===requests&&c.mainAgentSessions===mainAgentSessions)return c.result;const result=function(team,requests,mainAgentSessions){var _a,_b,_c,_d,_e,_f,_g,_h,_i,_j,_k,_l,_m,_n,_o,_p,_q,_r,_s,_t,_u,_v,_w,_x;const startIdx=team.requestIndex,endIdx=null!=team.endRequestIndex?team.endRequestIndex+1:requests.length,teamRequests=requests.slice(startIdx,endIdx),teamStartTime=team.startTime,teamEndTime=team.endTime||(null==(_b=null==(_a=requests[endIdx-1])?void 0:_a.response)?void 0:_b.timestamp)||(null==(_c=requests[endIdx-1])?void 0:_c.timestamp),tsToIndex={};let modelName2=null;for(let i=startIdx;i<endIdx&&i<requests.length;i++){const req=requests[i];req.timestamp&&(tsToIndex[req.timestamp]=i),(null==(_d=req.body)?void 0:_d.model)&&(modelName2=req.body.model)}const modelInfo=getModelInfo(modelName2),entries=[];let hasUserMsg=!1;if(mainAgentSessions){let closestBeforeTs=null;for(const session of mainAgentSessions)for(const msg of session.messages||[]){const ts=msg._timestamp;ts&&"user"===msg.role&&ts<=teamStartTime&&(!closestBeforeTs||ts>closestBeforeTs)&&(closestBeforeTs=ts)}const effectiveStart=closestBeforeTs||teamStartTime;for(const session of mainAgentSessions)for(const msg of session.messages||[]){const ts=msg._timestamp;if(!ts||ts<effectiveStart)continue;if(teamEndTime&&ts>teamEndTime)continue;if("user"!==msg.role)continue;const content2=msg.content;if(Array.isArray(content2)){const{textBlocks:textBlocks}=classifyUserContent(content2);for(const tb of textBlocks)tb.text&&tb.text.trim()&&(entries.push({type:"user",text:tb.text,timestamp:ts}),hasUserMsg=!0)}else"string"!=typeof content2||isSystemText(content2)||(entries.push({type:"user",text:content2,timestamp:ts}),hasUserMsg=!0)}}if(!hasUserMsg){const tcRaw=requests[team.requestIndex],tcReq=(null==tcRaw?void 0:tcRaw._slimmed)?restoreSlimmedEntry(tcRaw,requests):tcRaw,tcMsgs=(null==(_e=null==tcReq?void 0:tcReq.body)?void 0:_e.messages)||[];for(let m=tcMsgs.length-1;m>=0;m--){if("user"!==tcMsgs[m].role)continue;const c=tcMsgs[m].content;if(Array.isArray(c)){const{textBlocks:textBlocks}=classifyUserContent(c);for(const tb of textBlocks)tb.text&&tb.text.trim()&&(entries.push({type:"user",text:tb.text,timestamp:teamStartTime}),hasUserMsg=!0)}else"string"!=typeof c||isSystemText(c)||(entries.push({type:"user",text:c,timestamp:teamStartTime}),hasUserMsg=!0);if(hasUserMsg)break}}if(!hasUserMsg)for(let i=0;i<teamRequests.length;i++){const resp=null==(_g=null==(_f=teamRequests[i].response)?void 0:_f.body)?void 0:_g.content;if(Array.isArray(resp)){for(const block of resp)if("text"===block.type&&block.text&&block.text.trim()){entries.push({type:"context",text:block.text.trim(),timestamp:(null==(_h=teamRequests[i].response)?void 0:_h.timestamp)||teamRequests[i].timestamp}),hasUserMsg=!0;break}if(hasUserMsg)break}}for(let i=0;i<teamRequests.length;i++){const req=teamRequests[i],respContent=null==(_j=null==(_i=req.response)?void 0:_i.body)?void 0:_j.content;if(!Array.isArray(respContent)||0===respContent.length)continue;const cls=classifyRequest(req,teamRequests[i+1]),isMA=isMainAgent(req),isSub="SubAgent"===cls.type||"Teammate"===cls.type;if(isMA)entries.push({type:"assistant",content:respContent,timestamp:(null==(_k=req.response)?void 0:_k.timestamp)||req.timestamp,requestIndex:startIdx+i,modelInfo:modelInfo});else if(isSub){const subToolResultMap={},msgs=(null==(_l=req.body)?void 0:_l.messages)||[];for(const msg of msgs)if("tool_result"===msg.role||"user"===msg.role&&Array.isArray(msg.content)){const blocks=Array.isArray(msg.content)?msg.content:[msg];for(const b of blocks)"tool_result"===b.type&&b.tool_use_id&&(subToolResultMap[b.tool_use_id]={resultText:"string"==typeof b.content?b.content:JSON.stringify(b.content)})}entries.push({type:"sub-agent",content:respContent,toolResultMap:subToolResultMap,label:"Teammate"===cls.type?formatTeammateLabel(cls.subType,null==(_m=req.body)?void 0:_m.model):formatRequestTag(cls.type,cls.subType),isTeammate:"Teammate"===cls.type,timestamp:req.timestamp,requestIndex:startIdx+i})}}entries.sort((a,b)=>(a.timestamp||"").localeCompare(b.timestamp||""));const palette=["#1668dc","#52c41a","#faad14","#eb2f96","#722ed1","#13c2c2","#fa541c","#2f54eb"],teamAgents=[],agentMap=new Map,teamTotalStart=new Date(teamStartTime).getTime(),teamTotalEnd=new Date(teamEndTime||Date.now()).getTime(),leadSegments=[];let lastLeadTs=teamTotalStart;const _taskCreateSubjects=new Map,_taskOwnerMap=new Map;let _taskCreateCounter=1;for(let i=0;i<teamRequests.length;i++){const req=teamRequests[i],resp=null==(_o=null==(_n=req.response)?void 0:_n.body)?void 0:_o.content;if(!Array.isArray(resp))continue;const tsStr=(null==(_p=req.response)?void 0:_p.timestamp)||req.timestamp,ts=tsStr,tsMs=new Date(tsStr).getTime(),isMA=isMainAgent(req);for(const block of resp){if("tool_use"!==block.type)continue;const n=block.name,inp="string"==typeof block.input?(()=>{try{return JSON.parse(block.input)}catch{return{}}})():block.input||{};if("Agent"===n&&inp.name){const idx=teamAgents.length;teamAgents.push({name:inp.name,color:palette[idx%palette.length],type:(null==(_q=inp.subagent_type)?void 0:_q.split(":").pop())||"",spawnTime:ts,claimTime:null,doneTime:null,shutdownTime:null,taskSubject:null,events:[{ts:tsMs,label:"spawn"}]}),agentMap.set(inp.name,idx)}else if("TaskCreate"===n){if(inp.subject){const tId=String(inp.taskId||_taskCreateCounter++);_taskCreateSubjects.set(tId,inp.subject)}}else if("TaskUpdate"===n){const owner=inp.owner,taskId=null!=inp.taskId?String(inp.taskId):null;owner&&taskId&&_taskOwnerMap.set(taskId,owner);let targetAg=null;if(owner&&agentMap.has(owner))targetAg=teamAgents[agentMap.get(owner)];else if(taskId){const prevOwner=_taskOwnerMap.get(taskId);if(prevOwner&&agentMap.has(prevOwner))targetAg=teamAgents[agentMap.get(prevOwner)];else{const taskNum=parseInt(taskId,10);taskNum>0&&taskNum<=teamAgents.length&&(targetAg=teamAgents[taskNum-1],_taskOwnerMap.set(taskId,targetAg.name))}}targetAg&&("in_progress"!==inp.status||targetAg.claimTime||(targetAg.claimTime=ts,targetAg.events.push({ts:tsMs,label:"claim"})),"completed"!==inp.status||targetAg.doneTime||(targetAg.doneTime=ts,targetAg.events.push({ts:tsMs,label:"done"})),taskId&&_taskCreateSubjects.has(taskId)&&!targetAg.taskSubject&&(targetAg.taskSubject=_taskCreateSubjects.get(taskId)))}else if("SendMessage"===n)if("shutdown_request"===(null==(_r=inp.message)?void 0:_r.type)&&inp.to&&agentMap.has(inp.to)){const ag=teamAgents[agentMap.get(inp.to)];ag.shutdownTime=ts,ag.events.push({ts:tsMs,label:"shutdown"})}else"shutdown_response"===(null==(_s=inp.message)?void 0:_s.type)&&agentMap.has("team-lead"===inp.to?"":inp.to)||(inp.to&&"team-lead"!==inp.to&&agentMap.has(inp.to)?teamAgents[agentMap.get(inp.to)].events.push({ts:tsMs,label:"msg-in"}):"team-lead"===inp.to&&("string"==typeof inp.message||inp.message&&!inp.message.type)&&tsMs>lastLeadTs&&(leadSegments.push({start:lastLeadTs,end:tsMs,label:"report-received",color:"#52c41a"}),lastLeadTs=tsMs));if(isMA&&("TeamCreate"===n||"TaskCreate"===n||"Agent"===n||"SendMessage"===n||"TeamDelete"===n)){const label2="TeamCreate"===n?"create":"TaskCreate"===n?"tasks":"Agent"===n?"spawn":"SendMessage"===n?"msg":"cleanup";tsMs>lastLeadTs&&(leadSegments.push({start:lastLeadTs,end:tsMs,label:label2,color:"TeamDelete"===n?"#52c41a":"SendMessage"===n?"#ff4d4f":"#1668dc"}),lastLeadTs=tsMs)}}if(isMA)for(const block of resp)"text"===block.type&&block.text?tsMs>lastLeadTs&&(leadSegments.push({start:lastLeadTs,end:tsMs,label:"text",color:"#196ae1"}),lastLeadTs=tsMs):"thinking"===block.type&&tsMs>lastLeadTs&&(leadSegments.push({start:lastLeadTs,end:tsMs,label:"thinking",color:"#722ed1"}),lastLeadTs=tsMs)}for(let i=0;i<teamRequests.length;i++){const req=teamRequests[i];if(isMainAgent(req))continue;const resp=null==(_u=null==(_t=req.response)?void 0:_t.body)?void 0:_u.content;if(!Array.isArray(resp))continue;const tsStr=(null==(_v=req.response)?void 0:_v.timestamp)||req.timestamp,tsMs=new Date(tsStr).getTime(),cls=classifyRequest(req,teamRequests[i+1]),label2="Teammate"===cls.type?cls.subType:null;if(label2){let agIdx=agentMap.has(label2)?agentMap.get(label2):void 0;if(void 0===agIdx)for(const[name,idx]of agentMap)if(label2.includes(name)||name.includes(label2)){agIdx=idx;break}if(void 0!==agIdx){const ag=teamAgents[agIdx];for(const block of resp)"tool_use"===block.type&&block.name&&ag.events.push({ts:tsMs,label:"tool:"+block.name})}}}const teammateMessageRe=/<teammate-message\s+teammate_id="([^"]+)"[^>]*summary="([^"]*)"[^>]*>([\s\S]*?)<\/teammate-message>/g,seenTmMsg=new Set;teamAgents.forEach(ag=>{ag.teammateMessages=[]});for(let i=0;i<teamRequests.length;i++){const raw=teamRequests[i],req=(null==raw?void 0:raw._slimmed)?restoreSlimmedEntry(raw,requests):raw,msgs=(null==(_w=req.body)?void 0:_w.messages)||[];for(const m of msgs)if("user"===m.role&&Array.isArray(m.content))for(const b of m.content){if("text"!==b.type||!b.text)continue;let match;for(teammateMessageRe.lastIndex=0;null!==(match=teammateMessageRe.exec(b.text));){const[,tid,summary,content2]=match;if("system"===tid||"team-lead"===tid)continue;const dedupKey=tid+"|"+summary+"|"+content2.trim().slice(0,100);if(!seenTmMsg.has(dedupKey)){seenTmMsg.add(dedupKey);for(const ag of teamAgents)if(tid===ag.name||tid.includes(ag.name)||ag.name.includes(tid)){if(summary&&content2.trim()){ag.teammateMessages.push({summary:summary,content:content2.trim()});const reqTs=req.timestamp||(null==(_x=req.response)?void 0:_x.timestamp);entries.push({type:"teammate-report",agentName:ag.name,agentColor:getTeammateAvatar(ag.name).color,summary:summary,content:content2.trim(),timestamp:reqTs})}break}}}}}lastLeadTs<teamTotalEnd&&leadSegments.push({start:lastLeadTs,end:teamTotalEnd,label:"idle",color:"#333"});const segColors={spawn:"#555",claim:"#faad14",done:"#52c41a",shutdown:"#ff4d4f","msg-in":"#1668dc",report:"#52c41a","report-received":"#52c41a",text:"#196ae1",thinking:"#722ed1"};return teamAgents.forEach(ag=>{var _a2;const start=new Date(ag.spawnTime).getTime(),end=new Date(ag.doneTime||ag.shutdownTime||teamEndTime||Date.now()).getTime();ag.duration=end-start,ag.events.sort((a,b)=>a.ts-b.ts),ag.segments=[];for(let e=0;e<ag.events.length;e++){const ev=ag.events[e],nextTs=(null==(_a2=ag.events[e+1])?void 0:_a2.ts)||(ag.shutdownTime?new Date(ag.shutdownTime).getTime():teamTotalEnd);ag.segments.push({start:ev.ts,end:nextTs,label:ev.label,color:segColors[ev.label]||(ev.label.startsWith("tool:")?"#888":ag.color)})}}),{entries:entries,teamAgents:teamAgents,leadSegments:leadSegments,teamTotalStart:teamTotalStart,teamTotalEnd:teamTotalEnd,modelInfo:modelInfo,teamRequests:teamRequests}}(session,requests,mainAgentSessions);return dataCacheRef.current={team:session,requests:requests,mainAgentSessions:mainAgentSessions,result:result},result},[session,requests,mainAgentSessions]),teamTotalStart=modalData?modalData.teamTotalStart:0,teamTotalEnd=modalData?modalData.teamTotalEnd:0,onScroll=reactExports.useCallback(()=>{scrollRafRef.current||(scrollRafRef.current=requestAnimationFrame(()=>{var _a;scrollRafRef.current=null;const container2=modalBodyRef.current;if(!container2)return;const containerTop=container2.getBoundingClientRect().top;let closestTs=null;for(const child of container2.children){const ts=child.getAttribute("data-timestamp");if(!ts)continue;if(child.getBoundingClientRect().bottom>containerTop){closestTs=ts;break}}if(!closestTs)return;const tsMs=new Date(closestTs).getTime(),total=teamTotalEnd-teamTotalStart||1,pctVal=Math.max(0,Math.min(100,(tsMs-teamTotalStart)/total*100)),el=ganttIndicatorRef.current;if(!el)return;ganttTrackElRef.current&&ganttTrackElRef.current.isConnected||(ganttTrackElRef.current=null==(_a=el.parentElement)?void 0:_a.querySelector('[class*="teamGanttTrack"]'));const wrap=el.parentElement,track=ganttTrackElRef.current;if(track){const wrapRect=wrap.getBoundingClientRect(),trackRect=track.getBoundingClientRect(),trackLeft=trackRect.left-wrapRect.left,trackWidth=trackRect.width;el.style.left=trackLeft+trackWidth*pctVal/100+"px",el.style.height=wrap.scrollHeight+"px"}}))},[teamTotalStart,teamTotalEnd]);if(!session)return null;const{entries:entries,teamAgents:teamAgents,leadSegments:leadSegments,modelInfo:modelInfo}=modalData;return jsxRuntimeExports.jsx(Modal,{open:!0,onCancel:()=>{ganttTrackElRef.current=null,onClose()},footer:null,closable:!0,maskClosable:!0,zIndex:1100,width:"calc(100vw - 80px)",title:jsxRuntimeExports.jsxs("span",{className:styles$6_teamModalTitle,children:["Team: ",session.name]}),styles:{header:{background:"var(--bg-container)",borderBottom:"1px solid var(--border-primary)",padding:"12px 20px"},body:{background:"var(--bg-base)",height:"calc(100vh - 160px)",overflow:"hidden",padding:0},mask:{background:"rgba(0,0,0,0.7)"},content:{background:"var(--bg-container)",border:"1px solid var(--border-primary)",borderRadius:8,padding:0}},centered:!0,children:jsxRuntimeExports.jsxs("div",{className:styles$6_teamModalLayout,children:[jsxRuntimeExports.jsxs("div",{className:styles$6_teamAgentCards,children:[jsxRuntimeExports.jsxs("div",{className:`${styles$6_teamAgentCard} ${styles$6_teamLeadCard}`,children:[jsxRuntimeExports.jsxs("div",{className:styles$6_teamAgentCardHeader,children:[(null==modelInfo?void 0:modelInfo.svg)?jsxRuntimeExports.jsx("div",{className:styles$6_teamAgentAvatar,style:{background:modelInfo.color||"var(--bg-model-avatar)"},dangerouslySetInnerHTML:{__html:modelInfo.svg}}):jsxRuntimeExports.jsx("img",{src:"/assets/default-model-avatar-DlbUPjyv.svg",className:styles$6_teamAgentAvatar,alt:"lead"}),jsxRuntimeExports.jsx("div",{className:styles$6_teamAgentName,children:"team-lead"})]}),jsxRuntimeExports.jsx("div",{className:styles$6_teamAgentType,children:"orchestrator"}),(()=>{const disp=deriveDisplayStatus(session,null),style=disp.colorVar?{color:disp.colorVar}:void 0;return jsxRuntimeExports.jsxs("div",{className:`${styles$6_teamAgentStatus} ${disp.className||""}`,style:style,children:[disp.glyph," ",t(disp.tooltipKey)]})})()]}),teamAgents.map((ag,i)=>{const isDone=!!ag.doneTime,durSec=Math.round(ag.duration/1e3),durStr=durSec>=60?`${Math.floor(durSec/60)}m${durSec%60}s`:`${durSec}s`,agentMessages=entries.filter(e=>"sub-agent"===e.type&&e.label&&e.label.includes(ag.name)),popContent=jsxRuntimeExports.jsxs("div",{className:styles$6_teamAgentPopover,children:[ag.teammateMessages&&ag.teammateMessages.length>0&&jsxRuntimeExports.jsx("div",{className:styles$6_teamAgentPopTeammateMsg,children:ag.teammateMessages.map((tm,ti)=>jsxRuntimeExports.jsxs("div",{children:[tm.summary&&jsxRuntimeExports.jsx("div",{className:styles$6_teamAgentPopTmSummary,children:tm.summary}),jsxRuntimeExports.jsx("div",{className:`${styles$6_teamAgentPopTmContent} chat-md`,dangerouslySetInnerHTML:{__html:renderMarkdown(tm.content.length>3e3?tm.content.slice(0,3e3)+"\n\n...":tm.content)}})]},ti))}),ag.taskSubject&&jsxRuntimeExports.jsx("div",{className:styles$6_teamAgentPopTask,children:ag.taskSubject}),agentMessages.length>0?agentMessages.map((msg,mi)=>{const texts=(msg.content||[]).filter(b=>"text"===b.type).map(b=>b.text).join("\n");return texts.trim()?jsxRuntimeExports.jsx("div",{className:`${styles$6_teamAgentPopMsg} chat-md`,dangerouslySetInnerHTML:{__html:renderMarkdown(texts.length>2e3?texts.slice(0,2e3)+"\n\n...":texts)}},mi):null}):jsxRuntimeExports.jsx("div",{className:styles$6_agentNoMessages,children:"No messages"})]});return jsxRuntimeExports.jsx(Popover,{content:popContent,trigger:"click",placement:"right",autoAdjustOverflow:!0,overlayInnerStyle:{background:"var(--bg-elevated)",border:"1px solid var(--border-light)",padding:0,maxWidth:800,maxHeight:"70vh",overflowY:"auto"},onOpenChange:open=>setActiveAgentCard(open?i:null),children:jsxRuntimeExports.jsxs("div",{className:`${styles$6_teamAgentCard} ${styles$6_teamAgentCardClickable} ${activeAgentCard===i?styles$6_teamAgentCardActive:""}`,children:[jsxRuntimeExports.jsxs("div",{className:styles$6_teamAgentCardHeader,children:[(()=>{const _a=getTeammateAvatar(ag.name);return jsxRuntimeExports.jsx("div",{className:styles$6_teamAgentAvatar,style:{background:_a.color},dangerouslySetInnerHTML:{__html:_a.svg}})})(),jsxRuntimeExports.jsx("div",{className:styles$6_teamAgentName,children:ag.name})]}),jsxRuntimeExports.jsx("div",{className:styles$6_teamAgentType,children:ag.type}),jsxRuntimeExports.jsxs("div",{className:styles$6_teamAgentStatus,style:{color:isDone?"var(--color-success)":"var(--color-warning-light)"},children:[isDone?"✓ done":"● working"," ",jsxRuntimeExports.jsxs("span",{className:styles$6_agentStatusDurSuffix,children:["· ",durStr]})]})]})},i)})]}),jsxRuntimeExports.jsxs("div",{className:styles$6_teamModalContent,children:[jsxRuntimeExports.jsx(TeamGantt,{teamAgents:teamAgents,teamTotalStart:teamTotalStart,teamTotalEnd:teamTotalEnd,leadSegments:leadSegments,ganttWrapRef:ganttWrapRef,ganttIndicatorRef:ganttIndicatorRef,ganttHeight:ganttHeight,onGanttHeightChange:setGanttHeight}),jsxRuntimeExports.jsxs("div",{className:styles$6_teamModalBody,ref:modalBodyRef,onScroll:onScroll,children:[entries.map((entry,i)=>jsxRuntimeExports.jsxs("div",{"data-timestamp":entry.timestamp,children:["user"===entry.type&&jsxRuntimeExports.jsx(ChatMessage,{role:"user",text:entry.text,timestamp:entry.timestamp,userProfile:userProfile,modelInfo:modelInfo,requestIndex:entry.requestIndex,onViewRequest:onViewRequest}),"assistant"===entry.type&&jsxRuntimeExports.jsx(ChatMessage,{role:"assistant",content:entry.content,timestamp:entry.timestamp,modelInfo:entry.modelInfo,collapseToolResults:collapseToolResults,expandThinking:expandThinking,toolResultMap:{},askAnswerMap:{},requestIndex:entry.requestIndex,onViewRequest:onViewRequest}),"sub-agent"===entry.type&&jsxRuntimeExports.jsx(ChatMessage,{role:"sub-agent-chat",content:entry.content,toolResultMap:entry.toolResultMap,label:entry.label,isTeammate:entry.isTeammate,timestamp:entry.timestamp,collapseToolResults:collapseToolResults,expandThinking:expandThinking,requestIndex:entry.requestIndex,onViewRequest:onViewRequest}),"context"===entry.type&&jsxRuntimeExports.jsx(ChatMessage,{role:"assistant",content:[{type:"text",text:entry.text}],timestamp:entry.timestamp,modelInfo:modelInfo,collapseToolResults:collapseToolResults,expandThinking:expandThinking,toolResultMap:{},askAnswerMap:{}}),"teammate-report"===entry.type&&jsxRuntimeExports.jsxs("div",{className:styles$6_teammateReportEntry,children:[jsxRuntimeExports.jsxs("div",{className:styles$6_teammateReportHeader,children:[(()=>{const _a=getTeammateAvatar(entry.agentName);return jsxRuntimeExports.jsx("div",{className:styles$6_teamAgentAvatar,style:{background:_a.color},dangerouslySetInnerHTML:{__html:_a.svg}})})(),jsxRuntimeExports.jsx("span",{className:styles$6_teammateReportName,children:entry.agentName}),jsxRuntimeExports.jsx("span",{className:styles$6_teammateReportSummary,children:entry.summary})]}),jsxRuntimeExports.jsx("div",{className:`${styles$6_teammateReportBody} chat-md`,dangerouslySetInnerHTML:{__html:renderMarkdown(entry.content)}})]})]},`tw-${i}`)),0===entries.length&&jsxRuntimeExports.jsx(Empty,{description:"No entries",image:Empty.PRESENTED_IMAGE_SIMPLE})]})]})]})})}const styles$5_snapLine="_snapLine_1qd8k_1",styles$5_snapLineActive="_snapLineActive_1qd8k_13",styles$5_snapPreview="_snapPreview_1qd8k_24";function SnapLineOverlay({isDragging:isDragging,activeSnapLine:activeSnapLine,snapLines:snapLines,currentLeft:currentLeft}){if(!isDragging)return null;let snapPreview2=null;if(activeSnapLine){const snapLeft=activeSnapLine.linePosition,left=Math.min(currentLeft,snapLeft),width=Math.abs(snapLeft-currentLeft);snapPreview2=jsxRuntimeExports.jsx("div",{className:styles$5_snapPreview,style:{left:`${left}px`,width:`${width}px`}})}const sorted=[...snapLines].map(snap=>({...snap,dist:Math.abs(snap.linePosition-currentLeft)})).sort((a,b)=>a.dist-b.dist);let snapLineEl=null;if(sorted.length>0){const snap=sorted[0],isActive=activeSnapLine&&activeSnapLine.cols===snap.cols;snapLineEl=jsxRuntimeExports.jsx("div",{className:isActive?styles$5_snapLineActive:styles$5_snapLine,style:{left:`${snap.linePosition}px`}},snap.cols)}return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[snapPreview2,snapLineEl]})}const styles$4_roleFilterBar="_roleFilterBar_122ad_1",styles$4_roleChip="_roleChip_122ad_12",styles$4_roleChipActive="_roleChipActive_122ad_12",styles$4_roleAvatar="_roleAvatar_122ad_33",styles$4_roleAvatarImg="_roleAvatarImg_122ad_47",styles$4_roleName="_roleName_122ad_54",styles$4_roleCheck="_roleCheck_122ad_59";function RoleFilterBar({roles:roles,selectedRoles:selectedRoles,onToggle:onToggle,style:style}){return roles&&0!==roles.length?jsxRuntimeExports.jsx("div",{className:styles$4_roleFilterBar,style:style,children:roles.map(r=>{const selected=selectedRoles.has(r.key);return jsxRuntimeExports.jsxs("button",{className:selected?styles$4_roleChipActive:styles$4_roleChip,onClick:()=>onToggle(r.key),children:[r.avatarImg?jsxRuntimeExports.jsx("img",{src:r.avatarImg,className:styles$4_roleAvatarImg,alt:r.name,onError:e=>{e.target.onerror=null,e.target.style.display="none";const d=e.target.parentNode.querySelector("[data-role-avatar-fallback]");d&&(d.style.display="")}}):null,jsxRuntimeExports.jsx("div",{className:styles$4_roleAvatar,style:{background:r.color||"rgba(255,255,255,0.1)",display:r.avatarImg?"none":""},"data-role-avatar-fallback":"",dangerouslySetInnerHTML:{__html:r.avatarSvg||getSvgAvatar(r.avatarType)}}),jsxRuntimeExports.jsx("span",{className:styles$4_roleName,children:r.name}),selected&&jsxRuntimeExports.jsx("span",{className:styles$4_roleCheck,children:"✓"})]},r.key)})}):null}const styles$3_chatInputBar="_chatInputBar_ri6yd_1",styles$3_chatInputWrapper="_chatInputWrapper_ri6yd_7",styles$3_chatTextareaWrap="_chatTextareaWrap_ri6yd_21",styles$3_chatTextarea="_chatTextarea_ri6yd_21",styles$3_chatInputBottom="_chatInputBottom_ri6yd_46",styles$3_plusArea="_plusArea_ri6yd_53",styles$3_plusBtn="_plusBtn_ri6yd_57",styles$3_micBtn="_micBtn_ri6yd_58",styles$3_plusBtnOpen="_plusBtnOpen_ri6yd_73",styles$3_micBtnRecording="_micBtnRecording_ri6yd_84",styles$3_interimPreview="_interimPreview_ri6yd_104",styles$3_plusOverlay="_plusOverlay_ri6yd_123",styles$3_plusMenu="_plusMenu_ri6yd_132",styles$3_plusMenuItem="_plusMenuItem_ri6yd_145",styles$3_plusMenuItemMuted="_plusMenuItemMuted_ri6yd_165",styles$3_presetLabel="_presetLabel_ri6yd_184",styles$3_chatInputHint="_chatInputHint_ri6yd_190",styles$3_sendBtn="_sendBtn_ri6yd_198",styles$3_sendBtnDisabled="_sendBtnDisabled_ri6yd_213",styles$3_ghostText="_ghostText_ri6yd_224",styles$3_suggestionChip="_suggestionChip_ri6yd_240",styles$3_suggestionChipText="_suggestionChipText_ri6yd_256",styles$3_suggestionChipAction="_suggestionChipAction_ri6yd_265",styles$3_imagePreviewStrip="_imagePreviewStrip_ri6yd_272",styles$3_imagePreviewItem="_imagePreviewItem_ri6yd_284",styles$3_imagePreviewThumb="_imagePreviewThumb_ri6yd_299",styles$3_imagePreviewRemove="_imagePreviewRemove_ri6yd_306",styles$3_filePreviewClose="_filePreviewClose_ri6yd_334",styles$3_filePreviewChip="_filePreviewChip_ri6yd_341",styles$3_filePreviewName="_filePreviewName_ri6yd_364",styles$3_streamingSpinner="_streamingSpinner_ri6yd_521",styles$3_sendBtnWrap="_sendBtnWrap_ri6yd_531",styles$3_streamingSvg="_streamingSvg_ri6yd_552",styles$3_streamingSpinnerFading="_streamingSpinnerFading_ri6yd_559",SpeechRec="undefined"!=typeof window&&window.isSecureContext?window.SpeechRecognition||window.webkitSpeechRecognition:null,SPEECH_LANG_MAP={zh:"zh-CN","zh-TW":"zh-TW",en:"en-US",ko:"ko-KR",ja:"ja-JP",de:"de-DE",es:"es-ES",fr:"fr-FR",it:"it-IT",da:"da-DK",pl:"pl-PL",ru:"ru-RU",ar:"ar-SA",no:"nb-NO","pt-BR":"pt-BR",th:"th-TH",tr:"tr-TR",uk:"uk-UA"};function ChatInputBar({inputRef:inputRef,inputEmpty:inputEmpty,inputSuggestion:inputSuggestion,terminalVisible:terminalVisible,onKeyDown:onKeyDown,onChange:onChange,onSend:onSend,onStop:onStop,onSuggestionClick:onSuggestionClick,onUploadPath:onUploadPath,presetItems:presetItems,onPresetSend:onPresetSend,onOpenPresetModal:onOpenPresetModal,onOpenUltraPlan:onOpenUltraPlan,onClearContext:onClearContext,isStreaming:isStreaming,streamingFading:streamingFading,pendingImages:pendingImages,onRemovePendingImage:onRemovePendingImage}){const[plusOpen,setPlusOpen]=reactExports.useState(!1),[recording,setRecording]=reactExports.useState(!1),[interimText,setInterimText]=reactExports.useState(""),[lightbox,setLightbox]=reactExports.useState(null),recRef=reactExports.useRef(null),anchorRef=reactExports.useRef({prefix:"",suffix:""}),rootRef=reactExports.useRef(null);reactExports.useEffect(()=>()=>{const rec=recRef.current;if(rec){rec.onend=null,rec.onresult=null,rec.onerror=null;try{rec.abort()}catch{}recRef.current=null}},[]),reactExports.useLayoutEffect(()=>{const el=rootRef.current;if(!el)return;const setVar=()=>{var _a;const rect=el.getBoundingClientRect(),vh=(null==(_a=window.visualViewport)?void 0:_a.height)??window.innerHeight,distFromBottom=Math.max(0,vh-rect.top);document.documentElement.style.setProperty("--chat-input-bar-height",distFromBottom+"px")};let ro;setVar(),"undefined"!=typeof ResizeObserver&&(ro=new ResizeObserver(setVar),ro.observe(el));const vv=window.visualViewport;return vv&&vv.addEventListener("resize",setVar),window.addEventListener("resize",setVar),()=>{ro&&ro.disconnect(),vv&&vv.removeEventListener("resize",setVar),window.removeEventListener("resize",setVar)}},[]),reactExports.useEffect(()=>{if(terminalVisible&&recRef.current)try{recRef.current.abort()}catch{}},[terminalVisible]);return terminalVisible?inputSuggestion?jsxRuntimeExports.jsxs("div",{className:styles$3_suggestionChip,onClick:onSuggestionClick,children:[jsxRuntimeExports.jsx("span",{className:styles$3_suggestionChipText,children:inputSuggestion}),jsxRuntimeExports.jsx("span",{className:styles$3_suggestionChipAction,children:"↵"})]}):null:jsxRuntimeExports.jsxs("div",{className:styles$3_chatInputBar,ref:rootRef,children:[jsxRuntimeExports.jsxs("div",{className:styles$3_chatInputWrapper,children:[jsxRuntimeExports.jsxs("div",{className:styles$3_chatTextareaWrap,children:[pendingImages&&pendingImages.length>0&&jsxRuntimeExports.jsx("div",{className:styles$3_imagePreviewStrip,children:pendingImages.map((img,i)=>{const fileName2=img.path.split("/").pop()||img.path,isImage=/\.(png|jpe?g|gif|svg|bmp|webp|avif|ico|icns)$/i.test(fileName2),src=apiUrl(`/api/file-raw?path=${encodeURIComponent(img.path)}`);return isImage?jsxRuntimeExports.jsxs("div",{className:styles$3_imagePreviewItem,children:[jsxRuntimeExports.jsx("img",{src:src,className:styles$3_imagePreviewThumb,alt:fileName2,role:"button",tabIndex:0,onClick:()=>setLightbox({src:src,alt:fileName2}),onKeyDown:e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),setLightbox({src:src,alt:fileName2}))}}),jsxRuntimeExports.jsx(ConfirmRemoveButton,{title:t("ui.chatInput.confirmRemoveImage"),onConfirm:()=>null==onRemovePendingImage?void 0:onRemovePendingImage(i),className:styles$3_imagePreviewRemove,ariaLabel:t("ui.chatInput.removeImage"),children:"×"})]},img.path):jsxRuntimeExports.jsxs("div",{className:styles$3_filePreviewChip,children:[jsxRuntimeExports.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),jsxRuntimeExports.jsx("polyline",{points:"14 2 14 8 20 8"})]}),jsxRuntimeExports.jsx("span",{className:styles$3_filePreviewName,children:fileName2}),jsxRuntimeExports.jsx(ConfirmRemoveButton,{title:t("ui.chatInput.confirmRemoveFile"),onConfirm:()=>null==onRemovePendingImage?void 0:onRemovePendingImage(i),className:styles$3_filePreviewClose,ariaLabel:t("ui.chatInput.removeImage"),children:"×"})]},img.path)})}),jsxRuntimeExports.jsx("textarea",{ref:inputRef,className:styles$3_chatTextarea,placeholder:inputSuggestion?"":t("ui.chatInput.placeholder"),rows:1,onKeyDown:onKeyDown,onInput:e=>{var _a,_b;if(recRef.current&&(null==(_a=e.nativeEvent)?void 0:_a.inputType)&&!(null==(_b=e.nativeEvent)?void 0:_b.isComposing))try{recRef.current.abort()}catch{}null==onChange||onChange(e)},onPaste:async e=>{var _a;const items=null==(_a=e.clipboardData)?void 0:_a.items;if(items)for(const item of items)if(item.type.startsWith("image/")){e.preventDefault();try{const file=item.getAsFile();if(!file)return;const path=await uploadFileAndGetPath(file);null==onUploadPath||onUploadPath(path)}catch(err){console.error("[CC Viewer] Paste image upload failed:",err)}return}}}),inputSuggestion&&inputEmpty&&jsxRuntimeExports.jsx("div",{className:styles$3_ghostText,children:inputSuggestion}),recording&&interimText&&jsxRuntimeExports.jsx("div",{className:styles$3_interimPreview,children:interimText})]}),jsxRuntimeExports.jsxs("div",{className:styles$3_chatInputBottom,children:[jsxRuntimeExports.jsxs("div",{className:styles$3_plusArea,children:[jsxRuntimeExports.jsx("button",{className:`${styles$3_plusBtn}${plusOpen?` ${styles$3_plusBtnOpen}`:""}`,onClick:()=>setPlusOpen(p=>!p),title:t("ui.chatInput.more"),children:jsxRuntimeExports.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),jsxRuntimeExports.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}),plusOpen&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("div",{className:styles$3_plusOverlay,onClick:()=>setPlusOpen(!1)}),jsxRuntimeExports.jsxs("div",{className:styles$3_plusMenu,children:[presetItems&&presetItems.length>0&&onOpenPresetModal&&jsxRuntimeExports.jsxs("button",{className:`${styles$3_plusMenuItem} ${styles$3_plusMenuItemMuted}`,onClick:()=>{setPlusOpen(!1),onOpenPresetModal()},children:[jsxRuntimeExports.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("circle",{cx:"12",cy:"12",r:"3"}),jsxRuntimeExports.jsx("path",{d:"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"})]}),jsxRuntimeExports.jsx("span",{className:styles$3_presetLabel,children:t("ui.terminal.customShortcuts")})]}),presetItems&&presetItems.length>0&&presetItems.map(item=>{const isBuiltinRaw=item.builtinId&&!item.modified,name=isBuiltinRaw?t(item.teamName):item.teamName,desc=isBuiltinRaw?t(item.description):item.description;return jsxRuntimeExports.jsxs("button",{className:styles$3_plusMenuItem,onClick:()=>{setPlusOpen(!1),null==onPresetSend||onPresetSend(desc)},title:desc,children:[jsxRuntimeExports.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("path",{d:"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"}),jsxRuntimeExports.jsx("circle",{cx:"9",cy:"7",r:"4"}),jsxRuntimeExports.jsx("path",{d:"M23 21v-2a4 4 0 0 0-3-3.87"}),jsxRuntimeExports.jsx("path",{d:"M16 3.13a4 4 0 0 1 0 7.75"})]}),jsxRuntimeExports.jsx("span",{className:styles$3_presetLabel,children:name||desc})]},item.id)}),onOpenUltraPlan&&jsxRuntimeExports.jsxs("button",{className:styles$3_plusMenuItem,onClick:()=>{setPlusOpen(!1),onOpenUltraPlan()},children:[jsxRuntimeExports.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("circle",{cx:"12",cy:"12",r:"2.5"}),jsxRuntimeExports.jsx("ellipse",{cx:"12",cy:"12",rx:"10",ry:"4"}),jsxRuntimeExports.jsx("ellipse",{cx:"12",cy:"12",rx:"10",ry:"4",transform:"rotate(60 12 12)"}),jsxRuntimeExports.jsx("ellipse",{cx:"12",cy:"12",rx:"10",ry:"4",transform:"rotate(120 12 12)"})]}),jsxRuntimeExports.jsx("span",{children:"UltraPlan"})]}),onClearContext&&jsxRuntimeExports.jsxs("button",{className:styles$3_plusMenuItem,onClick:()=>{setPlusOpen(!1),onClearContext()},children:[jsxRuntimeExports.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("path",{d:"M3 6h18"}),jsxRuntimeExports.jsx("path",{d:"M8 6V4h8v2"}),jsxRuntimeExports.jsx("path",{d:"M5 6v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6"}),jsxRuntimeExports.jsx("line",{x1:"10",y1:"11",x2:"10",y2:"17"}),jsxRuntimeExports.jsx("line",{x1:"14",y1:"11",x2:"14",y2:"17"})]}),jsxRuntimeExports.jsx("span",{children:t("ui.chatInput.clearContext")})]}),jsxRuntimeExports.jsxs("button",{className:styles$3_plusMenuItem,onClick:()=>{setPlusOpen(!1);const input=document.createElement("input");input.type="file",input.onchange=async e=>{var _a;const file=null==(_a=e.target.files)?void 0:_a[0];if(file)try{const path=await uploadFileAndGetPath(file);onUploadPath(path)}catch(err){console.error("[CC Viewer] Upload failed:",err)}},input.click()},children:[jsxRuntimeExports.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),jsxRuntimeExports.jsx("polyline",{points:"17 8 12 3 7 8"}),jsxRuntimeExports.jsx("line",{x1:"12",y1:"3",x2:"12",y2:"15"})]}),jsxRuntimeExports.jsx("span",{children:t("ui.terminal.upload")})]})]})]})]}),SpeechRec&&jsxRuntimeExports.jsx("button",{type:"button",className:`${styles$3_micBtn}${recording?` ${styles$3_micBtnRecording}`:""}`,onClick:()=>{recRef.current?(()=>{var _a;try{null==(_a=recRef.current)||_a.stop()}catch{}})():(()=>{if(!SpeechRec||recRef.current)return;const ta=null==inputRef?void 0:inputRef.current;if(!ta)return;const pos="number"==typeof ta.selectionStart?ta.selectionStart:ta.value.length;let rec;anchorRef.current={prefix:ta.value.slice(0,pos),suffix:ta.value.slice(pos)};try{rec=new SpeechRec}catch(err){return void console.error("[CC Viewer] SpeechRecognition init failed:",err)}rec.continuous=!0,rec.interimResults=!0,rec.lang=SPEECH_LANG_MAP[getLang()]||"en-US",rec.onresult=event=>{var _a;const t2=null==inputRef?void 0:inputRef.current;if(!t2)return;const{prefix:prefix2,suffix:suffix}=anchorRef.current;if(!t2.value.startsWith(prefix2)||!t2.value.endsWith(suffix)){try{rec.abort()}catch{}return}let interim="",finalAcc="";for(let i=0;i<event.results.length;i++){const r=event.results[i],transcript=(null==(_a=r[0])?void 0:_a.transcript)??"";r.isFinal?finalAcc+=transcript:interim+=transcript}t2.value=prefix2+finalAcc+suffix,t2.style.height="auto",t2.style.height=Math.min(t2.scrollHeight,120)+"px",setInterimText(interim),null==onChange||onChange({target:t2})},rec.onerror=event=>{if("not-allowed"===event.error||"service-not-allowed"===event.error)try{alert(t("ui.chatInput.voicePermissionDenied"))}catch{}else"no-speech"!==event.error&&"aborted"!==event.error&&console.error("[CC Viewer] SpeechRecognition error:",event.error)},rec.onend=()=>{setRecording(!1),setInterimText(""),recRef.current=null};try{rec.start(),recRef.current=rec,setRecording(!0)}catch(err){console.error("[CC Viewer] SpeechRecognition start failed:",err)}})()},title:t(recording?"ui.chatInput.voiceStop":"ui.chatInput.voiceStart"),"aria-label":t(recording?"ui.chatInput.voiceStop":"ui.chatInput.voiceStart"),"aria-pressed":recording,children:jsxRuntimeExports.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("path",{d:"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"}),jsxRuntimeExports.jsx("path",{d:"M19 10v2a7 7 0 0 1-14 0v-2"}),jsxRuntimeExports.jsx("line",{x1:"12",y1:"19",x2:"12",y2:"23"}),jsxRuntimeExports.jsx("line",{x1:"8",y1:"23",x2:"16",y2:"23"})]})}),jsxRuntimeExports.jsx("div",{className:styles$3_chatInputHint,children:isMobile&&!isPad?null:t(inputSuggestion&&inputEmpty?"ui.chatInput.hintTab":"ui.chatInput.hintEnter")}),jsxRuntimeExports.jsxs("div",{className:styles$3_sendBtnWrap,children:[(isStreaming||streamingFading)&&jsxRuntimeExports.jsx("div",{className:`${styles$3_streamingSpinner}${streamingFading?` ${styles$3_streamingSpinnerFading}`:""}`,"aria-hidden":"true",children:jsxRuntimeExports.jsxs("svg",{className:styles$3_streamingSvg,viewBox:"0 0 32 32",children:[jsxRuntimeExports.jsx("circle",{cx:"16",cy:"16",r:"15",pathLength:"100",fill:"none",strokeWidth:"1.5",stroke:"var(--color-primary-lighter)",strokeOpacity:"0.25",strokeLinecap:"round",strokeDasharray:"14 86",strokeDashoffset:"0"}),jsxRuntimeExports.jsx("circle",{cx:"16",cy:"16",r:"15",pathLength:"100",fill:"none",strokeWidth:"1.5",stroke:"var(--color-primary-lighter)",strokeOpacity:"0.55",strokeLinecap:"round",strokeDasharray:"7 93",strokeDashoffset:"-6"}),jsxRuntimeExports.jsx("circle",{cx:"16",cy:"16",r:"15",pathLength:"100",fill:"none",strokeWidth:"1.5",stroke:"var(--color-primary-lighter)",strokeOpacity:"1",strokeLinecap:"round",strokeDasharray:"3 97",strokeDashoffset:"-10"})]})}),isStreaming&&onStop?jsxRuntimeExports.jsx("button",{type:"button",className:styles$3_sendBtn,onClick:onStop,title:t("ui.chatInput.stop"),"aria-label":t("ui.chatInput.stop"),children:jsxRuntimeExports.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"currentColor","aria-hidden":"true",children:jsxRuntimeExports.jsx("rect",{x:"1",y:"1",width:"10",height:"10",rx:"1.5"})})}):jsxRuntimeExports.jsx("button",{type:"button",className:`${styles$3_sendBtn} ${inputEmpty&&!(null==pendingImages?void 0:pendingImages.length)?styles$3_sendBtnDisabled:""}`,onClick:onSend,disabled:inputEmpty&&!(null==pendingImages?void 0:pendingImages.length),title:t("ui.chatInput.send"),children:jsxRuntimeExports.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("line",{x1:"12",y1:"19",x2:"12",y2:"5"}),jsxRuntimeExports.jsx("polyline",{points:"5 12 12 5 19 12"})]})})]})]})]}),lightbox&&jsxRuntimeExports.jsx(ImageLightbox,{src:lightbox.src,alt:lightbox.alt,onClose:()=>setLightbox(null)})]})}function savePresets(items,dismissed){const payload={presetShortcuts:items.map(i=>{const o2={teamName:i.teamName,description:i.description};return i.builtinId&&(o2.builtinId=i.builtinId),i.modified&&(o2.modified=!0),o2})};dismissed&&(payload.dismissedBuiltinPresets=[...dismissed]),fetch(apiUrl("/api/preferences"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(payload)}).then(()=>{window.dispatchEvent(new Event("ccv-presets-changed"))}).catch(()=>{})}function PresetModal({open:open,onClose:onClose,items:items,onItemsChange:onItemsChange,dismissedBuiltinPresets:dismissedBuiltinPresets}){const[selected,setSelected]=reactExports.useState(new Set),[addVisible,setAddVisible]=reactExports.useState(!1),[addName,setAddName]=reactExports.useState(""),[addText,setAddText]=reactExports.useState(""),[editId,setEditId]=reactExports.useState(null),dragIdx=reactExports.useRef(null),dragOverIdx=reactExports.useRef(null),[,forceRender]=reactExports.useState(0),dismissed=reactExports.useRef(new Set(dismissedBuiltinPresets||[])),handleClose=reactExports.useCallback(()=>{setSelected(new Set),onClose()},[onClose]),handleToggle=reactExports.useCallback(id=>{setSelected(prev=>{const next=new Set(prev);return next.has(id)?next.delete(id):next.add(id),next})},[]),handleDelete=reactExports.useCallback(()=>{if(0===selected.size)return;const d=new Set(dismissed.current);for(const item of items)selected.has(item.id)&&item.builtinId&&d.add(item.builtinId);dismissed.current=d;const next=items.filter(i=>!selected.has(i.id));setSelected(new Set),onItemsChange(next),savePresets(next,d)},[items,selected,onItemsChange]),handleAdd=reactExports.useCallback(()=>{const description=addText.trim(),teamName=addName.trim();if(!description&&!teamName)return;let next;next=editId?items.map(i=>{if(i.id!==editId)return i;const updated={...i,teamName:teamName,description:description};return i.builtinId&&(updated.modified=!0),updated}):[...items,{id:Date.now(),teamName:teamName,description:description}],onItemsChange(next),savePresets(next),setAddVisible(!1),setAddName(""),setAddText(""),setEditId(null)},[items,addName,addText,editId,onItemsChange]),handleDragEnd=()=>{dragIdx.current=null,dragOverIdx.current=null,forceRender(n=>n+1)};return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs(Modal,{title:t("ui.terminal.presetShortcuts"),open:open,onCancel:handleClose,footer:null,width:800,styles:{content:{background:"var(--bg-elevated)",border:"1px solid var(--border-light)"},header:{background:"var(--bg-elevated)",borderBottom:"none"}},children:[jsxRuntimeExports.jsx("div",{className:styles$h_presetSectionHeader,children:jsxRuntimeExports.jsx("span",{className:styles$h_presetSectionTitle,children:t("ui.terminal.agentTeamCustom")})}),jsxRuntimeExports.jsx("div",{className:styles$h_presetList,onDragOver:e=>{e.preventDefault(),e.stopPropagation()},onDrop:e=>{e.preventDefault(),e.stopPropagation()},children:0===items.length?jsxRuntimeExports.jsx("div",{className:styles$h_presetListEmptyHint,children:"—"}):items.map((item,idx)=>{const isBuiltinRaw=item.builtinId&&!item.modified,name=isBuiltinRaw?t(item.teamName):item.teamName,desc=isBuiltinRaw?t(item.description):item.description;return jsxRuntimeExports.jsxs("div",{className:`${styles$h_presetRow} ${dragIdx.current===idx?styles$h_presetRowDragging:""} ${dragOverIdx.current===idx&&dragIdx.current!==idx?styles$h_presetRowDragOver:""}`,onDragOver:e=>((idx,e)=>{e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move",dragOverIdx.current!==idx&&(dragOverIdx.current=idx,forceRender(n=>n+1))})(idx,e),onDragLeave:e=>((idx,e)=>{e.stopPropagation(),dragOverIdx.current===idx&&(dragOverIdx.current=null,forceRender(n=>n+1))})(idx,e),onDrop:e=>((idx,e)=>{e.preventDefault(),e.stopPropagation();const from=dragIdx.current;if(null===from||from===idx)return void handleDragEnd();const arr=[...items],[moved]=arr.splice(from,1);arr.splice(from<idx?idx-1:idx,0,moved),onItemsChange(arr),savePresets(arr),handleDragEnd()})(idx,e),onDragEnd:handleDragEnd,children:[jsxRuntimeExports.jsx("span",{className:styles$h_dragHandle,draggable:!0,onDragStart:e=>((idx,e)=>{e.stopPropagation(),dragIdx.current=idx,e.dataTransfer.effectAllowed="move",requestAnimationFrame(()=>forceRender(n=>n+1))})(idx,e),children:jsxRuntimeExports.jsxs("svg",{viewBox:"0 0 10 16",width:"10",height:"16",fill:"currentColor",children:[jsxRuntimeExports.jsx("circle",{cx:"3",cy:"3",r:"1.2"}),jsxRuntimeExports.jsx("circle",{cx:"7",cy:"3",r:"1.2"}),jsxRuntimeExports.jsx("circle",{cx:"3",cy:"8",r:"1.2"}),jsxRuntimeExports.jsx("circle",{cx:"7",cy:"8",r:"1.2"}),jsxRuntimeExports.jsx("circle",{cx:"3",cy:"13",r:"1.2"}),jsxRuntimeExports.jsx("circle",{cx:"7",cy:"13",r:"1.2"})]})}),jsxRuntimeExports.jsx(Checkbox,{checked:selected.has(item.id),onChange:()=>handleToggle(item.id)}),jsxRuntimeExports.jsx("span",{className:styles$h_presetName,title:name,children:name||"—"}),jsxRuntimeExports.jsx("span",{className:styles$h_presetText,title:desc,children:desc}),jsxRuntimeExports.jsx(Button,{size:"small",type:"link",onClick:()=>{setAddVisible(!0),setAddName(isBuiltinRaw?t(item.teamName):item.teamName),setAddText(isBuiltinRaw?t(item.description):item.description),setEditId(item.id)},children:t("ui.terminal.editItem")})]},item.id)})}),jsxRuntimeExports.jsxs("div",{className:styles$h_presetActions,children:[jsxRuntimeExports.jsx(Button,{size:"small",danger:!0,disabled:0===selected.size,onClick:handleDelete,children:t("ui.terminal.deleteSelected")}),jsxRuntimeExports.jsx(Button,{size:"small",onClick:()=>{setAddVisible(!0),setAddName(""),setAddText(""),setEditId(null)},children:t("ui.terminal.addItem")})]})]}),jsxRuntimeExports.jsxs(Modal,{title:t(editId?"ui.terminal.editItem":"ui.terminal.addItem"),open:addVisible,onCancel:()=>{setAddVisible(!1),setAddName(""),setAddText(""),setEditId(null)},onOk:handleAdd,okText:t(editId?"ui.ok":"ui.terminal.addItem"),cancelText:t("ui.cancel"),okButtonProps:{disabled:!addText.trim()&&!addName.trim()},width:"fit-content",styles:{content:{background:"var(--bg-elevated)",border:"1px solid var(--border-light)"},header:{background:"var(--bg-elevated)",borderBottom:"none"}},children:[jsxRuntimeExports.jsxs("div",{className:styles$h_presetFormField,children:[jsxRuntimeExports.jsxs("label",{className:styles$h_presetFormLabel,children:["Team ",t("ui.terminal.teamName")]}),jsxRuntimeExports.jsx("input",{className:styles$h_presetInput,placeholder:t("ui.terminal.teamNamePlaceholder"),value:addName,onChange:e=>setAddName(e.target.value)})]}),jsxRuntimeExports.jsxs("div",{children:[jsxRuntimeExports.jsxs("label",{className:styles$h_presetFormLabel,children:["Team ",t("ui.terminal.teamDesc")]}),jsxRuntimeExports.jsx("textarea",{className:styles$h_presetTextarea,rows:6,placeholder:t("ui.terminal.presetInputPlaceholder"),value:addText,onChange:e=>setAddText(e.target.value),onKeyDown:e=>{"Enter"===e.key&&e.stopPropagation()}})]})]})]})}const styles$2_backdrop="_backdrop_1y1ni_1",styles$2_modal="_modal_1y1ni_11",styles$2_header="_header_1y1ni_23",styles$2_title="_title_1y1ni_30",styles$2_closeBtn="_closeBtn_1y1ni_36",styles$2_headerActions="_headerActions_1y1ni_54",styles$2_customWrap="_customWrap_1y1ni_60",styles$2_customTitle="_customTitle_1y1ni_66",styles$2_editPencil="_editPencil_1y1ni_73",styles$2_disabledTip="_disabledTip_1y1ni_104",styles$2_variantRow="_variantRow_1y1ni_111",styles$2_roleBtn="_roleBtn_1y1ni_119",styles$2_roleBtnActive="_roleBtnActive_1y1ni_141",styles$2_addExpertBtn="_addExpertBtn_1y1ni_151",styles$2_contextWarning="_contextWarning_1y1ni_174",styles$2_fileList="_fileList_1y1ni_185",styles$2_fileChip="_fileChip_1y1ni_192",styles$2_fileName="_fileName_1y1ni_215",styles$2_fileRemove="_fileRemove_1y1ni_222",styles$2_imageItem="_imageItem_1y1ni_232",styles$2_imageThumb="_imageThumb_1y1ni_246",styles$2_imageRemove="_imageRemove_1y1ni_253",styles$2_textarea="_textarea_1y1ni_285",styles$2_footer="_footer_1y1ni_309",styles$2_sendBtn="_sendBtn_1y1ni_316",styles$2_uploadBtn="_uploadBtn_1y1ni_338";function UltraPlanModal({open:open,variant:variant,prompt:prompt,files:files,modelName:modelName2,agentTeamEnabled:agentTeamEnabled,customExperts:customExperts,onClose:onClose,onVariantChange:onVariantChange,onPromptChange:onPromptChange,onSend:onSend,onUpload:onUpload,onPaste:onPaste,onRemoveFile:onRemoveFile,onOpenCustomEditor:onOpenCustomEditor}){const[lightbox,setLightbox]=reactExports.useState(null);if(!open)return null;const hasContent=(prompt||"").trim()||files.length>0,lowContext=!modelName2||getModelMaxTokens(modelName2)<1e6,experts=Array.isArray(customExperts)?customExperts:[];return jsxRuntimeExports.jsxs("div",{className:styles$2_backdrop,onClick:onClose,children:[jsxRuntimeExports.jsxs("div",{className:styles$2_modal,onClick:e=>e.stopPropagation(),children:[jsxRuntimeExports.jsxs("div",{className:styles$2_header,children:[jsxRuntimeExports.jsx("span",{className:styles$2_title,children:t("ui.ultraplan.title")}),jsxRuntimeExports.jsx("div",{className:styles$2_headerActions,children:jsxRuntimeExports.jsx("button",{className:styles$2_closeBtn,onClick:onClose,children:jsxRuntimeExports.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[jsxRuntimeExports.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),jsxRuntimeExports.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})})]}),agentTeamEnabled?jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs("div",{className:styles$2_variantRow,children:[jsxRuntimeExports.jsxs("button",{className:`${styles$2_roleBtn} ${"codeExpert"===variant?styles$2_roleBtnActive:""}`,onClick:()=>onVariantChange("codeExpert"),children:[jsxRuntimeExports.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("polyline",{points:"16 18 22 12 16 6"}),jsxRuntimeExports.jsx("polyline",{points:"8 6 2 12 8 18"})]}),t("ui.ultraplan.roleCodeExpert")]}),jsxRuntimeExports.jsxs("button",{className:`${styles$2_roleBtn} ${"researchExpert"===variant?styles$2_roleBtnActive:""}`,onClick:()=>onVariantChange("researchExpert"),children:[jsxRuntimeExports.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("circle",{cx:"11",cy:"11",r:"8"}),jsxRuntimeExports.jsx("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]}),t("ui.ultraplan.roleResearchExpert")]}),experts.map(item=>{const vkey="custom:"+item.id;return jsxRuntimeExports.jsxs("span",{className:styles$2_customWrap,children:[jsxRuntimeExports.jsxs("button",{className:`${styles$2_roleBtn} ${variant===vkey?styles$2_roleBtnActive:""}`,onClick:()=>onVariantChange(vkey),title:item.title,children:[jsxRuntimeExports.jsx("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntimeExports.jsx("path",{d:"M12 2l2.4 7.2L22 12l-7.6 2.8L12 22l-2.4-7.2L2 12l7.6-2.8z"})}),jsxRuntimeExports.jsx("span",{className:styles$2_customTitle,children:item.title})]}),onOpenCustomEditor&&jsxRuntimeExports.jsx("span",{className:styles$2_editPencil,onClick:e=>{e.stopPropagation(),onOpenCustomEditor(item)},title:t("ui.ultraplan.customEditTitle"),children:jsxRuntimeExports.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[jsxRuntimeExports.jsx("path",{d:"M12 20h9"}),jsxRuntimeExports.jsx("path",{d:"M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4z"})]})})]},item.id)}),onOpenCustomEditor&&jsxRuntimeExports.jsx("button",{type:"button",className:styles$2_addExpertBtn,onClick:()=>onOpenCustomEditor(null),title:t("ui.ultraplan.customAdd"),"aria-label":t("ui.ultraplan.customAdd"),children:jsxRuntimeExports.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:jsxRuntimeExports.jsx("path",{d:"M12 5v14M5 12h14"})})})]}),lowContext&&jsxRuntimeExports.jsx("div",{className:styles$2_contextWarning,children:t("ui.ultraplan.contextWarning")}),files.length>0&&jsxRuntimeExports.jsx("div",{className:styles$2_fileList,children:files.map((f,i)=>{const isImage=/\.(png|jpe?g|gif|svg|bmp|webp|avif|ico|icns)$/i.test(f.name),src=apiUrl(`/api/file-raw?path=${encodeURIComponent(f.path)}`);return isImage?jsxRuntimeExports.jsxs("div",{className:styles$2_imageItem,title:f.name,children:[jsxRuntimeExports.jsx("img",{src:src,className:styles$2_imageThumb,alt:f.name,role:"button",tabIndex:0,onClick:e=>{e.stopPropagation(),setLightbox({src:src,alt:f.name})},onKeyDown:e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),setLightbox({src:src,alt:f.name}))}}),jsxRuntimeExports.jsx(ConfirmRemoveButton,{title:t("ui.chatInput.confirmRemoveImage"),onConfirm:()=>onRemoveFile(i),className:styles$2_imageRemove,ariaLabel:t("ui.chatInput.removeImage"),children:"×"})]},i):jsxRuntimeExports.jsxs("span",{className:styles$2_fileChip,title:f.name,children:[jsxRuntimeExports.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[jsxRuntimeExports.jsx("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),jsxRuntimeExports.jsx("polyline",{points:"14 2 14 8 20 8"})]}),jsxRuntimeExports.jsx("span",{className:styles$2_fileName,children:f.name}),jsxRuntimeExports.jsx(ConfirmRemoveButton,{title:t("ui.chatInput.confirmRemoveFile"),onConfirm:()=>onRemoveFile(i),className:styles$2_fileRemove,ariaLabel:t("ui.chatInput.removeImage"),tag:"span",children:"×"})]},i)})}),jsxRuntimeExports.jsx("textarea",{className:styles$2_textarea,value:prompt,onChange:e=>onPromptChange(e.target.value),onKeyDown:e=>{"Enter"===e.key&&(e.metaKey||e.ctrlKey)&&hasContent&&(e.preventDefault(),onSend())},onPaste:onPaste,placeholder:t("ui.ultraplan.placeholder"),rows:5,autoFocus:!0}),jsxRuntimeExports.jsxs("div",{className:styles$2_footer,children:[jsxRuntimeExports.jsx("button",{className:styles$2_sendBtn,disabled:!hasContent,onClick:onSend,children:t("ui.ultraplan.send")}),jsxRuntimeExports.jsxs("button",{className:styles$2_uploadBtn,onClick:onUpload,children:[jsxRuntimeExports.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntimeExports.jsx("path",{d:"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"})}),t("ui.ultraplan.upload")]})]})]}):jsxRuntimeExports.jsx("div",{className:styles$2_disabledTip,children:t("ui.ultraplan.agentTeamRequired")})]}),lightbox&&jsxRuntimeExports.jsx(ImageLightbox,{src:lightbox.src,alt:lightbox.alt,zIndex:1150,onClose:()=>setLightbox(null)})]})}const SYSTEM_OPEN_EXTS=new Set(["doc","docx","xls","xlsx","ppt","pptx","odt","ods","odp","pdf"]);function tryOpenWithSystem(path,source2){const ext=(path||"").split(".").pop().toLowerCase();return!!SYSTEM_OPEN_EXTS.has(ext)&&(fetch(apiUrl("/api/open-file"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:path,source:source2})}).catch(()=>{}),!0)}const styles$1_centerEmpty="_centerEmpty_1jbag_1",styles$1_container="_container_1jbag_8",styles$1_mobileVirtuoso="_mobileVirtuoso_1jbag_19",styles$1_sessionDividerText="_sessionDividerText_1jbag_24",styles$1_lastResponseLabel="_lastResponseLabel_1jbag_29",styles$1_splitContainer="_splitContainer_1jbag_33",styles$1_chatSection="_chatSection_1jbag_40",styles$1_vResizer="_vResizer_1jbag_48",styles$1_terminalToggle="_terminalToggle_1jbag_62",styles$1_messageListWrap="_messageListWrap_1jbag_85",styles$1_stickyBottomBtn="_stickyBottomBtn_1jbag_93",styles$1_loadingPet="_loadingPet_1jbag_120",styles$1_loadMoreWrap="_loadMoreWrap_1jbag_154",styles$1_loadMoreBtn="_loadMoreBtn_1jbag_160",styles$1_navSidebar="_navSidebar_1jbag_176",styles$1_navBtn="_navBtn_1jbag_193",styles$1_navBtnActive="_navBtnActive_1jbag_213",styles$1_navAvatarImg="_navAvatarImg_1jbag_233",styles$1_userPromptNavList="_userPromptNavList_1jbag_240",styles$1_userPromptNavItem="_userPromptNavItem_1jbag_249",styles$1_terminalPanelWrap="_terminalPanelWrap_1jbag_269",styles$1_navSidebarContent="_navSidebarContent_1jbag_276",styles$1_innerSplitArea="_innerSplitArea_1jbag_284",styles$1_chatSectionFlex="_chatSectionFlex_1jbag_291",styles$1_inputStack="_inputStack_1jbag_301",styles$1_overlayPanel="_overlayPanel_1jbag_306",styles$1_streamingSpinnerWrap="_streamingSpinnerWrap_1jbag_314",styles$1_streamingSpinnerHidden="_streamingSpinnerHidden_1jbag_321",styles$1_sessionDivider="_sessionDivider_1jbag_24",styles$1_loadMoreBtnLoading="_loadMoreBtnLoading_1jbag_330",styles$1_loadMoreSpinner="_loadMoreSpinner_1jbag_338",styles$1_lastResponseDivider="_lastResponseDivider_1jbag_352",styles$1_hideLastResponseDivider="_hideLastResponseDivider_1jbag_365",{Text:Text}=Typography,useVirtuoso=isMobile&&!isIOS&&!isPad,EMPTY_OBJ={},EMPTY_MAP={},VirtuosoScroller=React.forwardRef((props,ref)=>jsxRuntimeExports.jsx("div",{ref:ref,...props,className:styles$1_container}));class ChatView extends React.Component{constructor(props){super(props),__publicField(this,"handleStickToBottom",()=>{this.setState({stickyBottom:!0},()=>{if(useVirtuoso&&this.virtuosoRef.current)this.virtuosoRef.current.scrollToIndex({index:"LAST",behavior:"smooth"});else{const el=this.containerRef.current;el&&(el.scrollTop=el.scrollHeight)}})}),__publicField(this,"_startSmoothStickyFollow",useVirtuoso2=>{const scroller=useVirtuoso2?this._virtuosoScrollerEl:this.containerRef.current;if(!scroller)return;this._stickyScrollLock=!0,this._smoothFollowRafId&&cancelAnimationFrame(this._smoothFollowRafId);const step=()=>{if(this._smoothFollowRafId=null,this._unmounted)return void(this._stickyScrollLock=!1);if(!this.state.stickyBottom)return void(this._stickyScrollLock=!1);const target=scroller.scrollHeight-scroller.clientHeight,current=scroller.scrollTop,gap=target-current;if(gap<=.5)return scroller.scrollTop=target,void(this._stickyScrollLock=!1);const delta=Math.max(1,Math.min(.35*gap,120));scroller.scrollTop=current+delta,this._smoothFollowRafId=requestAnimationFrame(step)};this._smoothFollowRafId=requestAnimationFrame(()=>{this._smoothFollowRafId=requestAnimationFrame(step)})}),__publicField(this,"_addPendingImage",(path,source2)=>{path&&this.setState(prev=>prev.pendingImages.length>=20||prev.pendingImages.some(img=>img.path===path)?null:{pendingImages:[...prev.pendingImages,{path:path,source:source2}]})}),__publicField(this,"_removePendingImage",index=>{this.setState(prev=>{const img=prev.pendingImages[index];if(!img)return null;const next=prev.pendingImages.filter((_,i)=>i!==index);return img.path&&this._inputWs&&this._inputWs.readyState===WebSocket.OPEN&&this._inputWs.send(JSON.stringify({type:"image-remove-notify",path:img.path})),{pendingImages:next}})}),__publicField(this,"_clearPendingImages",()=>{this.state.pendingImages.length>0&&this.setState({pendingImages:[]})}),__publicField(this,"handleLoadMore",()=>{var _a;this._mobileExtraItems+=100;const prevLen=(null==(_a=this.state.allItems)?void 0:_a.length)||0,rawItems=this.buildAllItems(),allItems=this._applyMobileSlice(rawItems),addedCount=allItems.length-prevLen;if(useVirtuoso&&this.virtuosoRef.current)this.setState({allItems:allItems,lastResponseItems:this._lastResponseItems,visibleCount:allItems.length},()=>{this.virtuosoRef.current&&addedCount>0&&this.virtuosoRef.current.scrollToIndex({index:addedCount,align:"start"})});else{const el=this.containerRef.current,prevScrollHeight=el?el.scrollHeight:0,prevScrollTop=el?el.scrollTop:0;this.setState({allItems:allItems,lastResponseItems:this._lastResponseItems,visibleCount:allItems.length},()=>{if(el){const newScrollHeight=el.scrollHeight;el.scrollTop=prevScrollTop+(newScrollHeight-prevScrollHeight)}})}}),__publicField(this,"handlePresetSend",description=>{if(!description)return;const textarea2=this._inputRef.current;textarea2&&(textarea2.value=description,textarea2.style.height="auto",textarea2.style.height=Math.min(textarea2.scrollHeight,isMobile&&!isPad?160:120)+"px",this.setState({inputEmpty:!1}),textarea2.focus())}),__publicField(this,"_handleUltraplanSend",()=>{const trimmed=this.state.ultraplanPrompt.trim();if(!trimmed&&0===this.state.ultraplanFiles.length)return;const filePaths=this.state.ultraplanFiles.map(f=>`"${f.path}"`).join(" "),userInput=filePaths?trimmed?`${filePaths} ${trimmed}`:filePaths:trimmed,variant=this.state.ultraplanVariant;let assembled;if("string"==typeof variant&&variant.startsWith("custom:")){const id=variant.slice(7),item=this.state.customUltraplanExperts.find(e=>e.id===id);if(!item)return;assembled=buildLocalUltraplan(userInput,"custom",0,item.content)}else assembled=buildLocalUltraplan(userInput,variant);if(!assembled)return;const textarea2=this._inputRef.current;textarea2&&(textarea2.value=assembled,textarea2.style.height="auto",textarea2.style.height=Math.min(textarea2.scrollHeight,120)+"px",this.setState({inputEmpty:!1,ultraplanModalOpen:!1,ultraplanPrompt:"",ultraplanVariant:"codeExpert",ultraplanFiles:[]},()=>{this.handleInputSend()}))}),__publicField(this,"_handleUltraplanUpload",()=>{const input=document.createElement("input");input.type="file",input.onchange=async e=>{var _a;const file=null==(_a=e.target.files)?void 0:_a[0];if(file)try{const path=await uploadFileAndGetPath(file);this.setState(prev=>({ultraplanFiles:[...prev.ultraplanFiles,{name:file.name,path:path}]}))}catch(err){console.error("Ultraplan upload failed:",err),staticMethods.error((null==err?void 0:err.message)||"Upload failed")}},input.click()}),__publicField(this,"_handleUltraplanPaste",async e=>{var _a;const items=null==(_a=e.clipboardData)?void 0:_a.items;if(items)for(const item of items)if(item.type.startsWith("image/")){e.preventDefault();const file=item.getAsFile();if(!file)return;try{const path=await uploadFileAndGetPath(file),name=file.name||`paste-${Date.now()}.png`;this.setState(prev=>({ultraplanFiles:[...prev.ultraplanFiles,{name:name,path:path}]}))}catch(err){console.error("Ultraplan paste upload failed:",err),staticMethods.error((null==err?void 0:err.message)||"Upload failed")}return}}),__publicField(this,"_handleUltraplanRemoveFile",idx=>{this.setState(prev=>({ultraplanFiles:prev.ultraplanFiles.filter((_,i)=>i!==idx)}))}),__publicField(this,"_openCustomUltraplanEditor",item=>{this.setState(prev=>({customUltraplanEditOpen:!0,customUltraplanEditing:item||null,_ultraplanWasOpenBeforeEdit:prev.ultraplanModalOpen,ultraplanModalOpen:!1}))}),__publicField(this,"_closeCustomUltraplanEditor",()=>{this.setState(prev=>({customUltraplanEditOpen:!1,customUltraplanEditing:null,ultraplanModalOpen:!!prev._ultraplanWasOpenBeforeEdit,_ultraplanWasOpenBeforeEdit:!1}))}),__publicField(this,"_persistCustomUltraplanExperts",experts=>{this.setState({customUltraplanExperts:experts}),fetch(apiUrl("/api/preferences"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({customUltraplanExperts:experts})}).then(()=>window.dispatchEvent(new Event("ccv-presets-changed"))).catch(()=>{})}),__publicField(this,"_saveCustomUltraplanExpert",item=>{const existing=this.state.customUltraplanExperts,next=existing.findIndex(e=>e.id===item.id)>=0?existing.map(e=>e.id===item.id?item:e):[...existing,item];this._persistCustomUltraplanExperts(next),this._closeCustomUltraplanEditor()}),__publicField(this,"_deleteCustomUltraplanExpert",id=>{const next=this.state.customUltraplanExperts.filter(e=>e.id!==id);this._persistCustomUltraplanExperts(next),this.state.ultraplanVariant==="custom:"+id&&this.setState({ultraplanVariant:"codeExpert"}),this._closeCustomUltraplanEditor()}),__publicField(this,"handlePromptOptionClick",number=>{if(this._promptSubmitting)return;const ws=this._inputWs;if(!ws||ws.readyState!==WebSocket.OPEN)return;let prompt=this.state.ptyPrompt;prompt||(prompt=this.state.ptyPromptHistory.slice().reverse().find(p=>"active"===p.status)||{options:Array.from({length:Math.max(number,3)},(_,i)=>({number:i+1,selected:0===i}))}),this._promptSubmitting=!0;const options=prompt.options,targetIdx=options.findIndex(o2=>o2.number===number);let currentIdx=options.findIndex(o2=>o2.selected);currentIdx<0&&(currentIdx=0);const diff=targetIdx-currentIdx,arrowKey=diff>0?"":"",steps=Math.abs(diff),sendStep=i=>{i<steps?(ws.send(JSON.stringify({type:"input",data:arrowKey})),setTimeout(()=>sendStep(i+1),30)):setTimeout(()=>{ws.readyState===WebSocket.OPEN&&ws.send(JSON.stringify({type:"input",data:"\r"}))},50)};sendStep(0),this._currentPtyPrompt=null,this.setState(state=>{const history=state.ptyPromptHistory.slice(),last=history[history.length-1];return last&&"active"===last.status&&(history[history.length-1]={...last,status:"answered",selectedNumber:number}),{ptyPrompt:null,ptyPromptHistory:history}}),this._ptyBuffer="",this._ptyDebounceTimer&&clearTimeout(this._ptyDebounceTimer),setTimeout(()=>{this._promptSubmitting=!1},500)}),__publicField(this,"_shiftPermissionQueue",()=>{this.setState(state=>({pendingPermission:state.permissionQueue[0]||null,permissionQueue:state.permissionQueue.slice(1)}))}),__publicField(this,"handlePermissionAllow",id=>{const perm=this.state.pendingPermission;if("pty"===(null==perm?void 0:perm.source)&&perm.ptyPrompt){const optNum=this._findPtyOptionNumber(perm.ptyPrompt,"allow");return this.handlePromptOptionClick(optNum),void this._shiftPermissionQueue()}const ws=this._inputWs;ws&&ws.readyState===WebSocket.OPEN&&ws.send(JSON.stringify({type:"perm-hook-answer",id:id,decision:"allow"})),this._shiftPermissionQueue()}),__publicField(this,"handlePermissionAllowSession",id=>{const perm=this.state.pendingPermission;if("pty"===(null==perm?void 0:perm.source)&&perm.ptyPrompt){const optNum=this._findPtyOptionNumber(perm.ptyPrompt,"allowSession");return this.handlePromptOptionClick(optNum),void this._shiftPermissionQueue()}const ws=this._inputWs;ws&&ws.readyState===WebSocket.OPEN&&ws.send(JSON.stringify({type:"perm-hook-answer",id:id,decision:"allow",allowSession:!0})),this._shiftPermissionQueue()}),__publicField(this,"handlePermissionDeny",id=>{const perm=this.state.pendingPermission;if("pty"===(null==perm?void 0:perm.source)&&perm.ptyPrompt){const optNum=this._findPtyOptionNumber(perm.ptyPrompt,"deny");return this.handlePromptOptionClick(optNum),void this._shiftPermissionQueue()}const ws=this._inputWs;ws&&ws.readyState===WebSocket.OPEN&&ws.send(JSON.stringify({type:"perm-hook-answer",id:id,decision:"deny"})),this._shiftPermissionQueue()}),__publicField(this,"handlePlanApprove",id=>{const ws=this._inputWs;ws&&ws.readyState===WebSocket.OPEN&&ws.send(JSON.stringify({type:"sdk-plan-answer",id:id,approve:!0})),this.setState({pendingPlanApproval:null})}),__publicField(this,"handlePlanReject",(id,feedback)=>{const ws=this._inputWs;ws&&ws.readyState===WebSocket.OPEN&&ws.send(JSON.stringify({type:"sdk-plan-answer",id:id,approve:!1,feedback:feedback||""})),this.setState({pendingPlanApproval:null})}),__publicField(this,"handlePlanFeedbackSubmit",(number,text)=>{const ws=this._inputWs;if(!ws||ws.readyState!==WebSocket.OPEN)return;let prompt=this.state.ptyPrompt;prompt||(prompt=this.state.ptyPromptHistory.slice().reverse().find(p=>"active"===p.status)||{options:Array.from({length:Math.max(number,3)},(_,i)=>({number:i+1,selected:0===i}))});const options=prompt.options,targetIdx=options.findIndex(o2=>o2.number===number);let currentIdx=options.findIndex(o2=>o2.selected);currentIdx<0&&(currentIdx=0);const diff=targetIdx-currentIdx,arrowKey=diff>0?"":"",steps=Math.abs(diff),sendStep=i=>{i<steps?(ws.send(JSON.stringify({type:"input",data:arrowKey})),setTimeout(()=>sendStep(i+1),30)):setTimeout(()=>{ws.send(JSON.stringify({type:"input",data:"\r"}));const startBuf=this._ptyBuffer;let attempts=0;const poll=()=>{attempts++,attempts>20||this._ptyBuffer!==startBuf?ws.readyState===WebSocket.OPEN&&(ws.send(JSON.stringify({type:"input",data:text})),setTimeout(()=>{ws.send(JSON.stringify({type:"input",data:"\r"}))},50)):setTimeout(poll,100)};setTimeout(poll,100)},50)};sendStep(0),this._currentPtyPrompt=null,this.setState(state=>{const history=state.ptyPromptHistory.slice(),last=history[history.length-1];return last&&"active"===last.status&&(history[history.length-1]={...last,status:"answered",selectedNumber:number}),{ptyPrompt:null,ptyPromptHistory:history}}),this._ptyBuffer="",this._ptyDebounceTimer&&clearTimeout(this._ptyDebounceTimer)}),__publicField(this,"handleAskQuestionSubmit",(answers,askId,questions)=>{var _a,_b;if(askId&&questions){const localAnswers={};for(const answer of answers){const q=questions[answer.questionIndex];if(q)if("other"===answer.type)localAnswers[q.question]=answer.text;else if("multi"===answer.type){const labels=answer.selectedIndices.map(i=>{var _a2;return null==(_a2=(q.options||[])[i])?void 0:_a2.label}).filter(Boolean);localAnswers[q.question]=labels.join(", ")}else localAnswers[q.question]=(null==(_a=(q.options||[])[answer.optionIndex])?void 0:_a.label)||""}this.setState(prev=>({localAskAnswers:{...prev.localAskAnswers||{},[askId]:localAnswers}}))}if(this.props.sdkMode){const resolvedId=askId||this._sdkAskId;if(!resolvedId)return;const ws=this._inputWs;if(ws&&ws.readyState===WebSocket.OPEN){const sdkAnswers={},qs=this._askHookQuestions||questions;for(const answer of answers){const q=null==qs?void 0:qs[answer.questionIndex];if(q)if("other"===answer.type)sdkAnswers[q.question]=answer.text;else if("multi"===answer.type){const labels=answer.selectedIndices.map(i=>{var _a2;return null==(_a2=(q.options||[])[i])?void 0:_a2.label}).filter(Boolean);sdkAnswers[q.question]=labels.join(", ")}else sdkAnswers[q.question]=(null==(_b=(q.options||[])[answer.optionIndex])?void 0:_b.label)||""}ws.send(JSON.stringify({type:"sdk-ask-answer",id:resolvedId,answers:sdkAnswers})),this._sdkAskId=null}return}if(!this._askHookActive||this._askSubmitting)return this._askHookActive||this._askSubmitting||!this._inputWs||this._inputWs.readyState!==WebSocket.OPEN?void this._submitViaPty(answers):(this._pendingHookAnswers=answers,this._askHookWaitRetries=0,this._askSubmitting=!0,void this._waitForHookBridge());this._submitViaHookBridge(answers)}),__publicField(this,"handleInputStop",()=>{this._inputWs&&this._inputWs.readyState===WebSocket.OPEN&&this._inputWs.send(JSON.stringify({type:"input",data:""}))}),__publicField(this,"handleInputSend",()=>{const textarea2=this._inputRef.current;if(!textarea2)return;const userText=textarea2.value.trim(),imagePaths=this.state.pendingImages.map(img=>`"${img.path.replace(/"/g,"")}"`).join(" "),text=imagePaths?userText?`${imagePaths} ${userText}`:imagePaths:userText;text&&this._inputWs&&this._inputWs.readyState===WebSocket.OPEN&&(this.props.sdkMode?this._inputWs.send(JSON.stringify({type:"sdk-user-message",text:text})):(this._inputWs.send(JSON.stringify({type:"input",data:text})),setTimeout(()=>{this._inputWs&&this._inputWs.readyState===WebSocket.OPEN&&this._inputWs.send(JSON.stringify({type:"input",data:"\r"}))},50)),textarea2.value="",textarea2.style.height="auto",this._clearPendingImages(),this.setState({inputEmpty:!0,pendingInput:userText||imagePaths,inputSuggestion:null},()=>this.scrollToBottom()))}),__publicField(this,"handleInputKeyDown",e=>{if("Tab"===e.key&&this.state.inputSuggestion){e.preventDefault();const textarea2=this._inputRef.current;return textarea2&&(textarea2.value=this.state.inputSuggestion,textarea2.style.height="auto",textarea2.style.height=Math.min(textarea2.scrollHeight,120)+"px"),void this.setState({inputSuggestion:null,inputEmpty:!1})}"Enter"!==e.key||e.shiftKey||e.isComposing||229===e.keyCode||(e.preventDefault(),this.handleInputSend())}),__publicField(this,"handleInputChange",e=>{const textarea2=e.target;textarea2.style.height="auto",textarea2.style.height=Math.min(textarea2.scrollHeight,120)+"px";const empty2=!textarea2.value.trim();this.setState({inputEmpty:empty2}),this.state.inputSuggestion&&!empty2&&this.setState({inputSuggestion:null})}),__publicField(this,"handleSuggestionToTerminal",()=>{const text=this.state.inputSuggestion;text&&this._inputWs&&this._inputWs.readyState===WebSocket.OPEN&&(this._inputWs.send(JSON.stringify({type:"input",data:text})),setTimeout(()=>{this._inputWs&&this._inputWs.readyState===WebSocket.OPEN&&this._inputWs.send(JSON.stringify({type:"input",data:"\r"}))},50),this.setState({inputSuggestion:null,pendingInput:text},()=>this.scrollToBottom()))}),__publicField(this,"handleUploadPath",path=>{this._addPendingImage(path,"chat"),this._inputWs&&this._inputWs.readyState===WebSocket.OPEN&&this._inputWs.send(JSON.stringify({type:"image-upload-notify",path:path,source:"chat"}))}),__publicField(this,"handleSplitMouseDown",e=>{e.preventDefault(),this._resizing=!0,this._dragTarget="terminal";let snapLines=[];const container2=this.innerSplitRef.current;if(container2){const containerWidth=container2.getBoundingClientRect().width,charWidth=7.8,resizerWidth=5;snapLines=[60,80,100,120].map(cols=>{const terminalPx=cols*charWidth,totalTerminalWidth=terminalPx+resizerWidth;if(totalTerminalWidth>.75*containerWidth||totalTerminalWidth<.15*containerWidth)return null;return{cols:cols,terminalPx:terminalPx,linePosition:containerWidth-terminalPx-resizerWidth}}).filter(snap=>null!==snap)}this.setState({isDragging:!0,snapLines:snapLines});const onMouseMove=ev=>{if(!this._resizing)return;const container22=this.innerSplitRef.current;if(!container22)return;const rect=container22.getBoundingClientRect(),containerWidth=rect.width;let tw=rect.right-ev.clientX;tw=Math.max(200,Math.min(.75*containerWidth,tw));let activeSnapLine=null;if(snapLines.length>0){const snapThreshold=60;let minDistance=1/0,closestSnap=null;for(const snap of snapLines){const distance=Math.abs(ev.clientX-rect.left-snap.linePosition);distance<minDistance&&(minDistance=distance,closestSnap=snap)}closestSnap&&minDistance<snapThreshold&&(activeSnapLine=closestSnap)}this.setState({terminalWidth:tw,activeSnapLine:activeSnapLine})},onMouseUp=()=>{if(this._resizing=!1,this._dragTarget=null,this.state.activeSnapLine){const newWidth=this.state.activeSnapLine.terminalPx;localStorage.setItem("cc-viewer-terminal-width",newWidth.toString()),this.setState({terminalWidth:newWidth,isDragging:!1,activeSnapLine:null,snapLines:[],needsInitialSnap:!1})}else localStorage.setItem("cc-viewer-terminal-width",this.state.terminalWidth.toString()),this.setState({isDragging:!1,activeSnapLine:null,snapLines:[],needsInitialSnap:!1});document.removeEventListener("mousemove",onMouseMove),document.removeEventListener("mouseup",onMouseUp),document.body.style.cursor="",document.body.style.userSelect=""};document.addEventListener("mousemove",onMouseMove),document.addEventListener("mouseup",onMouseUp),document.body.style.cursor="col-resize",document.body.style.userSelect="none"}),__publicField(this,"handleSidebarMouseDown",e=>{e.preventDefault(),this._resizing=!0,this._dragTarget="sidebar";const sidebarSnapWidths=[180,240,300,360],container2=this.innerSplitRef.current;let snapLines=[];if(container2){const containerWidth=container2.getBoundingClientRect().width;snapLines=sidebarSnapWidths.filter(w=>w<.4*containerWidth).map(w=>({cols:w,terminalPx:w,linePosition:w}))}this.setState({isDragging:!0,snapLines:snapLines});const onMouseMove=ev=>{if(!this._resizing)return;const container22=this.innerSplitRef.current;if(!container22)return;const rect=container22.getBoundingClientRect(),containerWidth=rect.width;let sw=ev.clientX-rect.left;sw=Math.max(160,Math.min(.4*containerWidth,sw));let activeSnapLine=null;if(snapLines.length>0){const snapThreshold=60;let minDistance=1/0,closestSnap=null;for(const snap of snapLines){const distance=Math.abs(sw-snap.linePosition);distance<minDistance&&(minDistance=distance,closestSnap=snap)}closestSnap&&minDistance<snapThreshold&&(activeSnapLine=closestSnap)}this.setState({sidebarWidth:sw,activeSnapLine:activeSnapLine})},onMouseUp=()=>{if(this._resizing=!1,this._dragTarget=null,this.state.activeSnapLine){const newWidth=this.state.activeSnapLine.linePosition;localStorage.setItem("cc-viewer-sidebar-width",newWidth.toString()),this.setState({sidebarWidth:newWidth,isDragging:!1,activeSnapLine:null,snapLines:[]})}else localStorage.setItem("cc-viewer-sidebar-width",this.state.sidebarWidth.toString()),this.setState({isDragging:!1,activeSnapLine:null,snapLines:[]});document.removeEventListener("mousemove",onMouseMove),document.removeEventListener("mouseup",onMouseUp),document.body.style.cursor="",document.body.style.userSelect=""};document.addEventListener("mousemove",onMouseMove),document.addEventListener("mouseup",onMouseUp),document.body.style.cursor="col-resize",document.body.style.userSelect="none"}),__publicField(this,"handleToggleExpandPath",path=>{this.setState(state=>{const newSet=new Set(state.fileExplorerExpandedPaths);return newSet.has(path)?newSet.delete(path):newSet.add(path),{fileExplorerExpandedPaths:newSet}})}),__publicField(this,"handleMdImageClick",e=>{const img=e.target.closest(".chat-md img");img&&img.src&&(e.preventDefault(),this.setState({mdLightboxSrc:img.src}))}),__publicField(this,"handleOpenToolFilePath",async filePath2=>{if(!filePath2)return;if(tryOpenWithSystem(filePath2,"chat-message"))return;let resolved=filePath2;if(filePath2.startsWith("/")){if(!this._projectDirCache)try{const r=await fetch(apiUrl("/api/project-dir"));if(r.ok){const data=await r.json();data&&data.dir&&(this._projectDirCache=data.dir)}}catch{}this._projectDirCache&&filePath2.startsWith(this._projectDirCache+"/")&&(resolved=filePath2.slice(this._projectDirCache.length+1))}const parts=resolved.split("/"),ancestors=[];for(let i=1;i<parts.length;i++)ancestors.push(parts.slice(0,i).join("/"));this.props.onMobileOpenFile?this.props.onMobileOpenFile(resolved,ancestors):(this._setFileExplorerOpen(!0),this.setState(prev=>{const newSet=new Set(prev.fileExplorerExpandedPaths);return ancestors.forEach(p=>newSet.add(p)),{currentFile:resolved,currentGitDiff:null,scrollToLine:null,fileExplorerExpandedPaths:newSet}}))}),__publicField(this,"_handleInsertPathToChat",filePath2=>{const quoted=`"${filePath2}"`;if(this.props.terminalVisible&&this._inputWs&&this._inputWs.readyState===WebSocket.OPEN)return void this._inputWs.send(JSON.stringify({type:"input",data:quoted}));const textarea2=this._inputRef.current;if(!textarea2)return;const cur=textarea2.value;textarea2.value=cur?`${cur} ${quoted}`:quoted,textarea2.style.height="auto",textarea2.style.height=Math.min(textarea2.scrollHeight,120)+"px",this.setState({inputEmpty:!1}),textarea2.focus()}),this.containerRef=React.createRef(),this.virtuosoRef=React.createRef(),this.splitContainerRef=React.createRef(),this.innerSplitRef=React.createRef(),this._incToolState=null,this._incToolProcessedCount=0,this._incToolSessionIdx=-1,this._prevSessions=null,this._reqScanCache={tsToIndex:{},modelName:null,completedModelName:null,modelNameByReqIdx:[],subAgentEntries:[],processedCount:0},this._sessionItemCache=[],this._itemCacheToggleSig=null;const savedWidth=localStorage.getItem("cc-viewer-terminal-width"),initialTerminalWidth=savedWidth?parseFloat(savedWidth):null;this.state={visibleCount:0,loading:!1,allItems:[],lastResponseItems:null,highlightTs:null,highlightFading:!1,highlightVisibleIdx:-1,sidebarWidth:parseInt(localStorage.getItem("cc-viewer-sidebar-width"),10)||240,terminalWidth:initialTerminalWidth||624,needsInitialSnap:null===initialTerminalWidth,inputEmpty:!0,pendingInput:null,stickyBottom:!0,ptyPrompt:null,ptyPromptHistory:[],inputSuggestion:null,fileExplorerOpen:isMobile?!!isPad&&"true"===localStorage.getItem("ccv_fileExplorerOpen"):"false"!==localStorage.getItem("ccv_fileExplorerOpen"),currentFile:null,currentGitDiff:null,scrollToLine:null,fileExplorerExpandedPaths:new Set,gitChangesOpen:!1,hasGit:!0,snapLines:[],activeSnapLine:null,isDragging:!1,fileVersion:0,editorSessionId:null,editorFilePath:null,fileExplorerRefresh:0,gitChangesRefresh:0,roleFilterOpen:!1,roleFilterSelected:new Set,teamModalSession:null,mdLightboxSrc:null,streamingFading:!1,presetItems:[],mobilePresetModalVisible:!1,localAskAnswers:{},pendingPermission:null,permissionQueue:[],pendingPlanApproval:null,pendingImages:[],agentTeamEnabled:!1,ultraplanModalOpen:!1,ultraplanVariant:"codeExpert",ultraplanPrompt:"",ultraplanFiles:[],customUltraplanExperts:[],customUltraplanEditOpen:!1,customUltraplanEditing:null},this._processedToolIds=new Set,this._projectDirCache=null,this._fileRefreshTimer=null,this._gitRefreshTimer=null,this._queueTimer=null,this._prevItemsLen=0,this._scrollTargetIdx=null,this._scrollTargetRef=React.createRef(),this._scrollFadeTimer=null,this._resizing=!1,this._dragTarget=null,this._inputWs=null,this._inputRef=React.createRef(),this._ptyBuffer="",this._ptyDataSeq=0,this._ptyDebounceTimer=null,this._currentPtyPrompt=null,this._askHookActive=!1,this._askHookQuestions=null,this._pendingHookAnswers=null,this._askHookWaitRetries=0,this._hookWaitTimer=null,this._mobileExtraItems=0,this._mobileSliceOffset=0,this._totalItemCount=0}_setFileExplorerOpen(open){localStorage.setItem("ccv_fileExplorerOpen",String(open)),this.setState({fileExplorerOpen:open})}_checkToolFileChanges(){var _a,_b;const sessions=this.props.mainAgentSessions;if(!sessions||0===sessions.length)return;this._processedToolIds.size>5e3&&this._processedToolIds.clear();let needFileRefresh=!1,needGitRefresh=!1,needContentRefresh=!1;for(const session of sessions){const sources=[];if((null==(_b=null==(_a=session.response)?void 0:_a.body)?void 0:_b.content)&&sources.push(session.response.body.content),Array.isArray(session.messages))for(const msg of session.messages)"assistant"===msg.role&&Array.isArray(msg.content)&&sources.push(msg.content);for(const blocks of sources)for(const block of blocks){if("tool_use"!==block.type||!block.id)continue;if(this._processedToolIds.has(block.id))continue;this._processedToolIds.add(block.id);const toolName2=block.name;let input=block.input;if("string"==typeof input)try{input=JSON.parse(input.replace(/^\[object Object\]/,""))}catch{input={}}if("Write"===toolName2?(needFileRefresh=!0,needGitRefresh=!0):"Edit"===toolName2||"NotebookEdit"===toolName2?needGitRefresh=!0:"Bash"===toolName2&&input&&input.command&&isMutatingCommand(input.command)&&(needFileRefresh=!0,needGitRefresh=!0),("Write"===toolName2||"Edit"===toolName2||"NotebookEdit"===toolName2)&&this.state.currentFile){const fp=input&&input.file_path;if(fp){let rel=fp;rel.startsWith("/")&&this._projectDirCache&&rel.startsWith(this._projectDirCache+"/")&&(rel=rel.slice(this._projectDirCache.length+1)),(rel===this.state.currentFile||rel.startsWith("/")&&rel.endsWith("/"+this.state.currentFile))&&(needContentRefresh=!0)}}}}needFileRefresh&&this.state.fileExplorerOpen&&(clearTimeout(this._fileRefreshTimer),this._fileRefreshTimer=setTimeout(()=>{this.setState(prev=>({fileExplorerRefresh:prev.fileExplorerRefresh+1}))},500)),needGitRefresh&&this.state.gitChangesOpen&&(clearTimeout(this._gitRefreshTimer),this._gitRefreshTimer=setTimeout(()=>{this.setState(prev=>({gitChangesRefresh:prev.gitChangesRefresh+1}))},500)),needContentRefresh&&(clearTimeout(this._contentRefreshTimer),this._contentRefreshTimer=setTimeout(()=>{this.setState(prev=>({fileVersion:prev.fileVersion+1}))},500))}componentDidMount(){this.startRender(),this.props.cliMode&&this.connectInputWs(),fetch(apiUrl("/api/git-repos")).then(r=>r.ok?r.json():Promise.reject()).then(data=>{var _a;(null==(_a=data.repos)?void 0:_a.length)||this.setState({hasGit:!1,gitChangesOpen:!1})}).catch(()=>{fetch(apiUrl("/api/git-status")).then(r=>{r.ok||this.setState({hasGit:!1,gitChangesOpen:!1})}).catch(()=>this.setState({hasGit:!1,gitChangesOpen:!1}))}),fetch(apiUrl("/api/claude-settings")).then(r=>r.ok?r.json():null).then(data=>{var _a;"1"===(null==(_a=null==data?void 0:data.env)?void 0:_a.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS)&&this.setState({agentTeamEnabled:!0})}).catch(()=>{}),useVirtuoso||this._bindStickyScroll(),this.state.needsInitialSnap&&this.props.cliMode&&this.props.terminalVisible&&this._snapToInitialPosition(),this._loadPresets(),this._onPresetsChanged=()=>this._loadPresets(),window.addEventListener("ccv-presets-changed",this._onPresetsChanged)}shouldComponentUpdate(nextProps,nextState){return nextProps.requests!==this.props.requests||nextProps.mainAgentSessions!==this.props.mainAgentSessions||nextProps.streamingLatest!==this.props.streamingLatest||nextProps.collapseToolResults!==this.props.collapseToolResults||nextProps.expandThinking!==this.props.expandThinking||nextProps.showFullToolContent!==this.props.showFullToolContent||nextProps.scrollToTimestamp!==this.props.scrollToTimestamp||nextProps.cliMode!==this.props.cliMode||nextProps.terminalVisible!==this.props.terminalVisible||nextProps.userProfile!==this.props.userProfile||nextProps.pendingUploadPaths!==this.props.pendingUploadPaths||nextProps.isStreaming!==this.props.isStreaming||nextProps.hasMoreHistory!==this.props.hasMoreHistory||nextProps.loadingMore!==this.props.loadingMore||nextProps.loadingSessionId!==this.props.loadingSessionId||nextProps.lang!==this.props.lang||nextProps.showThinkingSummaries!==this.props.showThinkingSummaries||nextProps.fileLoading!==this.props.fileLoading||nextState!==this.state}componentDidUpdate(prevProps,prevState){var _a;if(prevState.pendingPermission!==this.state.pendingPermission&&this.props.onPendingPermission&&(this.state.pendingPermission?this.props.onPendingPermission({permission:this.state.pendingPermission,modelName:null==(_a=this._reqScanCache)?void 0:_a.modelName,handlers:{allow:this.handlePermissionAllow,allowSession:this.props.sdkMode?this.handlePermissionAllowSession:null,deny:this.handlePermissionDeny}}):this.props.onPendingPermission(null)),prevState.pendingPlanApproval!==this.state.pendingPlanApproval&&this.props.onPendingPlanApproval&&(this.state.pendingPlanApproval?this.props.onPendingPlanApproval({plan:this.state.pendingPlanApproval,handlers:{approve:this.handlePlanApprove,reject:this.handlePlanReject}}):this.props.onPendingPlanApproval(null)),useVirtuoso&&prevState.lastResponseItems!==this.state.lastResponseItems&&this.state.stickyBottom&&this._startSmoothStickyFollow(!0),prevProps.streamingLatest!==this.props.streamingLatest&&this.state.stickyBottom&&this._startSmoothStickyFollow(useVirtuoso),prevProps.isStreaming&&!this.props.isStreaming&&(this.setState({streamingFading:!0}),clearTimeout(this._streamingFadeTimer),this._streamingFadeTimer=setTimeout(()=>{this.setState({streamingFading:!1})},500)),!prevProps.isStreaming&&this.props.isStreaming&&this.state.streamingFading&&(clearTimeout(this._streamingFadeTimer),this.setState({streamingFading:!1})),this.props.pendingUploadPaths&&this.props.pendingUploadPaths.length>0&&this.props.pendingUploadPaths!==prevProps.pendingUploadPaths){for(const p of this.props.pendingUploadPaths){const raw=p.replace(/^"|"$/g,"");this._addPendingImage(raw,"drop")}this.props.onUploadPathsConsumed&&this.props.onUploadPathsConsumed()}if(prevProps.mainAgentSessions!==this.props.mainAgentSessions){if(this.props.mainAgentSessions!==this._prevSessions){const prev=this._prevSessions||[],next=this.props.mainAgentSessions||[];(prev.length!==next.length||prev.some((s,i)=>s!==next[i]))&&(this._incToolState=null,this._incToolProcessedCount=0,this._incToolSessionIdx=-1,this._reqScanCache={tsToIndex:{},modelName:null,completedModelName:null,modelNameByReqIdx:[],subAgentEntries:[],processedCount:0,subAgentProcessedCount:0},this._sessionItemCache=[]),this._prevSessions=this.props.mainAgentSessions}isMobile&&(this._mobileExtraItems=0),this.startRender(),this.state.pendingInput&&this.setState({pendingInput:null}),this._clearPendingImages(),this._updateSuggestion(),this._checkToolFileChanges()}else if(prevProps.requests!==this.props.requests)this._reqScanCache.tsToIndex={},this._reqScanCache.modelName=null,this._reqScanCache.completedModelName=null,this._reqScanCache.modelNameByReqIdx=[],this._reqScanCache.processedCount=0,this._reqScanCache.subAgentEntries=[],this._reqScanCache.subAgentProcessedCount=0,this.startRender();else if(prevProps.collapseToolResults!==this.props.collapseToolResults||prevProps.expandThinking!==this.props.expandThinking){const rawItems=this.buildAllItems(),allItems=this._applyMobileSlice(rawItems);this.setState({allItems:allItems,lastResponseItems:this._lastResponseItems,visibleCount:allItems.length})}if(prevState.localAskAnswers!==this.state.localAskAnswers&&prevProps.mainAgentSessions===this.props.mainAgentSessions&&prevProps.requests===this.props.requests&&this.startRender(),!prevProps.scrollToTimestamp&&this.props.scrollToTimestamp)if(isMobile&&this.props.scrollToTimestamp){const rawItems=this.buildAllItems(),targetIdx=this._scrollTargetIdx;if(null!=targetIdx){const mobileLimit=isIOS?150:240,limit=mobileLimit+this._mobileExtraItems;targetIdx<(rawItems.length>limit?rawItems.length-limit:0)&&(this._mobileExtraItems=rawItems.length-targetIdx-mobileLimit,this._mobileExtraItems<0&&(this._mobileExtraItems=0))}const allItems=this._applyMobileSlice(rawItems);this.setState({allItems:allItems,lastResponseItems:this._lastResponseItems,visibleCount:allItems.length},()=>this.scrollToBottom())}else{const rawItems=this.buildAllItems(),allItems=this._applyMobileSlice(rawItems);this.setState({allItems:allItems,lastResponseItems:this._lastResponseItems,visibleCount:allItems.length},()=>this.scrollToBottom())}isMobile&&this.props.mobileChatVisible&&!prevProps.mobileChatVisible&&requestAnimationFrame(()=>{if(this.virtuosoRef.current)this.virtuosoRef.current.scrollToIndex({index:"LAST"});else{const el=this.containerRef.current;el&&(el.scrollTop=el.scrollHeight)}}),!prevProps.cliMode&&this.props.cliMode&&this.connectInputWs(),useVirtuoso||this._rebindStickyEl()}componentWillUnmount(){this._unmounted=!0,window.removeEventListener("ccv-presets-changed",this._onPresetsChanged),this.props.onPendingPermission&&this.props.onPendingPermission(null),this.props.onPendingPlanApproval&&this.props.onPendingPlanApproval(null),this._queueTimer&&clearTimeout(this._queueTimer),this._fadeClearTimer&&clearTimeout(this._fadeClearTimer),this._ptyDebounceTimer&&clearTimeout(this._ptyDebounceTimer),this._fileRefreshTimer&&clearTimeout(this._fileRefreshTimer),this._gitRefreshTimer&&clearTimeout(this._gitRefreshTimer),this._contentRefreshTimer&&clearTimeout(this._contentRefreshTimer),this._wsReconnectTimer&&clearTimeout(this._wsReconnectTimer),this._waitForWsTimer&&clearTimeout(this._waitForWsTimer),this._waitForPtyTimer&&clearTimeout(this._waitForPtyTimer),this._planFeedbackTimer&&clearTimeout(this._planFeedbackTimer),this._streamingFadeTimer&&clearTimeout(this._streamingFadeTimer),this._hookWaitTimer&&clearTimeout(this._hookWaitTimer),this._pendingHookAnswers=null,this._unbindScrollFade(),useVirtuoso||this._unbindStickyScroll(),this._smoothFollowRafId&&(cancelAnimationFrame(this._smoothFollowRafId),this._smoothFollowRafId=null),this._inputWs&&(this._inputWs.close(),this._inputWs=null)}startRender(){this._queueTimer&&clearTimeout(this._queueTimer);const wasSticky=this.state.stickyBottom;this._stickyScrollLock=!0;const rawItems=this.buildAllItems(),lastResponseItems=this._lastResponseItems,allItems=this._applyMobileSlice(rawItems);this._prevItemsLen=allItems.length,this.setState({allItems:allItems,lastResponseItems:lastResponseItems,visibleCount:allItems.length,loading:!1},()=>{this.scrollToBottom(wasSticky),requestAnimationFrame(()=>{this._stickyScrollLock=!1})})}queueNext(current,total){current>=total||(this._queueTimer=setTimeout(()=>{this.setState({visibleCount:current+1},()=>{this.scrollToBottom(),this.queueNext(current+1,total)})},100+50*Math.random()))}_isNearBottom(){const el=this.containerRef.current;return!el||el.scrollHeight-el.scrollTop-el.clientHeight<=30}scrollToBottom(stickyOverride){const shouldStick=null!=stickyOverride?stickyOverride:this.state.stickyBottom;if(useVirtuoso&&this.virtuosoRef.current){if(null!=this._scrollTargetIdx){this.virtuosoRef.current.scrollToIndex({index:this._scrollTargetIdx,align:"center"});const targetTs=this.props.scrollToTimestamp;return this._scrollTargetRef=React.createRef(),targetTs&&(this.setState({highlightTs:targetTs,highlightFading:!1}),this._bindScrollFade()),void(this.props.onScrollTsDone&&this.props.onScrollTsDone())}if(shouldStick){const scroller=this._virtuosoScrollerEl;scroller?scroller.scrollTop=scroller.scrollHeight:this.virtuosoRef.current.scrollToIndex({index:"LAST",behavior:"auto"})}}else{if(this._scrollTargetRef.current&&this.props.scrollToTimestamp){const targetEl=this._scrollTargetRef.current,container2=this.containerRef.current;container2&&targetEl.offsetHeight>container2.clientHeight?targetEl.scrollIntoView({block:"start",behavior:"instant"}):targetEl.scrollIntoView({block:"center",behavior:"instant"});const targetTs=this.props.scrollToTimestamp;return this._scrollTargetRef=React.createRef(),targetTs&&(this.setState({highlightTs:targetTs,highlightFading:!1}),this._bindScrollFade()),void(this.props.onScrollTsDone&&this.props.onScrollTsDone())}if(shouldStick){const el=this.containerRef.current;el&&(el.scrollTop=el.scrollHeight)}}}_bindStickyScroll(){this._stickyScrollRafId=null,this._onStickyScroll=()=>{this._stickyScrollLock||this._stickyScrollRafId||(this._stickyScrollRafId=requestAnimationFrame(()=>{this._stickyScrollRafId=null;const el=this.containerRef.current;if(!el)return;const gap=el.scrollHeight-el.scrollTop-el.clientHeight;this.state.stickyBottom&&gap>50?this.setState({stickyBottom:!1}):!this.state.stickyBottom&&gap<=10&&this.setState({stickyBottom:!0})}))},this._rebindStickyEl()}_rebindStickyEl(){const el=this.containerRef.current;el!==this._stickyBoundEl&&(this._stickyBoundEl&&this._stickyBoundEl.removeEventListener("scroll",this._onStickyScroll),this._stickyBoundEl=el,el&&el.addEventListener("scroll",this._onStickyScroll,{passive:!0}))}_unbindStickyScroll(){this._stickyBoundEl&&this._onStickyScroll&&(this._stickyBoundEl.removeEventListener("scroll",this._onStickyScroll),this._stickyBoundEl=null),this._stickyScrollRafId&&(cancelAnimationFrame(this._stickyScrollRafId),this._stickyScrollRafId=null)}_getScrollContainer(){return useVirtuoso?this._virtuosoScrollerEl:this.containerRef.current}_bindScrollFade(){this._unbindScrollFade(),this._scrollFadeDelayTimer=setTimeout(()=>{const container2=this._getScrollContainer();container2&&(this._scrollFadeBoundEl=container2,this._onScrollFade=()=>{this.setState({highlightFading:!0}),this._fadeClearTimer=setTimeout(()=>{this.setState({highlightTs:null,highlightFading:!1,highlightVisibleIdx:-1})},2e3),this._unbindScrollFade()},container2.addEventListener("scroll",this._onScrollFade,{passive:!0}))},500)}_unbindScrollFade(){this._scrollFadeDelayTimer&&(clearTimeout(this._scrollFadeDelayTimer),this._scrollFadeDelayTimer=null),this._fadeClearTimer&&(clearTimeout(this._fadeClearTimer),this._fadeClearTimer=null),this._onScrollFade&&this._scrollFadeBoundEl&&(this._scrollFadeBoundEl.removeEventListener("scroll",this._onScrollFade),this._scrollFadeBoundEl=null,this._onScrollFade=null)}renderSessionMessages(messages,keyPrefix,resolveModelInfo,tsToIndex,startIdx=0){var _a;const{userProfile:userProfile,collapseToolResults:collapseToolResults,expandThinking:expandThinking,showFullToolContent:showFullToolContent,showThinkingSummaries:showThinkingSummaries,onViewRequest:onViewRequest}=this.props;let cached=getToolResultCache(messages);if(cached&&messages.length>this._incToolProcessedCount&&(appendToolResultMap(cached,messages,this._incToolProcessedCount),this._incToolProcessedCount=messages.length),!cached){const si=parseInt(keyPrefix.slice(1),10);this._incToolSessionIdx===si&&messages.length>=this._incToolProcessedCount&&this._incToolProcessedCount>0?appendToolResultMap(this._incToolState,messages,this._incToolProcessedCount):(this._incToolState={toolUseMap:{},toolResultMap:{},readContentMap:{},editSnapshotMap:{},askAnswerMap:{},planApprovalMap:{},latestPlanContent:null,_fileState:{},_editOrder:[]},appendToolResultMap(this._incToolState,messages,0),this._incToolSessionIdx=si),this._incToolProcessedCount=messages.length,cached=this._incToolState,function(messages,state){_toolResultCache.set(messages,state)}(messages,cached)}const{toolUseMap:toolUseMap,toolResultMap:toolResultMap,readContentMap:readContentMap,editSnapshotMap:editSnapshotMap,askAnswerMap:askAnswerMap,latestPlanContent:latestPlanContent}=cached,_planDirty=cached._planDirty||0;this._prevPlanCache===cached.planApprovalMap&&this._prevPlanDirty===_planDirty||(this._mergedPlanApprovalMap={...cached.planApprovalMap},this._prevPlanCache=cached.planApprovalMap,this._prevPlanDirty=_planDirty);const planApprovalMap=this._mergedPlanApprovalMap||cached.planApprovalMap,activePlanPrompt=this.props.cliMode&&this.state.ptyPromptHistory.slice().reverse().find(p=>isPlanApprovalPrompt(p)&&"active"===p.status)||null,activeDangerousPrompt=this.props.cliMode&&"pty"!==(null==(_a=this.state.pendingPermission)?void 0:_a.source)&&this.state.ptyPromptHistory.slice().reverse().find(p=>isDangerousOperationPrompt(p)&&"active"===p.status)||null;let lastPendingPlanId=null,lastPendingAskId=null;const historyAskIds=new Set,_localAsk=this.state.localAskAnswers||{},_askDirty=(null==cached?void 0:cached._askDirty)||0;this._prevAskCache===askAnswerMap&&this._prevLocalAsk===_localAsk&&this._prevAskDirty===_askDirty||(this._mergedAskAnswerMap=Object.keys(_localAsk).length>0?{...askAnswerMap,..._localAsk}:askAnswerMap,this._prevAskCache=askAnswerMap,this._prevLocalAsk=_localAsk,this._prevAskDirty=_askDirty);const mergedAskAnswerMap=this._mergedAskAnswerMap;for(const msg of messages)if("assistant"===msg.role&&Array.isArray(msg.content))for(const block of msg.content){if("tool_use"===block.type&&"ExitPlanMode"===block.name){const approval=planApprovalMap[block.id];approval&&"pending"!==approval.status||(lastPendingPlanId=block.id)}if("tool_use"===block.type&&"AskUserQuestion"===block.name){historyAskIds.add(block.id);const answers=mergedAskAnswerMap[block.id];answers&&0!==Object.keys(answers).length||(lastPendingAskId=block.id)}}const renderedMessages=[];for(let mi=startIdx;mi<messages.length;mi++){const msg=messages[mi],content2=msg.content,ts=msg._timestamp||null,reqIdx=ts?tsToIndex[ts]:void 0,viewReqProps=null!=reqIdx&&onViewRequest?{requestIndex:reqIdx,onViewRequest:onViewRequest}:EMPTY_OBJ,modelInfo=resolveModelInfo(ts);if("user"===msg.role){if(Array.isArray(content2)){const suggestionText=content2.find(b=>"text"===b.type&&/^\[SUGGESTION MODE:/i.test((b.text||"").trim())),toolResults=content2.filter(b=>"tool_result"===b.type);if(suggestionText&&toolResults.length>0);else{const{commands:commands,textBlocks:textBlocks,skillBlocks:skillBlocks,teammateBlocks:teammateBlocks,taskNotificationBlocks:taskNotificationBlocks}=classifyUserContent(content2);for(let ci=0;ci<commands.length;ci++)renderedMessages.push(jsxRuntimeExports.jsx(ChatMessage,{role:"user",text:commands[ci],timestamp:ts,userProfile:userProfile,modelInfo:modelInfo,...viewReqProps},`${keyPrefix}-cmd-${mi}-${ci}`));for(const sb of skillBlocks){const nameMatch=sb.text.match(/^#\s+(.+)$/m),skillName=nameMatch?nameMatch[1]:"Skill";renderedMessages.push(jsxRuntimeExports.jsx(ChatMessage,{role:"skill-loaded",text:sb.text,skillName:skillName,timestamp:ts,...viewReqProps},`${keyPrefix}-skill-${mi}`))}for(let ti=0;ti<textBlocks.length;ti++){const isPlan=/Implement the following plan:/i.test(textBlocks[ti].text||"");renderedMessages.push(jsxRuntimeExports.jsx(ChatMessage,{role:isPlan?"plan-prompt":"user",text:textBlocks[ti].text,timestamp:ts,userProfile:userProfile,modelInfo:modelInfo,...viewReqProps},`${keyPrefix}-user-${mi}-${ti}`))}for(let tmi=0;tmi<teammateBlocks.length;tmi++){const tm=teammateBlocks[tmi];renderedMessages.push(jsxRuntimeExports.jsx(ChatMessage,{role:tm.status?"teammate-status":"teammate-message",text:tm.content,label:tm.status&&tm.statusFrom||tm.id,toolName:tm.status||null,timestamp:ts,modelInfo:modelInfo,...viewReqProps},`${keyPrefix}-teammate-${mi}-${tmi}`))}for(let tni=0;tni<taskNotificationBlocks.length;tni++){const tn=taskNotificationBlocks[tni];renderedMessages.push(jsxRuntimeExports.jsx(ChatMessage,{role:"task-notification",taskNotification:tn,timestamp:ts,modelInfo:modelInfo,...viewReqProps},`${keyPrefix}-tasknotif-${mi}-${tni}`))}}}else if("string"==typeof content2)if(/<task-notification>/i.test(content2)){const{taskNotificationBlocks:strTnBlocks}=classifyUserContent([{type:"text",text:content2}]);for(let tni=0;tni<strTnBlocks.length;tni++)renderedMessages.push(jsxRuntimeExports.jsx(ChatMessage,{role:"task-notification",taskNotification:strTnBlocks[tni],timestamp:ts,modelInfo:modelInfo,...viewReqProps},`${keyPrefix}-tasknotif-str-${mi}-${tni}`))}else if(!isSystemText(content2)){const isPlan=/Implement the following plan:/i.test(content2);renderedMessages.push(jsxRuntimeExports.jsx(ChatMessage,{role:isPlan?"plan-prompt":"user",text:content2,timestamp:ts,userProfile:userProfile,modelInfo:modelInfo,...viewReqProps},`${keyPrefix}-user-${mi}`))}}else if("assistant"===msg.role){const msgLastAskId=lastPendingAskId&&Array.isArray(content2)&&content2.some(b=>"tool_use"===b.type&&"AskUserQuestion"===b.name&&b.id===lastPendingAskId)?lastPendingAskId:null,msgLastPlanId=lastPendingPlanId&&Array.isArray(content2)&&content2.some(b=>"tool_use"===b.type&&"ExitPlanMode"===b.name&&b.id===lastPendingPlanId)?lastPendingPlanId:null;if(Array.isArray(content2)){const filteredContent=content2.filter(block=>"text"!==block.type||!isSystemText(block.text));filteredContent.length>0&&renderedMessages.push(jsxRuntimeExports.jsx(ChatMessage,{role:"assistant",content:filteredContent,toolResultMap:toolResultMap,readContentMap:readContentMap,editSnapshotMap:editSnapshotMap,askAnswerMap:mergedAskAnswerMap,planApprovalMap:planApprovalMap,latestPlanContent:latestPlanContent,timestamp:ts,modelInfo:modelInfo,collapseToolResults:collapseToolResults,expandThinking:expandThinking,showFullToolContent:showFullToolContent,showThinkingSummaries:showThinkingSummaries,ptyPrompt:this.state.ptyPrompt,activePlanPrompt:activePlanPrompt,activeDangerousPrompt:activeDangerousPrompt,lastPendingPlanId:msgLastPlanId,lastPendingAskId:msgLastAskId,onPlanApprovalClick:this.handlePromptOptionClick,onPlanFeedbackSubmit:this.handlePlanFeedbackSubmit,onDangerousApprovalClick:this.handlePromptOptionClick,onAskQuestionSubmit:this.handleAskQuestionSubmit,cliMode:this.props.cliMode,onOpenFile:this.handleOpenToolFilePath,...viewReqProps},`${keyPrefix}-asst-${mi}`))}else"string"==typeof content2&&(isSystemText(content2)||renderedMessages.push(jsxRuntimeExports.jsx(ChatMessage,{role:"assistant",content:[{type:"text",text:content2}],toolResultMap:toolResultMap,readContentMap:readContentMap,editSnapshotMap:editSnapshotMap,askAnswerMap:mergedAskAnswerMap,planApprovalMap:planApprovalMap,latestPlanContent:latestPlanContent,timestamp:ts,modelInfo:modelInfo,collapseToolResults:collapseToolResults,expandThinking:expandThinking,showFullToolContent:showFullToolContent,showThinkingSummaries:showThinkingSummaries,ptyPrompt:this.state.ptyPrompt,activePlanPrompt:activePlanPrompt,activeDangerousPrompt:activeDangerousPrompt,lastPendingPlanId:msgLastPlanId,lastPendingAskId:msgLastAskId,onPlanApprovalClick:this.handlePromptOptionClick,onPlanFeedbackSubmit:this.handlePlanFeedbackSubmit,onDangerousApprovalClick:this.handlePromptOptionClick,onAskQuestionSubmit:this.handleAskQuestionSubmit,cliMode:this.props.cliMode,onOpenFile:this.handleOpenToolFilePath,...viewReqProps},`${keyPrefix}-asst-${mi}`)))}}return{items:renderedMessages,lastPendingAskId:lastPendingAskId,lastPendingPlanId:lastPendingPlanId}}_buildTeammateFallbackItems(){var _a,_b,_c,_d;const{requests:requests,collapseToolResults:collapseToolResults,expandThinking:expandThinking,showFullToolContent:showFullToolContent,onViewRequest:onViewRequest}=this.props;if(!requests||0===requests.length)return[];resolveTeammateNames(requests);const teammateMap=new Map;for(const req of requests){if(!isTeammate(req)||!(null==(_b=null==(_a=req.body)?void 0:_a.messages)?void 0:_b.length))continue;const name=req.teammate||"teammate",existing=teammateMap.get(name);(!existing||req.body.messages.length>=existing.messages.length)&&teammateMap.set(name,{messages:req.body.messages,response:req.response,timestamp:req.timestamp})}if(0===teammateMap.size)return[];const nullModelInfoResolver=()=>null,allItems=[];let si=0;for(const[name,session]of teammateMap){allItems.push(jsxRuntimeExports.jsx(Divider,{className:styles$1_sessionDivider,children:jsxRuntimeExports.jsx(Text,{className:styles$1_sessionDividerText,children:name})},`tm-div-${si}`));const{items:msgs}=this.renderSessionMessages(session.messages,`tm${si}`,nullModelInfoResolver,{});if(allItems.push(...msgs),si===teammateMap.size-1&&(null==(_d=null==(_c=session.response)?void 0:_c.body)?void 0:_d.content)){const respContent=session.response.body.content;if(Array.isArray(respContent)){const lastItems=respContent.filter(b=>"text"===b.type&&b.text).map((b,bi)=>jsxRuntimeExports.jsx(ChatMessage,{role:"assistant",content:[b],collapseToolResults:collapseToolResults,expandThinking:expandThinking,showFullToolContent:showFullToolContent,onViewRequest:onViewRequest,onOpenFile:this.handleOpenToolFilePath},`tm-resp-${si}-${bi}`));lastItems.length>0&&(this._lastResponseItems=lastItems)}}si++}return allItems}buildAllItems(){var _a,_b,_c,_d,_e,_f,_g;const{mainAgentSessions:mainAgentSessions,requests:requests,collapseToolResults:collapseToolResults,expandThinking:expandThinking,showFullToolContent:showFullToolContent,onViewRequest:onViewRequest}=this.props;if(this._lastResponseItems=null,this._lastResponseAskQuestions=null,!mainAgentSessions||0===mainAgentSessions.length)return this._buildTeammateFallbackItems();const cache=this._reqScanCache;if(requests){const startIdx=requests.length>=cache.processedCount?cache.processedCount:0;0===startIdx&&(cache.tsToIndex={},cache.modelName=null,cache.completedModelName=null,cache.modelNameByReqIdx=[]);let lastModelName=cache.modelName;for(let i=startIdx;i<requests.length;i++){const req=requests[i],ma=isMainAgent(req);ma&&req.timestamp&&(cache.tsToIndex[req.timestamp]=i),ma&&(null==(_a=req.body)?void 0:_a.model)&&(lastModelName=req.body.model,cache.modelName=lastModelName,req.response&&(cache.completedModelName=lastModelName)),cache.modelNameByReqIdx[i]=lastModelName}cache.processedCount=requests.length,resolveTeammateNames(requests);let subStart=cache.subAgentProcessedCount||0;if(subStart>0&&subStart<requests.length)for(subStart--;cache.subAgentEntries.length>0&&cache.subAgentEntries[cache.subAgentEntries.length-1].requestIndex>=subStart;)cache.subAgentEntries.pop();for(let i=subStart;i<requests.length;i++){const req=requests[i];if(!req.timestamp)continue;const cls=classifyRequest(req,requests[i+1]);if("SubAgent"===cls.type||"Teammate"===cls.type){const respContent=null==(_c=null==(_b=req.response)?void 0:_b.body)?void 0:_c.content;if(Array.isArray(respContent)&&respContent.length>0){const subToolResultMap=cachedBuildToolResultMap((null==(_d=req.body)?void 0:_d.messages)||[]).toolResultMap,isTeammateEntry="Teammate"===cls.type;cache.subAgentEntries.push({timestamp:req.timestamp,content:respContent,toolResultMap:subToolResultMap,label:isTeammateEntry?formatTeammateLabel(cls.subType,null==(_e=req.body)?void 0:_e.model):formatRequestTag(cls.type,cls.subType),isTeammate:isTeammateEntry,requestIndex:i})}}}cache.subAgentProcessedCount=requests.length}const tsToIndex=cache.tsToIndex,globalModelInfo=getModelInfo(cache.modelName),resolveModelInfo=ts=>{if(!ts)return globalModelInfo;const idx=tsToIndex[ts];if(null==idx)return globalModelInfo;const name=cache.modelNameByReqIdx[idx];return name?getModelInfo(name):globalModelInfo},subAgentEntries=cache.subAgentEntries,allItems=[],tsItemMap={},{showThinkingSummaries:showThinkingSummaries}=this.props,activePromptIds=(this.state.ptyPromptHistory||[]).filter(p=>"active"===p.status).map(p=>p.id).join(","),toggleSig=`${collapseToolResults}|${expandThinking}|${showFullToolContent}|${showThinkingSummaries}|${this.props.cliMode}|${(null==(_f=this.state.ptyPrompt)?void 0:_f.id)||""}|${activePromptIds}|${(null==(_g=this.props.userProfile)?void 0:_g.name)||""}|${this.props.lang||""}|${Object.keys(this.state.localAskAnswers||{}).join(",")}`;toggleSig!==this._itemCacheToggleSig&&(this._sessionItemCache=[],this._itemCacheToggleSig=toggleSig),this._sessionItemCache.length>mainAgentSessions.length&&(this._sessionItemCache.length=mainAgentSessions.length),(this.props.hasMoreHistory||this.props.loadingMore)&&allItems.push(jsxRuntimeExports.jsx("div",{className:styles$1_loadMoreWrap,children:this.props.loadingMore?jsxRuntimeExports.jsxs("div",{className:`${styles$1_loadMoreBtn} ${styles$1_loadMoreBtnLoading}`,children:[jsxRuntimeExports.jsx("span",{className:styles$1_loadMoreSpinner}),t("ui.loadingMoreHistory")]}):jsxRuntimeExports.jsx("button",{className:styles$1_loadMoreBtn,onClick:()=>this.props.onLoadMoreHistory&&this.props.onLoadMoreHistory(),children:t("ui.loadEarlierConversations")})},"load-more-history"));let subIdx=0;mainAgentSessions.forEach((session,si)=>{var _a2,_b2,_c2,_d2,_e2;if(si>0&&allItems.push(jsxRuntimeExports.jsx(Divider,{className:styles$1_sessionDivider,children:jsxRuntimeExports.jsx(Text,{className:styles$1_sessionDividerText,children:"Session"})},`session-div-${si}`)),session._cold){const isLoading=this.props.loadingSessionId===session.sessionId;return void allItems.push(jsxRuntimeExports.jsx("div",{className:styles$1_loadMoreWrap,children:isLoading?jsxRuntimeExports.jsxs("div",{className:`${styles$1_loadMoreBtn} ${styles$1_loadMoreBtnLoading}`,children:[jsxRuntimeExports.jsx("span",{className:styles$1_loadMoreSpinner}),t("ui.loadingMoreHistory")]}):jsxRuntimeExports.jsx("button",{className:styles$1_loadMoreBtn,onClick:()=>this.props.onLoadSession&&this.props.onLoadSession(session.sessionId),children:t("ui.loadSessionPlaceholder",{count:session.msgCount})})},`cold-session-${si}`))}const sc=this._sessionItemCache[si];let msgs,lastPendingAskId,lastPendingPlanId;if(sc&&sc.session===session&&sc.msgsLen===session.messages.length)msgs=sc.items,lastPendingAskId=sc.lastPendingAskId,lastPendingPlanId=sc.lastPendingPlanId;else if(sc&&sc.session===session&&session.messages.length>sc.msgsLen){const result=this.renderSessionMessages(session.messages,`s${si}`,resolveModelInfo,tsToIndex,sc.msgsLen);if(msgs=sc.items.concat(result.items),lastPendingAskId=result.lastPendingAskId,lastPendingPlanId=result.lastPendingPlanId,sc.lastPendingAskId&&sc.lastPendingAskId!==lastPendingAskId)for(let i=0;i<sc.items.length;i++)if(msgs[i].props.lastPendingAskId===sc.lastPendingAskId){msgs[i]=React.cloneElement(msgs[i],{lastPendingAskId:null});break}if(sc.lastPendingPlanId&&sc.lastPendingPlanId!==lastPendingPlanId)for(let i=0;i<sc.items.length;i++)if(msgs[i].props.lastPendingPlanId===sc.lastPendingPlanId){msgs[i]=React.cloneElement(msgs[i],{lastPendingPlanId:null});break}}else{const result=this.renderSessionMessages(session.messages,`s${si}`,resolveModelInfo,tsToIndex);msgs=result.items,lastPendingAskId=result.lastPendingAskId,lastPendingPlanId=result.lastPendingPlanId}this._sessionItemCache[si]={session:session,msgsLen:session.messages.length,items:msgs,lastPendingAskId:lastPendingAskId,lastPendingPlanId:lastPendingPlanId};for(const m of msgs){const msgTs=m.props.timestamp;for(;subIdx<subAgentEntries.length&&msgTs&&subAgentEntries[subIdx].timestamp<=msgTs;){const sa=subAgentEntries[subIdx];sa.timestamp&&(tsItemMap[sa.timestamp]=allItems.length),allItems.push(jsxRuntimeExports.jsx(ChatMessage,{role:"sub-agent-chat",content:sa.content,toolResultMap:sa.toolResultMap,label:sa.label,isTeammate:sa.isTeammate,timestamp:sa.timestamp,collapseToolResults:collapseToolResults,expandThinking:expandThinking,showFullToolContent:showFullToolContent,requestIndex:sa.requestIndex,onViewRequest:onViewRequest,onOpenFile:this.handleOpenToolFilePath},`sub-${sa.requestIndex}-${sa.timestamp}`)),subIdx++}msgTs&&(tsItemMap[msgTs]=allItems.length),allItems.push(m)}for(;subIdx<subAgentEntries.length;){const sa=subAgentEntries[subIdx],nextSessionStart=si<mainAgentSessions.length-1&&(null==(_b2=null==(_a2=mainAgentSessions[si+1].messages)?void 0:_a2[0])?void 0:_b2._timestamp);if(nextSessionStart&&sa.timestamp>nextSessionStart)break;sa.timestamp&&(tsItemMap[sa.timestamp]=allItems.length),allItems.push(jsxRuntimeExports.jsx(ChatMessage,{role:"sub-agent-chat",content:sa.content,toolResultMap:sa.toolResultMap,label:sa.label,isTeammate:sa.isTeammate,timestamp:sa.timestamp,collapseToolResults:collapseToolResults,expandThinking:expandThinking,showFullToolContent:showFullToolContent,requestIndex:sa.requestIndex,onViewRequest:onViewRequest,onOpenFile:this.handleOpenToolFilePath},`sub-${sa.requestIndex}-${sa.timestamp}`)),subIdx++}if(si===mainAgentSessions.length-1&&(null==(_d2=null==(_c2=session.response)?void 0:_c2.body)?void 0:_d2.content)){const respContent=session.response.body.content;if(Array.isArray(respContent)){const hasInteractiveBlock=respContent.some(b=>"tool_use"===b.type&&("AskUserQuestion"===b.name||"ExitPlanMode"===b.name));if(!(respContent.some(b=>"text"===b.type&&"string"==typeof b.text&&b.text.includes("[SUGGESTION MODE:"))&&!hasInteractiveBlock)){const historyAskIds=new Set;for(const msg of session.messages)if("assistant"===msg.role&&Array.isArray(msg.content))for(const block of msg.content)"tool_use"===block.type&&"AskUserQuestion"===block.name&&historyAskIds.add(block.id);session.entryTimestamp&&(tsItemMap[session.entryTimestamp]=allItems.length);let respLastPendingAskId=null,respLastPendingPlanId=null;const _localAsk=this.state.localAskAnswers||{};for(const block of respContent){if("tool_use"===block.type&&"AskUserQuestion"===block.name){const la=_localAsk[block.id];la&&0!==Object.keys(la).length||(respLastPendingAskId=block.id)}"tool_use"===block.type&&"ExitPlanMode"===block.name&&(respLastPendingPlanId=block.id)}this._lastResponseAskQuestions=new Set;for(const block of respContent)if("tool_use"===block.type&&"AskUserQuestion"===block.name){const questions=null==(_e2=block.input)?void 0:_e2.questions;if(Array.isArray(questions))for(const q of questions)q.question&&this._lastResponseAskQuestions.add(q.question)}const _cachedLR=getToolResultCache(session.messages)||{},planApprovalMap=_cachedLR.planApprovalMap||{},latestPlanContent=_cachedLR.latestPlanContent||null,activePlanPrompt=this.props.cliMode&&this.state.ptyPromptHistory.slice().reverse().find(p=>isPlanApprovalPrompt(p)&&"active"===p.status)||null,activeDangerousPrompt=this.props.cliMode&&!this.state.pendingPermission&&this.state.ptyPromptHistory.slice().reverse().find(p=>isDangerousOperationPrompt(p)&&"active"===p.status)||null,lrContent=respContent.filter(b=>"tool_use"!==b.type||"AskUserQuestion"===b.name&&!historyAskIds.has(b.id)||"ExitPlanMode"===b.name);if(!lrContent.some(b=>"text"===b.type?"string"==typeof b.text&&b.text.trim().length>0:"tool_use"===b.type||"thinking"===b.type&&("string"==typeof b.thinking&&b.thinking.trim().length>0)))return;this._lastResponseItems=jsxRuntimeExports.jsxs(React.Fragment,{children:[jsxRuntimeExports.jsx(Divider,{className:styles$1_lastResponseDivider,children:jsxRuntimeExports.jsx(Text,{type:"secondary",className:styles$1_lastResponseLabel,children:t("ui.lastResponse")})}),jsxRuntimeExports.jsx(ChatMessage,{role:"assistant",content:lrContent,timestamp:session.entryTimestamp,modelInfo:globalModelInfo,collapseToolResults:collapseToolResults,expandThinking:expandThinking,showFullToolContent:showFullToolContent,toolResultMap:EMPTY_MAP,askAnswerMap:Object.keys(_localAsk).length>0?_localAsk:EMPTY_MAP,planApprovalMap:planApprovalMap,latestPlanContent:latestPlanContent,lastPendingAskId:respLastPendingAskId,lastPendingPlanId:respLastPendingPlanId,activePlanPrompt:activePlanPrompt,activeDangerousPrompt:activeDangerousPrompt,ptyPrompt:this.state.ptyPrompt,onPlanApprovalClick:this.handlePromptOptionClick,onPlanFeedbackSubmit:this.handlePlanFeedbackSubmit,onDangerousApprovalClick:this.handlePromptOptionClick,cliMode:this.props.cliMode,onAskQuestionSubmit:this.handleAskQuestionSubmit,onOpenFile:this.handleOpenToolFilePath},"resp-asst")]},"last-response-group")}}}});const{scrollToTimestamp:scrollToTimestamp}=this.props;return this._scrollTargetIdx=scrollToTimestamp&&null!=tsItemMap[scrollToTimestamp]?tsItemMap[scrollToTimestamp]:null,this._tsItemMap=tsItemMap,allItems}_applyMobileSlice(allItems){if(!isMobile)return this._mobileSliceOffset=0,this._totalItemCount=allItems.length,allItems;this._totalItemCount=allItems.length;const limit=(isIOS?150:240)+this._mobileExtraItems;if(allItems.length<=limit)return this._mobileSliceOffset=0,allItems;const offset=allItems.length-limit;if(this._mobileSliceOffset=offset,null!=this._scrollTargetIdx&&(this._scrollTargetIdx-=offset,this._scrollTargetIdx<0&&(this._scrollTargetIdx=null)),this._tsItemMap){const newMap={};for(const[ts,idx]of Object.entries(this._tsItemMap)){const adjusted=idx-offset;adjusted>=0&&(newMap[ts]=adjusted)}this._tsItemMap=newMap}return allItems.slice(offset)}_extractSuggestion(){var _a;const{mainAgentSessions:mainAgentSessions}=this.props;if(!(null==mainAgentSessions?void 0:mainAgentSessions.length))return null;const lastSession=mainAgentSessions[mainAgentSessions.length-1],msgs=null==lastSession?void 0:lastSession.messages;if(!Array.isArray(msgs)||0===msgs.length)return null;const lastUserMsg=msgs[msgs.length-1];if("user"!==(null==lastUserMsg?void 0:lastUserMsg.role))return null;const userContent=lastUserMsg.content;if(!(Array.isArray(userContent)?userContent.some(b=>"text"===b.type&&/^\[SUGGESTION MODE:/i.test((b.text||"").trim())):"string"==typeof userContent&&/^\[SUGGESTION MODE:/im.test(userContent.trim())))return null;const resp=null==lastSession?void 0:lastSession.response;if(!resp)return null;const body2=resp.body;if(!body2)return null;const stop=body2.stop_reason;if("end_turn"!==stop&&"max_tokens"!==stop)return null;const content2=body2.content;if(!Array.isArray(content2))return null;for(let i=content2.length-1;i>=0;i--)if("text"===content2[i].type&&(null==(_a=content2[i].text)?void 0:_a.trim()))return content2[i].text.trim();return null}_updateSuggestion(){const text=this._extractSuggestion();this.setState({inputSuggestion:text||null})}_loadPresets(){let agentTeamEnabled=!1;fetch(apiUrl("/api/claude-settings")).then(r=>r.json()).then(data=>{var _a;agentTeamEnabled="1"===(null==(_a=null==data?void 0:data.env)?void 0:_a.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS)}).catch(()=>{}).then(()=>{agentTeamEnabled&&fetch(apiUrl("/api/preferences")).then(r=>r.json()).then(data=>{const dismissed=Array.isArray(data.dismissedBuiltinPresets)?new Set(data.dismissedBuiltinPresets):new Set;let items=[];Array.isArray(data.presetShortcuts)&&(items=data.presetShortcuts.map((item,i)=>"string"==typeof item?{id:Date.now()+i,teamName:"",description:item}:{id:Date.now()+i,teamName:item.teamName||"",description:item.description||"",...item.builtinId?{builtinId:item.builtinId}:{},...item.modified?{modified:!0}:{}}));const existingBuiltinIds=new Set(items.filter(i=>i.builtinId).map(i=>i.builtinId));for(const bp of BUILTIN_PRESETS)dismissed.has(bp.builtinId)||existingBuiltinIds.has(bp.builtinId)||items.unshift({id:Date.now()+Math.random(),builtinId:bp.builtinId,teamName:bp.teamName,description:bp.description});const customExperts=Array.isArray(data.customUltraplanExperts)?data.customUltraplanExperts:[],current=this.state.ultraplanVariant,next={presetItems:items,customUltraplanExperts:customExperts};if("string"==typeof current&&current.startsWith("custom:")){const id=current.slice(7);customExperts.some(e=>e.id===id)||(next.ultraplanVariant="codeExpert")}this.setState(next)}).catch(()=>{})})}connectInputWs(){const wsUrl=`${"https:"===window.location.protocol?"wss:":"ws:"}//${window.location.host}/ws/terminal`;this._inputWs=new WebSocket(wsUrl),this._inputWs.onmessage=ev=>{var _a;try{const msg=JSON.parse(ev.data);"data"===msg.type?this._appendPtyData(msg.data):"exit"===msg.type?this._clearPtyPrompt():"ask-hook-pending"===msg.type?(this._askHookActive=!0,this._askHookQuestions=msg.questions):"ask-hook-timeout"===msg.type?(this._askHookActive=!1,this._askHookQuestions=null):"sdk-plan-pending"===msg.type?this.setState({pendingPlanApproval:{id:msg.id,input:msg.input}}):"sdk-ask-pending"===msg.type?(this._askHookActive=!0,this._askHookQuestions=msg.questions,this._sdkAskId=msg.id):"sdk-ask-timeout"===msg.type?(this._askHookActive=!1,this._askHookQuestions=null,this._sdkAskId=null):"perm-hook-pending"===msg.type?this.setState(state=>state.pendingPermission?{permissionQueue:[...state.permissionQueue,{id:msg.id,toolName:msg.toolName,input:msg.input}]}:{pendingPermission:{id:msg.id,toolName:msg.toolName,input:msg.input}}):"perm-hook-timeout"===msg.type?this.setState(state=>{var _a2;if(msg.id&&(null==(_a2=state.pendingPermission)?void 0:_a2.id)===msg.id){return{pendingPermission:state.permissionQueue[0]||null,permissionQueue:state.permissionQueue.slice(1)}}return msg.id?{permissionQueue:state.permissionQueue.filter(p=>p.id!==msg.id)}:{pendingPermission:null,permissionQueue:[]}}):"perm-hook-resolved"===msg.type?this.setState(state=>{var _a2;if((null==(_a2=state.pendingPermission)?void 0:_a2.id)===msg.id){return{pendingPermission:state.permissionQueue[0]||null,permissionQueue:state.permissionQueue.slice(1)}}return{permissionQueue:state.permissionQueue.filter(p=>p.id!==msg.id)}}):"ask-hook-resolved"===msg.type?(this._askHookActive=!1,this._askHookQuestions=null):"sdk-ask-resolved"===msg.type?this._sdkAskId===msg.id&&(this._askHookActive=!1,this._askHookQuestions=null,this._sdkAskId=null):"sdk-plan-resolved"===msg.type?(null==(_a=this.state.pendingPlanApproval)?void 0:_a.id)===msg.id&&this.setState({pendingPlanApproval:null}):"image-upload-notify"===msg.type?this._addPendingImage(msg.path,msg.source):"image-remove-notify"===msg.type&&msg.path&&this.setState(prev=>{const next=prev.pendingImages.filter(img=>img.path!==msg.path);return next.length===prev.pendingImages.length?null:{pendingImages:next}})}catch{}},this._inputWs.onclose=()=>{(this.state.pendingPermission||this.state.pendingPlanApproval)&&this.setState({pendingPermission:null,permissionQueue:[],pendingPlanApproval:null}),this._sdkAskId=null,this._askHookActive=!1,this._askHookQuestions=null,this._wsReconnectTimer=setTimeout(()=>{!this._unmounted&&this.splitContainerRef.current&&this.props.cliMode&&this.connectInputWs()},2e3)}}_stripAnsi(str){return str.replace(/\x1b\[[0-9;]*[A-Za-z]/g,"").replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/g,"").replace(/\x1b[^[\]](.|$)/g,"").replace(/[\x00-\x08\x0b\x0c\x0e-\x1f]/g,"")}_appendPtyData(raw){const clean=this._stripAnsi(raw);this._ptyBuffer+=clean,this._ptyDataSeq++,this._ptyBuffer.length>4096&&(this._ptyBuffer=this._ptyBuffer.slice(-4096)),this._ptyDebounceTimer&&clearTimeout(this._ptyDebounceTimer),this._ptyDebounceTimer=setTimeout(()=>this._detectPrompt(),200)}_detectPrompt(){const buf=this._ptyBuffer.trimEnd();let question=null,options=null;const match1=buf.match(/([^\n]*\?)\s*\n((?:\s*[❯>]?\s*\d+\.\s+[^\n]+\n?){2,})(?:\n[^\d❯>\n][^\n]*|\n)*$/);if(match1){question=match1[1].trim();const optionLines=match1[2].match(/\s*([❯>])?\s*(\d+)\.\s+([^\n]+)/g);optionLines&&(options=optionLines.map(line=>{const m=line.match(/\s*([❯>])?\s*(\d+)\.\s+(.+)/);return{number:parseInt(m[2],10),text:m[3].trim(),selected:!!m[1]}}))}if(!options){const match2=buf.match(/([^\n]+)\n((?:\s+[❯>]?\s+[^\n]+\n?){2,})(?:\n[^\s❯>\n][^\n]*|\n)*$/);if(match2){const candidateQ=match2[1].trim(),lines=match2[2].split("\n").filter(l=>l.trim()),parsed=[];for(const line of lines){const m=line.match(/^\s*([❯>])?\s+(.+)/);m&&m[2].trim()&&parsed.push({number:parsed.length+1,text:m[2].trim(),selected:!!m[1]})}parsed.length>=2&&parsed.some(p=>p.selected)&&(question=candidateQ,options=parsed)}}if(question&&options){if(/^[■\s]*[~\/.:]/.test(question)&&/\//.test(question))return;if(/^[*■✦⏎]/.test(question))return;const prev=this.state.ptyPrompt,prompt={question:question,options:options};if(isDangerousOperationPrompt(prompt)&&!this.state.pendingPermission){const toolInfo=function(buf,question,options){const q=(question||"").toLowerCase(),optTexts=(options||[]).map(o2=>o2.text||"").join(" ").toLowerCase();if(/bash command|run shell command/i.test(buf)){const cmdMatch=buf.match(/(?:Bash command|Run shell command)\s*\n\s*\n((?:\s{4,}.+\n?)+)/i),cmd=cmdMatch?cmdMatch[1].replace(/^\s{4}/gm,"").trim():null;return{toolName:"Bash",input:cmd?{command:cmd}:{description:question}}}const editMatch=q.match(/make this edit to\s+(.+?)\s*\??$/);if(editMatch)return{toolName:"Edit",input:{file_path:editMatch[1]}};const writeMatch=q.match(/write (?:this new file|to)\s+(.+?)\s*\??$/);if(writeMatch)return{toolName:"Write",input:{file_path:writeMatch[1]}};if(/write/i.test(q))return{toolName:"Write",input:{description:question}};const readMatch=q.match(/read\s+(.+?)\s*\??$/)||optTexts.match(/allow reading from\s+(.+?)(?:\s+from this project)?/);return readMatch?{toolName:"Read",input:{file_path:readMatch[1]}}:/fetch|url/i.test(q)?{toolName:"WebFetch",input:{description:question}}:/search/i.test(q)?{toolName:"WebSearch",input:{description:question}}:{toolName:"Tool",input:{description:question}}}(this._ptyBuffer,question,options),id=`pty_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return this._currentPtyPrompt=prompt,this.setState(state=>{const history=state.ptyPromptHistory.slice();return history.push({...prompt,status:"pty-routed",selectedNumber:null,timestamp:(new Date).toISOString()}),history.length>200&&history.splice(0,history.length-200),{pendingPermission:{id:id,toolName:toolInfo.toolName,input:toolInfo.input,source:"pty",ptyPrompt:prompt},ptyPromptHistory:history}}),void this.scrollToBottom()}return void(prev&&prev.question===question?(this._currentPtyPrompt=prompt,this.setState({ptyPrompt:prompt})):(this._currentPtyPrompt=prompt,this.setState(state=>{const history=state.ptyPromptHistory.slice();if(state.ptyPrompt){const last=history[history.length-1];last&&"active"===last.status&&(history[history.length-1]={...last,status:"dismissed"})}return history.push({...prompt,status:"active",selectedNumber:null,timestamp:(new Date).toISOString()}),history.length>200&&history.splice(0,history.length-200),{ptyPrompt:prompt,ptyPromptHistory:history}}),this.scrollToBottom()))}if(this.state.ptyPrompt){if(isPlanApprovalPrompt(this.state.ptyPrompt))return;if(isDangerousOperationPrompt(this.state.ptyPrompt))return;if(this._askSubmitting)return;this._currentPtyPrompt=null,this.setState(state=>{const history=state.ptyPromptHistory.slice(),last=history[history.length-1];return last&&"active"===last.status&&(history[history.length-1]={...last,status:"dismissed"}),{ptyPrompt:null,ptyPromptHistory:history}})}}_clearPtyPrompt(){this._ptyBuffer="",this._currentPtyPrompt=null,this._ptyDebounceTimer&&clearTimeout(this._ptyDebounceTimer),this.state.ptyPrompt&&this.setState({ptyPrompt:null})}_findPtyOptionNumber(prompt,decision){const options=(null==prompt?void 0:prompt.options)||[];if("allow"===decision){const opt2=options.find(o2=>/^yes$/i.test(o2.text.trim()))||options.find(o2=>/^yes/i.test(o2.text)&&!/allow|session|project/i.test(o2.text));return(null==opt2?void 0:opt2.number)||1}if("allowSession"===decision){const opt2=options.find(o2=>/allow.*(?:project|session|during)/i.test(o2.text));return(null==opt2?void 0:opt2.number)||2}const opt=options.find(o2=>/^no$/i.test(o2.text.trim())||/^no[^a-z]/i.test(o2.text));return(null==opt?void 0:opt.number)||options.length}_planSubmissionSteps(answers){return answers.map((answer,i)=>({...answer,isLast:i===answers.length-1}))}_waitForHookBridge(){if(!this._unmounted){if(this._askHookActive){const answers=this._pendingHookAnswers;return this._pendingHookAnswers=null,void this._submitViaHookBridge(answers)}if(this._askHookWaitRetries=(this._askHookWaitRetries||0)+1,this._askHookWaitRetries>30){const answers=this._pendingHookAnswers;return this._pendingHookAnswers=null,void this._submitViaPty(answers)}this._hookWaitTimer=setTimeout(()=>this._waitForHookBridge(),100)}}_submitViaPty(answers){const ws=this._inputWs;return ws&&ws.readyState===WebSocket.OPEN?(this._askAnswerQueue=this._planSubmissionSteps(answers),this._askSubmitting=!0,this._isMultiQuestionForm=answers.length>1,this._currentPtyPrompt?void this._processNextAskAnswer():(this._askPromptRetries=0,void this._waitForPtyPromptAndSubmit())):(this._askAnswerQueue=this._planSubmissionSteps(answers),this._askSubmitting=!0,this._isMultiQuestionForm=answers.length>1,this.connectInputWs(),this._askWsRetries=0,void this._waitForWsAndSubmit())}_waitForWsAndSubmit(){if(this._askWsRetries=(this._askWsRetries||0)+1,this._askWsRetries>30)return this._askSubmitting=!1,void(this._askAnswerQueue=[]);this._inputWs&&this._inputWs.readyState===WebSocket.OPEN?this._currentPtyPrompt?this._processNextAskAnswer():(this._askPromptRetries=0,this._waitForPtyPromptAndSubmit()):this._waitForWsTimer=setTimeout(()=>this._waitForWsAndSubmit(),100)}_waitForPtyPromptAndSubmit(){this._askPromptRetries=(this._askPromptRetries||0)+1,this._askPromptRetries>50||this._currentPtyPrompt?this._processNextAskAnswer():this._waitForPtyTimer=setTimeout(()=>this._waitForPtyPromptAndSubmit(),100)}_processNextAskAnswer(){if(!this._askAnswerQueue||0===this._askAnswerQueue.length)return void(this._askSubmitting=!1);const answer=this._askAnswerQueue.shift();"other"===answer.type&&answer.isMultiSelect?this._submitViaSequentialQueue(answer,{settleMs:500}):"other"===answer.type?this._submitOtherAnswer(answer):"multi"===answer.type?this._submitMultiSelectAnswer(answer):this._submitSingleSelectAnswer(answer)}_submitSingleSelectAnswer(answer){this._submitViaSequentialQueue(answer)}_submitMultiSelectAnswer(answer){this._submitViaSequentialQueue(answer)}_submitOtherAnswer(answer){this._submitViaSequentialQueue(answer)}_submitViaSequentialQueue(answer,opts={}){const ws=this._inputWs;if(!ws||ws.readyState!==WebSocket.OPEN)return void(this._askSubmitting=!1);const isMultiQuestion=!!this._isMultiQuestionForm,chunks=buildChunksForAnswer(answer,this.state.ptyPrompt,isMultiQuestion),settleMs=opts.settleMs||300,onMessage=event=>{try{"input-sequential-done"===JSON.parse(event.data).type&&(ws.removeEventListener("message",onMessage),this._finishCurrentAskAnswer())}catch{}};ws.addEventListener("message",onMessage),ws.send(JSON.stringify({type:"input-sequential",chunks:chunks,settleMs:settleMs})),setTimeout(()=>{ws.removeEventListener("message",onMessage),this._askSubmitting&&this._finishCurrentAskAnswer()},15e3)}_finishCurrentAskAnswer(){this._currentPtyPrompt=null,this.setState(state=>{const history=state.ptyPromptHistory.slice(),last=history[history.length-1];return last&&"active"===last.status&&(history[history.length-1]={...last,status:"answered"}),{ptyPrompt:null,ptyPromptHistory:history}}),this._askAnswerQueue&&0!==this._askAnswerQueue.length||this._ptyDebounceTimer&&clearTimeout(this._ptyDebounceTimer),this._askAnswerQueue&&this._askAnswerQueue.length>0?setTimeout(()=>{this._processNextAskAnswer()},500):this._askSubmitting=!1}_submitViaHookBridge(answers){var _a,_b;const ws=this._inputWs;if(!ws||ws.readyState!==WebSocket.OPEN)return this._askHookActive=!1,this._askHookQuestions=null,void this._submitViaPty(answers);this._askSubmitting=!0;const questions=this._askHookQuestions||[],hookAnswers={};for(const answer of answers){const q=questions[answer.questionIndex];if(!q)continue;const questionText=q.question;if("other"===answer.type)hookAnswers[questionText]=answer.text||"";else if("multi"===answer.type){const labels=(answer.selectedIndices||[]).map(i=>{var _a2,_b2;return null==(_b2=null==(_a2=q.options)?void 0:_a2[i])?void 0:_b2.label}).filter(Boolean);hookAnswers[questionText]=labels.join(", ")}else hookAnswers[questionText]=(null==(_b=null==(_a=q.options)?void 0:_a[answer.optionIndex])?void 0:_b.label)||""}ws.send(JSON.stringify({type:"ask-hook-answer",answers:hookAnswers})),this._askSubmitting=!1,this._currentPtyPrompt=null,this.setState(state=>{const history=state.ptyPromptHistory.slice(),last=history[history.length-1];return last&&"active"===last.status&&(history[history.length-1]={...last,status:"answered"}),{ptyPrompt:null,ptyPromptHistory:history}}),this._ptyDebounceTimer&&clearTimeout(this._ptyDebounceTimer)}_snapToInitialPosition(){const terminalPx=468;this.setState({terminalWidth:terminalPx,needsInitialSnap:!1}),localStorage.setItem("cc-viewer-terminal-width",terminalPx.toString())}_buildUserPromptNav(){const visible=this._currentVisible;if(!visible||0===visible.length)return null;if(this._navCacheVisible===visible&&this._navCacheResult)return this._navCacheResult;const prompts=[],seen=new Set;for(let i=0;i<visible.length;i++){const props=visible[i].props;if(!props||"user"!==props.role)continue;const raw=props.text||"";if(!raw)continue;const text=raw.replace(/\[Image(?:\s*#\d+)?(?::?\s*source)?:\s*[^\]]+\]/gi,"").replace(/"\/tmp\/cc-viewer-uploads\/[^"]+"/g,"").trim();if(!text)continue;const key=text.substring(0,100);if(seen.has(key))continue;seen.add(key);const display=text.length>80?text.substring(0,80)+"...":text;prompts.push({display:display,visibleIdx:i,timestamp:props.timestamp||null})}if(0===prompts.length)return this._navCacheVisible=visible,this._navCacheResult=null,null;const result=jsxRuntimeExports.jsx("div",{className:styles$1_userPromptNavList,children:prompts.map((p,i)=>jsxRuntimeExports.jsx("div",{className:styles$1_userPromptNavItem,onClick:()=>this._scrollToUserPrompt(p.visibleIdx,p.timestamp),children:p.display},p.visibleIdx))});return this._navCacheVisible=visible,this._navCacheResult=result,result}_scrollToUserPrompt(visibleIdx,timestamp){null==visibleIdx||visibleIdx<0||(timestamp?this.setState({highlightTs:timestamp,highlightFading:!1,highlightVisibleIdx:visibleIdx},()=>{this._doScrollToVisibleIdx(visibleIdx),this._bindScrollFade()}):this._doScrollToVisibleIdx(visibleIdx))}_doScrollToVisibleIdx(idx){if(useVirtuoso&&this.virtuosoRef.current)this.virtuosoRef.current.scrollToIndex({index:idx,align:"center",behavior:"smooth"});else{const el=this.containerRef.current;el&&el.children[idx]&&el.children[idx].scrollIntoView({behavior:"smooth",block:"center"})}}render(){var _a,_b,_c,_d,_e,_f,_g,_h,_i,_j,_k,_l,_m;const{mainAgentSessions:mainAgentSessions,cliMode:cliMode,terminalVisible:terminalVisible,onToggleTerminal:onToggleTerminal}=this.props,{allItems:allItems,visibleCount:visibleCount,loading:loading2,terminalWidth:terminalWidth,sidebarWidth:sidebarWidth,lastResponseItems:lastResponseItems}=this.state;let snapCurrentLeft=0;if(this.state.isDragging)if("sidebar"===this._dragTarget)snapCurrentLeft=sidebarWidth;else if("terminal"===this._dragTarget){const c=this.innerSplitRef.current;c&&(snapCurrentLeft=c.getBoundingClientRect().width-terminalWidth-5)}const noData=(!mainAgentSessions||0===mainAgentSessions.length)&&(!allItems||0===allItems.length);if(noData&&!cliMode)return this.props.fileLoading?null:jsxRuntimeExports.jsx("div",{className:styles$1_centerEmpty,children:jsxRuntimeExports.jsx(Empty,{description:t("ui.noChat")})});if(loading2&&!cliMode)return jsxRuntimeExports.jsx("div",{className:styles$1_centerEmpty,children:jsxRuntimeExports.jsx(Spin,{size:"large"})});const collectedRolesMap=new Map,userProfile=this.props.userProfile,modelInfo=this._reqScanCache?getModelInfo(this._reqScanCache.modelName):null;for(const item of allItems){if(!item||!item.props)continue;const role=item.props.role;if("user"===role||"plan-prompt"===role)collectedRolesMap.has("user")||collectedRolesMap.set("user",{key:"user",name:(null==userProfile?void 0:userProfile.name)||"User",avatarType:"user",color:"rgba(255,255,255,0.1)",avatarImg:(null==userProfile?void 0:userProfile.avatar)||null});else if("assistant"===role)collectedRolesMap.has("assistant")||collectedRolesMap.set("assistant",{key:"assistant",name:(null==modelInfo?void 0:modelInfo.short)||(null==modelInfo?void 0:modelInfo.name)||"Claude",avatarType:"agent",color:(null==modelInfo?void 0:modelInfo.color)||"rgba(255,255,255,0.1)",avatarSvg:(null==modelInfo?void 0:modelInfo.svg)||null});else if("sub-agent-chat"===role){const label2=item.props.label||"SubAgent",key=`sub:${label2}`;if(!collectedRolesMap.has(key)){const isTeammate2=item.props.isTeammate;let avatarType="sub";if(isTeammate2)avatarType="teammate";else{const match=label2.match(/SubAgent:\s*(\w+)/i),st=match?match[1].toLowerCase():"";"explore"===st||"search"===st?avatarType="sub-search":"plan"===st&&(avatarType="sub-plan")}const tmA=isTeammate2?getTeammateAvatar(label2):null;collectedRolesMap.set(key,{key:key,name:label2.length>12?label2.slice(0,12)+"…":label2,avatarType:avatarType,avatarSvg:tmA?tmA.svg:void 0,color:tmA?tmA.color:"rgba(255,255,255,0.1)"})}}}const collectedRoles=Array.from(collectedRolesMap.values());let filteredItems=allItems;const _selSize=this.state.roleFilterSelected.size;_selSize>0&&_selSize<collectedRoles.length&&(filteredItems=allItems.filter(item=>{if(!item||!item.props)return!0;const role=item.props.role;if("user"===role||"plan-prompt"===role)return this.state.roleFilterSelected.has("user");if("assistant"===role)return this.state.roleFilterSelected.has("assistant");if("sub-agent-chat"===role){const key=`sub:${item.props.label||"SubAgent"}`;return this.state.roleFilterSelected.has(key)}return!1}));const _isFiltering=_selSize>0&&_selSize<collectedRoles.length;let filteredLastResponseItems=lastResponseItems&&_isFiltering&&!this.state.roleFilterSelected.has("assistant")?null:lastResponseItems,streamingLiveItem=null;const _assistantFilteredOut=_isFiltering&&!this.state.roleFilterSelected.has("assistant");if(this.props.streamingLatest&&!_assistantFilteredOut){const sl=this.props.streamingLatest,liveBlocks=(sl.content||[]).filter(b=>"text"===b.type||"thinking"===b.type);if(liveBlocks.some(b=>"text"===b.type?"string"==typeof b.text&&b.text.trim().length>0:"thinking"===b.type&&("string"==typeof b.thinking&&b.thinking.trim().length>0))){const cache=this._reqScanCache,streamingModelInfo=cache?getModelInfo(cache.completedModelName||cache.modelName):null;streamingLiveItem=jsxRuntimeExports.jsx(ChatMessage,{role:"assistant",content:liveBlocks,timestamp:sl.timestamp,modelInfo:streamingModelInfo,collapseToolResults:this.props.collapseToolResults,expandThinking:this.props.expandThinking,showFullToolContent:this.props.showFullToolContent,showTrailingCursor:!0,toolResultMap:EMPTY_MAP},"streaming-live-msg")}}const targetIdx=this._scrollTargetIdx,{highlightTs:highlightTs,highlightFading:highlightFading,highlightVisibleIdx:highlightVisibleIdx}=this.state,visible=filteredItems.slice(0,_isFiltering?filteredItems.length:visibleCount);this._currentVisible=visible;const highlightIdx=highlightVisibleIdx>=0&&highlightVisibleIdx<visible.length?highlightVisibleIdx:null!=highlightTs?visible.findIndex(item=>{var _a2;return(null==(_a2=item.props)?void 0:_a2.timestamp)===highlightTs}):-1,{pendingInput:pendingInput,stickyBottom:stickyBottom,ptyPromptHistory:ptyPromptHistory}=this.state,pendingBubble=cliMode&&pendingInput?jsxRuntimeExports.jsx(ChatMessage,{role:"user",text:pendingInput,timestamp:(new Date).toISOString(),userProfile:this.props.userProfile},"pending-input"):null,stickyBtn=stickyBottom?null:jsxRuntimeExports.jsxs("button",{className:styles$1_stickyBottomBtn,onClick:this.handleStickToBottom,children:[this.props.isStreaming&&jsxRuntimeExports.jsx("img",{src:"/assets/loading-pet-12a9GTQC.gif",className:styles$1_loadingPet,alt:""}),jsxRuntimeExports.jsx("span",{children:t("ui.stickyBottom")}),jsxRuntimeExports.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntimeExports.jsx("polyline",{points:"6 9 12 15 18 9"})})]}),loadMoreBtn2=isMobile&&this._mobileSliceOffset>0?jsxRuntimeExports.jsx("div",{className:styles$1_loadMoreWrap,children:jsxRuntimeExports.jsx("button",{className:styles$1_loadMoreBtn,onClick:this.handleLoadMore,children:t("ui.loadMoreHistory",{count:this._mobileSliceOffset})})}):null,roleFilterBar2=this.state.roleFilterOpen&&collectedRoles.length>0?jsxRuntimeExports.jsx(RoleFilterBar,{roles:collectedRoles,selectedRoles:this.state.roleFilterSelected,onToggle:key=>this.setState(prev=>{const next=new Set(prev.roleFilterSelected);return next.has(key)?next.delete(key):next.add(key),{roleFilterSelected:next}})}):null,messageList=noData||loading2?jsxRuntimeExports.jsxs("div",{className:styles$1_messageListWrap,children:[jsxRuntimeExports.jsxs("div",{ref:this.containerRef,className:styles$1_container,children:[!cliMode||loading2?jsxRuntimeExports.jsx("div",{className:styles$1_centerEmpty,children:loading2?jsxRuntimeExports.jsx(Spin,{size:"large"}):jsxRuntimeExports.jsx(Empty,{description:t("ui.noChat")})}):null,pendingBubble]}),stickyBtn]}):jsxRuntimeExports.jsxs("div",{className:styles$1_messageListWrap,onClick:this.handleMdImageClick,children:[roleFilterBar2,this.state.mdLightboxSrc&&jsxRuntimeExports.jsx(ImageLightbox,{src:this.state.mdLightboxSrc,alt:"",onClose:()=>this.setState({mdLightboxSrc:null})}),useVirtuoso?(this._virtuosoHeader=loadMoreBtn2,this._virtuosoFooter=jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("div",{className:`${styles$1_streamingSpinnerWrap}${!this.props.isStreaming||streamingLiveItem?" "+styles$1_streamingSpinnerHidden:""}`,children:jsxRuntimeExports.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 20 20",children:[jsxRuntimeExports.jsx("defs",{children:jsxRuntimeExports.jsxs("linearGradient",{id:"ccv-spinnerGrad",x1:"0",y1:"0",x2:"1",y2:"1",children:[jsxRuntimeExports.jsx("stop",{offset:"0%",stopColor:"currentColor",stopOpacity:"1"}),jsxRuntimeExports.jsx("stop",{offset:"100%",stopColor:"currentColor",stopOpacity:"0.1"})]})}),jsxRuntimeExports.jsx("circle",{cx:"10",cy:"10",r:"7.5",fill:"none",strokeWidth:"2",stroke:"url(#ccv-spinnerGrad)",strokeLinecap:"round",pathLength:"100",strokeDasharray:"75 25",children:jsxRuntimeExports.jsx("animateTransform",{attributeName:"transform",type:"rotate",from:"0 10 10",to:"360 10 10",dur:"0.8s",repeatCount:"indefinite"})})]})}),filteredLastResponseItems&&jsxRuntimeExports.jsx("div",{className:streamingLiveItem?styles$1_hideLastResponseDivider:void 0,children:filteredLastResponseItems}),pendingBubble,streamingLiveItem&&(!filteredLastResponseItems&&null!=targetIdx&&targetIdx>=visible.length?jsxRuntimeExports.jsx("div",{ref:this._scrollTargetRef,children:streamingLiveItem},"stream-resp-anchor"):streamingLiveItem)]}),jsxRuntimeExports.jsx(qr,{ref:this.virtuosoRef,className:styles$1_mobileVirtuoso,data:visible,initialTopMostItemIndex:Math.max(0,visible.length-1),followOutput:!!this.state.stickyBottom&&"smooth",atBottomStateChange:atBottom=>{if(!this._stickyScrollLock){if(!atBottom&&this.state.stickyBottom&&this._virtuosoScrollerEl){const s=this._virtuosoScrollerEl;if(s.scrollHeight-s.scrollTop-s.clientHeight<=60)return}atBottom!==this.state.stickyBottom&&this.setState({stickyBottom:atBottom})}},atBottomThreshold:60,increaseViewportBy:{top:400,bottom:200},computeItemKey:index=>{var _a2;return(null==(_a2=visible[index])?void 0:_a2.key)||`v-${index}`},itemContent:index=>{const item=visible[index],isScrollTarget=index===targetIdx;let el=item;return index===highlightIdx&&(el=React.cloneElement(el,{highlight:highlightFading?"fading":"active"})),isScrollTarget?jsxRuntimeExports.jsx("div",{ref:this._scrollTargetRef,children:el}):el},scrollerRef:ref=>{this._virtuosoScrollerEl=ref},context:{header:this._virtuosoHeader,footer:this._virtuosoFooter},components:this._virtuosoComponents||(this._virtuosoComponents={Scroller:VirtuosoScroller,Header:({context:context})=>context.header,Footer:({context:context})=>context.footer})})):jsxRuntimeExports.jsxs("div",{ref:this.containerRef,className:styles$1_container,children:[loadMoreBtn2,visible.map((item,i)=>{const isScrollTarget=i===targetIdx;let el=item;return i===highlightIdx&&(el=React.cloneElement(el,{highlight:highlightFading?"fading":"active"})),isScrollTarget?jsxRuntimeExports.jsx("div",{ref:this._scrollTargetRef,children:el},item.key+"-anchor"):el}),jsxRuntimeExports.jsx("div",{className:`${styles$1_streamingSpinnerWrap}${!this.props.isStreaming||streamingLiveItem?" "+styles$1_streamingSpinnerHidden:""}`,children:jsxRuntimeExports.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 20 20",children:[jsxRuntimeExports.jsx("defs",{children:jsxRuntimeExports.jsxs("linearGradient",{id:"ccv-spinnerGrad-desktop",x1:"0",y1:"0",x2:"1",y2:"1",children:[jsxRuntimeExports.jsx("stop",{offset:"0%",stopColor:"currentColor",stopOpacity:"1"}),jsxRuntimeExports.jsx("stop",{offset:"100%",stopColor:"currentColor",stopOpacity:"0.1"})]})}),jsxRuntimeExports.jsx("circle",{cx:"10",cy:"10",r:"7.5",fill:"none",strokeWidth:"2",stroke:"url(#ccv-spinnerGrad-desktop)",strokeLinecap:"round",pathLength:"100",strokeDasharray:"75 25",children:jsxRuntimeExports.jsx("animateTransform",{attributeName:"transform",type:"rotate",from:"0 10 10",to:"360 10 10",dur:"0.8s",repeatCount:"indefinite"})})]})}),filteredLastResponseItems&&jsxRuntimeExports.jsx("div",{className:streamingLiveItem?styles$1_hideLastResponseDivider:void 0,children:null!=targetIdx&&targetIdx>=visible.length?jsxRuntimeExports.jsx("div",{ref:this._scrollTargetRef,children:filteredLastResponseItems},"last-resp-anchor"):filteredLastResponseItems}),pendingBubble,streamingLiveItem&&(!filteredLastResponseItems&&null!=targetIdx&&targetIdx>=visible.length?jsxRuntimeExports.jsx("div",{ref:this._scrollTargetRef,children:streamingLiveItem},"stream-resp-anchor"):streamingLiveItem)]}),stickyBtn]});return cliMode?jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs("div",{ref:this.splitContainerRef,className:styles$1_splitContainer,children:[jsxRuntimeExports.jsxs("div",{className:styles$1_navSidebar,children:[jsxRuntimeExports.jsx("button",{className:this.state.roleFilterOpen?styles$1_navBtnActive:styles$1_navBtn,onClick:()=>this.setState(prev=>prev.roleFilterOpen?{roleFilterOpen:!1,roleFilterSelected:new Set}:{roleFilterOpen:!0}),title:t("ui.roleFilter"),children:jsxRuntimeExports.jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntimeExports.jsx("polygon",{points:"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"})})}),jsxRuntimeExports.jsx("button",{className:this.state.fileExplorerOpen?styles$1_navBtnActive:styles$1_navBtn,onClick:()=>{this._setFileExplorerOpen(!this.state.fileExplorerOpen),this.setState({gitChangesOpen:!1})},title:t("ui.fileExplorer"),children:jsxRuntimeExports.jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntimeExports.jsx("path",{d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 2h9a2 2 0 0 1 2 2z"})})}),this.state.hasGit&&jsxRuntimeExports.jsx("button",{className:this.state.gitChangesOpen?styles$1_navBtnActive:styles$1_navBtn,onClick:()=>this.setState(prev=>(this._setFileExplorerOpen(!1),{gitChangesOpen:!prev.gitChangesOpen})),title:t("ui.gitChanges"),children:jsxRuntimeExports.jsx("svg",{width:"24",height:"24",viewBox:"0 0 1024 1024",fill:"currentColor",children:jsxRuntimeExports.jsx("path",{d:"M759.53332137 326.35000897c0-48.26899766-39.4506231-87.33284994-87.87432908-86.6366625-46.95397689 0.69618746-85.08957923 39.14120645-85.39899588 86.09518335-0.23206249 40.68828971 27.53808201 74.87882971 65.13220519 84.47074592 10.82958281 2.78474987 18.41029078 12.37666607 18.64235327 23.51566553 0.38677082 21.11768647-3.40358317 44.40128953-17.24997834 63.81718442-22.20064476 31.17372767-62.42480948 42.46743545-97.93037026 52.44612248-22.43270724 6.26568719-38.75443563 7.89012462-53.14230994 9.28249954-20.42149901 2.01120825-39.76003975 3.94506233-63.89453858 17.79145747-5.10537475 2.93945818-10.13339535 6.18833303-14.85199928 9.74662453-4.09977063 3.09416652-9.90133285 0.15470833-9.90133286-4.95066641V302.60228095c0-9.43720788 5.26008307-18.17822829 13.69168683-22.3553531 28.69839444-14.23316598 48.42370599-43.93716454 48.19164353-78.20505872-0.38677082-48.57841433-41.15241468-87.71962076-89.730829-86.01782918C338.80402918 117.57112321 301.59667683 155.70672553 301.59667683 202.58334827c0 34.03583169 19.64795738 63.50776777 48.1916435 77.66357958 8.43160375 4.17712479 13.69168685 12.76343689 13.69168684 22.12329062v419.02750058c0 9.43720788-5.26008307 18.17822829-13.69168684 22.3553531-28.69839444 14.23316598-48.42370599 43.93716454-48.1916435 78.20505872 0.30941665 48.57841433 41.07506052 87.6422666 89.65347484 86.01782918C437.74000359 906.42887679 474.87000179 868.2159203 474.87000179 821.41665173c0-34.03583169-19.64795738-63.50776777-48.1916435-77.66357958-8.43160375-4.17712479-13.69168685-12.76343689-13.69168684-22.12329062v-14.85199926c0-32.48874844 15.39347842-63.27570528 42.00331048-81.91805854 2.39797906-1.70179159 4.95066642-3.32622901 7.50335379-4.79595812 14.92935344-8.58631209 25.91364457-9.66927037 44.09187287-11.4484161 15.62554091-1.54708326 35.04143581-3.48093734 61.65126786-10.90693699 39.06385228-10.98429114 92.51557887-25.91364457 124.84961898-71.39789238 18.56499911-26.06835292 27.38337367-58.01562219 26.37776956-95.14562041-0.15470833-5.33743724-0.54147915-10.67487447-1.08295828-16.16702004-0.85089578-8.27689543 2.70739569-16.24437421 9.12779121-21.50445729 19.57060322-15.78024923 32.02462345-39.99210223 32.02462345-67.14341343zM351.1033411 202.58334827c0-20.49885317 16.63114503-37.12999821 37.1299982-37.1299982s37.12999821 16.63114503 37.12999821 37.1299982-16.63114503 37.12999821-37.12999821 37.1299982-37.12999821-16.63114503-37.1299982-37.1299982z m74.25999641 618.83330346c0 20.49885317-16.63114503 37.12999821-37.12999821 37.1299982s-37.12999821-16.63114503-37.1299982-37.1299982 16.63114503-37.12999821 37.1299982-37.1299982 37.12999821 16.63114503 37.12999821 37.1299982z m247.53332139-457.93664456c-20.49885317 0-37.12999821-16.63114503-37.1299982-37.1299982s16.63114503-37.12999821 37.1299982-37.12999821 37.12999821 16.63114503 37.1299982 37.12999821-16.63114503 37.12999821-37.1299982 37.1299982z"})})}),jsxRuntimeExports.jsx(TeamButton,{requests:this.props.requests,onOpenSession:session=>this.setState({teamModalSession:session}),navBtnClass:styles$1_navBtn}),jsxRuntimeExports.jsx(Popover,{content:this._buildUserPromptNav(),trigger:"hover",placement:"rightTop",overlayStyle:{maxWidth:400},children:jsxRuntimeExports.jsx("button",{className:styles$1_navBtn,title:t("ui.userPromptNav"),children:jsxRuntimeExports.jsx("img",{src:(null==(_b=this.props.userProfile)?void 0:_b.avatar)||defaultAvatarUrl,className:styles$1_navAvatarImg,alt:"User",onError:e=>{e.target.onerror=null,e.target.src=defaultAvatarUrl}})})})]}),jsxRuntimeExports.jsxs("div",{className:styles$1_innerSplitArea,ref:this.innerSplitRef,children:[jsxRuntimeExports.jsx(SnapLineOverlay,{isDragging:this.state.isDragging,activeSnapLine:this.state.activeSnapLine,snapLines:this.state.snapLines,currentLeft:snapCurrentLeft}),this.state.fileExplorerOpen&&jsxRuntimeExports.jsx(FileExplorer,{style:{width:this.state.sidebarWidth},refreshTrigger:this.state.fileExplorerRefresh,onClose:()=>this._setFileExplorerOpen(!1),onFileClick:path=>{tryOpenWithSystem(path,"file-explorer")||this.setState({currentFile:path,currentGitDiff:null,scrollToLine:null})},expandedPaths:this.state.fileExplorerExpandedPaths,onToggleExpand:this.handleToggleExpandPath,currentFile:this.state.currentFile,onAttachToChat:filePath2=>this._addPendingImage(filePath2,"explorer"),onInsertPathToChat:this._handleInsertPathToChat,onFileRenamed:(oldPath,newPath)=>{this.setState(prev=>({currentFile:prev.currentFile===oldPath?newPath:prev.currentFile,fileExplorerRefresh:prev.fileExplorerRefresh+1}))}}),this.state.gitChangesOpen&&jsxRuntimeExports.jsx(GitChanges,{style:{width:this.state.sidebarWidth},refreshTrigger:this.state.gitChangesRefresh,onClose:()=>this.setState({gitChangesOpen:!1}),onFileClick:(repoPath,filePath2)=>{tryOpenWithSystem(repoPath&&"."!==repoPath?`${repoPath}/${filePath2}`:filePath2,"git-changes")||this.setState({currentGitDiff:{repo:repoPath,file:filePath2},currentFile:null})},onOpenFile:(repoPath,filePath2)=>{const resolvedPath=repoPath&&"."!==repoPath?`${repoPath}/${filePath2}`:filePath2;if(tryOpenWithSystem(resolvedPath,"git-changes"))return;const parts=resolvedPath.split("/"),ancestors=[];for(let i=1;i<parts.length;i++)ancestors.push(parts.slice(0,i).join("/"));this._setFileExplorerOpen(!0),this.setState(prev=>{const newSet=new Set(prev.fileExplorerExpandedPaths);return ancestors.forEach(p=>newSet.add(p)),{currentGitDiff:null,currentFile:resolvedPath,scrollToLine:null,gitChangesOpen:!1,fileExplorerExpandedPaths:newSet}})}}),(this.state.fileExplorerOpen||this.state.gitChangesOpen)&&jsxRuntimeExports.jsx("div",{className:styles$1_vResizer,onMouseDown:this.handleSidebarMouseDown}),jsxRuntimeExports.jsx("div",{className:styles$1_chatSection,children:jsxRuntimeExports.jsxs("div",{className:styles$1_chatSectionFlex,children:[this.state.currentGitDiff&&jsxRuntimeExports.jsx("div",{className:styles$1_overlayPanel,children:jsxRuntimeExports.jsx(GitDiffView,{filePath:this.state.currentGitDiff.file,repoPath:this.state.currentGitDiff.repo,onClose:()=>this.setState({currentGitDiff:null}),onOpenFile:(path,line)=>{var _a2;const repo=null==(_a2=this.state.currentGitDiff)?void 0:_a2.repo,resolvedPath=repo&&"."!==repo?`${repo}/${path}`:path;if(tryOpenWithSystem(resolvedPath,"git-diff"))return;const parts=resolvedPath.split("/"),ancestors=[];for(let i=1;i<parts.length;i++)ancestors.push(parts.slice(0,i).join("/"));this._setFileExplorerOpen(!0),this.setState(prev=>{const newSet=new Set(prev.fileExplorerExpandedPaths);return ancestors.forEach(p=>newSet.add(p)),{currentGitDiff:null,currentFile:resolvedPath,scrollToLine:line||1,gitChangesOpen:!1,fileExplorerExpandedPaths:newSet}})}})}),this.state.currentFile&&jsxRuntimeExports.jsx("div",{className:styles$1_overlayPanel,children:isImageFile(this.state.currentFile)?jsxRuntimeExports.jsx(ImageViewer,{filePath:this.state.currentFile,editorSession:!!this.state.editorSessionId,onClose:()=>{this.state.editorSessionId&&fetch(apiUrl("/api/editor-done"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:this.state.editorSessionId})}).catch(()=>{}),this.setState({currentFile:null,fileVersion:0,editorSessionId:null,editorFilePath:null})}},this.state.fileVersion):jsxRuntimeExports.jsx(FileContentView,{filePath:this.state.currentFile,scrollToLine:this.state.scrollToLine,editorSession:!!this.state.editorSessionId,onClose:()=>{this.state.editorSessionId&&fetch(apiUrl("/api/editor-done"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:this.state.editorSessionId})}).catch(()=>{}),this.setState({currentFile:null,fileVersion:0,editorSessionId:null,editorFilePath:null})}},this.state.fileVersion)}),messageList,jsxRuntimeExports.jsxs("div",{className:styles$1_inputStack,children:[!this.props.onPendingPermission&&jsxRuntimeExports.jsx(ToolApprovalPanel,{toolName:null==(_c=this.state.pendingPermission)?void 0:_c.toolName,toolInput:null==(_d=this.state.pendingPermission)?void 0:_d.input,requestId:null==(_e=this.state.pendingPermission)?void 0:_e.id,onAllow:this.handlePermissionAllow,onAllowSession:this.props.sdkMode||"pty"===(null==(_f=this.state.pendingPermission)?void 0:_f.source)&&(null==(_i=null==(_h=null==(_g=this.state.pendingPermission)?void 0:_g.ptyPrompt)?void 0:_h.options)?void 0:_i.length)>=3?this.handlePermissionAllowSession:null,onDeny:this.handlePermissionDeny,visible:!!this.state.pendingPermission,autoApproveSeconds:this.props.autoApproveSeconds,onAutoApproveChange:this.props.onAutoApproveChange,modelName:null==(_j=this._reqScanCache)?void 0:_j.modelName,source:null==(_k=this.state.pendingPermission)?void 0:_k.source,queueDepth:this.state.permissionQueue.length}),!this.props.onPendingPlanApproval&&this.state.pendingPlanApproval&&jsxRuntimeExports.jsx(ToolApprovalPanel,{toolName:"ExitPlanMode",toolInput:this.state.pendingPlanApproval.input,requestId:this.state.pendingPlanApproval.id,onAllow:this.handlePlanApprove,onDeny:id=>this.handlePlanReject(id,""),visible:!0}),jsxRuntimeExports.jsx(ChatInputBar,{inputRef:this._inputRef,inputEmpty:this.state.inputEmpty,inputSuggestion:this.state.inputSuggestion,terminalVisible:terminalVisible,onKeyDown:this.handleInputKeyDown,onChange:this.handleInputChange,onSend:this.handleInputSend,onStop:this.handleInputStop,onSuggestionClick:this.handleSuggestionToTerminal,onUploadPath:this.handleUploadPath,presetItems:this.state.presetItems,onPresetSend:this.handlePresetSend,onOpenPresetModal:()=>this.setState({mobilePresetModalVisible:!0}),onOpenUltraPlan:this.state.agentTeamEnabled&&this.props.cliMode?()=>this.setState({ultraplanModalOpen:!0}):null,onClearContext:this.props.cliMode?()=>{Modal.confirm({title:t("ui.chatInput.clearContextConfirm"),okType:"danger",okText:t("ui.chatInput.clearContext"),onOk:()=>{const textarea2=this._inputRef.current;textarea2&&(textarea2.value="/clear",this.setState({inputEmpty:!1,pendingImages:[]},()=>this.handleInputSend()))}})}:null,isStreaming:this.props.isStreaming,streamingFading:this.state.streamingFading,pendingImages:this.state.pendingImages,onRemovePendingImage:this._removePendingImage})]}),jsxRuntimeExports.jsx(UltraPlanModal,{open:this.state.ultraplanModalOpen,variant:this.state.ultraplanVariant,prompt:this.state.ultraplanPrompt,files:this.state.ultraplanFiles,modelName:null==(_l=this._reqScanCache)?void 0:_l.modelName,agentTeamEnabled:this.state.agentTeamEnabled,customExperts:this.state.customUltraplanExperts,onClose:()=>this.setState({ultraplanModalOpen:!1}),onVariantChange:v=>this.setState({ultraplanVariant:v}),onPromptChange:t2=>this.setState({ultraplanPrompt:t2}),onSend:this._handleUltraplanSend,onUpload:this._handleUltraplanUpload,onPaste:this._handleUltraplanPaste,onRemoveFile:this._handleUltraplanRemoveFile,onOpenCustomEditor:this._openCustomUltraplanEditor}),jsxRuntimeExports.jsx(CustomUltraplanEditModal,{open:this.state.customUltraplanEditOpen,initial:this.state.customUltraplanEditing,onSave:this._saveCustomUltraplanExpert,onDelete:this._deleteCustomUltraplanExpert,onClose:this._closeCustomUltraplanEditor})]})}),cliMode&&!this.props.sdkMode&&onToggleTerminal&&jsxRuntimeExports.jsx("div",{className:styles$1_terminalToggle,onClick:onToggleTerminal,title:t(terminalVisible?"ui.collapseTerminal":"ui.expandTerminal"),children:jsxRuntimeExports.jsx("svg",{viewBox:"0 0 8 24",width:"8",height:"24",children:terminalVisible?jsxRuntimeExports.jsx("path",{d:"M4 8 L7 12 L4 16",stroke:"currentColor",strokeWidth:"1.5",fill:"none",strokeLinecap:"round",strokeLinejoin:"round"}):jsxRuntimeExports.jsx("path",{d:"M4 8 L1 12 L4 16",stroke:"currentColor",strokeWidth:"1.5",fill:"none",strokeLinecap:"round",strokeLinejoin:"round"})})}),terminalVisible&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("div",{className:styles$1_vResizer,onMouseDown:this.handleSplitMouseDown}),jsxRuntimeExports.jsx("div",{className:styles$1_terminalPanelWrap,style:{width:terminalWidth},children:jsxRuntimeExports.jsx(TerminalPanel,{onEditorOpen:(sessionId,filePath2)=>{this.setState({editorSessionId:sessionId,editorFilePath:filePath2,currentFile:filePath2,currentGitDiff:null,scrollToLine:null,fileVersion:(this.state.fileVersion||0)+1})},onFilePath:path=>{this._addPendingImage(path,"terminal")},pendingImages:this.state.pendingImages,onRemovePendingImage:this._removePendingImage,onClearPendingImages:this._clearPendingImages,modelName:null==(_m=this._reqScanCache)?void 0:_m.modelName,getChatScroller:()=>this._getScrollContainer()})})]})]})]}),jsxRuntimeExports.jsx(TeamModal,{session:this.state.teamModalSession,requests:this.props.requests,mainAgentSessions:this.props.mainAgentSessions,collapseToolResults:this.props.collapseToolResults,expandThinking:this.props.expandThinking,showFullToolContent:this.props.showFullToolContent,userProfile:this.props.userProfile,onViewRequest:this.props.onViewRequest,onClose:()=>this.setState({teamModalSession:null})}),jsxRuntimeExports.jsx(PresetModal,{open:this.state.mobilePresetModalVisible,onClose:()=>this.setState({mobilePresetModalVisible:!1}),items:this.state.presetItems,onItemsChange:items=>this.setState({presetItems:items})})]}):jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs("div",{className:styles$1_splitContainer,children:[jsxRuntimeExports.jsxs("div",{className:styles$1_navSidebar,children:[jsxRuntimeExports.jsx("button",{className:this.state.roleFilterOpen?styles$1_navBtnActive:styles$1_navBtn,onClick:()=>this.setState(prev=>prev.roleFilterOpen?{roleFilterOpen:!1,roleFilterSelected:new Set}:{roleFilterOpen:!0}),title:t("ui.roleFilter"),children:jsxRuntimeExports.jsx("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:jsxRuntimeExports.jsx("polygon",{points:"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"})})}),jsxRuntimeExports.jsx(TeamButton,{requests:this.props.requests,onOpenSession:session=>this.setState({teamModalSession:session}),navBtnClass:styles$1_navBtn}),jsxRuntimeExports.jsx(Popover,{content:this._buildUserPromptNav(),trigger:"hover",placement:"rightTop",overlayStyle:{maxWidth:400},children:jsxRuntimeExports.jsx("button",{className:styles$1_navBtn,title:t("ui.userPromptNav"),children:jsxRuntimeExports.jsx("img",{src:(null==(_a=this.props.userProfile)?void 0:_a.avatar)||defaultAvatarUrl,className:styles$1_navAvatarImg,alt:"User",onError:e=>{e.target.onerror=null,e.target.src=defaultAvatarUrl}})})})]}),jsxRuntimeExports.jsx("div",{className:styles$1_navSidebarContent,children:messageList})]}),jsxRuntimeExports.jsx(TeamModal,{session:this.state.teamModalSession,requests:this.props.requests,mainAgentSessions:this.props.mainAgentSessions,collapseToolResults:this.props.collapseToolResults,expandThinking:this.props.expandThinking,showFullToolContent:this.props.showFullToolContent,userProfile:this.props.userProfile,onViewRequest:this.props.onViewRequest,onClose:()=>this.setState({teamModalSession:null})})]})}}const styles={headerBar:"_headerBar_13tgp_2",logoWrap:"_logoWrap_13tgp_10",logoWrapActive:"_logoWrapActive_13tgp_17",logoImage:"_logoImage_13tgp_26",logoImageActive:"_logoImageActive_13tgp_36",compactBtn:"_compactBtn_13tgp_43",compactBtnNoBorder:"_compactBtnNoBorder_13tgp_52",tokenStatsTag:"_tokenStatsTag_13tgp_74",tokenStatsIcon:"_tokenStatsIcon_13tgp_82",liveTag:"_liveTag_13tgp_87",liveTagFill:"_liveTagFill_13tgp_103",liveTagContent:"_liveTagContent_13tgp_113",liveTagHistory:"_liveTagHistory_13tgp_120",liveTagText:"_liveTagText_13tgp_126",countdownStrong:"_countdownStrong_13tgp_131",qrcodePopover:"_qrcodePopover_13tgp_136",qrcodeSection:"_qrcodeSection_13tgp_143",qrcodeTitle:"_qrcodeTitle_13tgp_154",qrcodeUrlInput:"_qrcodeUrlInput_13tgp_161",qrcodeUrlCopy:"_qrcodeUrlCopy_13tgp_167",settingsGroupBox:"_settingsGroupBox_13tgp_178",settingsGroupTitle:"_settingsGroupTitle_13tgp_186",settingsItem:"_settingsItem_13tgp_195",settingsLabel:"_settingsLabel_13tgp_202",settingsDivider:"_settingsDivider_13tgp_206",logDirInput:"_logDirInput_13tgp_211",tokenStatsEmpty:"_tokenStatsEmpty_13tgp_221",tokenStatsContainer:"_tokenStatsContainer_13tgp_228",tokenStatsColumn:"_tokenStatsColumn_13tgp_234",toolStatsColumn:"_toolStatsColumn_13tgp_238",modelCard:"_modelCard_13tgp_243",modelCardSpaced:"_modelCardSpaced_13tgp_250 _modelCard_13tgp_243",modelName:"_modelName_13tgp_256",statsTable:"_statsTable_13tgp_266",th:"_th_13tgp_271",td:"_td_13tgp_281",label:"_label_13tgp_290",rowBorder:"_rowBorder_13tgp_300",rebuildCard:"_rebuildCard_13tgp_304",rebuildTotalRow:"_rebuildTotalRow_13tgp_312",promptExportBar:"_promptExportBar_13tgp_321",promptScrollArea:"_promptScrollArea_13tgp_325",promptEmpty:"_promptEmpty_13tgp_330",promptTimestamp:"_promptTimestamp_13tgp_336",textPromptCard:"_textPromptCard_13tgp_344",preText:"_preText_13tgp_353",systemCollapse:"_systemCollapse_13tgp_363",systemLabel:"_systemLabel_13tgp_370",preSys:"_preSys_13tgp_375",promptTextarea:"_promptTextarea_13tgp_385",projectStatsCenter:"_projectStatsCenter_13tgp_401",projectStatsEmpty:"_projectStatsEmpty_13tgp_407",projectStatsContent:"_projectStatsContent_13tgp_414",projectStatsUpdated:"_projectStatsUpdated_13tgp_420",projectStatsSummary:"_projectStatsSummary_13tgp_426",projectStatCard:"_projectStatCard_13tgp_432",projectStatValue:"_projectStatValue_13tgp_440",projectStatLabel:"_projectStatLabel_13tgp_448",projectStatsSection:"_projectStatsSection_13tgp_454",projectStatsSectionTitle:"_projectStatsSectionTitle_13tgp_460",projectStatsModelCard:"_projectStatsModelCard_13tgp_468",projectStatsModelHeader:"_projectStatsModelHeader_13tgp_475",projectStatsModelName:"_projectStatsModelName_13tgp_484",projectStatsModelCount:"_projectStatsModelCount_13tgp_490",pluginDirHint:"_pluginDirHint_13tgp_497",pluginDirPath:"_pluginDirPath_13tgp_503",pluginList:"_pluginList_13tgp_516",pluginItem:"_pluginItem_13tgp_522",pluginInfo:"_pluginInfo_13tgp_532",pluginName:"_pluginName_13tgp_540",pluginFile:"_pluginFile_13tgp_546",pluginHooks:"_pluginHooks_13tgp_552",pluginHookTag:"_pluginHookTag_13tgp_559",pluginActions:"_pluginActions_13tgp_568",pluginEmpty:"_pluginEmpty_13tgp_576",cachePopover:"_cachePopover_13tgp_583",cacheScrollArea:"_cacheScrollArea_13tgp_587",cachePopoverTitle:"_cachePopoverTitle_13tgp_592",cachePopoverHeader:"_cachePopoverHeader_13tgp_601",cacheCopyBtn:"_cacheCopyBtn_13tgp_607",cachePopoverEmpty:"_cachePopoverEmpty_13tgp_619",cacheTokenInfo:"_cacheTokenInfo_13tgp_625",cacheSection:"_cacheSection_13tgp_634",cacheSectionBordered:"_cacheSectionBordered_13tgp_639",cacheSectionLabel:"_cacheSectionLabel_13tgp_649",cacheSectionHeader:"_cacheSectionHeader_13tgp_650",cacheSectionTitle:"_cacheSectionTitle_13tgp_664",cacheSectionArrow:"_cacheSectionArrow_13tgp_699",toolChipGrid:"_toolChipGrid_13tgp_710",toolChipGridVertical:"_toolChipGridVertical_13tgp_717",cacheToolChip:"_cacheToolChip_13tgp_725",chipDetailBody:"_chipDetailBody_13tgp_742",chipDetailEmpty:"_chipDetailEmpty_13tgp_754",mcpServerGroup:"_mcpServerGroup_13tgp_759",mcpServerName:"_mcpServerName_13tgp_763",skillsList:"_skillsList_13tgp_771",skillCard:"_skillCard_13tgp_777",skillCardHeader:"_skillCardHeader_13tgp_784",skillCardName:"_skillCardName_13tgp_792",skillCardActions:"_skillCardActions_13tgp_800",skillCardDesc:"_skillCardDesc_13tgp_805",skillsEmpty:"_skillsEmpty_13tgp_813",skillsReadonlySection:"_skillsReadonlySection_13tgp_821",skillsReadonlyLabel:"_skillsReadonlyLabel_13tgp_827",skillCardDisabled:"_skillCardDisabled_13tgp_834",skillCardTitleRow:"_skillCardTitleRow_13tgp_841",skillSourceBadge:"_skillSourceBadge_13tgp_848",skillSource_user:"_skillSource_user_13tgp_858",skillSource_project:"_skillSource_project_13tgp_859",skillSource_plugin:"_skillSource_plugin_13tgp_860",skillSource_builtin:"_skillSource_builtin_13tgp_861",cacheCodeBlock:"_cacheCodeBlock_13tgp_867",cacheCodeBlockSystem:"_cacheCodeBlockSystem_13tgp_881",cacheNavBtn:"_cacheNavBtn_13tgp_895",cacheNavList:"_cacheNavList_13tgp_910",cacheNavItem:"_cacheNavItem_13tgp_916",cacheBlockHighlight:"_cacheBlockHighlight_13tgp_932",cacheBlockHighlightFading:"_cacheBlockHighlightFading_13tgp_937",cacheBorderSvg:"_cacheBorderSvg_13tgp_942",cacheBorderSvgFading:"_cacheBorderSvgFading_13tgp_951",cacheBorderRect:"_cacheBorderRect_13tgp_956",cacheDashRotate:"_cacheDashRotate_13tgp_1",thLeft:"_thLeft_13tgp_966",cachePercent:"_cachePercent_13tgp_971",cacheCalibrationLabel:"_cacheCalibrationLabel_13tgp_979",calibrationSelect:"_calibrationSelect_13tgp_987",cachePopoverPlaceholder:"_cachePopoverPlaceholder_13tgp_993",cacheWriteToken:"_cacheWriteToken_13tgp_998",cacheReadToken:"_cacheReadToken_13tgp_1002",cacheCtxPercent:"_cacheCtxPercent_13tgp_1006",pluginModalFooter:"_pluginModalFooter_13tgp_1012",pluginModalFooterLeft:"_pluginModalFooterLeft_13tgp_1017",pluginDirLabel:"_pluginDirLabel_13tgp_1023",pluginEmptyTitle:"_pluginEmptyTitle_13tgp_1028",pluginEmptyHint:"_pluginEmptyHint_13tgp_1033",cdnUrlLabel:"_cdnUrlLabel_13tgp_1039",cdnInput:"_cdnInput_13tgp_1045",titleIcon:"_titleIcon_13tgp_1052",qrcodeIcon:"_qrcodeIcon_13tgp_1061",iconMirror:"_iconMirror_13tgp_1088",disabledMenuItem:"_disabledMenuItem_13tgp_1093",currentProcessBtn:"_currentProcessBtn_13tgp_1098",proxySwapIcon:"_proxySwapIcon_13tgp_1103",fullWidthSelect:"_fullWidthSelect_13tgp_1108",proxyProfileTag:"_proxyProfileTag_13tgp_1113",proxyWarning:"_proxyWarning_13tgp_1127",proxyList:"_proxyList_13tgp_1137",proxyItem:"_proxyItem_13tgp_1143",proxyItemActive:"_proxyItemActive_13tgp_1155",proxyItemMain:"_proxyItemMain_13tgp_1160",proxyItemInfo:"_proxyItemInfo_13tgp_1168",proxyItemNameRow:"_proxyItemNameRow_13tgp_1174",proxyItemName:"_proxyItemName_13tgp_1174",proxyItemDetail:"_proxyItemDetail_13tgp_1186",proxyBuiltinTag:"_proxyBuiltinTag_13tgp_1195",proxyItemActions:"_proxyItemActions_13tgp_1205",proxyEditForm:"_proxyEditForm_13tgp_1211",proxyEditRow:"_proxyEditRow_13tgp_1219",proxyRequired:"_proxyRequired_13tgp_1229",proxyEditDivider:"_proxyEditDivider_13tgp_1234",proxyEditBtns:"_proxyEditBtns_13tgp_1239",themeToggle:"_themeToggle_13tgp_1250",themeToggleKnob:"_themeToggleKnob_13tgp_1278",themeToggleIcon:"_themeToggleIcon_13tgp_1308",headerRightRow:"_headerRightRow_13tgp_1313",headerCountdownTag:"_headerCountdownTag_13tgp_1319"};export{AppBase as A,BUILTIN_SKILL_NAMES as B,ConceptHelp as C,mergeActiveSkills as D,resolveTeammateNames as E,FullFileDiffView as F,setLang as G,getLang as H,ImageLightbox as I,getModelShort as J,formatRequestTag as K,renderMarkdown as L,restoreSlimmedEntry as M,stripPrivateKeys as N,OpenFolderIcon as O,isClaudeMdReminder as P,isSkillsReminder as Q,RefIcon as R,hasClaudeMdReminder as S,TerminalPanel as T,hasSkillsReminder as U,filterRelevantRequests as V,findPrevMainAgentTimestamp as W,apiUrl as a,buildGitTree as b,ImageViewer as c,FileContentView as d,computeTokenStats as e,fetchAllRepos as f,computeToolUsageStats as g,computeSkillUsageStats as h,isImageFile as i,computeCacheRebuildStats as j,classifyRequest as k,formatTokenCount as l,isSystemText as m,classifyUserContent as n,isMainAgent as o,styles$n as p,getModelMaxTokens as q,RefIcon$5 as r,styles as s,t,uploadFileAndGetPath as u,ChatView as v,ToolApprovalPanel as w,extractCachedContent as x,parseCachedTools as y,extractLoadedSkills as z};