@tencent-ai/agent-sdk 0.3.269 → 0.3.270
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.
- package/cli/CHANGELOG.md +21 -0
- package/cli/dist/codebuddy-headless.js +111 -108
- package/cli/dist/codebuddy-lite-wb.mjs +143 -140
- package/cli/dist/web-ui/assets/{CanvasPaneStandaloneView-AFymTrqt.js → CanvasPaneStandaloneView-CDO7isWn.js} +1 -1
- package/cli/dist/web-ui/assets/{CanvasView-CoxUIOeY.js → CanvasView-DJNkeBGK.js} +1 -1
- package/cli/dist/web-ui/assets/{ChangesView-CTnio3qy.js → ChangesView-fCuIktEK.js} +1 -1
- package/cli/dist/web-ui/assets/{DocsView-DfGq3q0Y.js → DocsView-B79hLvzs.js} +1 -1
- package/cli/dist/web-ui/assets/{EditorView-CYw2oZg1.js → EditorView-7YnlryBL.js} +1 -1
- package/cli/dist/web-ui/assets/{KeybindingsView-D6w9QUh3.js → KeybindingsView-CIDkpkAb.js} +1 -1
- package/cli/dist/web-ui/assets/{LogsView-CP5xbyy4.js → LogsView-Bcv52scT.js} +1 -1
- package/cli/dist/web-ui/assets/{MetricsView-C2c14t7O.js → MetricsView-DUSiPsda.js} +1 -1
- package/cli/dist/web-ui/assets/{PluginsView-BSEje_UM.js → PluginsView-BTOCj9co.js} +1 -1
- package/cli/dist/web-ui/assets/{RemoteControlView-2f1ZwMQ5.js → RemoteControlView-YqmY0vro.js} +1 -1
- package/cli/dist/web-ui/assets/{SettingsView-tOHto0ek.js → SettingsView-D2wIPOBw.js} +1 -1
- package/cli/dist/web-ui/assets/{SplitContainer-q9iSME5N.js → SplitContainer-DlEN5H4s.js} +1 -1
- package/cli/dist/web-ui/assets/{StatsView-BVIL7ys1.js → StatsView-C7iB42TQ.js} +1 -1
- package/cli/dist/web-ui/assets/{TasksView-BuNGf8H8.js → TasksView-CKm5dh4d.js} +1 -1
- package/cli/dist/web-ui/assets/{TerminalPaneView-IZXBrZd0.js → TerminalPaneView-Cs-7CKCw.js} +1 -1
- package/cli/dist/web-ui/assets/{TracesView-BagVLm59.js → TracesView-4MhXOs0J.js} +1 -1
- package/cli/dist/web-ui/assets/{WorkersView-CFhFpbFC.js → WorkersView-B5SyD2xB.js} +1 -1
- package/cli/dist/web-ui/assets/{abnfDiagram-O67JEVCF-BbyhIfaI.js → abnfDiagram-O67JEVCF-luL6Qe5x.js} +1 -1
- package/cli/dist/web-ui/assets/architecture-7GRP2DOG-CVyCykh_.js +1 -0
- package/cli/dist/web-ui/assets/{architectureDiagram-NJMV4G6O-DxDD6eVt.js → architectureDiagram-NJMV4G6O-CXZjweyd.js} +1 -1
- package/cli/dist/web-ui/assets/{blockDiagram-BEXU5L5S-DTRa2Tb9.js → blockDiagram-BEXU5L5S-DceMcN-6.js} +1 -1
- package/cli/dist/web-ui/assets/{c4Diagram-YGBWAQC7--r-yED_M.js → c4Diagram-YGBWAQC7-Chr6hcY4.js} +1 -1
- package/cli/dist/web-ui/assets/{canvas-store-BpQ38Vml.js → canvas-store-CLGZ388s.js} +1 -1
- package/cli/dist/web-ui/assets/channel-pxcszUh2.js +1 -0
- package/cli/dist/web-ui/assets/{chunk-3FUC2YCW-CrLNasJM.js → chunk-3FUC2YCW-BRXxiofJ.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-5DYCD2WN-BvGB0nx-.js → chunk-5DYCD2WN-BJidDn4j.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-742MDFTN-BTBNbBjA.js → chunk-742MDFTN-D8PKsc6_.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-7INBJB4K-CnYo9mzQ.js → chunk-7INBJB4K-0OOQXMSm.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-7M6MHVWA-ChPc3AIy.js → chunk-7M6MHVWA-CinmEwpu.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-7PRAP22T-BWJP0sRU.js → chunk-7PRAP22T-D0WpyU-H.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-GTNCS2PH-BWIt5JBZ.js → chunk-GTNCS2PH-NNZzPISm.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-GWA4HPMP-DPP9EzOc.js → chunk-GWA4HPMP-CVQtrfg2.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-MBY4JIJT-WW7QGbUd.js → chunk-MBY4JIJT-B2Fs2skV.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-NETBCI7D-DvHPTWgP.js → chunk-NETBCI7D-DS15Lcf7.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-O7XYJQB3-DNIHMsy6.js → chunk-O7XYJQB3-irIWVhcH.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-UA2S7LBM-FmyRAjon.js → chunk-UA2S7LBM-DHv_5vdC.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-WEXAMYUT-DPGJtaXE.js → chunk-WEXAMYUT-DTnPpX3o.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-Z7XXMR3K-xCwg-Yew.js → chunk-Z7XXMR3K-CL6QEwjv.js} +1 -1
- package/cli/dist/web-ui/assets/{chunk-ZIGJFQKS-C33Iz6Fl.js → chunk-ZIGJFQKS-D-9hFu_x.js} +1 -1
- package/cli/dist/web-ui/assets/{classDiagram-v2-NBCMYWYE-CYRZjfMU.js → classDiagram-v2-NBCMYWYE-BGpw8OWR.js} +1 -1
- package/cli/dist/web-ui/assets/{cssMode-ClDS6DMb.js → cssMode-DYH1pn7V.js} +1 -1
- package/cli/dist/web-ui/assets/{cynefin-OW5HDTMX-BZMPI_-L.js → cynefin-OW5HDTMX-BwDHcOb3.js} +1 -1
- package/cli/dist/web-ui/assets/{cynefinDiagram-VND7K2PF-xv7006O3.js → cynefinDiagram-VND7K2PF-C04bh7p8.js} +1 -1
- package/cli/dist/web-ui/assets/{dagre-6A5THRUB-BaA5Prow.js → dagre-6A5THRUB-Dea8s6xE.js} +1 -1
- package/cli/dist/web-ui/assets/{diagram-22UHCM2B-CLPFfA4R.js → diagram-22UHCM2B-DJVauquX.js} +1 -1
- package/cli/dist/web-ui/assets/{diagram-3UASUU5V-DX9eVGvg.js → diagram-3UASUU5V-C7-A4v72.js} +1 -1
- package/cli/dist/web-ui/assets/{diagram-ATOU4E4O-C6tAUS3M.js → diagram-ATOU4E4O-7B6YBDOj.js} +1 -1
- package/cli/dist/web-ui/assets/{diagram-CDSNMT55-C4bjVjgp.js → diagram-CDSNMT55-DMAwoRXf.js} +1 -1
- package/cli/dist/web-ui/assets/{diagram-MLGK6HIB--R4pb2v7.js → diagram-MLGK6HIB-CNB_vlIZ.js} +1 -1
- package/cli/dist/web-ui/assets/{diagram-MPIPVDR6-DBZrcvRV.js → diagram-MPIPVDR6-hyhLuNp3.js} +1 -1
- package/cli/dist/web-ui/assets/{ebnfDiagram-ZINNZB2B-guH8XqK5.js → ebnfDiagram-ZINNZB2B-CJWaxsG5.js} +1 -1
- package/cli/dist/web-ui/assets/{editor-store-B581kWHa.js → editor-store-BxjPLrr9.js} +1 -1
- package/cli/dist/web-ui/assets/{editor.main-BDJb4JDA.js → editor.main-Czm6gHJH.js} +2 -2
- package/cli/dist/web-ui/assets/{elk-276RUBZZ-CeiKMULj.js → elk-276RUBZZ-D5Y00SxR.js} +1 -1
- package/cli/dist/web-ui/assets/{erDiagram-OPXOYQCR-sBAqBzrO.js → erDiagram-OPXOYQCR-BmYHBZJv.js} +1 -1
- package/cli/dist/web-ui/assets/eventmodeling-NTZA5JFV-D5vLpI9F.js +1 -0
- package/cli/dist/web-ui/assets/flowDiagram-KWPJA3E3-Cf58WNhf.js +1 -0
- package/cli/dist/web-ui/assets/{ganttDiagram-FUAMR5RP-C6_HpREX.js → ganttDiagram-FUAMR5RP-DbhB40jH.js} +1 -1
- package/cli/dist/web-ui/assets/{gitGraph-4MIJSDKK-BXoSq3Gg.js → gitGraph-4MIJSDKK-mjDyHNS1.js} +1 -1
- package/cli/dist/web-ui/assets/{gitGraphDiagram-X574FWY7-CGtaH2jU.js → gitGraphDiagram-X574FWY7-D7jHGUGu.js} +1 -1
- package/cli/dist/web-ui/assets/{htmlMode-D5olfuMo.js → htmlMode-BSBNaQvK.js} +1 -1
- package/cli/dist/web-ui/assets/{index-ClsikMuk.js → index-BtMp20L0.js} +6 -6
- package/cli/dist/web-ui/assets/{info-A6RAGUB7-DEwLfJ7B.js → info-A6RAGUB7-yf2Iyt5X.js} +1 -1
- package/cli/dist/web-ui/assets/{infoDiagram-VRGFBTTK-DCSOdK6X.js → infoDiagram-VRGFBTTK-CmWWZT96.js} +1 -1
- package/cli/dist/web-ui/assets/{ishikawaDiagram-OU5B5YK6-BseHnvYw.js → ishikawaDiagram-OU5B5YK6-NcOpKVNl.js} +1 -1
- package/cli/dist/web-ui/assets/{journeyDiagram-ZHPQQLJL-BRxQJTqW.js → journeyDiagram-ZHPQQLJL-dY4w9tp1.js} +1 -1
- package/cli/dist/web-ui/assets/{jsonMode-Cg5YHEwQ.js → jsonMode-BUaimt20.js} +1 -1
- package/cli/dist/web-ui/assets/{kanban-definition-PNTS6WVX-KI9YMfJk.js → kanban-definition-PNTS6WVX-BctMsDJJ.js} +1 -1
- package/cli/dist/web-ui/assets/{line-DprNiO-0.js → line-BYkTAP3U.js} +1 -1
- package/cli/dist/web-ui/assets/loader-circle-wVK1RLLa.js +1 -0
- package/cli/dist/web-ui/assets/{mermaid-parser.core-GTP4u3FU.js → mermaid-parser.core-BLRTQ_8m.js} +3 -3
- package/cli/dist/web-ui/assets/{mermaid.core-CNUJl-CG.js → mermaid.core-DGYOOYu5.js} +4 -4
- package/cli/dist/web-ui/assets/{mindmap-definition-NLK3R4M7-C2PcP9ry.js → mindmap-definition-NLK3R4M7-DtFEhmgs.js} +1 -1
- package/cli/dist/web-ui/assets/{packet-AYTQ26CC-CZLuLwvG.js → packet-AYTQ26CC-DG8Ws-Q6.js} +1 -1
- package/cli/dist/web-ui/assets/{pegDiagram-GJSIUBJH-Bm2hR9le.js → pegDiagram-GJSIUBJH-C1B_R8sV.js} +1 -1
- package/cli/dist/web-ui/assets/{pie-WAS4IAKB-CRzoh5ox.js → pie-WAS4IAKB-WpUKIR_Y.js} +1 -1
- package/cli/dist/web-ui/assets/{pieDiagram-5QR66LMP-CTJ2r9nd.js → pieDiagram-5QR66LMP-C7VoNMU4.js} +1 -1
- package/cli/dist/web-ui/assets/power-BNRlQx4o.js +1 -0
- package/cli/dist/web-ui/assets/{quadrantDiagram-O4NWA36T-CTKetN5z.js → quadrantDiagram-O4NWA36T-CXYTQ4y2.js} +1 -1
- package/cli/dist/web-ui/assets/{radar-RG4KPBEZ-DXjTvI5t.js → radar-RG4KPBEZ-C3VHLzXv.js} +1 -1
- package/cli/dist/web-ui/assets/{railroad-74A4TZTK-BDdQn4Gc.js → railroad-74A4TZTK-Py_5hLH_.js} +1 -1
- package/cli/dist/web-ui/assets/railroad-abnf-HS5TGJTU-CqoDhjmj.js +1 -0
- package/cli/dist/web-ui/assets/railroad-ebnf-LZEXJU2U-DUWdDy3z.js +1 -0
- package/cli/dist/web-ui/assets/railroad-peg-WCYAUIDC-Co6yi1zs.js +1 -0
- package/cli/dist/web-ui/assets/{railroadDiagram-XR7U4H2S-B_YntG1t.js → railroadDiagram-XR7U4H2S-5OEyONOk.js} +1 -1
- package/cli/dist/web-ui/assets/{requirementDiagram-PLB6GJNP-CDjL2cNi.js → requirementDiagram-PLB6GJNP-DUJYTLHd.js} +1 -1
- package/cli/dist/web-ui/assets/{sankeyDiagram-IPEJSGJF-qXJEVvf1.js → sankeyDiagram-IPEJSGJF-Bedevch2.js} +1 -1
- package/cli/dist/web-ui/assets/{sequenceDiagram-PO4LG4MO-l-r7gLpE.js → sequenceDiagram-PO4LG4MO-pgraPAoD.js} +1 -1
- package/cli/dist/web-ui/assets/{server-O9q4QgxP.js → server-Ccbyj1qh.js} +1 -1
- package/cli/dist/web-ui/assets/{sidebar-store-BI5HJsXT.js → sidebar-store-Rkdixr53.js} +1 -1
- package/cli/dist/web-ui/assets/{stateDiagram-v2-GCMORJYK-IswgvzFJ.js → stateDiagram-v2-GCMORJYK-DALpfmXP.js} +1 -1
- package/cli/dist/web-ui/assets/{swimlanes-2SLR337P-JwNdJjRm.js → swimlanes-2SLR337P-DYo2RgRV.js} +1 -1
- package/cli/dist/web-ui/assets/swimlanesDiagram-TC7HE7FX-Dxiovvmi.js +8 -0
- package/cli/dist/web-ui/assets/{terminal-store-DxSL6lew.js → terminal-store-DOTQJFag.js} +1 -1
- package/cli/dist/web-ui/assets/{theme-store-B-x3NJPZ.js → theme-store-7kL2_Dih.js} +1 -1
- package/cli/dist/web-ui/assets/{timeline-definition-EJHVYXUP-DZbLKd2p.js → timeline-definition-EJHVYXUP-teGYk-dY.js} +1 -1
- package/cli/dist/web-ui/assets/{timer-CPkvO7Hr.js → timer-DsflRbuo.js} +1 -1
- package/cli/dist/web-ui/assets/{treeView-Q6P3EWNA-ClDx_xC6.js → treeView-Q6P3EWNA-DsuuN89d.js} +1 -1
- package/cli/dist/web-ui/assets/{treemap-WGGIJYW6-RDLtBb4P.js → treemap-WGGIJYW6-BqqhgGGn.js} +1 -1
- package/cli/dist/web-ui/assets/{triangle-alert-RxeG6BcU.js → triangle-alert-BL4rmdOu.js} +1 -1
- package/cli/dist/web-ui/assets/{tsMode-D4E8Qd-x.js → tsMode-B6SPhuNF.js} +1 -1
- package/cli/dist/web-ui/assets/{use-i18n-BCKBlfpd.js → use-i18n-BvJYl_9l.js} +1 -1
- package/cli/dist/web-ui/assets/{usecaseDiagram-POWQR4AR-DEfQU35o.js → usecaseDiagram-POWQR4AR-2sD6xPnt.js} +1 -1
- package/cli/dist/web-ui/assets/{vennDiagram-UO4OBE2U-C4yxYnjL.js → vennDiagram-UO4OBE2U-DHLn-BEs.js} +1 -1
- package/cli/dist/web-ui/assets/{wardley-WFR3VGLG-wNwnrEey.js → wardley-WFR3VGLG-BD5dMb6v.js} +1 -1
- package/cli/dist/web-ui/assets/{wardleyDiagram-VNRHLVJA-nrPZlF5q.js → wardleyDiagram-VNRHLVJA-6V8TM6o7.js} +1 -1
- package/cli/dist/web-ui/assets/{workspace-dock-store-5JIgHIqh.js → workspace-dock-store-D1kqgYR-.js} +1 -1
- package/cli/dist/web-ui/assets/{xychartDiagram-PMCCYNJV-BXJAFZRI.js → xychartDiagram-PMCCYNJV-B5wGEmv3.js} +1 -1
- package/cli/dist/web-ui/assets/{zap-JdzyzkaE.js → zap-u2SXZ7au.js} +1 -1
- package/cli/dist/web-ui/index.html +9 -9
- package/cli/dist/web-ui/sw.js +1 -1
- package/cli/dist-server/2701.codebuddy.js +2 -2
- package/cli/dist-server/3080.codebuddy.js +1 -1
- package/cli/dist-server/3163.codebuddy.js +1 -1
- package/cli/dist-server/codebuddy.js +41 -39
- package/cli/dist-server/types/node/agent-task/agent-task.d.ts +1 -0
- package/cli/dist-server/types/node/permission/brokered-sandbox/host-service.d.ts +1 -0
- package/cli/dist-server/types/node/permission/sandbox-orchestrator.d.ts +2 -1
- package/cli/dist-server/types/node/server/formats/acp/acp-trace-context.d.ts +2 -0
- package/cli/dist-server/types/node/server/types.d.ts +8 -1
- package/cli/dist-server/types/node/utils/clipboard-utils.d.ts +1 -1
- package/cli/dist-server/types/node/utils/image-preparation-guard.d.ts +5 -1
- package/cli/dist-server/types/node/utils/request-scene.d.ts +5 -0
- package/cli/dist-server/types/vendor/cbc-core/node/utils/history-utils.d.ts +33 -8
- package/cli/dist-server/types/vendor/cbc-core/node/utils/input-item-utils.d.ts +27 -0
- package/cli/package.json +4 -4
- package/cli/product.cloudhosted.json +2 -2
- package/cli/product.internal.json +2 -2
- package/cli/product.ioa.json +2 -2
- package/cli/product.json +2 -2
- package/cli/product.selfhosted.json +2 -2
- package/package.json +1 -1
- package/cli/dist/web-ui/assets/architecture-7GRP2DOG-CHYM9JTs.js +0 -1
- package/cli/dist/web-ui/assets/channel-DtDG5p59.js +0 -1
- package/cli/dist/web-ui/assets/eventmodeling-NTZA5JFV-PAdtPpRo.js +0 -1
- package/cli/dist/web-ui/assets/flowDiagram-KWPJA3E3-EJkyCIxy.js +0 -1
- package/cli/dist/web-ui/assets/loader-circle-1kyJNWeb.js +0 -1
- package/cli/dist/web-ui/assets/power-CbA3xFVD.js +0 -1
- package/cli/dist/web-ui/assets/railroad-abnf-HS5TGJTU-C9Q7Ymc5.js +0 -1
- package/cli/dist/web-ui/assets/railroad-ebnf-LZEXJU2U-Bg_FzoOI.js +0 -1
- package/cli/dist/web-ui/assets/railroad-peg-WCYAUIDC-cvFGmoWK.js +0 -1
- package/cli/dist/web-ui/assets/swimlanesDiagram-TC7HE7FX-Bopn2-Vs.js +0 -8
|
@@ -5,6 +5,6 @@ import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{u as t}from"./markdown
|
|
|
5
5
|
|
|
6
6
|
`);g=n.pop()||``;for(let e of n){let t=e.split(`
|
|
7
7
|
`),n=``;for(let e of t)e.startsWith(`data: `)&&(n+=e.substring(6));if(n)try{let e=JSON.parse(n);this.handleMessage(e,c)}catch{}}},b=!1,x=null,ee=()=>{x!==null&&(clearTimeout(x),x=null)};t===`session/prompt`&&(x=setTimeout(()=>{x=null,!b&&this.requestTransports.has(l)&&(console.warn(`[ACP] session/prompt produced no data within `+e.PROMPT_FIRST_BYTE_TIMEOUT_MS+`ms; releasing the prompt lane`),this.abortRequestTransport(l,Error(`ACP prompt timed out before the agent produced any output`)),this.recoverAfterPromptTransportFailure())},e.PROMPT_FIRST_BYTE_TIMEOUT_MS)),m.onprogress=()=>{b||(b=!0,ee()),y()},m.onload=()=>{if(v(),y(),m.status<200||m.status>=300){let e=this.pendingRequests.get(l);if(e){this.pendingRequests.delete(l);let u=``,d;try{let e=JSON.parse(m.responseText);d=An(e?.error,t),!d&&e?.error?.message&&(u=e.error.message)}catch{}let f=d?.message||u||`ACP request failed: ${m.status} ${m.statusText}`;if(m.status===409&&Lt(f)){e.reject(d??Error(f));return}if(m.status===409&&o&&this.shouldRecoverConflict(t,r)&&!this.shouldSkipRecovery()){console.warn(`ACP connection lost (409), reconnecting and retrying ${t}...`),this.reconnect().then(async()=>this.request(t,n,r+1,i,a,o,s,c)).then(t=>e.resolve(t),t=>e.reject(t));return}e.reject(d??Error(f))}return}if(g.trim()){let e=g.split(`
|
|
8
|
-
`),t=``;for(let n of e)n.startsWith(`data: `)&&(t+=n.substring(6));if(t)try{let e=JSON.parse(t);this.handleMessage(e,c)}catch{}}let e=this.pendingRequests.get(l);if(e){this.pendingRequests.delete(l);let r=t===`session/prompt`&&n&&typeof n==`object`&&typeof n.sessionId==`string`?n.sessionId:void 0;r&&this.cancellingSessionIds.has(r)?(this.cancellingSessionIds.delete(r),e.resolve({stopReason:`cancelled`})):e.reject(Error(`No response received for request: ${t}`))}},m.onerror=()=>{v();let e=this.pendingRequests.get(l);if(e){if(this.pendingRequests.delete(l),o&&r<2&&t!==`initialize`&&s===void 0&&this.isSafeToRetryAfterTransportFailure(t)&&!this.shouldSkipRecovery()){console.warn(`Network error during ACP request: ${t}, reconnecting and retrying (${r+1}/2)...`),this.reconnect().then(()=>this.request(t,n,r+1,i,a,o,s,c)).then(t=>e.resolve(t),t=>e.reject(t));return}if(t===`session/prompt`){let e=n&&typeof n==`object`&&typeof n.sessionId==`string`?n.sessionId:void 0;e&&(this.clearQueuedPrompts(e,`Queued prompt discarded after an ambiguous ACP transport failure`),this.notify(`session/cancel`,{sessionId:e}).catch(()=>{})),t===`session/prompt`&&this.recoverAfterPromptTransportFailure()}e.reject(Error(`Network error during ACP request: ${t}`))}},m.ontimeout=()=>{v();let e=this.pendingRequests.get(l);if(e){if(this.pendingRequests.delete(l),o&&r<1&&t!==`initialize`&&s===void 0&&this.isSafeToRetryAfterTransportFailure(t)&&!this.shouldSkipRecovery()){console.warn(`Request timeout: ${t}, reconnecting and retrying...`),this.reconnect().then(()=>this.request(t,n,r+1,i,a,o,s,c)).then(t=>e.resolve(t),t=>e.reject(t));return}e.reject(Error(`Request timeout: ${t}`))}},m.onabort=()=>{v();let e=this.pendingRequests.get(l);e&&(this.pendingRequests.delete(l),e.reject(Error(`ACP request aborted: ${t}`)))},m.timeout=s??(t===`session/prompt`?0:6e5);try{this.beginAcpPost();let e=n&&typeof n==`object`&&typeof n.sessionId==`string`?n.sessionId:void 0;this.requestTransports.set(l,{method:t,sessionId:e,blocksPromptQueue:a,abort:()=>{try{m.abort()}finally{v()}}}),m.send(JSON.stringify(u))}catch(e){v(),this.pendingRequests.delete(l),p(e instanceof Error?e:Error(String(e)))}})}async fetchAcpWithTimeout(e,t,n){if(this.shouldSkipRecovery()&&e.method!==`DELETE`)throw Error(`${n} skipped: host unloading`);let r=new AbortController,i=setTimeout(()=>r.abort(),t);try{return await fetch(`${this.baseUrl}/api/v1/acp`,{...e,signal:r.signal})}catch(e){throw r.signal.aborted?Error(`${n} timed out after ${t}ms`):e}finally{clearTimeout(i)}}async notify(t,n){let r={jsonrpc:`2.0`,method:t,params:n};this.beginAcpPost();try{let n=await this.fetchAcpWithTimeout({method:`POST`,headers:this.buildAcpHeaders(),body:JSON.stringify(r)},e.ACP_CONTROL_TIMEOUT_MS,`ACP notification ${t}`);if(!n.ok)throw Error(`ACP notification failed: ${n.status} ${n.statusText}`);typeof n.text==`function`&&await n.text().catch(()=>void 0)}finally{this.endAcpPost()}}handleMessage(e,t){if(`method`in e&&`id`in e&&e.id!==void 0&&e.id!==null){if(e.method===`session/request_permission`){this.handlePermissionRequest(e.id,e.params);return}if(e.method===`elicitation/create`){this.handleElicitationCreate(e.id,e.params);return}if(e.method===`_codebuddy.ai/question`){this.handleExtMethodQuestion(e.id,e.params);return}if(e.method===`_codebuddy.ai/delegateTool`){this.handleExtMethodDelegateTool(e.id,e.params);return}this.sendJsonRpcError(e.id,-32601,`Unsupported ACP client method: ${String(e.method)}`).catch(t=>{console.warn(`Failed to reject unsupported ACP method ${String(e.method)}:`,t)});return}if(`id`in e&&e.id!==void 0&&e.id!==null&&!(`method`in e)){let t=this.pendingRequests.get(e.id);t&&(this.pendingRequests.delete(e.id),`error`in e&&e.error?t.reject(new Dn(e.error,t.method)):t.resolve(e.result))}if(`method`in e&&e.method===`session/update`){let n=t?.transportSource??`acp`;if(n===`acp`&&this.busAuthorityActive||t?.suppressSessionUpdates)return;let r=e.params;if(r?.update){let e=r.update,t=e?._meta||{},i=t[`codebuddy.ai/newSessionId`],a=r.sessionId??e.sessionId;if(t[`codebuddy.ai/sessionReset`]&&typeof i==`string`&&(!a||!this.currentSessionId||a===this.currentSessionId)){let e=this.currentSessionId;this.currentSessionId=i,this.clearQueuedPrompts(e??void 0,`ACP session was replaced before prompt dispatch`),Y(i),e&&this.retireReplacedSessionPrompts(e)}let o=t[`codebuddy.ai/interruptionRequest`];o&&(K({event:`client-broadcast`,interruptionId:o.interruptionId,toolCallId:o.toolCallId,toolName:o.toolName}),this.emit(`interruption_request`,{sessionUpdate:`interruption_request`,sessionId:r.sessionId,interruptionId:o.interruptionId||`ir-${o.toolCallId}`,reason:`Tool requires approval`,options:o.options||[],toolName:o.toolName,toolTitle:o.toolTitle,toolInput:o.toolInput,toolCallId:o.toolCallId,workflowSourceText:o.workflowSourceText,toolRiskMetadata:o.toolRiskMetadata,mcpUiIntercept:o.mcpUiIntercept===!0}));let s=r.update.sessionUpdate,c=r.sessionId??r.update.sessionId;this.emit(s,{...r.update,sessionId:c,__transportSource:n});let l=r.update?._meta?.[`codebuddy.ai/turn`];l&&typeof l==`object`&&this.emit(`busTurn`,{...l,sessionId:c})}}else if(`method`in e&&e.method!==`session/update`&&!(`id`in e&&e.id!==void 0&&e.id!==null)){let t=e.method;if(t===`_codebuddy.ai/checkpoint`){let t=e.params,n=t?.checkpoint&&typeof t.checkpoint==`object`?{...t.checkpoint,sessionId:t.sessionId}:t?.checkpoint;t?.event===`created`?this.emit(`checkpointCreated`,n):t?.event===`updated`?this.emit(`checkpointUpdated`,n):t?.event===`reverted`&&this.emit(`checkpointReverted`,n)}else t===`_codebuddy.ai/modRender`?this.emit(`modRender`,e.params):t===`_codebuddy.ai/modRenderFold`&&this.emit(`modRenderFold`,e.params)}}mapPermissionDecisionToOptionId(e){return{allowAll:`allow_always`,allow:`allow`,rejectAndExitPlan:`reject_and_exit_plan`,deny:`reject`}[e]??`reject`}async sendJsonRpcResult(e,t){await this.sendJsonRpcResponse({jsonrpc:`2.0`,id:e,result:t},e)}async sendJsonRpcError(e,t,n){await this.sendJsonRpcResponse({jsonrpc:`2.0`,id:e,error:{code:t,message:n}},e)}async sendJsonRpcResponse(t,n){this.beginAcpPost();try{let r=await this.fetchAcpWithTimeout({method:`POST`,headers:this.buildAcpHeaders(),body:JSON.stringify(t)},e.ACP_CONTROL_TIMEOUT_MS,`ACP response ${n}`);if(!r.ok){let e=``;try{let t=await r.json();t?.error?.message&&(e=t.error.message)}catch{}throw Error(e||`ACP response failed: ${r.status} ${r.statusText}`)}typeof r.text==`function`&&await r.text().catch(()=>void 0)}finally{this.endAcpPost()}}buildAcpHeaders(){let e={"Content-Type":`application/json`,Accept:`application/json, text/event-stream`,[D]:`1`};return this.connectionId&&(e[`acp-connection-id`]=this.connectionId),this.sessionToken&&(e[`acp-session-token`]=this.sessionToken),this.token&&(e.Authorization=`Bearer ${this.token}`),e}applyConnectionGrant(e){if(!e||typeof e!=`object`)throw Error(`ACP connect endpoint returned an invalid grant`);let t=e;if(typeof t.connectionId!=`string`||!t.connectionId)throw Error(`ACP connect endpoint returned an invalid connection id`);this.connectionId=t.connectionId,this.sessionToken=typeof t.sessionToken==`string`?t.sessionToken:null,this.initializedConnectionId=null,this.initializeResult=null,this.persistAcpGrant(),this.startGrantHeartbeat(),this.installPageHideCleanup()}persistAcpGrant(){this.connectionId&&Jt({connectionId:this.connectionId,sessionToken:this.sessionToken,tabId:gn(),docId:Wt(),at:Date.now()})}startGrantHeartbeat(){this.stopGrantHeartbeat(),this.grantHeartbeatTimer=setInterval(()=>{if(!this.connectionId){this.stopGrantHeartbeat();return}this.persistAcpGrant()},e.GRANT_HEARTBEAT_INTERVAL_MS)}stopGrantHeartbeat(){this.grantHeartbeatTimer!==null&&(clearInterval(this.grantHeartbeatTimer),this.grantHeartbeatTimer=null)}async releaseGrant(t,n){let r={[D]:`1`,"acp-connection-id":t};n&&(r[`acp-session-token`]=n),this.token&&(r.Authorization=`Bearer ${this.token}`);try{let t=await this.fetchAcpWithTimeout({method:`DELETE`,headers:r},e.ACP_DISCONNECT_TIMEOUT_MS,`ACP stale grant release`);return t.ok||t.status===401||t.status===403||t.status===404}catch{return!1}}async flushReclaimableGrants(){let e={tabId:gn(),docId:Wt()},t=S(),n=z().filter(n=>n.connectionId!==this.connectionId&&Xt(n,e,Date.now(),t)&&!this.attemptedGrantReleases.has(n.connectionId));n.length!==0&&await Promise.all(n.map(async e=>{this.attemptedGrantReleases.add(e.connectionId),await this.releaseGrant(e.connectionId,e.sessionToken)&&H(e.connectionId)}))}installPageHideCleanup(){typeof window>`u`||this.pageHideHandler||(this.pageHideHandler=e=>{e.persisted||this.releaseConnectionForPageExit()},window.addEventListener(`pagehide`,this.pageHideHandler))}removePageHideCleanup(){typeof window<`u`&&this.pageHideHandler&&window.removeEventListener(`pagehide`,this.pageHideHandler),this.pageHideHandler=null}recoverAfterPromptTransportFailure(){!this.shouldSkipRecovery()&&this.connectionId&&this.reconnect().catch(e=>{console.warn(`[ACP] failed to recover after prompt transport failure:`,e)})}shouldSkipRecovery(){if(this.hostUnloading)return!0;if(typeof document>`u`||typeof window>`u`)return!1;try{if(!document.defaultView)return!0;let e=window.frameElement;if(e&&!e.isConnected)return!0}catch{}return!1}releaseConnectionForPageExit(){if(this.hostUnloading=!0,this.notificationStreamDesired=!1,this.closeNotificationStream(),!this.connectionId)return;let e=this.buildAcpHeaders();delete e[`Content-Type`],V(this.connectionId),this._status=`disconnected`,this.stopGrantHeartbeat(),this.connectionId=null,this.sessionToken=null,fetch(`${this.baseUrl}/api/v1/acp`,{method:`DELETE`,headers:e,keepalive:!0}).catch(()=>{})}shouldRecoverConflict(e,t){return e!==`initialize`&&t<yn}isSafeToRetryAfterTransportFailure(e){return e!==`session/prompt`&&e!==`session/new`&&e!==`_codebuddy.ai/mcpUiCallTool`}handlePermissionRequest(e,t){let n=t?.toolCall,r=`perm-${e}`,i=n?._meta?.[`codebuddy.ai/toolName`]||n?.toolName||`tool`,a=n?.title||i,o=n?.rawInput,s=n?.toolCallId;this.permissionRequestIds.set(r,e),s&&this.permissionRequestToolCallIds.set(s,r),K({event:`client-acp`,requestId:String(e),interruptionId:r,toolCallId:s,toolName:i}),this.emit(`interruption_request`,{sessionUpdate:`interruption_request`,interruptionId:r,reason:`Tool requires approval`,options:(t?.options||[]).map(e=>e.optionId||e.name),toolName:i,toolTitle:a,toolInput:o,toolCallId:s})}handleExtMethodQuestion(e,t){let{sessionId:n,toolCallId:r,schema:i}=t||{},a=(i?.questions||[]).map(e=>({id:e.id,question:e.question,header:e.header||``,options:(e.options||[]).map(e=>({label:e.label||``,description:e.description||``})),multiSelect:!!e.multiSelect}));this.extMethodRequestIds.set(r,e),this.emit(`question_request`,{toolCallId:r,sessionId:n,questions:a})}async handleExtMethodDelegateTool(e,t){let{toolId:n,input:r}=t||{};try{let i=St(n);if(i){let t=Ct.getState().findHandle(n);if(!t){await this.sendJsonRpcResult(e,{status:`error`,error:{message:`Widget bridge not registered for tool: ${n}. The widget may have been closed; ask the user to reopen the corresponding MCP App.`}});return}let a=await t.callAppTool({name:i.toolName,arguments:r&&typeof r==`object`?r:{}});await this.sendJsonRpcResult(e,{status:`success`,output:a});return}if(n===`ui-control`){let n=await wt.execute({sessionId:t.sessionId,action:r.action,target:r.target,value:r.value});await this.sendJsonRpcResult(e,{status:`success`,output:n})}else if(n===`ui-query`){let t=await wt.queryElements({selector:r?.selector,role:r?.role,includeHidden:r?.includeHidden,limit:r?.limit});await this.sendJsonRpcResult(e,{status:`success`,output:t})}else await this.sendJsonRpcResult(e,{status:`error`,error:{message:`Unknown delegate tool: ${n}`}})}catch(t){await this.sendJsonRpcResult(e,{status:`error`,error:{message:t instanceof Error?t.message:String(t)}})}}handleElicitationCreate(e,t){let n=t?._meta&&t._meta[`codebuddy.ai`],r=n?.elicitationId;if(!r){this.sendJsonRpcResult(e,{action:`cancel`}).catch(()=>void 0);return}this.elicitationRequestIds.set(r,e),this.emit(`elicitation_request`,{elicitationId:r,requestId:e,sessionId:t?.sessionId,toolCallId:t?.toolCallId??n?.toolCallId,mode:t?.mode,message:t?.message,requestedSchema:t?.requestedSchema,_meta:t?._meta})}async respondElicitation(e,t){let n=this.elicitationRequestIds.get(e);if(n===void 0){console.warn(`[Elicitation] No pending request for id ${e}`);return}this.elicitationRequestIds.delete(e),await this.sendJsonRpcResult(n,t)}emit(e,t){let n=this.listeners.get(e);if(n)for(let r of n)try{r(t)}catch(t){console.error(`Event handler error for ${e}:`,t)}}setStatus(e){this._status=e,this.emit(`status_change`,e)}},Z=E(e=>({info:null,loading:!1,fetch:async()=>{e({loading:!0});try{let t=await O(`/api/v1/info`,{headers:A()});if(t.ok){let n=await t.json();e({info:n.data??n,loading:!1})}else e({loading:!1})}catch{e({loading:!1})}}})),Q=E((e,t)=>({folder:null,explicitFolder:null,initialized:!1,setFolder:n=>{if(t().folder===n)return;let r=Z.getState().info?.cwd;e({folder:n,explicitFolder:r&&n!==r?n:null,initialized:!0}),yt(n)}}));function Nn(){let e=vt(),t=Z.getState().info;if(e&&t?.cwd){let n=e!==t.cwd;Q.setState({folder:e,explicitFolder:n?e:null,initialized:!0});return}if(t?.cwd&&!e){Q.setState({folder:t.cwd,explicitFolder:null,initialized:!0}),yt(t.cwd);return}e&&Q.setState({folder:e,explicitFolder:null,initialized:!0});let n=Z.subscribe(e=>{if(!e.info?.cwd)return;let t=e.info.cwd,r=Q.getState().folder;r?r!==t&&Q.setState({explicitFolder:r}):(Q.setState({folder:t,explicitFolder:null,initialized:!0}),yt(t)),n()})}var Pn=[];function Fn(e,t){if(S())return;let n=()=>{et.list(`workspace`,t).then(n=>{let r=Q.getState();if(r.folder===e&&(r.explicitFolder||void 0)===t)for(let e of Pn)e.apply(n)}).catch(n=>{let r=Q.getState();r.folder===e&&(r.explicitFolder||void 0)===t&&(console.error(`[persist] Folder reload failed, retrying:`,n),setTimeout(()=>Fn(e,t),3e3))})};typeof requestIdleCallback<`u`?requestIdleCallback(n,{timeout:3e3}):setTimeout(n,2e3)}Q.subscribe((e,t)=>{let n=e.folder!==t.folder,r=e.explicitFolder!==t.explicitFolder;if(e.folder&&(n||r)){for(let e of Pn)e.prepare(t.explicitFolder||void 0);Fn(e.folder,e.explicitFolder||void 0)}});function In(e){return e instanceof Set?new Set(e):e instanceof Map?new Map(e):Array.isArray(e)?[...e]:e}function Ln(e){return e instanceof Set?[...e]:e instanceof Map?[...e.entries()]:e}function Rn(e,t){return(n,r,i)=>{let a=e(n,r,i),o=null,s=!1,c=0,l=t.debounceMs??500,u=t.scope??`global`,d=t.folderScoped===!0,f=Object.fromEntries(t.fields.map(e=>[e,In(a[e])]));function p(){if(d)return Q.getState().explicitFolder||void 0}function m(e,n,i){let a=r(),o=t.fields.map(e=>({key:`${t.namespace}.${String(e)}`,value:Ln(a[e])}));if(t.localStorageKey)try{let e={};for(let n of t.fields)e[String(n)]=Ln(a[n]);localStorage.setItem(t.localStorageKey,JSON.stringify(e))}catch{}if(S())return;let s=n?{keepalive:!0,folder:e}:{folder:e};et.setMany(o,u,s).catch(e=>{let r=n?` (${i})`:``;console.error(`[persist:${t.namespace}] Save failed${r}:`,e)})}function h(e,r=``,i=!1){let a=i?new Set(t.keepOnFolderSwitch??[]):null,o={},s=!1;for(let n of t.fields){if(a?.has(n))continue;let t=`${r}${String(n)}`;t in e&&e[t]!==void 0&&(Reflect.set(o,n,e[t]),s=!0)}s&&(t.onLoad?t.onLoad(o,n):n(o))}function g(e,t=p()){o!==null&&(clearTimeout(o),o=null,m(t,!0,e))}function _(){s||(o&&clearTimeout(o),o=setTimeout(()=>{o=null,m(p(),!1)},l))}function v(e){if(S())return;let n=c;et.getNamespace(t.namespace,u,e).then(e=>{n===c&&e&&Object.keys(e).length!==0&&h(e)}).catch(e=>{n===c&&console.error(`[persist:${t.namespace}] Load failed:`,e)})}if(typeof window<`u`){let e=()=>g(`beforeunload`);window.addEventListener(`beforeunload`,e),window.addEventListener(`pagehide`,e),document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&g(`hidden`)})}return i.subscribe((e,n)=>{for(let r of t.fields)if(e[r]!==n[r]){_();return}}),v(),d&&Pn.push({prepare:e=>{c+=1,g(`folder-switch`,e),s=!0;let r=new Set(t.keepOnFolderSwitch??[]),i=Object.fromEntries(t.fields.filter(e=>!r.has(e)).map(e=>[e,In(f[e])]));Object.keys(i).length>0&&n(i)},apply:e=>{h(e,`${t.namespace}.`,!0),s=!1}}),a}}var zn=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),Bn=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),Vn=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),Hn=e=>{let t=Vn(e);return t.charAt(0).toUpperCase()+t.slice(1)},Un={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},Wn=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},Gn=(0,T.createContext)({}),Kn=()=>(0,T.useContext)(Gn),qn=(0,T.forwardRef)(({color:e,size:t,strokeWidth:n,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>{let{size:l=24,strokeWidth:u=2,absoluteStrokeWidth:d=!1,color:f=`currentColor`,className:p=``}=Kn()??{},m=r??d?Number(n??u)*24/Number(t??l):n??u;return(0,T.createElement)(`svg`,{ref:c,...Un,width:t??l??Un.width,height:t??l??Un.height,stroke:e??f,strokeWidth:m,className:zn(`lucide`,p,i),...!a&&!Wn(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,T.createElement)(e,t)),...Array.isArray(a)?a:[a]])}),Jn=(e,t)=>{let n=(0,T.forwardRef)(({className:n,...r},i)=>(0,T.createElement)(qn,{ref:i,iconNode:t,className:zn(`lucide-${Bn(Hn(e))}`,`lucide-${e}`,n),...r}));return n.displayName=Hn(e),n},Yn=`codebuddy-locale`;function Xn(){if(typeof navigator>`u`)return`en`;let e=[];Array.isArray(navigator.languages)&&navigator.languages.length>0&&e.push(...navigator.languages),navigator.language&&e.push(navigator.language);try{let t=Intl.DateTimeFormat().resolvedOptions().locale;t&&e.push(t)}catch{}for(let t of e)if(t.toLowerCase().startsWith(`zh`))return`zh`;return`en`}function Zn(e){return e===`system`?Xn():e}function Qn(){try{let e=localStorage.getItem(Yn);if(e){let t=JSON.parse(e)?.mode??e;if([`zh`,`en`,`system`].includes(t))return t}}catch{}return`system`}var $=E()(Rn((e,t)=>{let n=Qn(),r=Zn(n);return typeof window<`u`&&window.addEventListener(`languagechange`,()=>{let e=$.getState();if(e.mode===`system`){let t=Xn();t!==e.resolved&&$.setState({resolved:t})}}),{mode:n,resolved:r,setLocale:t=>{e({mode:t,resolved:Zn(t)})},toggle:()=>{let e=t().mode,n=e===`zh`?`en`:e===`en`?`system`:`zh`;t().setLocale(n)}}},{namespace:`locale`,fields:[`mode`],scope:`global`,debounceMs:300,localStorageKey:Yn,onLoad:(e,t)=>{if(e.mode){let n=Zn(e.mode);t({mode:e.mode,resolved:n})}}})),$n={zh:{"app.connecting":`正在连接 CodeBuddy Code...`,"agents.action.delete":`删除`,"agents.action.delete.confirm":`确定要删除这个智能体吗?`,"agents.action.delete.failed":`未能删除这个智能体`,"agents.action.delete.worktreeKept":`智能体已删除,工作树保留在 {path}`,"agents.action.more":`更多操作`,"agents.action.new":`新建智能体`,"agents.action.cancelNew":`取消`,"agents.action.newConversation":`在当前智能体中新建对话`,"agents.action.rename":`重命名`,"agents.action.restart":`重新启动`,"agents.action.takeover":`在此接管`,"agents.action.stop":`停止`,"agents.action.pin":`置顶`,"agents.action.unpin":`取消置顶`,"agents.action.ungroup":`从项目中移除`,"agents.action.copySessionId":`复制会话 ID`,"agents.action.copyCwd":`复制工作目录`,"agents.action.openInNewWindow":`在新窗口中打开`,"agents.action.copyOk":`已复制到剪贴板`,"agents.action.copyFailed":`复制失败`,"agents.empty":`暂无活跃的智能体`,"agents.empty.hint":`点顶部 + 新建智能体`,"agents.group.attention":`需要你输入`,"agents.group.needsInput":`需要输入`,"agents.group.working":`运行中`,"agents.group.showMore":`展开显示({count})`,"agents.group.showLess":`收起显示`,"agents.group.pinned":`置顶`,"agents.panel.title":`智能体实例`,"agents.panel.resize":`调整智能体面板宽度`,"agents.project.rename":`重命名项目`,"agents.search.clear":`清空搜索`,"agents.search.close":`关闭搜索`,"agents.search.noMatch":`没有匹配的智能体`,"agents.search.placeholder":`搜索智能体`,"agents.error.title":`未能完成操作`,"agents.error.network":`无法连接服务,请检查网络后重新加载。`,"agents.error.authentication":`登录状态已失效,请重新登录后再试。`,"agents.error.server":`服务暂时不可用,请稍后重新加载。`,"agents.error.unknown":`加载智能体列表失败,请重新加载。`,"agents.error.retry":`重新加载`,"workspace.mode.switch":`切换工作台模式`,"workspace.mode.chat.title":`CodeBuddy 单干`,"workspace.mode.chat.desc":`日常对话、编码与终端`,"workspace.mode.buddys.title":`CodeBuddy 组队`,"workspace.mode.buddys.desc":`和 AI 同事们一起工作`,"workspace.mode.enabledToast":`CodeBuddy 组队已开启`,"workspace.mode.disabledToast":`CodeBuddy 组队已关闭`,"workspace.mode.lockedToast":`CodeBuddy 组队被环境变量关闭,无法在界面开启`,"workspace.mode.lockedOnToast":`CodeBuddy 组队被环境变量开启,无法在界面关闭`,"settings.notifications":`通知`,"settings.notify.title":`完成后通知`,"settings.notify.desc":`页面不在前台时,对话或同事干完活弹一条系统通知(由本机 CodeBuddy 直接发:不需要浏览器授权,也不受端口变化影响)`,"settings.notify.unsupported":`当前平台发不出系统通知(会退回浏览器通知,需该站点已授权)`,"settings.notify.test":`发一条测试通知`,"settings.notify.testTitle":`CodeBuddy Code`,"settings.notify.testBody":`能看到这条通知,说明系统通知已经通了`,"settings.notify.testFailed":`这条没发出去:当前平台不支持系统通知`,"settings.notify.testThrottled":`发得太快了,稍等一下再试`,"settings.notify.browserHint.granted":`云端环境:系统通知不可用,已使用浏览器通知(已授权)`,"settings.notify.browserHint.default":`云端环境:系统通知不可用,将使用浏览器通知(开启时会请求浏览器授权)`,"settings.notify.browserHint.denied":`云端环境:系统通知不可用,浏览器通知权限被拦截——请在地址栏站点设置中允许通知`,"settings.notify.testBrowserSent":`系统通知不可用,但浏览器通知已发出(这条通了)`,"notify.status.done":`已完成`,"notify.status.failed":`执行出错`,"notify.status.stopped":`已中断`,"notify.status.needsInput":`在等你回复`,"notify.chatFallbackName":`当前对话`,"notify.agentFallbackName":`AI 同事`,"agentHome.defaultName":`新智能体`,"agentHome.greeting":`我来了。第一件要我做的事是什么?`,"agentHome.hint":`跟他说第一件事就会开工`,"agentHome.hide":`从侧栏隐藏`,"agentHome.delete.confirm":`将删除这个智能体和它名下的全部运行记录,确定吗?`,"agentHome.opFailed":`操作失败,请重试`,"agentHome.sendUnreachable":`发送失败:连不上后端服务(可能刚重启过)。文字已保留,重试即可。`,"agentHome.more":`更多`,"agentHome.hidden":`已隐藏`,"agentHome.unhide":`在侧栏显示`,"agentHome.hiddenPreview":`已隐藏`,"agentHome.notStarted":`还没开工`,"agentHome.mainIdle":`随时待命`,"agentHome.room.invite":`加入房间`,"agentHome.room.joinExisting":`加入已有房间`,"agentHome.room.createNew":`选择智能体创建房间`,"agentHome.room.createConfirm":`创建房间`,"agentHome.room.needMore":`还需要另一个智能体`,"agentHome.room.notStarted":`房间里的智能体`,"agentHome.room.remove":`从房间移出`,"agentHome.room.openMember":`打开对话`,"agentHome.room.delete":`删除房间`,"agentHome.room.deleteConfirm":`只解散这个分组,智能体及其各自的对话都会保留。确定吗?`,"agentHome.room.dissolveTitle":`房间会解散`,"agentHome.room.dissolveMessage":`移出后房间只剩一个智能体,房间会解散。智能体都会保留。`,"agentHome.room.dissolveConfirm":`移出并解散`,"agentHome.room.full":`房间最多容纳 6 个智能体`,"agentHome.room.already":`已经在房间里`,"agentHome.room.teamingBadge":`组队中`,"agentHome.room.teamingLocked":`组队中,先散队`,"agentHome.room.minimalBlocked":`极简模式不能进房间或频道,也不能组队`,"agentHome.room.mergeHint":`组成房间`,"agentHome.room.joinHint":`加入房间`,"agentHome.room.dropHere":`把智能体拖到这里组成房间`,"agentHome.recipient.label":`收件人:`,"agentHome.recipient.placeholder":`搜索智能体或房间`,"agentHome.recipient.more":`再添加一个智能体…`,"agentHome.recipient.remove":`移除收件人`,"agentHome.recipient.createNew":`新建智能体`,"agentHome.recipient.runHint":`任务 · 加入房间时转为智能体`,"agentHome.recipient.sectionPeople":`智能体`,"agentHome.recipient.sectionRuns":`任务`,"agentHome.recipient.sectionRooms":`房间`,"agentHome.recipient.open":`打开对话`,"agentHome.recipient.openRoom":`打开房间`,"agentHome.recipient.tabAdd":`Tab 添加`,"agentHome.recipient.enterOpen":`回车打开`,"agentHome.recipient.soloHint":`回车进入这个智能体的对话;再添加一个智能体即可组成房间`,"agentHome.recipient.roomHint":`回车打开房间中的智能体;全目录只有一间房,新智能体会加入该房间`,"agentHome.channel.new":`新建频道`,"agentHome.tasks.title":`任务板`,"agentHome.tasks.empty":`暂无任务。负责人派单后,任务会显示在这里。`,"agentHome.tasks.loading":`正在读取任务板…`,"agentHome.tasks.loadFailed":`任务板加载失败:{detail}`,"agentHome.tasks.stalled":`停滞`,"agentHome.tasks.status.open":`待认领`,"agentHome.tasks.status.claimed":`进行中`,"agentHome.tasks.status.done":`已完成`,"agentHome.tasks.complete":`标记完成`,"agentHome.tasks.addPlaceholder":`任务标题`,"agentHome.tasks.submit":`添加`,"agentHome.tasks.hide":`收起任务板`,"agentHome.tasks.progress":`已完成 {done} / {total}`,"agentHome.tasks.unassigned":`未指派`,"agentHome.tasks.wakes":`已催办 {count} 次`,"agentHome.tasks.subject":`任务标题`,"agentHome.tasks.detail":`详情`,"agentHome.tasks.detailPlaceholder":`详情(可选)`,"agentHome.tasks.assignee":`指派给`,"agentHome.tasks.edit":`编辑任务`,"agentHome.tasks.save":`保存`,"agentHome.tasks.cancel":`取消`,"agentHome.tasks.delete":`删除任务`,"agentHome.tasks.deleteConfirm":`确认删除该任务?频道时间线会保留历史记录(含删除人)。`,"agentHome.tasks.filterAll":`全部成员`,"agentHome.tasks.filterLabel":`筛选`,"agentHome.tasks.filterEmpty":`该成员暂无任务`,"agentHome.tasks.refs":`引用`,"agentHome.tasks.refPlaceholder":`链接 / 文件路径 / 提交 SHA`,"agentHome.tasks.refAdd":`添加`,"agentHome.tasks.refRemove":`移除引用`,"agentHome.tasks.refCopy":`点击复制`,"agentHome.tasks.refKind.file":`文件`,"agentHome.tasks.refKind.issue":`Issue`,"agentHome.tasks.refKind.pr":`PR`,"agentHome.tasks.refKind.commit":`提交`,"agentHome.tasks.refKind.url":`链接`,"agentHome.taskEvent.user":`用户`,"agentHome.taskEvent.listSeparator":`、`,"agentHome.taskEvent.task":`{taskId}「{subject}」`,"agentHome.taskEvent.created":`{who} 创建了任务 {task}`,"agentHome.taskEvent.assigned":`,指派给 {name}`,"agentHome.taskEvent.claimed":`{who} 认领了 {task}`,"agentHome.taskEvent.completed":`{who} 完成了 {task}`,"agentHome.taskEvent.released":`{who} 将 {task} 放回待认领`,"agentHome.taskEvent.dispatched":`{who} 派发了 {count} 个任务:{list}`,"agentHome.taskEvent.nudged":`{who} 催办了 {task}`,"agentHome.taskEvent.ownerNote":`(负责人:{name})`,"agentHome.taskEvent.escalated":`{who} 收回了 {task} 的认领`,"agentHome.taskEvent.wasOwnerNote":`(原负责人:{name})`,"agentHome.taskEvent.stalled":`{task} 已达唤醒预算上限,标记为停滞,需负责人或用户介入`,"agentHome.taskEvent.updated":`{who} 更新了 {task}的{fields}`,"agentHome.taskEvent.assigneeNote":`(指派给 {name})`,"agentHome.taskEvent.deleted":`{who} 删除了 {task}`,"agentHome.taskEvent.batchDone":`本批 {count} 个任务已全部完成:{list}。`,"agentHome.taskEvent.field.subject":`标题`,"agentHome.taskEvent.field.detail":`详情`,"agentHome.taskEvent.field.assignee":`指派`,"agentHome.taskEvent.field.refs":`引用`,"agentHome.taskEvent.field.owner":`负责人`,"agentHome.taskEvent.updatedGeneric":`{who} 更新了 {task}`,"agentHome.channel.newAgent":`新建智能体`,"agentHome.channel.pickHint":`选择 2–6 个智能体组成频道。取消不会保存。`,"agentHome.channel.create":`创建频道`,"agentHome.channel.createAction":`创建`,"agentHome.channel.name":`名称`,"agentHome.channel.namePlaceholder":`例如:Project Falcon`,"agentHome.channel.addBot":`添加智能体`,"agentHome.channel.loadEarlier":`加载更早消息`,"agentHome.channel.refreshDelayed":`频道更新暂时延迟,正在重试;当前显示的是已加载记录。`,"agentHome.channel.placeholder":`给 {name} 发消息`,"agentHome.channel.empty":`给这频道发第一条`,"agentHome.channel.you":`你`,"agentHome.channel.someone":`同事`,"agentHome.channel.attachImage":`上传图片`,"agentHome.channel.attachFile":`上传文件`,"agentHome.channel.uploading":`上传中 {done}/{total}…`,"agentHome.channel.attachmentTooLarge":`{name} 太大了(单个上限 {maxMb}MB)`,"agentHome.channel.attachmentTooMany":`一条消息最多 {max} 个附件,{name} 没有加上`,"agentHome.channel.attachmentUploadFailed":`附件上传失败:{detail}`,"agentHome.channel.removeAttachment":`移除附件`,"agentHome.channel.reply":`引用`,"agentHome.channel.replyingTo":`回复 {name}:{text}`,"agentHome.channel.cancelReply":`取消引用`,"agentHome.channel.downloadAttachment":`下载`,"agentHome.channel.quoteMissing":`原消息已不在`,"agentHome.channel.widgetSelected":`已选:{value}`,"agentHome.channel.workingNow":`{names} 正在处理…`,"agentHome.channel.untitled":`频道`,"agentHome.channel.delete":`删除频道`,"agentHome.channel.deleteConfirm":`只删除这条群对话,智能体会保留。`,"agentHome.channel.oneOnly":`可以开多间频道。`,"agentHome.channel.needTwo":`频道至少需要两个智能体`,"agentHome.channel.pickPlaceholder":`搜索智能体,选择 2–6 个`,"agentHome.channel.everyone":`所有智能体`,"agentHome.channel.mentioned":`@ 了你`,"agentHome.channel.memberCap":`{current}/{max}`,"agentHome.channel.pickHintBar":`回车创建频道。这不是私信房。`,"agentHome.channel.info":`频道资料`,"agentHome.channel.members":`成员`,"agentHome.channel.addMember":`添加成员`,"agentHome.channel.removeMember":`移出频道`,"agentHome.channel.restartMember":`重启成员(离线进程重新拉起,失效的 Run 会重建)`,"agentHome.channel.restarted":`已重新拉起该成员`,"agentHome.channel.restartNotNeeded":`该成员已在运行,无需重启`,"agentHome.channel.restartFailed":`重启失败:{reason}`,"agentHome.channel.addSearch":`搜索智能体`,"agentHome.channel.noCandidates":`没有可添加的智能体`,"agentHome.channel.defaultBlocked":`CodeBuddy 是用户的 1:1,不能加入组队或频道`,"agentHome.team.defaultBlocked":`CodeBuddy 是用户的 1:1,不能加入组队或频道`,"agentHome.channel.already":`已经在频道里`,"agentHome.channel.full":`频道最多容纳 6 个智能体`,"agentHome.channel.overflow":`这次添加会超过 6 个智能体的上限,还能添加 {count} 个`,"agentHome.channel.remaining":`还能添加 {count} 个智能体`,"agentHome.channel.addConfirm":`添加`,"agentHome.channel.newAgentName":`新智能体名称`,"agentHome.channel.joinHint":`加入频道`,"agentHome.channel.leave":`退出`,"agentHome.channel.back":`返回`,"agentHome.channel.draft":`草稿:{text}`,"agentHome.channel.system.turnEnded.timeout":`本轮超时收场(轮到 {name} 时未见回应)`,"agentHome.channel.system.turnEnded.gone":`{name} 的进程已退出,本轮收场`,"agentHome.channel.system.turnEnded.silent":`多次提醒后 {name} 仍未回应,本轮收场`,"agentHome.channel.system.turnEnded.exhausted":`叫了 {names} 都没人接住,本轮收场`,"agentHome.channel.moveTo":`移至`,"agentHome.channel.ungrouped":`未分组`,"agentHome.channel.newSection":`新建分组`,"agentHome.channel.sectionName":`分组名`,"agentHome.channel.renameSection":`重命名分组`,"agentHome.channel.deleteSection":`删除分组`,"agentHome.channel.deleteSectionConfirm":`分组没了,智能体和频道回到未分组。`,"agentHome.channel.markUnread":`标为未读`,"agentHome.channel.copyId":`复制频道 id`,"agentHome.channel.plus":`提及`,"relay.sentTo":`已发消息给`,"relay.receivedFrom":`消息来自`,"relay.openThread":`查看聊天记录`,"relay.back":`返回对话`,"relay.empty":`还没有往来`,"relay.viewOnly":`此聊天仅供查看`,"relay.close":`关闭聊天`,"layout.toggle":`布局`,"layout.sidebar":`导航侧边栏`,"layout.dashboard":`仪表盘`,"layout.collapseSidebar":`收起侧边栏`,"layout.expandSidebar":`展开侧边栏`,"layout.collapseAgents":`收起智能体`,"layout.expandAgents":`展开智能体`,"layout.agents":`智能体面板`,"agents.title":`智能体`,"agents.instanceFallback":`智能体 {id}`,"agents.panel.close":`关闭`,"agents.input.placeholder":`第一件要我做的事是什么?`,"agents.input.hint":`跟他说第一件事就会开工`,"agents.input.submit":`创建智能体`,"agents.input.permission":`启动权限`,"agents.input.permission.default":`跟随默认设置`,"agents.input.permission.default.desc":`不覆盖权限模式,使用当前配置的默认权限`,"agents.input.permission.ask":`每次询问`,"agents.input.model":`模型`,"agents.input.model.default":`默认模型`,"agents.input.effort":`思考强度`,"agents.input.effort.default":`跟随模型`,"agents.input.effort.default.desc":`使用所选模型配置的默认思考强度`,"agents.input.directory":`工作目录`,"agents.input.directory.hint":`智能体将在此目录执行命令、读写文件`,"agents.input.directory.choose":`选择工作目录`,"agents.input.directory.current":`当前工作区`,"agents.input.directory.more":`另有 {count} 个`,"agents.input.directory.loading":`正在发现仓库与工作树…`,"agents.input.directory.browse":`选择其他目录…`,"agents.input.agent":`当前智能体`,"agents.input.agent.menu":`选择智能体`,"agents.input.agent.default":`默认智能体`,"agents.input.agent.default.desc":`使用当前项目的默认智能体配置`,"agents.input.settings":`智能体设置`,"agents.input.modelAndEffort":`模型与思考`,"agents.input.shellJob":`Shell 任务`,"agents.input.shellPlaceholder":`输入要在后台执行的命令…`,"agents.input.attachmentsNotForShell":`Shell 任务不能携带附件,请先去掉文件或去掉命令前的 !`,"agents.input.startFrom":`上下文`,"agents.input.startFrom.continue":`继承当前对话`,"agents.input.startFrom.session":`继承所选对话`,"agents.input.startFrom.blank":`不继承`,"agents.input.startFrom.unavailable":`当前没有可继承的上下文`,"agents.input.worktree":`工作树`,"agents.input.worktree.on":`已开启工作树隔离`,"agents.input.worktree.off":`已关闭工作树隔离(Web 默认)`,"inherit.drawer.title":`选择上下文`,"inherit.fromCurrent":`当前对话`,"inherit.fromSession":`可继承的对话`,"inherit.emptyForDirectory":`这个目录还没有可继承的对话`,"agents.worker.standalone":`独立进程`,"agents.worker.remote":`远程`,"agents.worker.openTabHint":`点击在标签页打开完整实例`,"agents.worker.noUrl":`无访问地址,仅可在宿主侧操作`,"agents.worker.kind.interactive":`交互终端`,"agents.worker.kind.daemon":`服务进程`,"agents.worker.kind.daemonWorker":`工作进程`,"agents.worker.kind.bg":`后台任务`,"agents.state.failed":`失败`,"agents.state.stopped":`已停止`,"agents.state.idle":`空闲`,"agents.state.draft":`待创建`,"agents.state.completed":`已完成`,"agents.notice.failed":`会话意外结束,点击查看并可重新启动`,"agents.state.recovering":`恢复中…`,"recent.title":`最近会话`,"sessions.current":`当前`,"sessions.currentTitle":`CodeBuddy`,"sessions.deleteCurrent":`删除当前对话`,"sessions.deleteCurrent.confirm":`将结束当前对话并删除其历史记录,确定吗?`,"sessions.foregroundHandoff":`已转为后台,仍由主对话承载`,"sessions.worker.openTab":`在新标签页打开`,"sessions.section":`实例列表`,"sessions.togglePanel":`切换会话面板`,"agents.phase.preparing":`准备中`,"agents.phase.modelRequesting":`请求模型中…`,"agents.phase.modelStreaming":`正在生成回复…`,"agents.phase.modelDone":`收尾中…`,"agents.phase.toolExecuting":`执行工具中…`,"agents.phase.working":`工作中…`,"agents.phase.retrying":`重试中…`,"agents.phase.compacting":`压缩上下文中…`,"agents.phase.cancelling":`取消中…`,"agents.phase.resuming":`恢复中…`,"agents.phase.starting":`启动中…`,"agents.phase.waitingPermission":`等待权限确认`,"agents.phase.waitingInput":`等待输入`,"agents.live.background":`由后台进程继续执行`,"agents.live.creating":`正在创建智能体,启动后将自动进入`,"agents.boot.spawning":`正在启动智能体…`,"agents.boot.openingPage":`正在打开对话…`,"agents.boot.connecting":`正在连接会话…`,"agents.boot.restoringWorker":`正在恢复智能体…`,"agents.boot.step.spawn":`启动智能体`,"agents.boot.step.page":`打开对话`,"agents.boot.step.session":`连接会话`,"agents.boot.step.restore":`恢复智能体`,"agents.boot.waited":`已等待 {seconds}s`,"agents.boot.hint":`就绪后即可发送消息`,"agents.live.restoring":`正在恢复智能体,可先查看完整对话`,"agents.live.settled":`智能体已结束运行`,"agents.live.foregroundHeld":`宿主对话正在持有,可继续投递`,"agents.live.occupiedFollow":`此智能体已在其他窗口打开,当前只读`,"agents.live.occupiedInbox":`消息会投进收件箱`,"agents.live.occupiedTakeoverHint":`在此接管后,另一个窗口/设备将变为只读,其正在进行的操作可能被中断`,"agents.live.latest":`智能体最新回复`,"agents.live.tool":`正在使用工具`,"agents.live.result":`执行结果`,"agents.reply.sent":`已发送给这个智能体`,"agents.reply.saved":`已保存,将在智能体恢复后发送`,"agents.reply.failed":`发送给智能体失败`,"agents.reply.answerPlaceholder":`回答这个智能体…`,"agents.reply.useSuggestion":`采用建议回复`,"agents.reply.tabSuggestion":`Tab 采用建议 · 数字键选择选项`,"agents.reply.shellHint":`输入 ! 可在智能体内执行 Shell 命令`,"agents.reply.shellMode":`Shell`,"agents.reply.sendShell":`执行 Shell 命令`,"app.connectFailed":`连接失败`,"app.retry":`重试`,"app.pwa.newVersion":`检测到 Web UI 新版本`,"app.pwa.reloadNow":`立即刷新`,"app.pwa.reloadLater":`稍后`,"app.pwa.reloadedAfterIdle":`已切换到新版本`,"chat.empty.title":`CodeBuddy Code`,"chat.empty.subtitle":`今天有什么可以帮到你?`,"chat.empty.slogan":`抓住灵感 · 化为现实`,"chat.empty.tag.slides":`幻灯片生成`,"chat.empty.tag.research":`深度研究`,"chat.empty.tag.docs":`文档处理`,"chat.empty.tag.data":`数据分析`,"chat.thinking":`思考中`,"chat.waitingPermission":`等待权限确认`,"chat.waitingUser":`等待用户回答`,"chat.error":`错误`,"chat.sessionEnded":`会话已结束`,"chat.stopped":`已停止`,"chat.messages":`聊天消息`,"chat.scrollToLatest":`跳到最新`,"chat.error.refusal":`Agent 拒绝继续执行。这可能是由于内容策略限制或其他限制。`,"chat.error.network":`网络连接异常或服务暂时不可用,请稍后重试。`,"chat.error.auth":`身份验证失败或权限不足,请重新登录后再试。`,"chat.error.quota":`已达到配额上限或请求过于频繁,请稍后再试。`,"chat.error.modelService":`模型服务返回异常,请重试或稍后再试。`,"chat.error.cancelled":`请求已被取消,可能由系统休眠或网络中断导致,请重试。`,"chat.error.maxTokens":`响应因达到最大 token 限制而被截断。您可以继续对话或要求更简洁的回复。`,"chat.error.maxTurnRequests":`已超过单轮对话允许的最大模型请求次数。您可以发送新消息以继续。`,"message.contentFilter.notice":`这个话题目前不在我的能力覆盖范围内,我没有办法就此展开讨论。`,"chat.newChat":`新对话`,"chat.disclaimer":`回答由 AI 生成,仅供参考`,"chat.compacted":`已精简历史对话`,"chat.compacting":`正在精简历史对话...`,"chat.compactCancelled":`历史对话精简已取消`,"chat.compactSummary.show":`查看摘要`,"chat.compactSummary.hide":`收起摘要`,"phase.preparing":`准备中`,"phase.modelRequesting":`等待模型响应`,"phase.modelStreaming":`接收中`,"phase.modelDone":`处理中`,"phase.toolExecuting":`执行工具`,"phase.modelStreamingTool":`正在写入`,"phase.retrying":`重试中`,"chat.activity.inputTokens":`发送给模型的上下文:{tokens} tokens`,"chat.activity.contextTokens":`最近一次模型上下文:{tokens} tokens`,"chat.activity.outputTokens":`模型本次已输出:{tokens} tokens`,"chat.activity.outputTokensEstimated":`模型本次已输出:约 {tokens} tokens(流式估算)`,"progress.compacting":`压缩上下文中`,"hero.headline":`CodeBuddy Code`,"hero.newAgent":`新智能体`,"input.placeholder":`给智能体发消息`,"input.placeholderGoal":`描述你的目标,定义可衡量的成果,以获得最佳效果`,"input.placeholderMultitask":`给协调器派任务,或继续跟主 Agent 说话`,"input.placeholderRunning":`消息将排队等待处理...`,"input.placeholderRunningImmediate":`消息将插入当前回合...`,"input.placeholderPending":`请先处理权限请求...`,"input.draft":`草稿`,"input.send":`发送 (Enter)`,"input.stop":`停止`,"input.thinking":`思考中`,"input.deepThinking":`深度思考`,"input.promptFailed":`发送失败`,"input.sessionNotReady":`会话尚未就绪,请稍后再发送`,"input.sessionNotReadyWithReason":`会话尚未就绪:{reason}`,"input.restoreTextOnly":`恢复好了再发送附件`,"input.agentSwitchTimeout":`Agent 预设切换超时,请重试`,"input.sendQueued":`发送排队消息 (Enter)`,"input.dropHint":`拖入文件或路径`,"input.addImage":`添加图片`,"input.addFile":`添加文件`,"input.goal":`目标`,"input.imageTooLarge":`图片不能超过 10MB`,"input.tooManyImages":`最多添加 5 张图片`,"input.fileTooLarge":`文件不能超过 50MB`,"input.tooManyFiles":`最多添加 10 个文件`,"input.attachmentUploadFailed":`附件上传失败,请重试`,"input.menu.image":`图片`,"input.menu.file":`文件`,"input.menu.directory":`目录`,"input.directory.current":`当前目录`,"input.directory.fixedHint":`工作目录在会话创建时确定,不可更改;如需换目录请新建会话`,"input.directory.additional":`附加目录`,"input.directory.add":`添加目录`,"input.menu.mode":`模式`,"input.menu.model":`模型`,"input.modeSelector":`模式`,"input.modelSelector":`模型`,"mainAgent.defaultLabel":`默认预设`,"mainAgent.selectAgent":`即将开始的这个会话所用的 Agent 预设`,"mainAgent.lockedHint":`智能体模式仅可在空对话中切换;如需更换,请新建对话`,"mainAgent.customTag":`本地创作`,"mainAgent.empty":`暂无可用预设`,"mainAgent.sectionTitle":`Agent 预设`,"mainAgent.manage":`管理预设`,"mainAgent.currentDefault":`当前默认`,"mainAgent.currentDefaultHint":`对此后新建的会话生效。运行中的会话保持它开始时的预设。`,"mainAgent.isDefault":`默认`,"mainAgent.setDefault":`设为默认`,"mainAgent.defaultSaved":`默认预设已保存`,"mainAgent.groupBuiltin":`内置`,"mainAgent.groupCustom":`自定义`,"mainAgent.createByAI":`用 AI 快速创建`,"mainAgent.createByAIHint":`用一句话描述你想要的智能体,AI 会生成名字、说明和系统提示(写入用户级目录;工具按最小权限自动选择)。这不是创造模式会话。`,"mainAgent.createByAIPlaceholder":`例如:做一个只读的代码评审智能体,用 hy3 模型`,"mainAgent.creating":`正在生成`,"mainAgent.createSuccess":`智能体已创建,可在会话中选用`,"mainAgent.createFailed":`创建失败`,"mainAgent.loadFailed":`加载预设失败`,"mainAgent.capability":`Agent 预设`,"mainAgent.capabilityHint":`开启后可在本 Web 选择标准 / PTC / 极简 / 创造。WorkBuddy 默认不走预设解析;若与 sidecar 共用同一份 settings,再打开「允许未声明宿主」才会影响 WorkBuddy。`,"mainAgent.capabilityOn":`已开启`,"mainAgent.capabilityOff":`已关闭`,"mainAgent.noDescription":`暂无描述。`,"mainAgent.mode.cli":`标准模式`,"mainAgent.mode.ptc":`PTC 模式`,"mainAgent.mode.minimal":`极简模式`,"mainAgent.mode.create":`创造模式`,"mainAgent.mode.multitask":`多任务模式`,"mainAgent.modeDesc.cli":`功能完整的编码 Agent:改文件、跑命令、检索代码和网页,以及 Skills、计划、目标和子代理。`,"mainAgent.modeDesc.ptc":`标准模式的工作工具改走 REPL / Code Mode,用一段程序组合多步,而不是逐个直连调用。`,"mainAgent.modeDesc.minimal":`只开 REPL,沙箱内有 Bash、Edit、Skill(无 MCP)。没有 Read、Write、Glob、Grep、检索、计划、子代理。看文件用 Bash,读 r.stdout。`,"mainAgent.modeDesc.create":`标准模式全工具,外加编写用户级 ~/.codebuddy/agents 自定义智能体(需 mainAgent: true 才进模式选择)。`,"mainAgent.modeDesc.multitask":`协调器调度后台 Agent。Grep/Read 仅在不同批于 Agent 时可用,不能自己改文件。完成后自动唤醒。`,"mainAgent.capsule.multitask":`多任务`,"mainAgent.capsule.multitaskDismiss":`关闭多任务`,"mainAgent.capsule.multitaskHint":`协调器叠加层,不改当前模式。点 × 关闭。`,"mainAgent.capsule.multitaskFailed":`无法开关多任务`,"mainAgent.capsule.multitaskMinimalBlocked":`极简模式不能开多任务。请先切到标准、PTC 或创造模式。`,"mainAgent.scope.user":`用户级`,"mainAgent.scope.project":`项目级`,"mainAgent.delete":`删除`,"mainAgent.deleteConfirm":`确认删除?`,"mainAgent.deleted":`已删除 {name}`,"mainAgent.deleteFailed":`删除失败`,"mainAgent.searchPlaceholder":`搜索智能体名称或描述`,"mainAgent.filterEmpty":`没有匹配的智能体`,"mainAgent.openFile":`打开文件`,"mainAgent.openFailed":`打开文件失败`,"mainAgent.openInCreate":`在创造模式中打开`,"mainAgent.openInCreateSuccess":`已切换到创造模式`,"mainAgent.openInCreateFailed":`仅空白会话可切换到创造模式`,"mainAgent.trustLocal":`本地`,"input.deepThinkingDesc":`让模型在回答前进行更深入的推理`,"input.thinkingLevel":`思考强度`,"input.thinkingMode":`思考模式`,"input.thoughtDefault":`默认`,"input.contextWindow":`上下文窗口`,"input.editThinking":`编辑思考配置`,"input.modelHeader":`模型`,"input.contextUsage.title":`上下文用量`,"input.contextUsage.hover":`上下文已用 {pct}%`,"input.contextUsage.used":`已用上下文`,"input.contextUsage.usedLabel":`已使用`,"input.contextUsage.compact":`压缩当前会话`,"input.contextUsage.systemPrompt":`系统提示词`,"input.contextUsage.conversation":`对话消息`,"input.contextUsage.tools":`工具及子智能体`,"input.contextUsage.mcp":`连接器及MCP`,"input.contextUsage.skills":`技能`,"mode.default":`默认`,"mode.default.desc":`每次首次使用工具时都请求权限`,"mode.acceptEdits":`自动通过编辑`,"mode.acceptEdits.desc":`本会话自动通过文件编辑权限`,"mode.plan":`规划模式`,"mode.plan.desc":`只分析、不修改文件或执行命令`,"mode.auto":`自动`,"mode.auto.desc":`AI 分类器审查操作:安全的自动通过,高风险的拒绝。分类器不可用时回退为弹窗确认(或拒绝)`,"mode.dontAsk":`免打扰`,"mode.dontAsk.desc":`不弹出权限确认;执行预批准和安全操作,拒绝需要审批的操作`,"mode.bypassPermissions":`跳过权限确认`,"mode.bypassPermissions.desc":`跳过所有权限确认`,"mode.fullAccess":`完全访问`,"mode.fullAccess.desc":`跳过所有权限检查,包括所有代理的危险命令`,"mode.work":`工作`,"mode.work.desc":`标准工作模式,按常规流程请求权限`,"mode.delegate":`委托`,"mode.delegate.desc":`权限由上级会话集中管理`,"input.newline":`换行`,"input.contextMenu.newline":`换行`,"input.contextMenu.send":`发送`,"queue.more":` 条消息排队中`,"queue.summary":`{count} 条消息待处理`,"queue.steerCount":`{count} 条插入当前回合`,"queue.holdCount":`{count} 条下轮发送`,"queue.holdHeader":`排队跟进`,"queue.steerHeader":`将在下次模型请求时插入`,"queue.sendNow":`立即发送`,"queue.remove":`移除`,"queue.emptyPreview":`附件`,"queue.enqueueFailed":`加入队列失败`,"status.running":`运行中`,"tool.writeFile":`写入文件`,"tool.readFile":`读取文件`,"tool.execute":`执行指令`,"tool.searchFiles":`搜索文件`,"tool.searchContent":`搜索内容`,"tool.fetchWeb":`获取网页`,"tool.searchWeb":`搜索网络`,"tool.defaultName":`工具`,"tool.repl":`REPL`,"tool.replRunning":`正在执行代码…`,"tool.replCode":`代码`,"tool.replOutput":`输出`,"tool.replSubagentSummary":`REPL 内子 agent 输出已在上方/下方独立展示,这里不重复展开原始文本。`,"tool.moreItems":`... 还有 {count} 项`,"interruption.title":`需要授权`,"interruption.tool":`工具`,"interruption.allow":`允许`,"interruption.allowAll":`全部允许`,"interruption.deny":`拒绝`,"interruption.approved":`已允许`,"interruption.denied":`已拒绝`,"interruption.edits":`{count} 处编辑`,"interruption.yes":`是`,"interruption.keepPlanning":`继续规划`,"interruption.exitPlanMode":`退出计划模式`,"interruption.readyToCode":`准备好开始编码了吗?`,"theme.light":`浅色`,"theme.dark":`深色`,"theme.system":`跟随系统`,"locale.zh":`中文`,"locale.en":`English`,"locale.system":`跟随系统`,"sidebar.nav.plugins":`插件`,"sidebar.nav.tasks":`任务`,"sidebar.search.placeholder":`搜索...`,"sidebar.chatHistory":`智能体历史`,"sidebar.workspace":`工作区`,"sidebar.connectionStatus":`连接状态`,"sidebar.status":`状态`,"sidebar.sessionId":`会话ID`,"sidebar.notConnected":`未连接`,"sidebar.modelSelection":`模型选择`,"sidebar.noModels":`暂无可用模型`,"sidebar.environment":`环境信息`,"sidebar.cwd":`工作目录`,"sidebar.os":`操作系统`,"sidebar.nodeVersion":`Node.js`,"sidebar.gatewayMode":`网关模式`,"sidebar.tunnelUrl":`Tunnel 地址`,"sidebar.clickToCopy":`点击复制`,"sidebar.copied":`已复制`,"sidebar.permissionMode":`权限模式`,"sidebar.noModes":`暂无可用模式`,"sidebar.preferences":`设置`,"sidebar.toggle":`切换菜单栏`,"sidebar.keybindings":`快捷键`,"sidebar.group.workspace":`工作区`,"sidebar.group.runtime":`运行`,"sidebar.group.observability":`可观测`,"sidebar.group.tools":`工具`,"sidebar.group.preferences":`配置`,"bottomSheet.attachments":`添加`,"bottomSheet.navigation":`导航`,"sidebar.theme":`界面主题`,"sidebar.language":`界面语言`,"sidebar.user":`用户`,"sidebar.authMethod":`密码认证`,"sidebar.noAuth":`无认证`,"sidebar.version":`Remote UI v1.0`,"connection.connected":`已连接`,"connection.connecting":`连接中`,"connection.disconnected":`未连接`,"connection.error":`连接错误`,"connection.occupiedShort":`会话被占用`,"connection.retry":`重试连接`,"message.copyToClipboard":`复制到剪贴板`,"message.copied":`已复制`,"message.copy":`复制`,"message.creditUsed":`共消耗`,"message.creditUnit":`积分`,"mermaid.copySource":`复制源码`,"mermaid.exportSvg":`导出 SVG`,"mermaid.zoomIn":`放大`,"mermaid.zoomOut":`缩小`,"mermaid.fit":`适应视图`,"mermaid.enterFullscreen":`全屏查看`,"mermaid.exitFullscreen":`退出全屏`,"mermaid.fullscreenUnavailable":`当前环境无法进入全屏模式`,"tool.copyParams":`复制参数`,"tool.copyResult":`复制结果`,"table.copyMarkdown":`复制为 Markdown`,"table.copyTsv":`复制为 TSV`,"chat.exportTitle":`导出对话`,"chat.exportMarkdown":`导出为 Markdown`,"chat.exportJson":`导出为 JSON`,"chat.exportEmpty":`该智能体还没有可导出的对话`,"chat.exportFailed":`导出对话失败,请重试`,"message.showMore":`显示更多`,"message.showLess":`收起`,"clipboard.copyFailed":`复制失败:当前环境不支持剪贴板操作,请使用 HTTPS 访问或手动选择文本复制`,"message.assistantName":`CodeBuddy Code`,"thinking.title":`思考过程`,"thinking.thinking":`思考中`,"thinking.done":`已思考`,"thinking.seconds":`{n} 秒`,"thinking.steps":`{n} 个步骤`,"thinking.node":`思考`,"thinking.note":`阶段说明`,"thinking.expand":`展开`,"thinking.collapse":`收起`,"diff.noChanges":`无变更`,"login.title":`CodeBuddy Remote Control`,"login.subtitle":`请输入终端中显示的密码`,"login.placeholder":`密码`,"login.submit":`登录`,"login.error.incorrect":`密码错误`,"login.error.rateLimit":`登录尝试次数过多,请稍后再试`,"login.error.required":`请输入密码`,"login.hint.password":`提示:密码在服务启动时显示在终端中。`,"login.hint.urlAuth":`也可以使用 <code>?password=xxx</code> 自动登录。`,"login.hint.disable":`或在 CodeBuddy 配置目录(默认 <code>~/.codebuddy</code>,可通过 <code>CODEBUDDY_CONFIG_DIR</code> 环境变量覆盖)下的 <code>settings.json</code> 中设置 <code>gateway.auth: "none"</code> 来禁用认证。`,"login.slogan":`抓住灵感 · 化为现实`,"login.tagline":`Triggered Anywhere, Completed Locally.`,"login.privacy":`隐私政策`,"login.terms":`服务条款`,"account.login.title":`账户登录`,"account.login.subtitle":`CodeBuddy 尚未登录,请选择登录方式完成认证`,"account.login.button":`登录`,"account.login.polling":`等待登录完成...`,"account.login.polling.hint":`请在浏览器中完成登录,完成后此页面将自动跳转`,"account.login.openBrowser":`打开浏览器登录`,"account.login.copyUrl":`复制登录链接`,"account.login.copied":`已复制`,"account.login.failed":`登录失败,请重试`,"account.login.retry":`重试`,"account.logout":`退出登录`,"account.logout.confirm":`确认退出当前账户?`,"account.method.internal":`国内站点登录`,"account.method.external":`国际站点登录`,"account.method.selfhosted":`企业域名登录`,"account.method.iOA":`iOA 登录(仅限腾讯)`,"sidebar.interactionMode":`交互模式`,"sidebar.chatMode":`对话`,"sidebar.terminalMode":`终端`,"sidebar.canvas":`画布`,"canvas.title":`无限画布`,"canvas.addTerminal":`添加终端`,"canvas.zoomIn":`放大`,"canvas.zoomOut":`缩小`,"canvas.fitView":`适应视图`,"canvas.resetView":`重置视图`,"canvas.empty":`点击工具栏 + 按钮添加终端`,"canvas.openStandalone":`在新窗口打开画布`,"canvas.tileMenu.close":`关闭`,"canvas.tileMenu.duplicate":`复刻终端`,"canvas.tileMenu.maximize":`最大化`,"canvas.tileMenu.minimize":`最小化`,"canvas.tileMenu.restore":`还原`,"canvas.tileMenu.openStandalone":`在新窗口打开`,"canvas.standalone.missingPaneId":`未指定终端 ID`,"canvas.defaultTitle":`终端`,"terminal.connecting":`终端连接中...`,"terminal.title":`终端`,"terminal.disconnected":`终端已断开`,"terminal.error":`终端连接失败`,"terminal.reconnect":`重新连接`,"terminal.split":`拆分终端`,"terminal.splitHorizontal":`左右分屏`,"terminal.splitVertical":`上下分屏`,"terminal.closePane":`关闭终端`,"terminal.close":`关闭`,"terminal.closeOthers":`关闭其他`,"terminal.closeToRight":`关闭右侧`,"terminal.closeAll":`关闭全部`,"terminal.maxPanes":`已达最大面板数`,"terminal.copySelection":`复制`,"terminal.openLink.title":`打开外部链接?`,"terminal.openLink.message":`即将打开 {url}。终端中的链接可能由不受信任的程序生成,请确认后继续。`,"terminal.openLink.confirm":`打开`,"composer.addToChat":`添加到对话`,"sidebar.instances":`实例`,"sidebar.activeInstances":`个活跃实例`,"sidebar.manageInstances":`管理实例`,"sidebar.remoteControl":`远程控制`,"instance.title":`实例列表`,"instance.switch":`实例`,"instance.switchTitle":`切换实例`,"instance.current":`当前实例`,"instance.manual":`手动添加`,"instance.switchTo":`切换到此实例`,"instance.manage":`管理实例`,"instance.managerTitle":`实例管理`,"instance.addInstance":`添加实例`,"instance.name":`实例名称`,"instance.namePlaceholder":`自定义实例名称(可选,默认为目录名)`,"instance.url":`实例地址`,"instance.urlPlaceholder":`https://example.trycloudflare.com`,"instance.password":`密码`,"instance.optional":`可选`,"instance.passwordPlaceholder":`访问密码`,"instance.cancel":`取消`,"instance.add":`添加`,"instance.remove":`删除此实例`,"instance.noInstances":`暂无其他实例`,"instance.noInstancesHint":`启动更多 CodeBuddy Code 实例,或手动添加远程实例`,"instance.cwd":`工作目录`,"instance.topic":`当前话题`,"instance.startedAt":`启动于`,"instance.local":`本地`,"instance.tunnel":`隧道`,"instance.uptime.days":`天前`,"instance.uptime.hours":`小时前`,"instance.uptime.minutes":`分钟前`,"instance.uptime.justNow":`刚刚`,"instance.addError":`添加实例失败`,"instance.removeError":`删除实例失败`,"instance.copyUrl":`复制链接`,"instance.copied":`已复制`,"instance.subtitle":`管理和切换工作实例`,"instance.refresh":`刷新`,"instance.refreshed":`已刷新`,"instance.loading":`加载实例中...`,"instance.error":`加载实例列表失败`,"instance.retry":`重试`,"question.multiple":`多选`,"question.customAnswer":`或输入自定义答案...`,"question.reviewAnswers":`审核答案`,"question.singleTitle":`问题`,"question.titleWithCount":`问题({count})`,"question.reviewTab":`审核`,"question.next":`下一步`,"question.submit":`提交`,"question.cancel":`取消`,"question.answered":`已回答`,"question.cancelled":`问题已取消`,"question.invalid":`问题参数无效,无法显示`,"todo.title":`任务清单`,"todo.progress":`任务进度`,"todo.executing":`任务{n}正在执行中`,"todo.untitled":`未命名`,"todo.completedCount":`已完成 {count} 项`,"todo.allCompleted":`任务已全部完成`,"todo.statusPendingSync":`执行已结束 · 任务状态待同步`,"todo.pendingSync":`待同步`,"bgTasks.summary":`{total} 个后台任务 · {running} 个运行中`,"bgTasks.status.done":`已完成`,"bgTasks.status.failed":`已失败`,"bgTasks.status.ended":`已结束`,"bgTasks.status.elapsed":`已运行 {duration}`,"bgTasks.untitled":`后台命令`,"bgTasks.noOutput":`暂无输出`,"bgTasks.viewOutput":`在右侧查看实时输出`,"bgTasks.cancel":`取消任务(终止进程)`,"bgTasks.hide":`从列表中移除`,"bgTasks.endReason.cancelled-by-user":`已取消`,"bgTasks.endReason.output-limit":`输出超限,已终止`,"bgTasks.endReason.interrupted":`已中断`,"bgTasks.endReason.stopped":`已停止`,"bgTasks.endReason.sandbox-denied":`被沙箱拦截`,"bgTasks.endReason.exit-status-unknown":`已结束,退出码未采集到`,"bgTasks.endReason.exited":`已结束`,"history.title":`智能体历史`,"history.description":`在当前智能体内继续项目对话`,"history.backgroundDescription":`智能体正在后台工作,完成接管后可切换对话`,"history.target":`载入到 {name}`,"history.project":`项目`,"history.noProjects":`暂无可用项目`,"history.noData":`没有历史对话`,"history.noDataHint":`当前项目还没有可继续的对话`,"history.backToChat":`返回对话`,"history.loading":`加载中...`,"history.loadError":`加载失败`,"history.retry":`重试`,"history.current":`当前`,"history.messages":`{count} 条消息`,"history.delete":`删除`,"history.deleteConfirm":`确定要删除这个会话吗?`,"history.deleteCancel":`取消`,"history.deleteOk":`删除`,"history.rename":`重命名`,"history.renameTitle":`重命名会话`,"history.renamePlaceholder":`输入新名称`,"history.renameCancel":`取消`,"history.renameOk":`确定`,"history.cannotDeleteCurrent":`无法删除当前会话`,"history.renameFailed":`重命名失败`,"history.deleteFailed":`删除失败`,"history.restore":`在当前智能体中打开`,"history.restoreSuccess":`已在当前智能体中继续该对话`,"history.restoreFailed":`载入历史对话失败`,"history.openSessionSwitcher":`搜索并管理全部对话`,"sessionSwitcher.title":`对话`,"sessionSwitcher.searchPlaceholder":`搜索`,"sessionSwitcher.close":`关闭`,"sessionSwitcher.groupPinned":`置顶`,"sessionSwitcher.groupToday":`今天`,"sessionSwitcher.groupYesterday":`昨天`,"sessionSwitcher.firstQuestion":`第一条提问`,"sessionSwitcher.lastQuestion":`最后一条提问`,"sessionSwitcher.firstQuestionPrefix":`最初提问`,"sessionSwitcher.lastQuestionPrefix":`最后提问`,"sessionSwitcher.loadMore":`加载更多`,"sessionSwitcher.noSearchResult":`没有匹配的会话`,"sessionSwitcher.noSearchResultHint":`搜索只覆盖已加载的会话;清空搜索词并向下滚动可加载更多`,"sessionSwitcher.clearSearch":`清空搜索`,"sessionSwitcher.pin":`置顶`,"sessionSwitcher.unpin":`取消置顶`,"sessionSwitcher.pinFailed":`置顶失败`,"sessionSwitcher.more":`更多操作`,"sessionSwitcher.deleteCurrentHint":`当前会话不能删除`,"settings.title":`设置`,"settings.appearance":`外观`,"settings.model":`模型选择`,"settings.customModels.manage":`管理自定义模型`,"settings.customModels.entryLabel":`自定义模型`,"settings.customModels.entryDesc":`添加 OpenAI 兼容端点,支持增删改`,"settings.customModels.title":`自定义模型`,"settings.customModels.addTitle":`添加自定义模型`,"settings.customModels.editTitle":`编辑自定义模型`,"settings.customModels.add":`添加`,"settings.customModels.edit":`编辑`,"settings.customModels.delete":`删除`,"settings.customModels.deleteTitle":`删除自定义模型?`,"settings.customModels.deleteMessage":`将删除模型 {id},此操作不可撤销。`,"settings.customModels.cancel":`取消`,"settings.customModels.save":`保存`,"settings.customModels.close":`关闭`,"settings.customModels.empty":`暂无自定义模型`,"settings.customModels.hint":`数据保存在本机 ~/.codebuddy/models.json`,"settings.customModels.loadFailed":`加载自定义模型失败`,"settings.customModels.saveFailed":`保存失败`,"settings.customModels.deleteFailed":`删除失败`,"settings.customModels.apiKeyKeep":`留空则保留原密钥`,"settings.customModels.field.id":`模型 ID`,"settings.customModels.field.name":`显示名称`,"settings.customModels.field.vendor":`提供商`,"settings.customModels.field.url":`接口 URL`,"settings.customModels.field.apiKey":`API Key`,"settings.customModels.field.maxInputTokens":`最大输入 Tokens`,"settings.customModels.field.maxOutputTokens":`最大输出 Tokens`,"settings.customModels.field.temperature":`Temperature`,"settings.customModels.field.temperatureDefault":`留空使用默认值(不发送)`,"settings.customModels.field.supportsToolCall":`支持工具调用`,"settings.customModels.field.supportsImages":`支持图片`,"settings.customModels.field.supportsReasoning":`支持推理`,"settings.customModels.field.useCustomProtocol":`自定义协议(不自动补 /chat/completions)`,"settings.customModels.err.idRequired":`请填写模型 ID`,"settings.customModels.err.idInvalid":`模型 ID 仅允许字母、数字与 . _ : - /`,"settings.customModels.err.idDuplicate":`模型 ID 已存在`,"settings.customModels.err.urlRequired":`请填写接口 URL`,"settings.customModels.err.urlInvalid":`URL 需以 http:// 或 https:// 开头`,"settings.mode":`权限模式`,"settings.systemInfo":`系统信息`,"settings.backToChat":`返回对话`,"settings.tab.user":`用户级`,"settings.tab.project":`工作空间级`,"settings.scope.label":`配置作用域`,"settings.scope.userHint":`适用于当前用户的所有 CBC 工作空间`,"settings.scope.projectHint":`仅适用于当前工作空间,可随项目共享`,"settings.search.placeholder":`搜索设置名称、说明或配置键`,"settings.search.clear":`清空设置搜索`,"settings.search.empty":`没有匹配的设置`,"settings.search.results":`已更新设置搜索结果`,"settings.sections":`设置分区`,"settings.inherited":`继承用户级配置`,"settings.inheritUser":`恢复为用户级配置`,"settings.invalidJson":`请输入有效的 JSON 对象`,"settings.loadFailed":`配置加载失败,请重试`,"agents.workspaceSettings":`工作空间设置`,"settings.workspaceFor":`{name} 的设置`,"settings.workspaceMissing":`该智能体没有可用的工作目录`,"settings.group.modelAndReasoning":`模型与推理`,"settings.group.behavior":`行为`,"settings.group.memory":`记忆`,"settings.group.language":`语言`,"settings.group.advanced":`高级`,"settings.group.mainAgent":`Agent 预设`,"settings.item.mainAgent.enabled":`启用 Agent 预设`,"settings.item.mainAgent.enabled.desc":`Web / CLI 可选择标准、PTC、极简、创造。关闭后始终走原生标准模式。`,"settings.item.mainAgent.allowUnopted":`允许未声明的 ACP 宿主`,"settings.item.mainAgent.allowUnopted.desc":`默认关闭,且仅在上方总闸开启时生效。打开后,与本机共用 settings 的 WorkBuddy sidecar 也会走预设解析。平时请保持关闭。`,"settings.group.sandbox":`安全沙箱`,"settings.item.model":`默认模型`,"settings.item.model.desc":`设置默认使用的 AI 模型`,"settings.item.reasoningEffort":`推理努力级别`,"settings.item.reasoningEffort.desc":`控制模型的推理深度`,"settings.item.alwaysThinkingEnabled":`始终启用深度思考`,"settings.item.autoCompactEnabled":`自动压缩上下文`,"settings.item.autoCompactWindow":`自动压缩窗口 (token)`,"settings.item.autoCompactWindow.desc":`压缩计算的上下文窗口基准值,触发点 = min(该值, 模型窗口) × 阈值;留空跟随模型窗口。环境变量 CODEBUDDY_AUTO_COMPACT_WINDOW 优先级更高`,"settings.item.includeCoAuthoredBy":`提交包含 Co-authored-by`,"settings.item.fileCheckpointingEnabled":`文件检查点`,"settings.item.fileCheckpointingEnabled.desc":`启用文件版本回退功能`,"settings.item.promptSuggestionEnabled":`提示建议`,"settings.item.busySendMode":`忙碌时发送`,"settings.item.busySendMode.desc":`智能体还在跑时,新消息是排队等本回合结束,还是立刻插入当前回合。排队中的条目仍可点立即发送。`,"settings.item.busySendMode.queue":`排队发送`,"settings.item.busySendMode.immediate":`立即插入当前回合`,"settings.item.ignoreGitIgnore":`忽略 .gitignore`,"settings.item.ignoreGitIgnore.desc":`搜索文件时忽略 .gitignore 规则`,"settings.item.deferToolLoading":`延迟加载工具`,"settings.item.hookOutputCollapsed":`折叠 Hook 输出`,"settings.item.memory.enabled":`启用记忆功能`,"settings.item.memory.autoMemoryEnabled":`自动记忆`,"settings.item.memory.autoMemoryEnabled.desc":`自动保存重要信息到记忆库`,"settings.item.language":`响应语言`,"settings.item.language.desc":`设置 AI 回复使用的语言`,"settings.item.cleanupPeriodDays":`聊天记录保留天数`,"settings.item.imageHistoryRetainRounds":`图片保留轮数`,"settings.item.imageHistoryRetainRounds.desc":`对话历史中保留图片的最近轮数`,"settings.item.env":`环境变量`,"settings.item.env.desc":`应用于每个会话的环境变量 (JSON)`,"settings.item.sandbox.enabled":`启用安全沙箱`,"settings.item.sandbox.enabled.desc":`在沙箱中运行 Bash 命令,限制文件和网络访问`,"settings.item.sandbox.autoAllowBashIfSandboxed":`沙箱内自动批准命令`,"settings.item.sandbox.autoAllowBashIfSandboxed.desc":`命令在沙箱中运行时自动批准`,"settings.loading":`加载中...`,"settings.saved":`已保存`,"settings.saveFailed":`保存失败`,"settings.notSet":`未设置`,"settings.default":`默认`,"settings.reset":`重置`,"settings.noProjectSettings":`当前工作空间暂无可配置项`,"settings.effort.minimal":`最小`,"settings.effort.low":`低`,"settings.effort.medium":`中`,"settings.effort.high":`高`,"settings.effort.xhigh":`极高`,"settings.effort.max":`最大`,"page.title":`CodeBuddy Code`,"tool.processExited":`[进程已退出]`,"tool.itemsCount":`{count} 项`,"tool.showAllItems":`显示全部 {count} 项`,"tool.moreLinesCount":`... 还有 {count} 行`,"tool.generatedImage":`生成的图片`,"tool.editedImage":`编辑后的图片`,"tool.imageGen":`图片生成`,"tool.imageEdit":`图片编辑`,"tool.toolSearch":`工具搜索`,"tool.teamCreate":`创建团队`,"tool.teamDelete":`删除团队`,"tool.taskCreate":`创建任务`,"tool.taskUpdate":`更新任务`,"tool.taskList":`任务列表`,"tool.taskGet":`获取任务`,"tool.sendMessage":`发送消息`,"tool.shutdown":`关闭`,"tool.taskCompleted":`任务完成`,"tool.shutdownRejected":`关闭被拒绝`,"tool.planResponse":`计划回复`,"tool.approved":`已批准`,"tool.rejected":`已拒绝`,"tool.userRejectedResult":`用户已拒绝执行此操作`,"tool.webSearch":`网络搜索`,"tool.webFetch":`网页获取`,"tool.saveMemory":`保存记忆`,"tool.askUserQuestion":`询问用户`,"tool.askUserForStructuredInput":`请求结构化输入`,"tool.structuredInputFieldsHeader":`请求字段`,"tool.structuredInputEnumLabel":`可选值`,"tool.structuredInputPendingHint":`请填写以下信息后提交`,"tool.structuredInputRequired":`必填`,"tool.structuredInputSubmit":`提交`,"tool.structuredInputSubmitting":`提交中…`,"tool.structuredInputDecline":`拒绝`,"tool.structuredInputCancel":`取消`,"tool.structuredInputResponded":`已回复`,"tool.structuredInputBooleanTrue":`是`,"tool.structuredInputBooleanFalse":`否`,"tool.enterPlanMode":`进入计划模式`,"tool.exitPlanMode":`退出计划模式`,"tool.allowedActions":`允许的操作:`,"tool.skill":`技能`,"tool.agent":`代理`,"tool.failed":`失败`,"tool.completed":`完成`,"tool.toolsCount":`{count} 个工具`,"tool.background":`后台`,"tool.permissionsCount":`{count} 项权限`,"subagent.openDetail":`查看执行详情`,"subagent.expandInline":`就地展开`,"subagent.collapseInline":`收起`,"subagent.expandPrompt":`展开派发指令`,"subagent.collapsePrompt":`收起派发指令`,"subagent.dispatchPrompt":`派发指令`,"subagent.returnValue":`返回结果`,"subagent.dockEmptyHint":`在对话里点子代理那一行,就能在这里看它的执行详情。`,"subagent.detailTab":`子代理`,"workflow.detailTab":`工作流`,"workflow.waiting":`等待 {count} 个工作流完成`,"workflow.startedFor":`已启动 {name}:`,"workflow.agentFallback":`第 {index} 个 agent`,"workflow.approval.phasesIntro":`该动态工作流将在以下阶段并行启动多个子代理:`,"workflow.approval.tokenHint":`动态工作流会并行运行大量子代理,可能快速消耗 token 并计入用量额度。运行中可随时在工作流卡片或右侧详情中停止,也可以输入 /workflows 打开详情。`,"workflow.approval.viewScript":`查看原始脚本({count} 行)`,"workflow.approval.hideScript":`收起原始脚本({count} 行)`,"workflow.approval.savedWorkflow":`已保存的工作流:{name}`,"workflow.approval.scriptPath":`脚本:{path}`,"workflow.approval.dynamicWorkflow":`动态工作流`,"workflow.startedHint":`工作流在后台运行,点击卡片可在侧边栏查看执行详情;完成后最终报告会出现在对话中。`,"workflow.completedHint":`工作流已完成,点击卡片查看各阶段与 agent 的执行详情。`,"workflow.noRuns":`当前会话还没有工作流`,"workflow.mobileUnsupported":`请在桌面端查看工作流详情`,"workflow.agentsProgress":`{done}/{total} agents 完成`,"workflow.phases":`阶段`,"workflow.allPhases":`全部`,"workflow.overall":`总进度`,"workflow.status.running":`运行中`,"workflow.status.paused":`已暂停`,"workflow.status.completed":`已完成`,"workflow.status.failed":`失败`,"workflow.status.aborted":`已停止`,"workflow.status.starting":`正在启动`,"workflow.openDetail":`查看详情`,"workflow.agents":`{count} 个 agent`,"workflow.agentsDone":`{count} 完成`,"workflow.agentsRunning":`{count} 运行中`,"workflow.agentsFailed":`{count} 失败`,"workflow.agentsCached":`{count} 命中缓存`,"workflow.tokens":`{count} tokens`,"workflow.toolCalls":`{count} 次工具调用`,"workflow.phaseProgress":`阶段 {done}/{total}`,"workflow.pause":`暂停`,"workflow.resume":`继续`,"workflow.stop":`停止`,"workflow.skipAgent":`跳过`,"workflow.phaseUngrouped":`未分阶段`,"workflow.phasePending":`等待中`,"workflow.phaseSkipped":`未执行`,"workflow.noAgentsYet":`还没有派发 agent`,"workflow.prompt":`指令`,"workflow.promptLines":`{count} 行`,"workflow.activity":`最近活动`,"workflow.result":`结果`,"workflow.error":`错误`,"workflow.output":`最终输出`,"workflow.logs":`日志`,"workflow.idle":`空闲 {time}`,"workflow.pausedHint":`已暂停:运行中的 agent 会继续完成,新 agent 暂不派发。`,"workflow.detailLoading":`正在加载工作流详情…`,"workflow.detailMissing":`运行记录已不在内存中(进程重启或已被回收),无法查看详情。`,"workflow.detailError":`工作流详情加载失败`,"workflow.retry":`重试`,"workflow.controlFailed":`操作未生效,工作流可能已结束`,"workflow.cachedBadge":`缓存`,"workflow.dockEmptyHint":`在对话里点工作流卡片,就能在这里查看执行详情。`,"subagent.running":`进行中`,"subagent.detailPending":`子代理刚启动,还没有执行记录。`,"subagent.detailEmpty":`这个子代理没有产生执行记录。`,"subagent.detailGone":`这个子代理的执行详情已不在当前会话中,可以关掉这个标签。`,"terminal.unknownError":`未知错误`,"terminal.processExited":`[进程已退出]`,"terminal.connectionLost":`连接已断开`,"terminal.wsConnectionFailed":`WebSocket 连接失败`,"terminal.createSessionFailed":`创建终端会话失败`,"terminal.reconnecting":`正在重新连接...`,"terminal.reconnectFailed":`重连失败`,"terminal.search.placeholder":`查找`,"terminal.search.noResults":`无结果`,"terminal.search.caseSensitive":`区分大小写`,"terminal.search.wholeWord":`全字匹配`,"terminal.search.regex":`使用正则表达式`,"terminal.search.previous":`上一个匹配`,"terminal.search.next":`下一个匹配`,"terminal.search.close":`关闭`,"team.title":`团队`,"team.activeCount":`{count} 个活跃`,"team.memberCount":`{count} 位成员`,"team.doneCount":`{count} 个完成`,"team.historyAndProgress":`团队成员与任务进度`,"team.waitingForTeammates":`等待 {count} 个智能体完成…`,"team.backToMain":`返回主对话`,"team.switchMember":`切换成员`,"team.viewMemberHistory":`查看成员对话历史`,"team.recentCommunication":`成员动态`,"team.runningTaskCount":`{count} 项执行中`,"team.pendingTaskCount":`{count} 项待开始`,"team.receivedFrom":`收到 {peer}`,"team.sentTo":`发给 {peer}`,"team.loadingHistory":`加载对话历史…`,"team.noHistory":`暂无对话历史`,"team.agentRunning":`正在运行…`,"team.delivered":`已送达`,"team.showLess":`收起`,"team.moreLines":`… ({count} 更多行)`,"team.tools":`{count} 工具`,"team.tokens":`{count} tokens`,"instance.tunnelMode":`隧道`,"instance.localMode":`本地`,"workspace.searchPlaceholder":`搜索目录...`,"workspace.switch":`切换`,"workspace.switchHere":`切换到此目录`,"workspace.switching":`切换中...`,"workspace.noResults":`没有匹配的目录`,"workspace.emptyDir":`此目录为空`,"workspace.pathPlaceholder":`输入路径或目录名...`,"workspace.selectDir":`在此目录创建机器人`,"workspace.filterPlaceholder":`过滤子目录...`,"workspace.recent.title":`最近工作区`,"workspace.recent.daysAgo":`天前`,"workspace.recent.hoursAgo":`小时前`,"workspace.recent.minutesAgo":`分钟前`,"workspace.recent.justNow":`刚刚`,"workspace.recent.remove":`移除`,"workspace.browseTitle":`浏览工作区`,"workspace.recentWorkspaces":`最近工作区`,"workspace.createNew":`创建新机器人`,"workspace.browseDir":`浏览目录`,"workspace.instanceLocal":`本地`,"workspace.instanceTunnel":`隧道`,"workspace.instanceCurrent":`当前`,"workspace.switchInstance":`切换`,"workspace.switchingInstance":`切换中...`,"workspace.switchingWithGateway":`正在准备切换...`,"workspace.instanceStarted":`启动于`,"workspace.noWorkspaces":`暂无活跃的工作区`,"workspace.noWorkspacesHint":`浏览目录创建新机器人`,"workspace.instanceCount":`{count} 个机器人`,"question.multiLabel":`多选`,"tasks.title":`推荐模版`,"tasks.subtitle":`选择一个模版快速创建定时任务`,"tasks.loading":`正在获取推荐模版...`,"tasks.error":`获取模版失败`,"tasks.retry":`重试`,"tasks.refresh":`刷新推荐`,"tasks.refreshed":`已刷新`,"tasks.empty":`暂无推荐模版`,"tasks.interval":`每 {value}`,"tasks.interval.1d":`每天`,"tasks.interval.2d":`每 2 天`,"tasks.interval.3d":`每 3 天`,"tasks.interval.1w":`每周`,"tasks.interval.2w":`每 2 周`,"tasks.interval.1m":`每月`,"scheduled.title":`定时任务`,"scheduled.subtitle":`当前会话中的定时任务`,"scheduled.loading":`加载中...`,"scheduled.empty":`暂无定时任务`,"scheduled.emptyHint":`在对话中使用 /loop 或 CronCreate 创建`,"scheduled.create":`创建任务`,"scheduled.creating":`创建中...`,"scheduled.delete":`删除`,"scheduled.edit":`修改任务`,"scheduled.save":`保存修改`,"scheduled.saving":`保存中...`,"scheduled.enable":`启用`,"scheduled.disable":`禁用`,"scheduled.enabled":`已启用`,"scheduled.disabled":`已禁用`,"scheduled.triggered":`定时任务已启动`,"scheduled.taskId":`任务`,"scheduled.executions":`执行记录`,"scheduled.executionsTitle":`任务执行记录`,"scheduled.executionsBack":`返回任务列表`,"scheduled.executionsLoading":`正在加载执行记录...`,"scheduled.executionsEmpty":`暂无执行记录`,"scheduled.executionsFilteredEmpty":`没有符合筛选条件的执行记录`,"scheduled.executionsSearchPlaceholder":`搜索执行 ID、内容或错误...`,"scheduled.executionsClearSearch":`清除搜索`,"scheduled.executionsSelect":`选择`,"scheduled.executionsSelected":`已选 {count} 条`,"scheduled.executionsSelectAll":`全选可删除项`,"scheduled.executionsClearSelection":`取消全选`,"scheduled.executionsSelectOne":`选择执行记录 {id}`,"scheduled.executionsDeleteSelected":`删除所选`,"scheduled.executionsDeleteTitle":`删除 {count} 条执行记录?`,"scheduled.executionsDeleteMessage":`只会删除执行记录,不会删除定时任务或关联对话。此操作无法撤销。`,"scheduled.executionsDeleteSuccess":`已删除 {count} 条执行记录`,"scheduled.executionsDeleteFailed":`删除执行记录失败`,"scheduled.executionsDeleting":`删除中...`,"scheduled.executionsStatusFilter":`状态筛选`,"scheduled.executionsAllStatuses":`全部状态`,"scheduled.executionsTimeFilter":`时间筛选`,"scheduled.executionsAllTime":`全部时间`,"scheduled.executionsLastDay":`最近 24 小时`,"scheduled.executionsLastWeek":`最近 7 天`,"scheduled.executionsLastMonth":`最近 30 天`,"scheduled.executionsLoadMore":`加载更多`,"scheduled.executionsAllLoaded":`已加载全部记录`,"scheduled.executionDetails":`执行详情`,"scheduled.executionDetailsClose":`关闭执行详情`,"scheduled.executionId":`执行 ID`,"scheduled.executionStartedAt":`开始时间`,"scheduled.executionError":`错误信息`,"scheduled.execution.queued":`排队中`,"scheduled.execution.running":`执行中`,"scheduled.execution.owner":`执行实例`,"scheduled.execution.ownerDaemon":`后台服务实例`,"scheduled.execution.ownerWebui":`WebUI 实例`,"scheduled.execution.ownerCli":`CLI 实例`,"scheduled.execution.session":`会话`,"scheduled.execution.technicalDetails":`技术信息`,"scheduled.execution.succeeded":`成功`,"scheduled.execution.failed":`失败`,"scheduled.execution.openLive":`查看实时过程`,"scheduled.execution.openResult":`查看执行过程和结果`,"scheduled.execution.noConversation":`此执行记录没有关联对话,无法查看过程`,"scheduled.execution.openFailed":`打开执行对话失败`,"scheduled.execution.focusUnavailable":`已打开关联对话,但这条旧执行没有可定位的过程记录`,"scheduled.executionDelete":`删除执行记录`,"scheduled.executionDeleteOne":`删除执行记录 {id}`,"scheduled.executionDeleteTitle":`删除这条执行记录?`,"scheduled.executionDeleteActiveHint":`执行中或排队中的记录不能删除`,"scheduled.duration":`耗时`,"scheduled.cron":`Cron 表达式`,"scheduled.prompt":`执行内容`,"scheduled.promptPlaceholder":`定时触发时要执行的提示词...`,"scheduled.recurring":`循环`,"scheduled.oneShot":`一次性`,"scheduled.durable":`持久化`,"scheduled.sessionOnly":`仅会话`,"scheduled.lastFired":`上次触发`,"scheduled.custom":`自定义`,"scheduled.every":`每`,"scheduled.unit.minutes":`分钟`,"scheduled.unit.hours":`小时`,"scheduled.unit.days":`天`,"scheduled.unit.weeks":`周`,"plugins.title":`插件管理`,"plugins.installedPlugins":`已安装插件`,"plugins.browseMarketplace":`浏览市场`,"plugins.marketplaces":`插件市场`,"plugins.enabled":`已启用`,"plugins.disabled":`已禁用`,"plugins.enable":`启用`,"plugins.disable":`禁用`,"plugins.uninstall":`卸载`,"plugins.install":`安装`,"plugins.confirmUninstall":`确定要卸载此插件吗?`,"plugins.marketplace":`市场`,"plugins.addMarketplace":`添加市场`,"plugins.removeMarketplace":`移除`,"plugins.confirmRemoveMarketplace":`确定要移除此市场吗?`,"plugins.noPlugins":`暂无已安装的插件`,"plugins.noPluginsHint":`通过插件市场安装插件来扩展功能`,"plugins.noMarketplaces":`暂无配置的市场`,"plugins.noMarketplacesHint":`添加一个插件市场来浏览和安装插件`,"plugins.selectMarketplace":`选择市场`,"plugins.selectMarketplaceHint":`选择一个市场来浏览可用插件`,"plugins.marketplaceNotFound":`市场不存在`,"plugins.noAvailablePlugins":`该市场暂无可用插件`,"plugins.noAvailablePluginsHint":`请尝试添加其他市场或稍后再试`,"plugins.installed":`已安装`,"plugins.browsingMarketplace":`浏览中...`,"plugins.loading":`加载中...`,"plugins.error":`加载插件失败`,"plugins.retry":`重试`,"plugins.sourcePlaceholder":`市场地址(Git URL 或本地路径)`,"plugins.namePlaceholder":`市场名称(可选)`,"plugins.cancel":`取消`,"plugins.add":`添加`,"plugins.version":`版本`,"plugins.operationFailed":`操作失败`,"plugins.searchPlaceholder":`搜索插件...`,"plugins.allMarketplaces":`全部市场`,"plugins.noSearchResults":`没有找到匹配的插件`,"plugins.totalCount":`个插件`,"plugins.refresh":`刷新`,"plugins.kindAll":`全部`,"plugins.kindSkills":`Skills`,"plugins.kindMcp":`MCP`,"plugins.kindHooks":`Hooks`,"plugins.kindTools":`Tools`,"plugins.kindUnknown":`其他`,"plugins.filterStatusAll":`全部状态`,"plugins.filterStatusEnabled":`已启用`,"plugins.filterStatusDisabled":`未启用`,"plugins.infiniteRange":`已显示 {visible} / {total}`,"plugins.infiniteLoading":`向下滚动加载更多`,"plugins.infiniteEnd":`已显示全部`,"plugins.backToTop":`回到顶部`,"plugins.installedLabel":`已安装`,"plugins.category":`分类`,"plugins.author":`作者`,"plugins.license":`许可证`,"plugins.homepage":`主页`,"plugins.repository":`仓库`,"plugins.source":`来源`,"plugins.keywords":`关键词`,"plugins.features":`功能`,"plugins.scope":`范围`,"plugins.scope.user":`用户`,"plugins.scope.project":`项目`,"plugins.scope.project-local":`本地`,"plugins.installScope.user":`为你安装(用户级)`,"plugins.installScope.project":`为所有协作者安装(项目级)`,"plugins.installScope.local":`仅在此仓库为你安装(本地级)`,"plugins.policyCannotRemove":`不可卸载`,"plugins.policyCannotSwitchoff":`不可禁用`,"plugins.policyCannotEdit":`不可编辑`,"channel.from":`来自`,"channel.group":`群聊`,"channel.replyTo":`回复来自 {source}`,"channel.wechat":`微信`,"channel.wecom":`企业微信`,"channel.wecomBot":`企微机器人`,"remoteControl.title":`远程控制`,"remoteControl.subtitle":`管理渠道连接`,"remoteControl.connectedChannels":`已连接渠道`,"remoteControl.noChannels":`暂无已连接渠道`,"remoteControl.noChannelsHint":`添加微信或企业微信渠道,或从插件市场安装更多`,"remoteControl.addWeChat":`添加微信机器人`,"remoteControl.addWeCom":`添加企微机器人`,"remoteControl.connect":`连接`,"remoteControl.disconnect":`断开`,"remoteControl.delete":`删除`,"remoteControl.add":`添加`,"remoteControl.connected":`已连接`,"remoteControl.disconnected":`未连接`,"remoteControl.connecting":`连接中...`,"remoteControl.installMore":`安装更多渠道`,"remoteControl.installMoreHint":`浏览插件市场,安装第三方渠道插件`,"remoteControl.browseMarketplace":`浏览插件市场`,"remoteControl.builtIn":`内置`,"remoteControl.plugin":`插件`,"remoteControl.rebind":`重新绑定`,"remoteControl.unbind":`解绑`,"remoteControl.bot":`机器人`,"remoteControl.default":`默认`,"remoteControl.next":`下一步`,"remoteControl.cancel":`取消`,"remoteControl.wecomBotIdHint":`从企业微信管理后台 → 应用管理 → AI 助手获取`,"remoteControl.wecomSecretHint":`输入 Secret 后按回车或点“连接”`,"remoteControl.addWeComScan":`扫码接入`,"remoteControl.addWeComManual":`手动填写 Bot ID / Secret`,"remoteControl.scanWecomQr":`请用企业微信扫描二维码`,"remoteControl.fetchingQr":`正在获取二维码...`,"remoteControl.scanQr":`请用微信扫描二维码`,"remoteControl.streamMode":`流式回复`,"remoteControl.replyMode":`非流式回复`,"remoteControl.enableStreaming":`开启流式`,"remoteControl.disableStreaming":`关闭流式`,"remoteControl.cardMode":`卡片交互`,"remoteControl.textMode":`纯文本(旧版)`,"remoteControl.wecomGlobalTitle":`企微机器人全局默认`,"remoteControl.wecomGlobalHint":`点击切换默认行为;已单独设置的机器人不受影响`,"remoteControl.wecomGlobalStreamOn":`默认流式回复`,"remoteControl.wecomGlobalStreamOff":`默认非流式回复`,"remoteControl.wecomGlobalCardsOn":`默认卡片确认`,"remoteControl.wecomGlobalCardsOff":`默认文字确认`,"remoteControl.enableCards":`开启卡片`,"remoteControl.disableCards":`关闭卡片`,"sidebar.docs":`文档`,"docs.title":`文档中心`,"docs.search.placeholder":`搜索文档...`,"docs.search.noResults":`未找到相关文档`,"docs.search.resultsCount":`{count} 个结果`,"docs.loading":`加载中...`,"docs.loadError":`文档加载失败`,"docs.notFound":`未找到该文档`,"docs.apiReference":`API 文档`,"docs.toc":`目录`,"docs.retry":`重试`,"docs.backToList":`返回文档列表`,"docs.expandAll":`展开全部`,"docs.collapseAll":`收起全部`,"docs.openStandalone":`独立窗口打开`,"sidebar.stats":`统计`,"stats.title":`统计`,"stats.loading":`正在加载统计数据...`,"stats.refresh":`刷新`,"stats.noData":`暂无统计数据`,"stats.tab.overview":`概览`,"stats.tab.models":`模型`,"stats.tab.tools":`工具`,"stats.sessions":`会话数`,"stats.messages":`消息数`,"stats.activeDays":`活跃天数`,"stats.currentStreak":`当前连续`,"stats.longestStreak":`最长连续`,"stats.peakHour":`高峰时段`,"stats.longestSession":`最长会话`,"stats.favoriteModel":`最常用模型`,"stats.totalTokens":`总 Token`,"stats.timeRange":`统计范围: 最近 {days} 天`,"stats.heatmap.less":`少`,"stats.heatmap.more":`多`,"stats.days":`天`,"stats.tokensPerDay":`每日 Token 趋势`,"stats.allModels":`所有模型`,"stats.input":`输入`,"stats.output":`输出`,"stats.cacheRead":`缓存读取`,"stats.cacheHitRate":`缓存命中率`,"stats.cost":`成本`,"stats.topTools":`工具使用排行`,"stats.session.title":`当前会话`,"stats.session.apiDuration":`API 时长`,"stats.session.wallTime":`总时长`,"stats.session.linesAdded":`新增行`,"stats.session.linesDeleted":`删除行`,"stats.session.tokens":`Token`,"stats.na":`N/A`,"stats.heatmap.messages":`条消息`,"stats.funFact.moreTokens":`你已使用约 {times} 倍于《{book}》的 Token 量`,"stats.funFact.sameTokens":`你使用的 Token 量约等于一本《{book}》`,"stats.funFact.longerSession":`你最长的会话时长约为「{activity}」的 {times} 倍`,"sidebar.traces":`链路`,"traces.title":`链路追踪`,"traces.loading":`加载中...`,"traces.refresh":`刷新`,"traces.clear":`清空`,"traces.clearConfirm":`确定清空所有链路数据?`,"traces.noData":`暂无链路数据,发送一条消息后将自动收集`,"traces.selectWorker":`选择 Worker`,"traces.current":`当前`,"traces.spanCount":`{count} spans`,"traces.duration":`耗时`,"traces.status.ok":`成功`,"traces.status.error":`错误`,"traces.status.running":`运行中`,"traces.status.cancelled":`已取消`,"traces.bottleneck":`瓶颈`,"traces.bottleneckTip":`耗时最长,占总时间 {pct}%`,"traces.spanDetail":`Span 详情`,"traces.spanDetail.type":`类型`,"traces.spanDetail.duration":`耗时`,"traces.spanDetail.model":`模型`,"traces.spanDetail.tokens":`Token`,"traces.spanDetail.input":`输入`,"traces.spanDetail.output":`输出`,"traces.spanDetail.error":`错误`,"traces.spanDetail.cancelReason":`取消原因`,"traces.spanDetail.attributes":`属性`,"traces.legend.agent":`Agent`,"traces.legend.generation":`模型调用`,"traces.legend.function":`工具`,"traces.legend.handoff":`切换`,"traces.legend.guardrail":`防护`,"traces.back":`返回`,"traces.tab.timeline":`时间线`,"traces.tab.tree":`树形`,"traces.tab.flame":`火焰图`,"traces.tab.graph":`依赖图`,"traces.expandAll":`全部展开`,"traces.collapseAll":`全部收起`,"traces.search":`搜索 span...`,"traces.selfTime":`自身耗时`,"traces.spanDetail.overview":`概览`,"traces.spanDetail.io":`输入/输出`,"traces.noSpans":`无 span 数据`,"traces.noSpansFiltered":`当前筛选下无 span。`,"traces.clearFilter":`清除筛选`,"traces.auto":`自动`,"traces.auxiliaryCount":`{count} 个辅助 trace(memory、title 等)`,"traces.noIO":`无输入/输出数据`,"traces.noAttrs":`无属性`,"traces.io.expand":`展开`,"traces.io.collapse":`收起`,"traces.io.messages":`消息`,"traces.io.less":`收起`,"traces.io.moreChars":`+{count} 字符`,"traces.fit":`适应`,"traces.allSessions":`所有会话`,"traces.allInstances":`所有实例`,"traces.llmCalls":`{count} 次 LLM`,"traces.errors":`错误`,"traces.noErrors":`没有失败的 trace`,"traces.errorBanner":`检测到 {count} 个失败的 trace`,"traces.errorBannerCta":`点击仅查看错误 →`,"traces.errorSummaryTitle":`本次共有 {count} 处错误`,"traces.jumpToFirstError":`跳转到首个错误 span`,"traces.copyError":`复制错误`,"traces.onlyErrors":`仅错误`,"traces.filter.all":`全部`,"traces.filter.error":`错误`,"traces.filter.running":`运行中`,"traces.filter.cancelled":`已取消`,"traces.filter.ok":`成功`,"sidebar.metrics":`监控`,"metrics.title":`系统监控`,"metrics.loading":`加载指标数据...`,"metrics.refresh":`刷新`,"metrics.cpu":`CPU`,"metrics.memory":`内存`,"metrics.disk":`磁盘`,"metrics.cores":`核心`,"metrics.workers":`Workers`,"metrics.noWorkers":`暂无运行中的 Worker`,"metrics.current":`当前`,"metrics.uptime":`运行时长`,"metrics.version":`版本`,"sidebar.editor":`编辑器`,"dock.openFile":`打开文件`,"dock.file":`文件`,"dock.pickFromTree":`从工作区目录树中选择文件`,"dock.open":`打开`,"dock.closeTab":`关闭“{name}”`,"dock.closeOthers":`关闭其他标签页`,"dock.closeToRight":`关闭右侧标签页`,"dock.toggle":`工作台`,"dock.tabs":`工作台标签页`,"dock.resize":`调整工作台宽度`,"dock.collapse":`收起工作台`,"dock.fullscreen":`全屏显示工作台`,"dock.exitFullscreen":`退出全屏`,"dock.emptyTitle":`打开工作区工具`,"dock.emptyDescription":`选择资源管理器、文件搜索、源代码管理、文件或终端`,"dock.unseen":`有 {count} 个产出`,"browserPreview.blockedTitle":`此页面无法在内嵌窗口打开`,"browserPreview.blockedDescription":`目标站点的安全策略或登录重定向不支持内嵌访问,请在独立浏览器标签页中继续。`,"browserPreview.openExternal":`在浏览器中打开`,"browserPreview.checking":`正在检查页面是否可访问…`,"browserPreview.loadFailedTitle":`页面暂时无法打开`,"browserPreview.loadFailedDescription":`可能是网络异常,或目标页面已失效。`,"browserPreview.authRequiredTitle":`需要在浏览器中登录`,"browserPreview.authRequiredDescription":`目标页面需要登录凭据,内嵌窗口无法安全复用该站点的登录状态。`,"browserPreview.redirectLoopTitle":`页面重定向次数过多`,"browserPreview.redirectLoopDescription":`目标站点的登录或跳转流程未能完成,请改用独立浏览器。`,"browserPreview.timeoutTitle":`页面加载时间过长`,"browserPreview.timeoutDescription":`目标站点暂未完成响应,可以重新加载或改用独立浏览器。`,"browserPreview.retry":`重新加载`,"browserPreview.tryEmbedded":`仍然尝试内嵌打开`,"browserPreview.failureHint":`如果需要登录,建议先在独立浏览器完成登录后再重试。`,"editor.title":`代码编辑器`,"editor.loading":`加载中...`,"editor.loadingFile":`正在加载文件...`,"editor.loadError":`加载失败`,"editor.retryLoad":`重试加载`,"editor.fileTooLarge":`超过 2 MB,无法在编辑器打开`,"editor.noFile":`选择一个文件开始编辑`,"editor.unsaved":`未保存`,"editor.saving":`正在保存`,"editor.saveFailed":`保存失败`,"editor.overwrite":`覆盖磁盘文件`,"editor.moveFailed":`移动失败`,"editor.save":`保存`,"editor.saveAll":`全部保存`,"editor.close":`关闭`,"editor.closeTabAriaLabel":`关闭标签页 {name}`,"editor.closeOthers":`关闭其他`,"editor.closeAll":`关闭全部`,"editor.newFile":`新建文件`,"editor.newFolder":`新建文件夹`,"editor.rename":`重命名`,"editor.delete":`删除`,"editor.deleteConfirmTitle":`确认删除`,"editor.deleteConfirmMessage":`确定要删除选中的 {count} 个项目吗?此操作无法撤销。`,"editor.refresh":`刷新`,"editor.backToWorkDir":`回到工作目录`,"editor.emptyFolder":`空文件夹`,"editor.explorer":`资源管理器`,"editor.fileTreeAriaLabel":`工作区文件树`,"editor.symbolicLink":`符号链接`,"editor.toggleSidebar":`切换侧边栏`,"editor.collapseAll":`全部折叠`,"editor.showHiddenFiles":`显示隐藏文件`,"editor.hideHiddenFiles":`隐藏隐藏文件`,"editor.openFolder":`打开目录`,"editor.openFolderPlaceholder":`输入目录路径...`,"editor.parentFolder":`上级目录`,"editor.pin":`固定`,"editor.unpin":`取消固定`,"editor.copyPath":`复制路径`,"editor.copyRelativePath":`复制相对路径`,"editor.addToChat":`添加到对话`,"editor.cut":`剪切`,"editor.copy":`复制`,"editor.paste":`粘贴`,"editor.open":`打开`,"editor.copyName":`复制名称`,"editor.download":`下载`,"editor.downloadFailed":`下载失败`,"editor.openInTerminal":`在终端中打开`,"editor.uploadComplete":`已上传 {count} 个文件`,"editor.uploadFailed":`上传失败`,"editor.uploadStatus":`上传 {percent}%`,"editor.expandAll":`全部展开`,"editor.cursorPosition":`第 {line} 行,第 {col} 列`,"editor.view.image":`图片`,"editor.view.video":`视频`,"editor.view.svg":`SVG`,"editor.view.markdown":`Markdown 预览`,"editor.view.html":`HTML 预览`,"editor.view.pdf":`PDF`,"editor.view.binary":`二进制`,"editor.revealInExplorer":`在文件树中定位`,"editor.closeToRight":`关闭右侧`,"editor.closeSaved":`关闭已保存`,"editor.closeSaveFailedTitle":`无法关闭:{count} 个标签页保存失败`,"editor.closeSaveFailedMessage":`{count} 个标签页保存失败。是否放弃更改并关闭?`,"editor.discardAndClose":`放弃并关闭`,"editor.quickOpen":`快速打开文件`,"editor.focusExplorer":`聚焦资源管理器`,"editor.recentFiles":`最近文件`,"editor.quickOpenPlaceholder":`输入文件名以搜索...`,"editor.quickOpenEmpty":`没有匹配的文件`,"editor.quickOpenLoading":`正在加载文件列表...`,"editor.openEditors":`已打开的编辑器`,"editor.scrollTabsLeft":`向左滚动标签页`,"editor.scrollTabsRight":`向右滚动标签页`,"editor.selected":`已选`,"editor.lines":`行`,"editor.preview":`切换到预览`,"editor.source":`切换到源码`,"editor.openInNewWindow":`在新窗口中打开`,"editor.mobileBack":`返回文件树`,"ide.explorer":`资源管理器`,"ide.search":`搜索`,"ide.sourceControl":`源代码管理`,"ide.terminal":`终端`,"ide.terminals":`终端标签页`,"ide.allTerminals":`全部终端`,"ide.allTerminalsAriaLabel":`查看全部 {count} 个终端`,"ide.terminalOrdinal":`终端 {index}`,"ide.newTerminal":`新建终端`,"ide.toggleSidebar":`切换侧栏`,"ide.toggleTerminal":`切换终端`,"ide.resizeSidebar":`调整侧栏宽度`,"ide.resizeSidePanel":`调整侧边面板宽度`,"ide.resizeBottomPanel":`调整底部面板高度`,"ide.resizeSplit":`调整分屏比例`,"ide.hidePanel":`隐藏面板`,"ide.maximizePanel":`最大化面板`,"ide.restorePanel":`还原面板大小`,"ide.listView":`列表视图`,"ide.treeView":`树视图`,"ide.refresh":`刷新`,"ide.scm.title":`源代码管理`,"ide.scm.repositories":`仓库`,"ide.scm.changes":`变更`,"ide.scm.stagedChanges":`已暂存的更改`,"ide.scm.untracked":`未跟踪`,"ide.scm.noChanges":`没有更改`,"ide.scm.notGitRepo":`不是 Git 仓库`,"ide.scm.commitPlaceholder":`消息 (⌘Enter 提交)`,"ide.scm.commit":`提交`,"ide.scm.push":`推送`,"ide.scm.pull":`拉取`,"ide.scm.stage":`暂存`,"ide.scm.unstage":`取消暂存`,"ide.scm.stageAll":`全部暂存`,"ide.scm.unstageAll":`全部取消暂存`,"ide.scm.discard":`放弃更改`,"ide.scm.discardAll":`全部放弃`,"ide.scm.copyPath":`复制路径`,"ide.scm.openFile":`打开文件`,"ide.scm.binaryRevisionPreviewUnavailable":`暂存或已删除的二进制版本暂不支持预览`,"ide.scm.createBranch":`创建新分支...`,"ide.scm.newBranchPlaceholder":`新分支名称...`,"ide.scm.branchSearchPlaceholder":`搜索分支或标签...`,"ide.scm.switchBranch":`切换分支`,"ide.scm.localBranches":`本地分支`,"ide.scm.remoteBranches":`远程分支`,"ide.scm.noBranchMatch":`没有匹配的分支`,"ide.scm.noBranches":`没有分支`,"ide.scm.noBranch":`无分支`,"ide.scm.createBranchNamed":`创建分支 “{name}”`,"ide.scm.loadingBranches":`正在加载分支…`,"ide.scm.graph":`提交记录`,"ide.scm.closeDiff":`关闭差异`,"ide.scm.loadingDiff":`加载差异中...`,"ide.scm.diff":`差异`,"ide.scm.feedback.success":`操作完成`,"ide.scm.feedback.failed":`无法完成操作`,"ide.scm.feedback.switched":`已切换到分支 “{name}”。`,"ide.scm.feedback.created":`已创建分支 “{name}”。`,"ide.scm.feedback.pushed":`已成功推送更改。`,"ide.scm.feedback.pulled":`已成功拉取更改。`,"ide.scm.feedback.completed":`Git 操作已完成。`,"ide.scm.feedback.details":`查看技术详情`,"ide.scm.feedback.retry":`重试`,"ide.scm.error.busy":`仓库正被另一个 Git 操作占用。请等待操作完成;如果问题持续,请确认没有 Git 进程仍在运行后再重试。`,"ide.scm.error.localChanges":`当前未提交的更改会被覆盖。请先保存、暂存或放弃这些更改,再切换分支。`,"ide.scm.error.untrackedFiles":`未跟踪的文件会被覆盖。请先移动、提交或删除这些文件,再切换分支。`,"ide.scm.error.conflicts":`仓库中还有未解决的冲突。请先解决冲突,再切换分支。`,"ide.scm.error.branchNotFound":`找不到该分支。请刷新分支列表后重试。`,"ide.scm.error.switchFailed":`切换分支失败。请检查仓库状态后重试。`,"ide.scm.error.operationFailed":`Git 操作失败,请稍后重试。`,"ide.search.title":`搜索`,"ide.search.placeholder":`搜索`,"ide.search.searching":`搜索中...`,"ide.search.noResults":`未找到结果`,"ide.search.results":`在 {files} 个文件中找到 {count} 个结果`,"ide.search.matchCase":`区分大小写`,"ide.search.wholeWord":`全字匹配`,"ide.search.regex":`使用正则表达式`,"ide.search.filesToInclude":`要包含的文件`,"ide.search.includePlaceholder":`例如 *.ts, src/**/include`,"ide.search.filesToExclude":`要排除的文件`,"ide.search.excludePlaceholder":`例如 node_modules, *.min.js`,"ide.search.useExcludeSettings":`使用排除设置和忽略文件`,"ide.search.toggleFilters":`文件筛选器`,"ide.search.refresh":`重新搜索`,"ide.search.clear":`清除搜索`,"ide.search.cancel":`停止搜索`,"ide.search.limitReached":`仅显示前 {count} 个结果`,"ide.search.partialTimedOut":`搜索超时,显示已找到的部分结果`,"ide.search.partialError":`搜索未完整完成,显示已找到的部分结果`,"ide.search.resultsLabel":`搜索结果`,"ide.search.failed":`搜索失败`,"ide.search.timedOut":`搜索超时`,"sidebar.workers":`实例`,"workers.title":`Agent 实例管理`,"workers.refresh":`刷新`,"workers.active":`活跃 Workers`,"workers.empty":`没有活跃的 worker 进程`,"workers.daemon":`Daemon 服务`,"workers.daemon.running":`运行中`,"workers.daemon.stopped":`已停止`,"workers.daemon.start":`启动`,"workers.daemon.starting":`启动中...`,"workers.daemon.stop":`停止`,"workers.daemon.restart":`重启`,"workers.action.logs":`查看日志`,"workers.action.open":`打开`,"workers.action.kill":`终止`,"workers.action.kill.confirm":`确定要终止这个 worker 进程吗?`,"sidebar.logs":`日志`,"logs.title":`日志查看器`,"logs.selectWorker":`选择 Worker`,"logs.current":`当前`,"logs.search":`搜索日志...`,"logs.autoRefresh":`自动刷新`,"logs.refresh":`刷新`,"logs.empty":`暂无日志内容`,"command.autocompact.description":`设置自动压缩的上下文窗口大小`,"command.background.description":`将当前对话移至后台会话并打开智能体列表`,"command.bg.description":`将当前对话移至后台(/background 的别名)`,"command.branch.description":`从当前位置创建当前对话的分支`,"command.btw.description":`打开旁路会话,不打断主要 Agent 工作`,"command.code-review.description":`审查当前代码变更的正确性和质量,可选择直接修复问题`,"command.copy.description":`复制最近一条回复`,"command.debug.description":`启用调试日志并诊断会话问题`,"command.deep-research.description":`对问题进行多角度网络研究并生成带引用的报告`,"command.effort.description":`设置模型的思考强度`,"command.clear.description":`开始新的对话(之前的对话仍可通过 /resume 访问)`,"command.context.description":`计算并显示上下文 Token 分布`,"command.cost.description":`显示当前会话的总费用和持续时间`,"command.doctor.description":`诊断和验证 CodeBuddy 的安装和设置`,"command.feedback.description":`打开反馈页面以报告问题或提出建议`,"command.fork.description":`从当前位置创建当前对话的分支(/branch 的别名)`,"command.fork-bg.description":`将当前对话复制到新的后台会话,并继续当前工作`,"command.gateway.description":`管理远程控制网关。子命令: "status" 查看状态, "stop" 停止网关, "token" 重新生成访问令牌, "tunnel" 启动隧道`,"command.goal.title":`Goal`,"command.goal.description":`设置要持续追求的目标`,"command.remote-control.description":`管理远程控制长连接客户端(start, stop, status, list)`,"command.login.description":`切换腾讯云 CodeBuddy 账号`,"command.model:lite.description":`设置轻量子任务使用的快速低成本模型`,"command.model:reasoning.description":`设置复杂分析使用的增强推理模型`,"command.model:text-to-video.description":`设置或查看文生视频模型`,"command.model:image-to-video.description":`设置或查看图生视频模型`,"command.logout.description":`退出 CodeBuddy Code 账号`,"command.plan.description":`预览当前计划文件内容`,"command.pr-comments.description":`获取 GitHub Pull Request 的评论`,"command.release-notes.description":`查看更新日志`,"command.review.description":`审查 Pull Request`,"command.skills.description":`列出可用的技能`,"command.simplify.description":`在不改变行为的前提下简化已变更代码`,"command.todos.description":`显示当前会话的任务清单`,"command.verify.description":`运行应用和测试,验证代码改动是否符合预期`,"command.workflows.description":`列出正在运行和已保存的动态工作流`,"command.reload-plugins.description":`重新加载所有插件、技能、代理、钩子和 MCP/LSP 服务器(无需重启)`,"command.plugin-validate.description":`验证插件目录结构和清单文件`,"command.init.description":`正在分析你的代码库…`,"command.compact.description":`清除对话历史但保留摘要在上下文中。可选: /compact [摘要指令]`,"command.upgrade.description":`在浏览器中打开升级页面`,"command.statusline.description":`设置 CodeBuddy Code 的状态栏 UI`,"command.security-review.description":`对当前分支的待提交变更进行安全审查`,"command.insights.description":`生成 AI 驱动的 CodeBuddy Code 使用模式和活动洞察`,"command.loop.description":`按固定间隔运行提示或斜杠命令(例如 /loop 5m /foo,默认 10m)`,"command.task-manager.description":`团队任务管理 - 智能任务录入、分配、追踪和分析`,"sidebar.changes":`变更`,"fileChanges.title":`变更`,"fileChanges.changesSection":`文件变更`,"fileChanges.empty":`暂无文件变更`,"fileChanges.showChanges":`显示文件变更`,"fileChanges.hideChanges":`隐藏文件变更`,"fileChanges.revertAll":`撤回全部`,"fileChanges.revertCode":`回退代码`,"fileChanges.revertChat":`回退对话`,"fileChanges.revertCodeAndChat":`回退全部`,"fileChanges.checkpoints":`回退点`,"fileChanges.noCheckpoints":`暂无回退点`,"rewind.action":`回退到这里`,"rewind.title":`回退到这条消息`,"rewind.conversationForked":`这条消息之后的对话内容会被丢弃,可以改完再发。`,"rewind.codeRestored":`将同时恢复 {files} 的代码改动(+{additions} −{deletions})。`,"rewind.noCodeChanges":`这一轮没有代码改动,仅回退对话。`,"rewind.warning":`回退不会影响手动编辑或通过 bash 修改的文件。`,"rewind.failed":`回退失败或回退后刷新失败,请重试(必要时刷新页面)。`,"filePreview.binaryNotSupported":`该文件无法在编辑器中预览`,"filePreview.download":`下载文件`,"error.viewCrashed":`页面加载出错`,"error.appCrashed":`应用遇到了问题`,"error.newChatFailed":`创建新对话失败,请重试`,"error.jobCreateFailed":`创建智能体失败,请重试`,"error.switchSessionFailed":`切换会话失败,请重试`,"error.sessionOccupied":`该会话正被其他终端或进程占用,无法同时切换`,"error.sessionOccupiedPage":`此会话正在其他窗口或设备使用中。`,"error.acpConnectStuck":`连接时间过长`,"error.acpConnectChecking":`正在确认是超时还是已被其他窗口占用…`,"error.acpDisconnected":`和智能体的连接已断开,刚才的消息可能没发出去。`,"error.acpNoResponse":`发送后没有收到回复,连接可能已中断。`,"error.sessionUnavailable":`该会话当前不可用,请稍后重试`,"commandPalette.placeholder":`输入命令...`,"commandPalette.commands":`命令`,"commandPalette.views":`视图`,"commandPalette.actions":`操作`,"commandPalette.noResults":`没有匹配的命令`,"commandPalette.newChat":`新建对话`,"commandPalette.openSessionSwitcher":`打开对话面板`,"commandPalette.toggleTheme":`切换主题`,"commandPalette.toggleLocale":`切换语言`,"commandPalette.tip":`打开命令面板`,"app.confirm":`确定`,"app.cancel":`取消`,"tool.toolSingular":`个工具已执行`,"tool.toolPlural":`个工具已执行`,"tool.mcpAppLoadHint":`点击加载交互式界面`,"keybindings.title":`快捷键`,"keybindings.search.placeholder":`搜索快捷键... (如 submit, ctrl+enter)`,"keybindings.source.default":`默认`,"keybindings.source.user":`自定义`,"keybindings.record.title":`录制快捷键`,"keybindings.record.hint":`请按下快捷键组合...`,"keybindings.record.conflict":`冲突`,"keybindings.action.edit":`编辑`,"keybindings.action.reset":`重置`,"keybindings.action.unbind":`解绑`,"keybindings.reset.all":`重置全部`,"keybindings.noResults":`没有匹配的快捷键`,"keybindings.empty":`暂无快捷键`,"keybindings.loading":`加载中...`,"keybindings.ctx.Global":`全局`,"keybindings.ctx.Chat":`聊天输入`,"keybindings.ctx.InputBox":`文本输入`,"keybindings.ctx.Terminal":`终端`,"keybindings.ctx.Autocomplete":`自动补全`,"keybindings.ctx.Confirmation":`确认对话框`,"keybindings.ctx.HistorySearch":`历史搜索`,"keybindings.ctx.Task":`任务运行中`,"keybindings.ctx.Settings":`设置`,"keybindings.ctx.CommandPalette":`命令面板`,"keybindings.ctx.Select":`选择列表`,"keybindings.ctx.PermissionDialog":`权限对话框`,"keybindings.ctx.Help":`帮助`,"keybindings.ctx.Plugin":`插件`,"keybindings.ctx.DiffDialog":`Diff 对话框`,"keybindings.ctx.MessageSelector":`消息选择器`,"keybindings.ctxDesc.Global":`在任何位置都生效`,"keybindings.ctxDesc.Chat":`聊天输入框获得焦点时`,"keybindings.ctxDesc.InputBox":`文本输入框处于活跃状态时`,"keybindings.ctxDesc.Terminal":`终端视图处于活跃状态时`,"keybindings.ctxDesc.Autocomplete":`自动补全菜单显示时`,"keybindings.ctxDesc.Confirmation":`确认/权限对话框显示时`,"keybindings.ctxDesc.HistorySearch":`搜索命令历史时 (ctrl+r)`,"keybindings.ctxDesc.Task":`任务/代理在前台运行时`,"keybindings.ctxDesc.Settings":`设置面板打开时`,"keybindings.ctxDesc.CommandPalette":`命令面板打开时`,"keybindings.ctxDesc.Select":`选择/列表组件获得焦点时`,"keybindings.ctxDesc.PermissionDialog":`工具权限对话框显示时`,"keybindings.ctxDesc.Help":`帮助页面打开时`,"keybindings.ctxDesc.Plugin":`插件对话框打开时`,"keybindings.ctxDesc.DiffDialog":`Diff 对话框打开时`,"keybindings.ctxDesc.MessageSelector":`消息选择器 (rewind) 打开时`,"keybindings.act.app:interrupt":`中断`,"keybindings.act.app:exit":`退出`,"keybindings.act.app:redraw":`刷新屏幕`,"keybindings.act.app:toggleTodos":`切换待办事项`,"keybindings.act.app:toggleTranscript":`切换转录`,"keybindings.act.app:toggleSidebar":`切换侧边栏`,"keybindings.act.app:toggleTerminal":`切换终端`,"keybindings.act.app:commandPalette":`命令面板`,"keybindings.act.app:newChat":`新对话`,"keybindings.act.app:settings":`设置`,"keybindings.act.app:focusInput":`聚焦输入框`,"keybindings.act.app:keybindings":`快捷键设置`,"keybindings.act.history:search":`搜索历史`,"keybindings.act.history:previous":`上一条历史`,"keybindings.act.history:next":`下一条历史`,"keybindings.act.history:open":`最近会话`,"keybindings.act.sessions:switcher":`会话切换面板`,"keybindings.act.chat:cancel":`取消`,"keybindings.act.chat:submit":`发送`,"keybindings.act.chat:newline":`换行`,"keybindings.act.chat:killAgents":`终止代理`,"keybindings.act.chat:cycleMode":`切换模式`,"keybindings.act.chat:modelPicker":`选择模型`,"keybindings.act.chat:thinkingToggle":`切换思考`,"keybindings.act.chat:undo":`撤销`,"keybindings.act.chat:externalEditor":`外部编辑器`,"keybindings.act.chat:stash":`暂存`,"keybindings.act.chat:imagePaste":`粘贴图片`,"keybindings.act.autocomplete:accept":`接受补全`,"keybindings.act.autocomplete:dismiss":`关闭补全`,"keybindings.act.autocomplete:previous":`上一项`,"keybindings.act.autocomplete:next":`下一项`,"keybindings.act.confirm:yes":`确认`,"keybindings.act.confirm:no":`取消`,"keybindings.act.confirm:previous":`上一项`,"keybindings.act.confirm:next":`下一项`,"keybindings.act.confirm:toggle":`切换选中`,"keybindings.act.confirm:toggleExplanation":`切换说明`,"keybindings.act.task:background":`后台运行`,"keybindings.act.historySearch:next":`下一条`,"keybindings.act.historySearch:accept":`接受`,"keybindings.act.historySearch:cancel":`取消`,"keybindings.act.historySearch:execute":`执行`,"keybindings.act.settings:close":`关闭设置`,"keybindings.act.settings:search":`搜索设置`,"keybindings.act.select:previous":`上一项`,"keybindings.act.select:next":`下一项`,"keybindings.act.select:accept":`选择`,"keybindings.act.select:cancel":`取消`,"keybindings.act.commandPalette:close":`关闭面板`,"keybindings.act.commandPalette:execute":`执行命令`,"keybindings.act.commandPalette:previous":`上一项`,"keybindings.act.commandPalette:next":`下一项`,"keybindings.act.permission:toggleDebug":`切换调试`,"keybindings.act.diff:dismiss":`关闭 Diff`,"keybindings.act.diff:previousFile":`上一个文件`,"keybindings.act.diff:nextFile":`下一个文件`,"keybindings.act.diff:viewDetails":`查看详情`,"keybindings.act.plugin:toggle":`切换插件`,"keybindings.act.plugin:install":`安装插件`,"keybindings.act.help:dismiss":`关闭帮助`,"keybindings.act.transcript:exit":`退出转录`,"keybindings.act.transcript:toggleShowAll":`显示全部`,"keybindings.act.messageSelector:up":`向上`,"keybindings.act.messageSelector:down":`向下`,"keybindings.act.messageSelector:top":`到顶部`,"keybindings.act.messageSelector:bottom":`到底部`,"keybindings.act.messageSelector:select":`选择`,"common.close":`关闭`,"changes.revert":`还原`,"changes.revertDirectory":`还原目录`,"message.clickToEnlarge":`点击放大`,"channel.botIdPlaceholder":`输入 Bot ID`,"channel.secretPlaceholder":`输入 Secret`,"filePreview.zoomOut":`缩小`,"filePreview.zoomIn":`放大`,"filePreview.fitToWindow":`适应窗口`,"filePreview.actualSize":`实际大小 (1:1)`,"filePreview.pdfPreview":`PDF 预览`,"filePreview.videoNotSupported":`当前浏览器不支持播放此视频格式`,"goal.status.usage":`用法:/goal <条件>
|
|
8
|
+
`),t=``;for(let n of e)n.startsWith(`data: `)&&(t+=n.substring(6));if(t)try{let e=JSON.parse(t);this.handleMessage(e,c)}catch{}}let e=this.pendingRequests.get(l);if(e){this.pendingRequests.delete(l);let r=t===`session/prompt`&&n&&typeof n==`object`&&typeof n.sessionId==`string`?n.sessionId:void 0;r&&this.cancellingSessionIds.has(r)?(this.cancellingSessionIds.delete(r),e.resolve({stopReason:`cancelled`})):e.reject(Error(`No response received for request: ${t}`))}},m.onerror=()=>{v();let e=this.pendingRequests.get(l);if(e){if(this.pendingRequests.delete(l),o&&r<2&&t!==`initialize`&&s===void 0&&this.isSafeToRetryAfterTransportFailure(t)&&!this.shouldSkipRecovery()){console.warn(`Network error during ACP request: ${t}, reconnecting and retrying (${r+1}/2)...`),this.reconnect().then(()=>this.request(t,n,r+1,i,a,o,s,c)).then(t=>e.resolve(t),t=>e.reject(t));return}if(t===`session/prompt`){let e=n&&typeof n==`object`&&typeof n.sessionId==`string`?n.sessionId:void 0;e&&(this.clearQueuedPrompts(e,`Queued prompt discarded after an ambiguous ACP transport failure`),this.notify(`session/cancel`,{sessionId:e}).catch(()=>{})),t===`session/prompt`&&this.recoverAfterPromptTransportFailure()}e.reject(Error(`Network error during ACP request: ${t}`))}},m.ontimeout=()=>{v();let e=this.pendingRequests.get(l);if(e){if(this.pendingRequests.delete(l),o&&r<1&&t!==`initialize`&&s===void 0&&this.isSafeToRetryAfterTransportFailure(t)&&!this.shouldSkipRecovery()){console.warn(`Request timeout: ${t}, reconnecting and retrying...`),this.reconnect().then(()=>this.request(t,n,r+1,i,a,o,s,c)).then(t=>e.resolve(t),t=>e.reject(t));return}e.reject(Error(`Request timeout: ${t}`))}},m.onabort=()=>{v();let e=this.pendingRequests.get(l);e&&(this.pendingRequests.delete(l),e.reject(Error(`ACP request aborted: ${t}`)))},m.timeout=s??(t===`session/prompt`?0:6e5);try{this.beginAcpPost();let e=n&&typeof n==`object`&&typeof n.sessionId==`string`?n.sessionId:void 0;this.requestTransports.set(l,{method:t,sessionId:e,blocksPromptQueue:a,abort:()=>{try{m.abort()}finally{v()}}}),m.send(JSON.stringify(u))}catch(e){v(),this.pendingRequests.delete(l),p(e instanceof Error?e:Error(String(e)))}})}async fetchAcpWithTimeout(e,t,n){if(this.shouldSkipRecovery()&&e.method!==`DELETE`)throw Error(`${n} skipped: host unloading`);let r=new AbortController,i=setTimeout(()=>r.abort(),t);try{return await fetch(`${this.baseUrl}/api/v1/acp`,{...e,signal:r.signal})}catch(e){throw r.signal.aborted?Error(`${n} timed out after ${t}ms`):e}finally{clearTimeout(i)}}async notify(t,n){let r={jsonrpc:`2.0`,method:t,params:n};this.beginAcpPost();try{let n=await this.fetchAcpWithTimeout({method:`POST`,headers:this.buildAcpHeaders(),body:JSON.stringify(r)},e.ACP_CONTROL_TIMEOUT_MS,`ACP notification ${t}`);if(!n.ok)throw Error(`ACP notification failed: ${n.status} ${n.statusText}`);typeof n.text==`function`&&await n.text().catch(()=>void 0)}finally{this.endAcpPost()}}handleMessage(e,t){if(`method`in e&&`id`in e&&e.id!==void 0&&e.id!==null){if(e.method===`session/request_permission`){this.handlePermissionRequest(e.id,e.params);return}if(e.method===`elicitation/create`){this.handleElicitationCreate(e.id,e.params);return}if(e.method===`_codebuddy.ai/question`){this.handleExtMethodQuestion(e.id,e.params);return}if(e.method===`_codebuddy.ai/delegateTool`){this.handleExtMethodDelegateTool(e.id,e.params);return}this.sendJsonRpcError(e.id,-32601,`Unsupported ACP client method: ${String(e.method)}`).catch(t=>{console.warn(`Failed to reject unsupported ACP method ${String(e.method)}:`,t)});return}if(`id`in e&&e.id!==void 0&&e.id!==null&&!(`method`in e)){let t=this.pendingRequests.get(e.id);t&&(this.pendingRequests.delete(e.id),`error`in e&&e.error?t.reject(new Dn(e.error,t.method)):t.resolve(e.result))}if(`method`in e&&e.method===`session/update`){let n=t?.transportSource??`acp`;if(n===`acp`&&this.busAuthorityActive||t?.suppressSessionUpdates)return;let r=e.params;if(r?.update){let e=r.update,t=e?._meta||{},i=t[`codebuddy.ai/newSessionId`],a=r.sessionId??e.sessionId;if(t[`codebuddy.ai/sessionReset`]&&typeof i==`string`&&(!a||!this.currentSessionId||a===this.currentSessionId)){let e=this.currentSessionId;this.currentSessionId=i,this.clearQueuedPrompts(e??void 0,`ACP session was replaced before prompt dispatch`),Y(i),e&&this.retireReplacedSessionPrompts(e)}let o=t[`codebuddy.ai/interruptionRequest`];o&&(K({event:`client-broadcast`,interruptionId:o.interruptionId,toolCallId:o.toolCallId,toolName:o.toolName}),this.emit(`interruption_request`,{sessionUpdate:`interruption_request`,sessionId:r.sessionId,interruptionId:o.interruptionId||`ir-${o.toolCallId}`,reason:`Tool requires approval`,options:o.options||[],toolName:o.toolName,toolTitle:o.toolTitle,toolInput:o.toolInput,toolCallId:o.toolCallId,workflowSourceText:o.workflowSourceText,toolRiskMetadata:o.toolRiskMetadata,mcpUiIntercept:o.mcpUiIntercept===!0}));let s=r.update.sessionUpdate,c=r.sessionId??r.update.sessionId;this.emit(s,{...r.update,sessionId:c,__transportSource:n});let l=r.update?._meta?.[`codebuddy.ai/turn`];l&&typeof l==`object`&&!t[`codebuddy.ai/memberEvent`]&&!t[`codebuddy.ai/parentToolCallId`]&&this.emit(`busTurn`,{...l,sessionId:c})}}else if(`method`in e&&e.method!==`session/update`&&!(`id`in e&&e.id!==void 0&&e.id!==null)){let t=e.method;if(t===`_codebuddy.ai/checkpoint`){let t=e.params,n=t?.checkpoint&&typeof t.checkpoint==`object`?{...t.checkpoint,sessionId:t.sessionId}:t?.checkpoint;t?.event===`created`?this.emit(`checkpointCreated`,n):t?.event===`updated`?this.emit(`checkpointUpdated`,n):t?.event===`reverted`&&this.emit(`checkpointReverted`,n)}else t===`_codebuddy.ai/modRender`?this.emit(`modRender`,e.params):t===`_codebuddy.ai/modRenderFold`&&this.emit(`modRenderFold`,e.params)}}mapPermissionDecisionToOptionId(e){return{allowAll:`allow_always`,allow:`allow`,rejectAndExitPlan:`reject_and_exit_plan`,deny:`reject`}[e]??`reject`}async sendJsonRpcResult(e,t){await this.sendJsonRpcResponse({jsonrpc:`2.0`,id:e,result:t},e)}async sendJsonRpcError(e,t,n){await this.sendJsonRpcResponse({jsonrpc:`2.0`,id:e,error:{code:t,message:n}},e)}async sendJsonRpcResponse(t,n){this.beginAcpPost();try{let r=await this.fetchAcpWithTimeout({method:`POST`,headers:this.buildAcpHeaders(),body:JSON.stringify(t)},e.ACP_CONTROL_TIMEOUT_MS,`ACP response ${n}`);if(!r.ok){let e=``;try{let t=await r.json();t?.error?.message&&(e=t.error.message)}catch{}throw Error(e||`ACP response failed: ${r.status} ${r.statusText}`)}typeof r.text==`function`&&await r.text().catch(()=>void 0)}finally{this.endAcpPost()}}buildAcpHeaders(){let e={"Content-Type":`application/json`,Accept:`application/json, text/event-stream`,[D]:`1`};return this.connectionId&&(e[`acp-connection-id`]=this.connectionId),this.sessionToken&&(e[`acp-session-token`]=this.sessionToken),this.token&&(e.Authorization=`Bearer ${this.token}`),e}applyConnectionGrant(e){if(!e||typeof e!=`object`)throw Error(`ACP connect endpoint returned an invalid grant`);let t=e;if(typeof t.connectionId!=`string`||!t.connectionId)throw Error(`ACP connect endpoint returned an invalid connection id`);this.connectionId=t.connectionId,this.sessionToken=typeof t.sessionToken==`string`?t.sessionToken:null,this.initializedConnectionId=null,this.initializeResult=null,this.persistAcpGrant(),this.startGrantHeartbeat(),this.installPageHideCleanup()}persistAcpGrant(){this.connectionId&&Jt({connectionId:this.connectionId,sessionToken:this.sessionToken,tabId:gn(),docId:Wt(),at:Date.now()})}startGrantHeartbeat(){this.stopGrantHeartbeat(),this.grantHeartbeatTimer=setInterval(()=>{if(!this.connectionId){this.stopGrantHeartbeat();return}this.persistAcpGrant()},e.GRANT_HEARTBEAT_INTERVAL_MS)}stopGrantHeartbeat(){this.grantHeartbeatTimer!==null&&(clearInterval(this.grantHeartbeatTimer),this.grantHeartbeatTimer=null)}async releaseGrant(t,n){let r={[D]:`1`,"acp-connection-id":t};n&&(r[`acp-session-token`]=n),this.token&&(r.Authorization=`Bearer ${this.token}`);try{let t=await this.fetchAcpWithTimeout({method:`DELETE`,headers:r},e.ACP_DISCONNECT_TIMEOUT_MS,`ACP stale grant release`);return t.ok||t.status===401||t.status===403||t.status===404}catch{return!1}}async flushReclaimableGrants(){let e={tabId:gn(),docId:Wt()},t=S(),n=z().filter(n=>n.connectionId!==this.connectionId&&Xt(n,e,Date.now(),t)&&!this.attemptedGrantReleases.has(n.connectionId));n.length!==0&&await Promise.all(n.map(async e=>{this.attemptedGrantReleases.add(e.connectionId),await this.releaseGrant(e.connectionId,e.sessionToken)&&H(e.connectionId)}))}installPageHideCleanup(){typeof window>`u`||this.pageHideHandler||(this.pageHideHandler=e=>{e.persisted||this.releaseConnectionForPageExit()},window.addEventListener(`pagehide`,this.pageHideHandler))}removePageHideCleanup(){typeof window<`u`&&this.pageHideHandler&&window.removeEventListener(`pagehide`,this.pageHideHandler),this.pageHideHandler=null}recoverAfterPromptTransportFailure(){!this.shouldSkipRecovery()&&this.connectionId&&this.reconnect().catch(e=>{console.warn(`[ACP] failed to recover after prompt transport failure:`,e)})}shouldSkipRecovery(){if(this.hostUnloading)return!0;if(typeof document>`u`||typeof window>`u`)return!1;try{if(!document.defaultView)return!0;let e=window.frameElement;if(e&&!e.isConnected)return!0}catch{}return!1}releaseConnectionForPageExit(){if(this.hostUnloading=!0,this.notificationStreamDesired=!1,this.closeNotificationStream(),!this.connectionId)return;let e=this.buildAcpHeaders();delete e[`Content-Type`],V(this.connectionId),this._status=`disconnected`,this.stopGrantHeartbeat(),this.connectionId=null,this.sessionToken=null,fetch(`${this.baseUrl}/api/v1/acp`,{method:`DELETE`,headers:e,keepalive:!0}).catch(()=>{})}shouldRecoverConflict(e,t){return e!==`initialize`&&t<yn}isSafeToRetryAfterTransportFailure(e){return e!==`session/prompt`&&e!==`session/new`&&e!==`_codebuddy.ai/mcpUiCallTool`}handlePermissionRequest(e,t){let n=t?.toolCall,r=`perm-${e}`,i=n?._meta?.[`codebuddy.ai/toolName`]||n?.toolName||`tool`,a=n?.title||i,o=n?.rawInput,s=n?.toolCallId;this.permissionRequestIds.set(r,e),s&&this.permissionRequestToolCallIds.set(s,r),K({event:`client-acp`,requestId:String(e),interruptionId:r,toolCallId:s,toolName:i}),this.emit(`interruption_request`,{sessionUpdate:`interruption_request`,interruptionId:r,reason:`Tool requires approval`,options:(t?.options||[]).map(e=>e.optionId||e.name),toolName:i,toolTitle:a,toolInput:o,toolCallId:s})}handleExtMethodQuestion(e,t){let{sessionId:n,toolCallId:r,schema:i}=t||{},a=(i?.questions||[]).map(e=>({id:e.id,question:e.question,header:e.header||``,options:(e.options||[]).map(e=>({label:e.label||``,description:e.description||``})),multiSelect:!!e.multiSelect}));this.extMethodRequestIds.set(r,e),this.emit(`question_request`,{toolCallId:r,sessionId:n,questions:a})}async handleExtMethodDelegateTool(e,t){let{toolId:n,input:r}=t||{};try{let i=St(n);if(i){let t=Ct.getState().findHandle(n);if(!t){await this.sendJsonRpcResult(e,{status:`error`,error:{message:`Widget bridge not registered for tool: ${n}. The widget may have been closed; ask the user to reopen the corresponding MCP App.`}});return}let a=await t.callAppTool({name:i.toolName,arguments:r&&typeof r==`object`?r:{}});await this.sendJsonRpcResult(e,{status:`success`,output:a});return}if(n===`ui-control`){let n=await wt.execute({sessionId:t.sessionId,action:r.action,target:r.target,value:r.value});await this.sendJsonRpcResult(e,{status:`success`,output:n})}else if(n===`ui-query`){let t=await wt.queryElements({selector:r?.selector,role:r?.role,includeHidden:r?.includeHidden,limit:r?.limit});await this.sendJsonRpcResult(e,{status:`success`,output:t})}else await this.sendJsonRpcResult(e,{status:`error`,error:{message:`Unknown delegate tool: ${n}`}})}catch(t){await this.sendJsonRpcResult(e,{status:`error`,error:{message:t instanceof Error?t.message:String(t)}})}}handleElicitationCreate(e,t){let n=t?._meta&&t._meta[`codebuddy.ai`],r=n?.elicitationId;if(!r){this.sendJsonRpcResult(e,{action:`cancel`}).catch(()=>void 0);return}this.elicitationRequestIds.set(r,e),this.emit(`elicitation_request`,{elicitationId:r,requestId:e,sessionId:t?.sessionId,toolCallId:t?.toolCallId??n?.toolCallId,mode:t?.mode,message:t?.message,requestedSchema:t?.requestedSchema,_meta:t?._meta})}async respondElicitation(e,t){let n=this.elicitationRequestIds.get(e);if(n===void 0){console.warn(`[Elicitation] No pending request for id ${e}`);return}this.elicitationRequestIds.delete(e),await this.sendJsonRpcResult(n,t)}emit(e,t){let n=this.listeners.get(e);if(n)for(let r of n)try{r(t)}catch(t){console.error(`Event handler error for ${e}:`,t)}}setStatus(e){this._status=e,this.emit(`status_change`,e)}},Z=E(e=>({info:null,loading:!1,fetch:async()=>{e({loading:!0});try{let t=await O(`/api/v1/info`,{headers:A()});if(t.ok){let n=await t.json();e({info:n.data??n,loading:!1})}else e({loading:!1})}catch{e({loading:!1})}}})),Q=E((e,t)=>({folder:null,explicitFolder:null,initialized:!1,setFolder:n=>{if(t().folder===n)return;let r=Z.getState().info?.cwd;e({folder:n,explicitFolder:r&&n!==r?n:null,initialized:!0}),yt(n)}}));function Nn(){let e=vt(),t=Z.getState().info;if(e&&t?.cwd){let n=e!==t.cwd;Q.setState({folder:e,explicitFolder:n?e:null,initialized:!0});return}if(t?.cwd&&!e){Q.setState({folder:t.cwd,explicitFolder:null,initialized:!0}),yt(t.cwd);return}e&&Q.setState({folder:e,explicitFolder:null,initialized:!0});let n=Z.subscribe(e=>{if(!e.info?.cwd)return;let t=e.info.cwd,r=Q.getState().folder;r?r!==t&&Q.setState({explicitFolder:r}):(Q.setState({folder:t,explicitFolder:null,initialized:!0}),yt(t)),n()})}var Pn=[];function Fn(e,t){if(S())return;let n=()=>{et.list(`workspace`,t).then(n=>{let r=Q.getState();if(r.folder===e&&(r.explicitFolder||void 0)===t)for(let e of Pn)e.apply(n)}).catch(n=>{let r=Q.getState();r.folder===e&&(r.explicitFolder||void 0)===t&&(console.error(`[persist] Folder reload failed, retrying:`,n),setTimeout(()=>Fn(e,t),3e3))})};typeof requestIdleCallback<`u`?requestIdleCallback(n,{timeout:3e3}):setTimeout(n,2e3)}Q.subscribe((e,t)=>{let n=e.folder!==t.folder,r=e.explicitFolder!==t.explicitFolder;if(e.folder&&(n||r)){for(let e of Pn)e.prepare(t.explicitFolder||void 0);Fn(e.folder,e.explicitFolder||void 0)}});function In(e){return e instanceof Set?new Set(e):e instanceof Map?new Map(e):Array.isArray(e)?[...e]:e}function Ln(e){return e instanceof Set?[...e]:e instanceof Map?[...e.entries()]:e}function Rn(e,t){return(n,r,i)=>{let a=e(n,r,i),o=null,s=!1,c=0,l=t.debounceMs??500,u=t.scope??`global`,d=t.folderScoped===!0,f=Object.fromEntries(t.fields.map(e=>[e,In(a[e])]));function p(){if(d)return Q.getState().explicitFolder||void 0}function m(e,n,i){let a=r(),o=t.fields.map(e=>({key:`${t.namespace}.${String(e)}`,value:Ln(a[e])}));if(t.localStorageKey)try{let e={};for(let n of t.fields)e[String(n)]=Ln(a[n]);localStorage.setItem(t.localStorageKey,JSON.stringify(e))}catch{}if(S())return;let s=n?{keepalive:!0,folder:e}:{folder:e};et.setMany(o,u,s).catch(e=>{let r=n?` (${i})`:``;console.error(`[persist:${t.namespace}] Save failed${r}:`,e)})}function h(e,r=``,i=!1){let a=i?new Set(t.keepOnFolderSwitch??[]):null,o={},s=!1;for(let n of t.fields){if(a?.has(n))continue;let t=`${r}${String(n)}`;t in e&&e[t]!==void 0&&(Reflect.set(o,n,e[t]),s=!0)}s&&(t.onLoad?t.onLoad(o,n):n(o))}function g(e,t=p()){o!==null&&(clearTimeout(o),o=null,m(t,!0,e))}function _(){s||(o&&clearTimeout(o),o=setTimeout(()=>{o=null,m(p(),!1)},l))}function v(e){if(S())return;let n=c;et.getNamespace(t.namespace,u,e).then(e=>{n===c&&e&&Object.keys(e).length!==0&&h(e)}).catch(e=>{n===c&&console.error(`[persist:${t.namespace}] Load failed:`,e)})}if(typeof window<`u`){let e=()=>g(`beforeunload`);window.addEventListener(`beforeunload`,e),window.addEventListener(`pagehide`,e),document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&g(`hidden`)})}return i.subscribe((e,n)=>{for(let r of t.fields)if(e[r]!==n[r]){_();return}}),v(),d&&Pn.push({prepare:e=>{c+=1,g(`folder-switch`,e),s=!0;let r=new Set(t.keepOnFolderSwitch??[]),i=Object.fromEntries(t.fields.filter(e=>!r.has(e)).map(e=>[e,In(f[e])]));Object.keys(i).length>0&&n(i)},apply:e=>{h(e,`${t.namespace}.`,!0),s=!1}}),a}}var zn=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),Bn=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),Vn=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),Hn=e=>{let t=Vn(e);return t.charAt(0).toUpperCase()+t.slice(1)},Un={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},Wn=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},Gn=(0,T.createContext)({}),Kn=()=>(0,T.useContext)(Gn),qn=(0,T.forwardRef)(({color:e,size:t,strokeWidth:n,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>{let{size:l=24,strokeWidth:u=2,absoluteStrokeWidth:d=!1,color:f=`currentColor`,className:p=``}=Kn()??{},m=r??d?Number(n??u)*24/Number(t??l):n??u;return(0,T.createElement)(`svg`,{ref:c,...Un,width:t??l??Un.width,height:t??l??Un.height,stroke:e??f,strokeWidth:m,className:zn(`lucide`,p,i),...!a&&!Wn(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,T.createElement)(e,t)),...Array.isArray(a)?a:[a]])}),Jn=(e,t)=>{let n=(0,T.forwardRef)(({className:n,...r},i)=>(0,T.createElement)(qn,{ref:i,iconNode:t,className:zn(`lucide-${Bn(Hn(e))}`,`lucide-${e}`,n),...r}));return n.displayName=Hn(e),n},Yn=`codebuddy-locale`;function Xn(){if(typeof navigator>`u`)return`en`;let e=[];Array.isArray(navigator.languages)&&navigator.languages.length>0&&e.push(...navigator.languages),navigator.language&&e.push(navigator.language);try{let t=Intl.DateTimeFormat().resolvedOptions().locale;t&&e.push(t)}catch{}for(let t of e)if(t.toLowerCase().startsWith(`zh`))return`zh`;return`en`}function Zn(e){return e===`system`?Xn():e}function Qn(){try{let e=localStorage.getItem(Yn);if(e){let t=JSON.parse(e)?.mode??e;if([`zh`,`en`,`system`].includes(t))return t}}catch{}return`system`}var $=E()(Rn((e,t)=>{let n=Qn(),r=Zn(n);return typeof window<`u`&&window.addEventListener(`languagechange`,()=>{let e=$.getState();if(e.mode===`system`){let t=Xn();t!==e.resolved&&$.setState({resolved:t})}}),{mode:n,resolved:r,setLocale:t=>{e({mode:t,resolved:Zn(t)})},toggle:()=>{let e=t().mode,n=e===`zh`?`en`:e===`en`?`system`:`zh`;t().setLocale(n)}}},{namespace:`locale`,fields:[`mode`],scope:`global`,debounceMs:300,localStorageKey:Yn,onLoad:(e,t)=>{if(e.mode){let n=Zn(e.mode);t({mode:e.mode,resolved:n})}}})),$n={zh:{"app.connecting":`正在连接 CodeBuddy Code...`,"agents.action.delete":`删除`,"agents.action.delete.confirm":`确定要删除这个智能体吗?`,"agents.action.delete.failed":`未能删除这个智能体`,"agents.action.delete.worktreeKept":`智能体已删除,工作树保留在 {path}`,"agents.action.more":`更多操作`,"agents.action.new":`新建智能体`,"agents.action.cancelNew":`取消`,"agents.action.newConversation":`在当前智能体中新建对话`,"agents.action.rename":`重命名`,"agents.action.restart":`重新启动`,"agents.action.takeover":`在此接管`,"agents.action.stop":`停止`,"agents.action.pin":`置顶`,"agents.action.unpin":`取消置顶`,"agents.action.ungroup":`从项目中移除`,"agents.action.copySessionId":`复制会话 ID`,"agents.action.copyCwd":`复制工作目录`,"agents.action.openInNewWindow":`在新窗口中打开`,"agents.action.copyOk":`已复制到剪贴板`,"agents.action.copyFailed":`复制失败`,"agents.empty":`暂无活跃的智能体`,"agents.empty.hint":`点顶部 + 新建智能体`,"agents.group.attention":`需要你输入`,"agents.group.needsInput":`需要输入`,"agents.group.working":`运行中`,"agents.group.showMore":`展开显示({count})`,"agents.group.showLess":`收起显示`,"agents.group.pinned":`置顶`,"agents.panel.title":`智能体实例`,"agents.panel.resize":`调整智能体面板宽度`,"agents.project.rename":`重命名项目`,"agents.search.clear":`清空搜索`,"agents.search.close":`关闭搜索`,"agents.search.noMatch":`没有匹配的智能体`,"agents.search.placeholder":`搜索智能体`,"agents.error.title":`未能完成操作`,"agents.error.network":`无法连接服务,请检查网络后重新加载。`,"agents.error.authentication":`登录状态已失效,请重新登录后再试。`,"agents.error.server":`服务暂时不可用,请稍后重新加载。`,"agents.error.unknown":`加载智能体列表失败,请重新加载。`,"agents.error.retry":`重新加载`,"workspace.mode.switch":`切换工作台模式`,"workspace.mode.chat.title":`CodeBuddy 单干`,"workspace.mode.chat.desc":`日常对话、编码与终端`,"workspace.mode.buddys.title":`CodeBuddy 组队`,"workspace.mode.buddys.desc":`和 AI 同事们一起工作`,"workspace.mode.enabledToast":`CodeBuddy 组队已开启`,"workspace.mode.disabledToast":`CodeBuddy 组队已关闭`,"workspace.mode.lockedToast":`CodeBuddy 组队被环境变量关闭,无法在界面开启`,"workspace.mode.lockedOnToast":`CodeBuddy 组队被环境变量开启,无法在界面关闭`,"settings.notifications":`通知`,"settings.notify.title":`完成后通知`,"settings.notify.desc":`页面不在前台时,对话或同事干完活弹一条系统通知(由本机 CodeBuddy 直接发:不需要浏览器授权,也不受端口变化影响)`,"settings.notify.unsupported":`当前平台发不出系统通知(会退回浏览器通知,需该站点已授权)`,"settings.notify.test":`发一条测试通知`,"settings.notify.testTitle":`CodeBuddy Code`,"settings.notify.testBody":`能看到这条通知,说明系统通知已经通了`,"settings.notify.testFailed":`这条没发出去:当前平台不支持系统通知`,"settings.notify.testThrottled":`发得太快了,稍等一下再试`,"settings.notify.browserHint.granted":`云端环境:系统通知不可用,已使用浏览器通知(已授权)`,"settings.notify.browserHint.default":`云端环境:系统通知不可用,将使用浏览器通知(开启时会请求浏览器授权)`,"settings.notify.browserHint.denied":`云端环境:系统通知不可用,浏览器通知权限被拦截——请在地址栏站点设置中允许通知`,"settings.notify.testBrowserSent":`系统通知不可用,但浏览器通知已发出(这条通了)`,"notify.status.done":`已完成`,"notify.status.failed":`执行出错`,"notify.status.stopped":`已中断`,"notify.status.needsInput":`在等你回复`,"notify.chatFallbackName":`当前对话`,"notify.agentFallbackName":`AI 同事`,"agentHome.defaultName":`新智能体`,"agentHome.greeting":`我来了。第一件要我做的事是什么?`,"agentHome.hint":`跟他说第一件事就会开工`,"agentHome.hide":`从侧栏隐藏`,"agentHome.delete.confirm":`将删除这个智能体和它名下的全部运行记录,确定吗?`,"agentHome.opFailed":`操作失败,请重试`,"agentHome.sendUnreachable":`发送失败:连不上后端服务(可能刚重启过)。文字已保留,重试即可。`,"agentHome.more":`更多`,"agentHome.hidden":`已隐藏`,"agentHome.unhide":`在侧栏显示`,"agentHome.hiddenPreview":`已隐藏`,"agentHome.notStarted":`还没开工`,"agentHome.mainIdle":`随时待命`,"agentHome.room.invite":`加入房间`,"agentHome.room.joinExisting":`加入已有房间`,"agentHome.room.createNew":`选择智能体创建房间`,"agentHome.room.createConfirm":`创建房间`,"agentHome.room.needMore":`还需要另一个智能体`,"agentHome.room.notStarted":`房间里的智能体`,"agentHome.room.remove":`从房间移出`,"agentHome.room.openMember":`打开对话`,"agentHome.room.delete":`删除房间`,"agentHome.room.deleteConfirm":`只解散这个分组,智能体及其各自的对话都会保留。确定吗?`,"agentHome.room.dissolveTitle":`房间会解散`,"agentHome.room.dissolveMessage":`移出后房间只剩一个智能体,房间会解散。智能体都会保留。`,"agentHome.room.dissolveConfirm":`移出并解散`,"agentHome.room.full":`房间最多容纳 6 个智能体`,"agentHome.room.already":`已经在房间里`,"agentHome.room.teamingBadge":`组队中`,"agentHome.room.teamingLocked":`组队中,先散队`,"agentHome.room.minimalBlocked":`极简模式不能进房间或频道,也不能组队`,"agentHome.room.mergeHint":`组成房间`,"agentHome.room.joinHint":`加入房间`,"agentHome.room.dropHere":`把智能体拖到这里组成房间`,"agentHome.recipient.label":`收件人:`,"agentHome.recipient.placeholder":`搜索智能体或房间`,"agentHome.recipient.more":`再添加一个智能体…`,"agentHome.recipient.remove":`移除收件人`,"agentHome.recipient.createNew":`新建智能体`,"agentHome.recipient.runHint":`任务 · 加入房间时转为智能体`,"agentHome.recipient.sectionPeople":`智能体`,"agentHome.recipient.sectionRuns":`任务`,"agentHome.recipient.sectionRooms":`房间`,"agentHome.recipient.open":`打开对话`,"agentHome.recipient.openRoom":`打开房间`,"agentHome.recipient.tabAdd":`Tab 添加`,"agentHome.recipient.enterOpen":`回车打开`,"agentHome.recipient.soloHint":`回车进入这个智能体的对话;再添加一个智能体即可组成房间`,"agentHome.recipient.roomHint":`回车打开房间中的智能体;全目录只有一间房,新智能体会加入该房间`,"agentHome.channel.new":`新建频道`,"agentHome.tasks.title":`任务板`,"agentHome.tasks.empty":`暂无任务。负责人派单后,任务会显示在这里。`,"agentHome.tasks.loading":`正在读取任务板…`,"agentHome.tasks.loadFailed":`任务板加载失败:{detail}`,"agentHome.tasks.stalled":`停滞`,"agentHome.tasks.status.open":`待认领`,"agentHome.tasks.status.claimed":`进行中`,"agentHome.tasks.status.done":`已完成`,"agentHome.tasks.complete":`标记完成`,"agentHome.tasks.addPlaceholder":`任务标题`,"agentHome.tasks.submit":`添加`,"agentHome.tasks.hide":`收起任务板`,"agentHome.tasks.progress":`已完成 {done} / {total}`,"agentHome.tasks.unassigned":`未指派`,"agentHome.tasks.wakes":`已催办 {count} 次`,"agentHome.tasks.subject":`任务标题`,"agentHome.tasks.detail":`详情`,"agentHome.tasks.detailPlaceholder":`详情(可选)`,"agentHome.tasks.assignee":`指派给`,"agentHome.tasks.edit":`编辑任务`,"agentHome.tasks.save":`保存`,"agentHome.tasks.cancel":`取消`,"agentHome.tasks.delete":`删除任务`,"agentHome.tasks.deleteConfirm":`确认删除该任务?频道时间线会保留历史记录(含删除人)。`,"agentHome.tasks.filterAll":`全部成员`,"agentHome.tasks.filterLabel":`筛选`,"agentHome.tasks.filterEmpty":`该成员暂无任务`,"agentHome.tasks.refs":`引用`,"agentHome.tasks.refPlaceholder":`链接 / 文件路径 / 提交 SHA`,"agentHome.tasks.refAdd":`添加`,"agentHome.tasks.refRemove":`移除引用`,"agentHome.tasks.refCopy":`点击复制`,"agentHome.tasks.refKind.file":`文件`,"agentHome.tasks.refKind.issue":`Issue`,"agentHome.tasks.refKind.pr":`PR`,"agentHome.tasks.refKind.commit":`提交`,"agentHome.tasks.refKind.url":`链接`,"agentHome.taskEvent.user":`用户`,"agentHome.taskEvent.listSeparator":`、`,"agentHome.taskEvent.task":`{taskId}「{subject}」`,"agentHome.taskEvent.created":`{who} 创建了任务 {task}`,"agentHome.taskEvent.assigned":`,指派给 {name}`,"agentHome.taskEvent.claimed":`{who} 认领了 {task}`,"agentHome.taskEvent.completed":`{who} 完成了 {task}`,"agentHome.taskEvent.released":`{who} 将 {task} 放回待认领`,"agentHome.taskEvent.dispatched":`{who} 派发了 {count} 个任务:{list}`,"agentHome.taskEvent.nudged":`{who} 催办了 {task}`,"agentHome.taskEvent.ownerNote":`(负责人:{name})`,"agentHome.taskEvent.escalated":`{who} 收回了 {task} 的认领`,"agentHome.taskEvent.wasOwnerNote":`(原负责人:{name})`,"agentHome.taskEvent.stalled":`{task} 已达唤醒预算上限,标记为停滞,需负责人或用户介入`,"agentHome.taskEvent.updated":`{who} 更新了 {task}的{fields}`,"agentHome.taskEvent.assigneeNote":`(指派给 {name})`,"agentHome.taskEvent.deleted":`{who} 删除了 {task}`,"agentHome.taskEvent.batchDone":`本批 {count} 个任务已全部完成:{list}。`,"agentHome.taskEvent.field.subject":`标题`,"agentHome.taskEvent.field.detail":`详情`,"agentHome.taskEvent.field.assignee":`指派`,"agentHome.taskEvent.field.refs":`引用`,"agentHome.taskEvent.field.owner":`负责人`,"agentHome.taskEvent.updatedGeneric":`{who} 更新了 {task}`,"agentHome.channel.newAgent":`新建智能体`,"agentHome.channel.pickHint":`选择 2–6 个智能体组成频道。取消不会保存。`,"agentHome.channel.create":`创建频道`,"agentHome.channel.createAction":`创建`,"agentHome.channel.name":`名称`,"agentHome.channel.namePlaceholder":`例如:Project Falcon`,"agentHome.channel.addBot":`添加智能体`,"agentHome.channel.loadEarlier":`加载更早消息`,"agentHome.channel.refreshDelayed":`频道更新暂时延迟,正在重试;当前显示的是已加载记录。`,"agentHome.channel.placeholder":`给 {name} 发消息`,"agentHome.channel.empty":`给这频道发第一条`,"agentHome.channel.you":`你`,"agentHome.channel.someone":`同事`,"agentHome.channel.attachImage":`上传图片`,"agentHome.channel.attachFile":`上传文件`,"agentHome.channel.uploading":`上传中 {done}/{total}…`,"agentHome.channel.attachmentTooLarge":`{name} 太大了(单个上限 {maxMb}MB)`,"agentHome.channel.attachmentTooMany":`一条消息最多 {max} 个附件,{name} 没有加上`,"agentHome.channel.attachmentUploadFailed":`附件上传失败:{detail}`,"agentHome.channel.removeAttachment":`移除附件`,"agentHome.channel.reply":`引用`,"agentHome.channel.replyingTo":`回复 {name}:{text}`,"agentHome.channel.cancelReply":`取消引用`,"agentHome.channel.downloadAttachment":`下载`,"agentHome.channel.quoteMissing":`原消息已不在`,"agentHome.channel.widgetSelected":`已选:{value}`,"agentHome.channel.workingNow":`{names} 正在处理…`,"agentHome.channel.untitled":`频道`,"agentHome.channel.delete":`删除频道`,"agentHome.channel.deleteConfirm":`只删除这条群对话,智能体会保留。`,"agentHome.channel.oneOnly":`可以开多间频道。`,"agentHome.channel.needTwo":`频道至少需要两个智能体`,"agentHome.channel.pickPlaceholder":`搜索智能体,选择 2–6 个`,"agentHome.channel.everyone":`所有智能体`,"agentHome.channel.mentioned":`@ 了你`,"agentHome.channel.memberCap":`{current}/{max}`,"agentHome.channel.pickHintBar":`回车创建频道。这不是私信房。`,"agentHome.channel.info":`频道资料`,"agentHome.channel.members":`成员`,"agentHome.channel.addMember":`添加成员`,"agentHome.channel.removeMember":`移出频道`,"agentHome.channel.restartMember":`重启成员(离线进程重新拉起,失效的 Run 会重建)`,"agentHome.channel.restarted":`已重新拉起该成员`,"agentHome.channel.restartNotNeeded":`该成员已在运行,无需重启`,"agentHome.channel.restartFailed":`重启失败:{reason}`,"agentHome.channel.addSearch":`搜索智能体`,"agentHome.channel.noCandidates":`没有可添加的智能体`,"agentHome.channel.defaultBlocked":`CodeBuddy 是用户的 1:1,不能加入组队或频道`,"agentHome.team.defaultBlocked":`CodeBuddy 是用户的 1:1,不能加入组队或频道`,"agentHome.channel.already":`已经在频道里`,"agentHome.channel.full":`频道最多容纳 6 个智能体`,"agentHome.channel.overflow":`这次添加会超过 6 个智能体的上限,还能添加 {count} 个`,"agentHome.channel.remaining":`还能添加 {count} 个智能体`,"agentHome.channel.addConfirm":`添加`,"agentHome.channel.newAgentName":`新智能体名称`,"agentHome.channel.joinHint":`加入频道`,"agentHome.channel.leave":`退出`,"agentHome.channel.back":`返回`,"agentHome.channel.draft":`草稿:{text}`,"agentHome.channel.system.turnEnded.timeout":`本轮超时收场(轮到 {name} 时未见回应)`,"agentHome.channel.system.turnEnded.gone":`{name} 的进程已退出,本轮收场`,"agentHome.channel.system.turnEnded.silent":`多次提醒后 {name} 仍未回应,本轮收场`,"agentHome.channel.system.turnEnded.exhausted":`叫了 {names} 都没人接住,本轮收场`,"agentHome.channel.moveTo":`移至`,"agentHome.channel.ungrouped":`未分组`,"agentHome.channel.newSection":`新建分组`,"agentHome.channel.sectionName":`分组名`,"agentHome.channel.renameSection":`重命名分组`,"agentHome.channel.deleteSection":`删除分组`,"agentHome.channel.deleteSectionConfirm":`分组没了,智能体和频道回到未分组。`,"agentHome.channel.markUnread":`标为未读`,"agentHome.channel.copyId":`复制频道 id`,"agentHome.channel.plus":`提及`,"relay.sentTo":`已发消息给`,"relay.receivedFrom":`消息来自`,"relay.openThread":`查看聊天记录`,"relay.back":`返回对话`,"relay.empty":`还没有往来`,"relay.viewOnly":`此聊天仅供查看`,"relay.close":`关闭聊天`,"layout.toggle":`布局`,"layout.sidebar":`导航侧边栏`,"layout.dashboard":`仪表盘`,"layout.collapseSidebar":`收起侧边栏`,"layout.expandSidebar":`展开侧边栏`,"layout.collapseAgents":`收起智能体`,"layout.expandAgents":`展开智能体`,"layout.agents":`智能体面板`,"agents.title":`智能体`,"agents.instanceFallback":`智能体 {id}`,"agents.panel.close":`关闭`,"agents.input.placeholder":`第一件要我做的事是什么?`,"agents.input.hint":`跟他说第一件事就会开工`,"agents.input.submit":`创建智能体`,"agents.input.permission":`启动权限`,"agents.input.permission.default":`跟随默认设置`,"agents.input.permission.default.desc":`不覆盖权限模式,使用当前配置的默认权限`,"agents.input.permission.ask":`每次询问`,"agents.input.model":`模型`,"agents.input.model.default":`默认模型`,"agents.input.effort":`思考强度`,"agents.input.effort.default":`跟随模型`,"agents.input.effort.default.desc":`使用所选模型配置的默认思考强度`,"agents.input.directory":`工作目录`,"agents.input.directory.hint":`智能体将在此目录执行命令、读写文件`,"agents.input.directory.choose":`选择工作目录`,"agents.input.directory.current":`当前工作区`,"agents.input.directory.more":`另有 {count} 个`,"agents.input.directory.loading":`正在发现仓库与工作树…`,"agents.input.directory.browse":`选择其他目录…`,"agents.input.agent":`当前智能体`,"agents.input.agent.menu":`选择智能体`,"agents.input.agent.default":`默认智能体`,"agents.input.agent.default.desc":`使用当前项目的默认智能体配置`,"agents.input.settings":`智能体设置`,"agents.input.modelAndEffort":`模型与思考`,"agents.input.shellJob":`Shell 任务`,"agents.input.shellPlaceholder":`输入要在后台执行的命令…`,"agents.input.attachmentsNotForShell":`Shell 任务不能携带附件,请先去掉文件或去掉命令前的 !`,"agents.input.startFrom":`上下文`,"agents.input.startFrom.continue":`继承当前对话`,"agents.input.startFrom.session":`继承所选对话`,"agents.input.startFrom.blank":`不继承`,"agents.input.startFrom.unavailable":`当前没有可继承的上下文`,"agents.input.worktree":`工作树`,"agents.input.worktree.on":`已开启工作树隔离`,"agents.input.worktree.off":`已关闭工作树隔离(Web 默认)`,"inherit.drawer.title":`选择上下文`,"inherit.fromCurrent":`当前对话`,"inherit.fromSession":`可继承的对话`,"inherit.emptyForDirectory":`这个目录还没有可继承的对话`,"agents.worker.standalone":`独立进程`,"agents.worker.remote":`远程`,"agents.worker.openTabHint":`点击在标签页打开完整实例`,"agents.worker.noUrl":`无访问地址,仅可在宿主侧操作`,"agents.worker.kind.interactive":`交互终端`,"agents.worker.kind.daemon":`服务进程`,"agents.worker.kind.daemonWorker":`工作进程`,"agents.worker.kind.bg":`后台任务`,"agents.state.failed":`失败`,"agents.state.stopped":`已停止`,"agents.state.idle":`空闲`,"agents.state.draft":`待创建`,"agents.state.completed":`已完成`,"agents.notice.failed":`会话意外结束,点击查看并可重新启动`,"agents.state.recovering":`恢复中…`,"recent.title":`最近会话`,"sessions.current":`当前`,"sessions.currentTitle":`CodeBuddy`,"sessions.deleteCurrent":`删除当前对话`,"sessions.deleteCurrent.confirm":`将结束当前对话并删除其历史记录,确定吗?`,"sessions.foregroundHandoff":`已转为后台,仍由主对话承载`,"sessions.worker.openTab":`在新标签页打开`,"sessions.section":`实例列表`,"sessions.togglePanel":`切换会话面板`,"agents.phase.preparing":`准备中`,"agents.phase.modelRequesting":`请求模型中…`,"agents.phase.modelStreaming":`正在生成回复…`,"agents.phase.modelDone":`收尾中…`,"agents.phase.toolExecuting":`执行工具中…`,"agents.phase.working":`工作中…`,"agents.phase.retrying":`重试中…`,"agents.phase.compacting":`压缩上下文中…`,"agents.phase.cancelling":`取消中…`,"agents.phase.resuming":`恢复中…`,"agents.phase.starting":`启动中…`,"agents.phase.waitingPermission":`等待权限确认`,"agents.phase.waitingInput":`等待输入`,"agents.live.background":`由后台进程继续执行`,"agents.live.creating":`正在创建智能体,启动后将自动进入`,"agents.boot.spawning":`正在启动智能体…`,"agents.boot.openingPage":`正在打开对话…`,"agents.boot.connecting":`正在连接会话…`,"agents.boot.restoringWorker":`正在恢复智能体…`,"agents.boot.step.spawn":`启动智能体`,"agents.boot.step.page":`打开对话`,"agents.boot.step.session":`连接会话`,"agents.boot.step.restore":`恢复智能体`,"agents.boot.waited":`已等待 {seconds}s`,"agents.boot.hint":`就绪后即可发送消息`,"agents.live.restoring":`正在恢复智能体,可先查看完整对话`,"agents.live.settled":`智能体已结束运行`,"agents.live.foregroundHeld":`宿主对话正在持有,可继续投递`,"agents.live.occupiedFollow":`此智能体已在其他窗口打开,当前只读`,"agents.live.occupiedInbox":`消息会投进收件箱`,"agents.live.occupiedTakeoverHint":`在此接管后,另一个窗口/设备将变为只读,其正在进行的操作可能被中断`,"agents.live.latest":`智能体最新回复`,"agents.live.tool":`正在使用工具`,"agents.live.result":`执行结果`,"agents.reply.sent":`已发送给这个智能体`,"agents.reply.saved":`已保存,将在智能体恢复后发送`,"agents.reply.failed":`发送给智能体失败`,"agents.reply.answerPlaceholder":`回答这个智能体…`,"agents.reply.useSuggestion":`采用建议回复`,"agents.reply.tabSuggestion":`Tab 采用建议 · 数字键选择选项`,"agents.reply.shellHint":`输入 ! 可在智能体内执行 Shell 命令`,"agents.reply.shellMode":`Shell`,"agents.reply.sendShell":`执行 Shell 命令`,"app.connectFailed":`连接失败`,"app.retry":`重试`,"app.pwa.newVersion":`检测到 Web UI 新版本`,"app.pwa.reloadNow":`立即刷新`,"app.pwa.reloadLater":`稍后`,"app.pwa.reloadedAfterIdle":`已切换到新版本`,"chat.empty.title":`CodeBuddy Code`,"chat.empty.subtitle":`今天有什么可以帮到你?`,"chat.empty.slogan":`抓住灵感 · 化为现实`,"chat.empty.tag.slides":`幻灯片生成`,"chat.empty.tag.research":`深度研究`,"chat.empty.tag.docs":`文档处理`,"chat.empty.tag.data":`数据分析`,"chat.thinking":`思考中`,"chat.waitingPermission":`等待权限确认`,"chat.waitingUser":`等待用户回答`,"chat.error":`错误`,"chat.sessionEnded":`会话已结束`,"chat.stopped":`已停止`,"chat.messages":`聊天消息`,"chat.scrollToLatest":`跳到最新`,"chat.error.refusal":`Agent 拒绝继续执行。这可能是由于内容策略限制或其他限制。`,"chat.error.network":`网络连接异常或服务暂时不可用,请稍后重试。`,"chat.error.auth":`身份验证失败或权限不足,请重新登录后再试。`,"chat.error.quota":`已达到配额上限或请求过于频繁,请稍后再试。`,"chat.error.modelService":`模型服务返回异常,请重试或稍后再试。`,"chat.error.cancelled":`请求已被取消,可能由系统休眠或网络中断导致,请重试。`,"chat.error.maxTokens":`响应因达到最大 token 限制而被截断。您可以继续对话或要求更简洁的回复。`,"chat.error.maxTurnRequests":`已超过单轮对话允许的最大模型请求次数。您可以发送新消息以继续。`,"message.contentFilter.notice":`这个话题目前不在我的能力覆盖范围内,我没有办法就此展开讨论。`,"chat.newChat":`新对话`,"chat.disclaimer":`回答由 AI 生成,仅供参考`,"chat.compacted":`已精简历史对话`,"chat.compacting":`正在精简历史对话...`,"chat.compactCancelled":`历史对话精简已取消`,"chat.compactSummary.show":`查看摘要`,"chat.compactSummary.hide":`收起摘要`,"phase.preparing":`准备中`,"phase.modelRequesting":`等待模型响应`,"phase.modelStreaming":`接收中`,"phase.modelDone":`处理中`,"phase.toolExecuting":`执行工具`,"phase.modelStreamingTool":`正在写入`,"phase.retrying":`重试中`,"chat.activity.inputTokens":`发送给模型的上下文:{tokens} tokens`,"chat.activity.contextTokens":`最近一次模型上下文:{tokens} tokens`,"chat.activity.outputTokens":`模型本次已输出:{tokens} tokens`,"chat.activity.outputTokensEstimated":`模型本次已输出:约 {tokens} tokens(流式估算)`,"progress.compacting":`压缩上下文中`,"hero.headline":`CodeBuddy Code`,"hero.newAgent":`新智能体`,"input.placeholder":`给智能体发消息`,"input.placeholderGoal":`描述你的目标,定义可衡量的成果,以获得最佳效果`,"input.placeholderMultitask":`给协调器派任务,或继续跟主 Agent 说话`,"input.placeholderRunning":`消息将排队等待处理...`,"input.placeholderRunningImmediate":`消息将插入当前回合...`,"input.placeholderPending":`请先处理权限请求...`,"input.draft":`草稿`,"input.send":`发送 (Enter)`,"input.stop":`停止`,"input.thinking":`思考中`,"input.deepThinking":`深度思考`,"input.promptFailed":`发送失败`,"input.sessionNotReady":`会话尚未就绪,请稍后再发送`,"input.sessionNotReadyWithReason":`会话尚未就绪:{reason}`,"input.restoreTextOnly":`恢复好了再发送附件`,"input.agentSwitchTimeout":`Agent 预设切换超时,请重试`,"input.sendQueued":`发送排队消息 (Enter)`,"input.dropHint":`拖入文件或路径`,"input.addImage":`添加图片`,"input.addFile":`添加文件`,"input.goal":`目标`,"input.imageTooLarge":`图片不能超过 10MB`,"input.tooManyImages":`最多添加 5 张图片`,"input.fileTooLarge":`文件不能超过 50MB`,"input.tooManyFiles":`最多添加 10 个文件`,"input.attachmentUploadFailed":`附件上传失败,请重试`,"input.menu.image":`图片`,"input.menu.file":`文件`,"input.menu.directory":`目录`,"input.directory.current":`当前目录`,"input.directory.fixedHint":`工作目录在会话创建时确定,不可更改;如需换目录请新建会话`,"input.directory.additional":`附加目录`,"input.directory.add":`添加目录`,"input.menu.mode":`模式`,"input.menu.model":`模型`,"input.modeSelector":`模式`,"input.modelSelector":`模型`,"mainAgent.defaultLabel":`默认预设`,"mainAgent.selectAgent":`即将开始的这个会话所用的 Agent 预设`,"mainAgent.lockedHint":`智能体模式仅可在空对话中切换;如需更换,请新建对话`,"mainAgent.customTag":`本地创作`,"mainAgent.empty":`暂无可用预设`,"mainAgent.sectionTitle":`Agent 预设`,"mainAgent.manage":`管理预设`,"mainAgent.currentDefault":`当前默认`,"mainAgent.currentDefaultHint":`对此后新建的会话生效。运行中的会话保持它开始时的预设。`,"mainAgent.isDefault":`默认`,"mainAgent.setDefault":`设为默认`,"mainAgent.defaultSaved":`默认预设已保存`,"mainAgent.groupBuiltin":`内置`,"mainAgent.groupCustom":`自定义`,"mainAgent.createByAI":`用 AI 快速创建`,"mainAgent.createByAIHint":`用一句话描述你想要的智能体,AI 会生成名字、说明和系统提示(写入用户级目录;工具按最小权限自动选择)。这不是创造模式会话。`,"mainAgent.createByAIPlaceholder":`例如:做一个只读的代码评审智能体,用 hy3 模型`,"mainAgent.creating":`正在生成`,"mainAgent.createSuccess":`智能体已创建,可在会话中选用`,"mainAgent.createFailed":`创建失败`,"mainAgent.loadFailed":`加载预设失败`,"mainAgent.capability":`Agent 预设`,"mainAgent.capabilityHint":`开启后可在本 Web 选择标准 / PTC / 极简 / 创造。WorkBuddy 默认不走预设解析;若与 sidecar 共用同一份 settings,再打开「允许未声明宿主」才会影响 WorkBuddy。`,"mainAgent.capabilityOn":`已开启`,"mainAgent.capabilityOff":`已关闭`,"mainAgent.noDescription":`暂无描述。`,"mainAgent.mode.cli":`标准模式`,"mainAgent.mode.ptc":`PTC 模式`,"mainAgent.mode.minimal":`极简模式`,"mainAgent.mode.create":`创造模式`,"mainAgent.mode.multitask":`多任务模式`,"mainAgent.modeDesc.cli":`功能完整的编码 Agent:改文件、跑命令、检索代码和网页,以及 Skills、计划、目标和子代理。`,"mainAgent.modeDesc.ptc":`标准模式的工作工具改走 REPL / Code Mode,用一段程序组合多步,而不是逐个直连调用。`,"mainAgent.modeDesc.minimal":`只开 REPL,沙箱内有 Bash、Edit、Skill(无 MCP)。没有 Read、Write、Glob、Grep、检索、计划、子代理。看文件用 Bash,读 r.stdout。`,"mainAgent.modeDesc.create":`标准模式全工具,外加编写用户级 ~/.codebuddy/agents 自定义智能体(需 mainAgent: true 才进模式选择)。`,"mainAgent.modeDesc.multitask":`协调器调度后台 Agent。Grep/Read 仅在不同批于 Agent 时可用,不能自己改文件。完成后自动唤醒。`,"mainAgent.capsule.multitask":`多任务`,"mainAgent.capsule.multitaskDismiss":`关闭多任务`,"mainAgent.capsule.multitaskHint":`协调器叠加层,不改当前模式。点 × 关闭。`,"mainAgent.capsule.multitaskFailed":`无法开关多任务`,"mainAgent.capsule.multitaskMinimalBlocked":`极简模式不能开多任务。请先切到标准、PTC 或创造模式。`,"mainAgent.scope.user":`用户级`,"mainAgent.scope.project":`项目级`,"mainAgent.delete":`删除`,"mainAgent.deleteConfirm":`确认删除?`,"mainAgent.deleted":`已删除 {name}`,"mainAgent.deleteFailed":`删除失败`,"mainAgent.searchPlaceholder":`搜索智能体名称或描述`,"mainAgent.filterEmpty":`没有匹配的智能体`,"mainAgent.openFile":`打开文件`,"mainAgent.openFailed":`打开文件失败`,"mainAgent.openInCreate":`在创造模式中打开`,"mainAgent.openInCreateSuccess":`已切换到创造模式`,"mainAgent.openInCreateFailed":`仅空白会话可切换到创造模式`,"mainAgent.trustLocal":`本地`,"input.deepThinkingDesc":`让模型在回答前进行更深入的推理`,"input.thinkingLevel":`思考强度`,"input.thinkingMode":`思考模式`,"input.thoughtDefault":`默认`,"input.contextWindow":`上下文窗口`,"input.editThinking":`编辑思考配置`,"input.modelHeader":`模型`,"input.contextUsage.title":`上下文用量`,"input.contextUsage.hover":`上下文已用 {pct}%`,"input.contextUsage.used":`已用上下文`,"input.contextUsage.usedLabel":`已使用`,"input.contextUsage.compact":`压缩当前会话`,"input.contextUsage.systemPrompt":`系统提示词`,"input.contextUsage.conversation":`对话消息`,"input.contextUsage.tools":`工具及子智能体`,"input.contextUsage.mcp":`连接器及MCP`,"input.contextUsage.skills":`技能`,"mode.default":`默认`,"mode.default.desc":`每次首次使用工具时都请求权限`,"mode.acceptEdits":`自动通过编辑`,"mode.acceptEdits.desc":`本会话自动通过文件编辑权限`,"mode.plan":`规划模式`,"mode.plan.desc":`只分析、不修改文件或执行命令`,"mode.auto":`自动`,"mode.auto.desc":`AI 分类器审查操作:安全的自动通过,高风险的拒绝。分类器不可用时回退为弹窗确认(或拒绝)`,"mode.dontAsk":`免打扰`,"mode.dontAsk.desc":`不弹出权限确认;执行预批准和安全操作,拒绝需要审批的操作`,"mode.bypassPermissions":`跳过权限确认`,"mode.bypassPermissions.desc":`跳过所有权限确认`,"mode.fullAccess":`完全访问`,"mode.fullAccess.desc":`跳过所有权限检查,包括所有代理的危险命令`,"mode.work":`工作`,"mode.work.desc":`标准工作模式,按常规流程请求权限`,"mode.delegate":`委托`,"mode.delegate.desc":`权限由上级会话集中管理`,"input.newline":`换行`,"input.contextMenu.newline":`换行`,"input.contextMenu.send":`发送`,"queue.more":` 条消息排队中`,"queue.summary":`{count} 条消息待处理`,"queue.steerCount":`{count} 条插入当前回合`,"queue.holdCount":`{count} 条下轮发送`,"queue.holdHeader":`排队跟进`,"queue.steerHeader":`将在下次模型请求时插入`,"queue.sendNow":`立即发送`,"queue.remove":`移除`,"queue.emptyPreview":`附件`,"queue.enqueueFailed":`加入队列失败`,"status.running":`运行中`,"tool.writeFile":`写入文件`,"tool.readFile":`读取文件`,"tool.execute":`执行指令`,"tool.searchFiles":`搜索文件`,"tool.searchContent":`搜索内容`,"tool.fetchWeb":`获取网页`,"tool.searchWeb":`搜索网络`,"tool.defaultName":`工具`,"tool.repl":`REPL`,"tool.replRunning":`正在执行代码…`,"tool.replCode":`代码`,"tool.replOutput":`输出`,"tool.replSubagentSummary":`REPL 内子 agent 输出已在上方/下方独立展示,这里不重复展开原始文本。`,"tool.moreItems":`... 还有 {count} 项`,"interruption.title":`需要授权`,"interruption.tool":`工具`,"interruption.allow":`允许`,"interruption.allowAll":`全部允许`,"interruption.deny":`拒绝`,"interruption.approved":`已允许`,"interruption.denied":`已拒绝`,"interruption.edits":`{count} 处编辑`,"interruption.yes":`是`,"interruption.keepPlanning":`继续规划`,"interruption.exitPlanMode":`退出计划模式`,"interruption.readyToCode":`准备好开始编码了吗?`,"theme.light":`浅色`,"theme.dark":`深色`,"theme.system":`跟随系统`,"locale.zh":`中文`,"locale.en":`English`,"locale.system":`跟随系统`,"sidebar.nav.plugins":`插件`,"sidebar.nav.tasks":`任务`,"sidebar.search.placeholder":`搜索...`,"sidebar.chatHistory":`智能体历史`,"sidebar.workspace":`工作区`,"sidebar.connectionStatus":`连接状态`,"sidebar.status":`状态`,"sidebar.sessionId":`会话ID`,"sidebar.notConnected":`未连接`,"sidebar.modelSelection":`模型选择`,"sidebar.noModels":`暂无可用模型`,"sidebar.environment":`环境信息`,"sidebar.cwd":`工作目录`,"sidebar.os":`操作系统`,"sidebar.nodeVersion":`Node.js`,"sidebar.gatewayMode":`网关模式`,"sidebar.tunnelUrl":`Tunnel 地址`,"sidebar.clickToCopy":`点击复制`,"sidebar.copied":`已复制`,"sidebar.permissionMode":`权限模式`,"sidebar.noModes":`暂无可用模式`,"sidebar.preferences":`设置`,"sidebar.toggle":`切换菜单栏`,"sidebar.keybindings":`快捷键`,"sidebar.group.workspace":`工作区`,"sidebar.group.runtime":`运行`,"sidebar.group.observability":`可观测`,"sidebar.group.tools":`工具`,"sidebar.group.preferences":`配置`,"bottomSheet.attachments":`添加`,"bottomSheet.navigation":`导航`,"sidebar.theme":`界面主题`,"sidebar.language":`界面语言`,"sidebar.user":`用户`,"sidebar.authMethod":`密码认证`,"sidebar.noAuth":`无认证`,"sidebar.version":`Remote UI v1.0`,"connection.connected":`已连接`,"connection.connecting":`连接中`,"connection.disconnected":`未连接`,"connection.error":`连接错误`,"connection.occupiedShort":`会话被占用`,"connection.retry":`重试连接`,"message.copyToClipboard":`复制到剪贴板`,"message.copied":`已复制`,"message.copy":`复制`,"message.creditUsed":`共消耗`,"message.creditUnit":`积分`,"mermaid.copySource":`复制源码`,"mermaid.exportSvg":`导出 SVG`,"mermaid.zoomIn":`放大`,"mermaid.zoomOut":`缩小`,"mermaid.fit":`适应视图`,"mermaid.enterFullscreen":`全屏查看`,"mermaid.exitFullscreen":`退出全屏`,"mermaid.fullscreenUnavailable":`当前环境无法进入全屏模式`,"tool.copyParams":`复制参数`,"tool.copyResult":`复制结果`,"table.copyMarkdown":`复制为 Markdown`,"table.copyTsv":`复制为 TSV`,"chat.exportTitle":`导出对话`,"chat.exportMarkdown":`导出为 Markdown`,"chat.exportJson":`导出为 JSON`,"chat.exportEmpty":`该智能体还没有可导出的对话`,"chat.exportFailed":`导出对话失败,请重试`,"message.showMore":`显示更多`,"message.showLess":`收起`,"clipboard.copyFailed":`复制失败:当前环境不支持剪贴板操作,请使用 HTTPS 访问或手动选择文本复制`,"message.assistantName":`CodeBuddy Code`,"thinking.title":`思考过程`,"thinking.thinking":`思考中`,"thinking.done":`已思考`,"thinking.seconds":`{n} 秒`,"thinking.steps":`{n} 个步骤`,"thinking.node":`思考`,"thinking.note":`阶段说明`,"thinking.expand":`展开`,"thinking.collapse":`收起`,"diff.noChanges":`无变更`,"login.title":`CodeBuddy Remote Control`,"login.subtitle":`请输入终端中显示的密码`,"login.placeholder":`密码`,"login.submit":`登录`,"login.error.incorrect":`密码错误`,"login.error.rateLimit":`登录尝试次数过多,请稍后再试`,"login.error.required":`请输入密码`,"login.hint.password":`提示:密码在服务启动时显示在终端中。`,"login.hint.urlAuth":`也可以使用 <code>?password=xxx</code> 自动登录。`,"login.hint.disable":`或在 CodeBuddy 配置目录(默认 <code>~/.codebuddy</code>,可通过 <code>CODEBUDDY_CONFIG_DIR</code> 环境变量覆盖)下的 <code>settings.json</code> 中设置 <code>gateway.auth: "none"</code> 来禁用认证。`,"login.slogan":`抓住灵感 · 化为现实`,"login.tagline":`Triggered Anywhere, Completed Locally.`,"login.privacy":`隐私政策`,"login.terms":`服务条款`,"account.login.title":`账户登录`,"account.login.subtitle":`CodeBuddy 尚未登录,请选择登录方式完成认证`,"account.login.button":`登录`,"account.login.polling":`等待登录完成...`,"account.login.polling.hint":`请在浏览器中完成登录,完成后此页面将自动跳转`,"account.login.openBrowser":`打开浏览器登录`,"account.login.copyUrl":`复制登录链接`,"account.login.copied":`已复制`,"account.login.failed":`登录失败,请重试`,"account.login.retry":`重试`,"account.logout":`退出登录`,"account.logout.confirm":`确认退出当前账户?`,"account.method.internal":`国内站点登录`,"account.method.external":`国际站点登录`,"account.method.selfhosted":`企业域名登录`,"account.method.iOA":`iOA 登录(仅限腾讯)`,"sidebar.interactionMode":`交互模式`,"sidebar.chatMode":`对话`,"sidebar.terminalMode":`终端`,"sidebar.canvas":`画布`,"canvas.title":`无限画布`,"canvas.addTerminal":`添加终端`,"canvas.zoomIn":`放大`,"canvas.zoomOut":`缩小`,"canvas.fitView":`适应视图`,"canvas.resetView":`重置视图`,"canvas.empty":`点击工具栏 + 按钮添加终端`,"canvas.openStandalone":`在新窗口打开画布`,"canvas.tileMenu.close":`关闭`,"canvas.tileMenu.duplicate":`复刻终端`,"canvas.tileMenu.maximize":`最大化`,"canvas.tileMenu.minimize":`最小化`,"canvas.tileMenu.restore":`还原`,"canvas.tileMenu.openStandalone":`在新窗口打开`,"canvas.standalone.missingPaneId":`未指定终端 ID`,"canvas.defaultTitle":`终端`,"terminal.connecting":`终端连接中...`,"terminal.title":`终端`,"terminal.disconnected":`终端已断开`,"terminal.error":`终端连接失败`,"terminal.reconnect":`重新连接`,"terminal.split":`拆分终端`,"terminal.splitHorizontal":`左右分屏`,"terminal.splitVertical":`上下分屏`,"terminal.closePane":`关闭终端`,"terminal.close":`关闭`,"terminal.closeOthers":`关闭其他`,"terminal.closeToRight":`关闭右侧`,"terminal.closeAll":`关闭全部`,"terminal.maxPanes":`已达最大面板数`,"terminal.copySelection":`复制`,"terminal.openLink.title":`打开外部链接?`,"terminal.openLink.message":`即将打开 {url}。终端中的链接可能由不受信任的程序生成,请确认后继续。`,"terminal.openLink.confirm":`打开`,"composer.addToChat":`添加到对话`,"sidebar.instances":`实例`,"sidebar.activeInstances":`个活跃实例`,"sidebar.manageInstances":`管理实例`,"sidebar.remoteControl":`远程控制`,"instance.title":`实例列表`,"instance.switch":`实例`,"instance.switchTitle":`切换实例`,"instance.current":`当前实例`,"instance.manual":`手动添加`,"instance.switchTo":`切换到此实例`,"instance.manage":`管理实例`,"instance.managerTitle":`实例管理`,"instance.addInstance":`添加实例`,"instance.name":`实例名称`,"instance.namePlaceholder":`自定义实例名称(可选,默认为目录名)`,"instance.url":`实例地址`,"instance.urlPlaceholder":`https://example.trycloudflare.com`,"instance.password":`密码`,"instance.optional":`可选`,"instance.passwordPlaceholder":`访问密码`,"instance.cancel":`取消`,"instance.add":`添加`,"instance.remove":`删除此实例`,"instance.noInstances":`暂无其他实例`,"instance.noInstancesHint":`启动更多 CodeBuddy Code 实例,或手动添加远程实例`,"instance.cwd":`工作目录`,"instance.topic":`当前话题`,"instance.startedAt":`启动于`,"instance.local":`本地`,"instance.tunnel":`隧道`,"instance.uptime.days":`天前`,"instance.uptime.hours":`小时前`,"instance.uptime.minutes":`分钟前`,"instance.uptime.justNow":`刚刚`,"instance.addError":`添加实例失败`,"instance.removeError":`删除实例失败`,"instance.copyUrl":`复制链接`,"instance.copied":`已复制`,"instance.subtitle":`管理和切换工作实例`,"instance.refresh":`刷新`,"instance.refreshed":`已刷新`,"instance.loading":`加载实例中...`,"instance.error":`加载实例列表失败`,"instance.retry":`重试`,"question.multiple":`多选`,"question.customAnswer":`或输入自定义答案...`,"question.reviewAnswers":`审核答案`,"question.singleTitle":`问题`,"question.titleWithCount":`问题({count})`,"question.reviewTab":`审核`,"question.next":`下一步`,"question.submit":`提交`,"question.cancel":`取消`,"question.answered":`已回答`,"question.cancelled":`问题已取消`,"question.invalid":`问题参数无效,无法显示`,"todo.title":`任务清单`,"todo.progress":`任务进度`,"todo.executing":`任务{n}正在执行中`,"todo.untitled":`未命名`,"todo.completedCount":`已完成 {count} 项`,"todo.allCompleted":`任务已全部完成`,"todo.statusPendingSync":`执行已结束 · 任务状态待同步`,"todo.pendingSync":`待同步`,"bgTasks.summary":`{total} 个后台任务 · {running} 个运行中`,"bgTasks.status.done":`已完成`,"bgTasks.status.failed":`已失败`,"bgTasks.status.ended":`已结束`,"bgTasks.status.elapsed":`已运行 {duration}`,"bgTasks.untitled":`后台命令`,"bgTasks.noOutput":`暂无输出`,"bgTasks.viewOutput":`在右侧查看实时输出`,"bgTasks.cancel":`取消任务(终止进程)`,"bgTasks.hide":`从列表中移除`,"bgTasks.endReason.cancelled-by-user":`已取消`,"bgTasks.endReason.output-limit":`输出超限,已终止`,"bgTasks.endReason.interrupted":`已中断`,"bgTasks.endReason.stopped":`已停止`,"bgTasks.endReason.sandbox-denied":`被沙箱拦截`,"bgTasks.endReason.exit-status-unknown":`已结束,退出码未采集到`,"bgTasks.endReason.exited":`已结束`,"history.title":`智能体历史`,"history.description":`在当前智能体内继续项目对话`,"history.backgroundDescription":`智能体正在后台工作,完成接管后可切换对话`,"history.target":`载入到 {name}`,"history.project":`项目`,"history.noProjects":`暂无可用项目`,"history.noData":`没有历史对话`,"history.noDataHint":`当前项目还没有可继续的对话`,"history.backToChat":`返回对话`,"history.loading":`加载中...`,"history.loadError":`加载失败`,"history.retry":`重试`,"history.current":`当前`,"history.messages":`{count} 条消息`,"history.delete":`删除`,"history.deleteConfirm":`确定要删除这个会话吗?`,"history.deleteCancel":`取消`,"history.deleteOk":`删除`,"history.rename":`重命名`,"history.renameTitle":`重命名会话`,"history.renamePlaceholder":`输入新名称`,"history.renameCancel":`取消`,"history.renameOk":`确定`,"history.cannotDeleteCurrent":`无法删除当前会话`,"history.renameFailed":`重命名失败`,"history.deleteFailed":`删除失败`,"history.restore":`在当前智能体中打开`,"history.restoreSuccess":`已在当前智能体中继续该对话`,"history.restoreFailed":`载入历史对话失败`,"history.openSessionSwitcher":`搜索并管理全部对话`,"sessionSwitcher.title":`对话`,"sessionSwitcher.searchPlaceholder":`搜索`,"sessionSwitcher.close":`关闭`,"sessionSwitcher.groupPinned":`置顶`,"sessionSwitcher.groupToday":`今天`,"sessionSwitcher.groupYesterday":`昨天`,"sessionSwitcher.firstQuestion":`第一条提问`,"sessionSwitcher.lastQuestion":`最后一条提问`,"sessionSwitcher.firstQuestionPrefix":`最初提问`,"sessionSwitcher.lastQuestionPrefix":`最后提问`,"sessionSwitcher.loadMore":`加载更多`,"sessionSwitcher.noSearchResult":`没有匹配的会话`,"sessionSwitcher.noSearchResultHint":`搜索只覆盖已加载的会话;清空搜索词并向下滚动可加载更多`,"sessionSwitcher.clearSearch":`清空搜索`,"sessionSwitcher.pin":`置顶`,"sessionSwitcher.unpin":`取消置顶`,"sessionSwitcher.pinFailed":`置顶失败`,"sessionSwitcher.more":`更多操作`,"sessionSwitcher.deleteCurrentHint":`当前会话不能删除`,"settings.title":`设置`,"settings.appearance":`外观`,"settings.model":`模型选择`,"settings.customModels.manage":`管理自定义模型`,"settings.customModels.entryLabel":`自定义模型`,"settings.customModels.entryDesc":`添加 OpenAI 兼容端点,支持增删改`,"settings.customModels.title":`自定义模型`,"settings.customModels.addTitle":`添加自定义模型`,"settings.customModels.editTitle":`编辑自定义模型`,"settings.customModels.add":`添加`,"settings.customModels.edit":`编辑`,"settings.customModels.delete":`删除`,"settings.customModels.deleteTitle":`删除自定义模型?`,"settings.customModels.deleteMessage":`将删除模型 {id},此操作不可撤销。`,"settings.customModels.cancel":`取消`,"settings.customModels.save":`保存`,"settings.customModels.close":`关闭`,"settings.customModels.empty":`暂无自定义模型`,"settings.customModels.hint":`数据保存在本机 ~/.codebuddy/models.json`,"settings.customModels.loadFailed":`加载自定义模型失败`,"settings.customModels.saveFailed":`保存失败`,"settings.customModels.deleteFailed":`删除失败`,"settings.customModels.apiKeyKeep":`留空则保留原密钥`,"settings.customModels.field.id":`模型 ID`,"settings.customModels.field.name":`显示名称`,"settings.customModels.field.vendor":`提供商`,"settings.customModels.field.url":`接口 URL`,"settings.customModels.field.apiKey":`API Key`,"settings.customModels.field.maxInputTokens":`最大输入 Tokens`,"settings.customModels.field.maxOutputTokens":`最大输出 Tokens`,"settings.customModels.field.temperature":`Temperature`,"settings.customModels.field.temperatureDefault":`留空使用默认值(不发送)`,"settings.customModels.field.supportsToolCall":`支持工具调用`,"settings.customModels.field.supportsImages":`支持图片`,"settings.customModels.field.supportsReasoning":`支持推理`,"settings.customModels.field.useCustomProtocol":`自定义协议(不自动补 /chat/completions)`,"settings.customModels.err.idRequired":`请填写模型 ID`,"settings.customModels.err.idInvalid":`模型 ID 仅允许字母、数字与 . _ : - /`,"settings.customModels.err.idDuplicate":`模型 ID 已存在`,"settings.customModels.err.urlRequired":`请填写接口 URL`,"settings.customModels.err.urlInvalid":`URL 需以 http:// 或 https:// 开头`,"settings.mode":`权限模式`,"settings.systemInfo":`系统信息`,"settings.backToChat":`返回对话`,"settings.tab.user":`用户级`,"settings.tab.project":`工作空间级`,"settings.scope.label":`配置作用域`,"settings.scope.userHint":`适用于当前用户的所有 CBC 工作空间`,"settings.scope.projectHint":`仅适用于当前工作空间,可随项目共享`,"settings.search.placeholder":`搜索设置名称、说明或配置键`,"settings.search.clear":`清空设置搜索`,"settings.search.empty":`没有匹配的设置`,"settings.search.results":`已更新设置搜索结果`,"settings.sections":`设置分区`,"settings.inherited":`继承用户级配置`,"settings.inheritUser":`恢复为用户级配置`,"settings.invalidJson":`请输入有效的 JSON 对象`,"settings.loadFailed":`配置加载失败,请重试`,"agents.workspaceSettings":`工作空间设置`,"settings.workspaceFor":`{name} 的设置`,"settings.workspaceMissing":`该智能体没有可用的工作目录`,"settings.group.modelAndReasoning":`模型与推理`,"settings.group.behavior":`行为`,"settings.group.memory":`记忆`,"settings.group.language":`语言`,"settings.group.advanced":`高级`,"settings.group.mainAgent":`Agent 预设`,"settings.item.mainAgent.enabled":`启用 Agent 预设`,"settings.item.mainAgent.enabled.desc":`Web / CLI 可选择标准、PTC、极简、创造。关闭后始终走原生标准模式。`,"settings.item.mainAgent.allowUnopted":`允许未声明的 ACP 宿主`,"settings.item.mainAgent.allowUnopted.desc":`默认关闭,且仅在上方总闸开启时生效。打开后,与本机共用 settings 的 WorkBuddy sidecar 也会走预设解析。平时请保持关闭。`,"settings.group.sandbox":`安全沙箱`,"settings.item.model":`默认模型`,"settings.item.model.desc":`设置默认使用的 AI 模型`,"settings.item.reasoningEffort":`推理努力级别`,"settings.item.reasoningEffort.desc":`控制模型的推理深度`,"settings.item.alwaysThinkingEnabled":`始终启用深度思考`,"settings.item.autoCompactEnabled":`自动压缩上下文`,"settings.item.autoCompactWindow":`自动压缩窗口 (token)`,"settings.item.autoCompactWindow.desc":`压缩计算的上下文窗口基准值,触发点 = min(该值, 模型窗口) × 阈值;留空跟随模型窗口。环境变量 CODEBUDDY_AUTO_COMPACT_WINDOW 优先级更高`,"settings.item.includeCoAuthoredBy":`提交包含 Co-authored-by`,"settings.item.fileCheckpointingEnabled":`文件检查点`,"settings.item.fileCheckpointingEnabled.desc":`启用文件版本回退功能`,"settings.item.promptSuggestionEnabled":`提示建议`,"settings.item.busySendMode":`忙碌时发送`,"settings.item.busySendMode.desc":`智能体还在跑时,新消息是排队等本回合结束,还是立刻插入当前回合。排队中的条目仍可点立即发送。`,"settings.item.busySendMode.queue":`排队发送`,"settings.item.busySendMode.immediate":`立即插入当前回合`,"settings.item.ignoreGitIgnore":`忽略 .gitignore`,"settings.item.ignoreGitIgnore.desc":`搜索文件时忽略 .gitignore 规则`,"settings.item.deferToolLoading":`延迟加载工具`,"settings.item.hookOutputCollapsed":`折叠 Hook 输出`,"settings.item.memory.enabled":`启用记忆功能`,"settings.item.memory.autoMemoryEnabled":`自动记忆`,"settings.item.memory.autoMemoryEnabled.desc":`自动保存重要信息到记忆库`,"settings.item.language":`响应语言`,"settings.item.language.desc":`设置 AI 回复使用的语言`,"settings.item.cleanupPeriodDays":`聊天记录保留天数`,"settings.item.imageHistoryRetainRounds":`图片保留轮数`,"settings.item.imageHistoryRetainRounds.desc":`对话历史中保留图片的最近轮数`,"settings.item.env":`环境变量`,"settings.item.env.desc":`应用于每个会话的环境变量 (JSON)`,"settings.item.sandbox.enabled":`启用安全沙箱`,"settings.item.sandbox.enabled.desc":`在沙箱中运行 Bash 命令,限制文件和网络访问`,"settings.item.sandbox.autoAllowBashIfSandboxed":`沙箱内自动批准命令`,"settings.item.sandbox.autoAllowBashIfSandboxed.desc":`命令在沙箱中运行时自动批准`,"settings.loading":`加载中...`,"settings.saved":`已保存`,"settings.saveFailed":`保存失败`,"settings.notSet":`未设置`,"settings.default":`默认`,"settings.reset":`重置`,"settings.noProjectSettings":`当前工作空间暂无可配置项`,"settings.effort.minimal":`最小`,"settings.effort.low":`低`,"settings.effort.medium":`中`,"settings.effort.high":`高`,"settings.effort.xhigh":`极高`,"settings.effort.max":`最大`,"page.title":`CodeBuddy Code`,"tool.processExited":`[进程已退出]`,"tool.itemsCount":`{count} 项`,"tool.showAllItems":`显示全部 {count} 项`,"tool.moreLinesCount":`... 还有 {count} 行`,"tool.generatedImage":`生成的图片`,"tool.editedImage":`编辑后的图片`,"tool.imageGen":`图片生成`,"tool.imageEdit":`图片编辑`,"tool.toolSearch":`工具搜索`,"tool.teamCreate":`创建团队`,"tool.teamDelete":`删除团队`,"tool.taskCreate":`创建任务`,"tool.taskUpdate":`更新任务`,"tool.taskList":`任务列表`,"tool.taskGet":`获取任务`,"tool.sendMessage":`发送消息`,"tool.shutdown":`关闭`,"tool.taskCompleted":`任务完成`,"tool.shutdownRejected":`关闭被拒绝`,"tool.planResponse":`计划回复`,"tool.approved":`已批准`,"tool.rejected":`已拒绝`,"tool.userRejectedResult":`用户已拒绝执行此操作`,"tool.webSearch":`网络搜索`,"tool.webFetch":`网页获取`,"tool.saveMemory":`保存记忆`,"tool.askUserQuestion":`询问用户`,"tool.askUserForStructuredInput":`请求结构化输入`,"tool.structuredInputFieldsHeader":`请求字段`,"tool.structuredInputEnumLabel":`可选值`,"tool.structuredInputPendingHint":`请填写以下信息后提交`,"tool.structuredInputRequired":`必填`,"tool.structuredInputSubmit":`提交`,"tool.structuredInputSubmitting":`提交中…`,"tool.structuredInputDecline":`拒绝`,"tool.structuredInputCancel":`取消`,"tool.structuredInputResponded":`已回复`,"tool.structuredInputBooleanTrue":`是`,"tool.structuredInputBooleanFalse":`否`,"tool.enterPlanMode":`进入计划模式`,"tool.exitPlanMode":`退出计划模式`,"tool.allowedActions":`允许的操作:`,"tool.skill":`技能`,"tool.agent":`代理`,"tool.failed":`失败`,"tool.completed":`完成`,"tool.toolsCount":`{count} 个工具`,"tool.background":`后台`,"tool.permissionsCount":`{count} 项权限`,"subagent.openDetail":`查看执行详情`,"subagent.expandInline":`就地展开`,"subagent.collapseInline":`收起`,"subagent.expandPrompt":`展开派发指令`,"subagent.collapsePrompt":`收起派发指令`,"subagent.dispatchPrompt":`派发指令`,"subagent.returnValue":`返回结果`,"subagent.dockEmptyHint":`在对话里点子代理那一行,就能在这里看它的执行详情。`,"subagent.detailTab":`子代理`,"workflow.detailTab":`工作流`,"workflow.waiting":`等待 {count} 个工作流完成`,"workflow.startedFor":`已启动 {name}:`,"workflow.agentFallback":`第 {index} 个 agent`,"workflow.approval.phasesIntro":`该动态工作流将在以下阶段并行启动多个子代理:`,"workflow.approval.tokenHint":`动态工作流会并行运行大量子代理,可能快速消耗 token 并计入用量额度。运行中可随时在工作流卡片或右侧详情中停止,也可以输入 /workflows 打开详情。`,"workflow.approval.viewScript":`查看原始脚本({count} 行)`,"workflow.approval.hideScript":`收起原始脚本({count} 行)`,"workflow.approval.savedWorkflow":`已保存的工作流:{name}`,"workflow.approval.scriptPath":`脚本:{path}`,"workflow.approval.dynamicWorkflow":`动态工作流`,"workflow.startedHint":`工作流在后台运行,点击卡片可在侧边栏查看执行详情;完成后最终报告会出现在对话中。`,"workflow.completedHint":`工作流已完成,点击卡片查看各阶段与 agent 的执行详情。`,"workflow.noRuns":`当前会话还没有工作流`,"workflow.mobileUnsupported":`请在桌面端查看工作流详情`,"workflow.agentsProgress":`{done}/{total} agents 完成`,"workflow.phases":`阶段`,"workflow.allPhases":`全部`,"workflow.overall":`总进度`,"workflow.status.running":`运行中`,"workflow.status.paused":`已暂停`,"workflow.status.completed":`已完成`,"workflow.status.failed":`失败`,"workflow.status.aborted":`已停止`,"workflow.status.starting":`正在启动`,"workflow.openDetail":`查看详情`,"workflow.agents":`{count} 个 agent`,"workflow.agentsDone":`{count} 完成`,"workflow.agentsRunning":`{count} 运行中`,"workflow.agentsFailed":`{count} 失败`,"workflow.agentsCached":`{count} 命中缓存`,"workflow.tokens":`{count} tokens`,"workflow.toolCalls":`{count} 次工具调用`,"workflow.phaseProgress":`阶段 {done}/{total}`,"workflow.pause":`暂停`,"workflow.resume":`继续`,"workflow.stop":`停止`,"workflow.skipAgent":`跳过`,"workflow.phaseUngrouped":`未分阶段`,"workflow.phasePending":`等待中`,"workflow.phaseSkipped":`未执行`,"workflow.noAgentsYet":`还没有派发 agent`,"workflow.prompt":`指令`,"workflow.promptLines":`{count} 行`,"workflow.activity":`最近活动`,"workflow.result":`结果`,"workflow.error":`错误`,"workflow.output":`最终输出`,"workflow.logs":`日志`,"workflow.idle":`空闲 {time}`,"workflow.pausedHint":`已暂停:运行中的 agent 会继续完成,新 agent 暂不派发。`,"workflow.detailLoading":`正在加载工作流详情…`,"workflow.detailMissing":`运行记录已不在内存中(进程重启或已被回收),无法查看详情。`,"workflow.detailError":`工作流详情加载失败`,"workflow.retry":`重试`,"workflow.controlFailed":`操作未生效,工作流可能已结束`,"workflow.cachedBadge":`缓存`,"workflow.dockEmptyHint":`在对话里点工作流卡片,就能在这里查看执行详情。`,"subagent.running":`进行中`,"subagent.detailPending":`子代理刚启动,还没有执行记录。`,"subagent.detailEmpty":`这个子代理没有产生执行记录。`,"subagent.detailGone":`这个子代理的执行详情已不在当前会话中,可以关掉这个标签。`,"terminal.unknownError":`未知错误`,"terminal.processExited":`[进程已退出]`,"terminal.connectionLost":`连接已断开`,"terminal.wsConnectionFailed":`WebSocket 连接失败`,"terminal.createSessionFailed":`创建终端会话失败`,"terminal.reconnecting":`正在重新连接...`,"terminal.reconnectFailed":`重连失败`,"terminal.search.placeholder":`查找`,"terminal.search.noResults":`无结果`,"terminal.search.caseSensitive":`区分大小写`,"terminal.search.wholeWord":`全字匹配`,"terminal.search.regex":`使用正则表达式`,"terminal.search.previous":`上一个匹配`,"terminal.search.next":`下一个匹配`,"terminal.search.close":`关闭`,"team.title":`团队`,"team.activeCount":`{count} 个活跃`,"team.memberCount":`{count} 位成员`,"team.doneCount":`{count} 个完成`,"team.historyAndProgress":`团队成员与任务进度`,"team.waitingForTeammates":`等待 {count} 个智能体完成…`,"team.backToMain":`返回主对话`,"team.switchMember":`切换成员`,"team.viewMemberHistory":`查看成员对话历史`,"team.recentCommunication":`成员动态`,"team.runningTaskCount":`{count} 项执行中`,"team.pendingTaskCount":`{count} 项待开始`,"team.receivedFrom":`收到 {peer}`,"team.sentTo":`发给 {peer}`,"team.loadingHistory":`加载对话历史…`,"team.noHistory":`暂无对话历史`,"team.agentRunning":`正在运行…`,"team.delivered":`已送达`,"team.showLess":`收起`,"team.moreLines":`… ({count} 更多行)`,"team.tools":`{count} 工具`,"team.tokens":`{count} tokens`,"instance.tunnelMode":`隧道`,"instance.localMode":`本地`,"workspace.searchPlaceholder":`搜索目录...`,"workspace.switch":`切换`,"workspace.switchHere":`切换到此目录`,"workspace.switching":`切换中...`,"workspace.noResults":`没有匹配的目录`,"workspace.emptyDir":`此目录为空`,"workspace.pathPlaceholder":`输入路径或目录名...`,"workspace.selectDir":`在此目录创建机器人`,"workspace.filterPlaceholder":`过滤子目录...`,"workspace.recent.title":`最近工作区`,"workspace.recent.daysAgo":`天前`,"workspace.recent.hoursAgo":`小时前`,"workspace.recent.minutesAgo":`分钟前`,"workspace.recent.justNow":`刚刚`,"workspace.recent.remove":`移除`,"workspace.browseTitle":`浏览工作区`,"workspace.recentWorkspaces":`最近工作区`,"workspace.createNew":`创建新机器人`,"workspace.browseDir":`浏览目录`,"workspace.instanceLocal":`本地`,"workspace.instanceTunnel":`隧道`,"workspace.instanceCurrent":`当前`,"workspace.switchInstance":`切换`,"workspace.switchingInstance":`切换中...`,"workspace.switchingWithGateway":`正在准备切换...`,"workspace.instanceStarted":`启动于`,"workspace.noWorkspaces":`暂无活跃的工作区`,"workspace.noWorkspacesHint":`浏览目录创建新机器人`,"workspace.instanceCount":`{count} 个机器人`,"question.multiLabel":`多选`,"tasks.title":`推荐模版`,"tasks.subtitle":`选择一个模版快速创建定时任务`,"tasks.loading":`正在获取推荐模版...`,"tasks.error":`获取模版失败`,"tasks.retry":`重试`,"tasks.refresh":`刷新推荐`,"tasks.refreshed":`已刷新`,"tasks.empty":`暂无推荐模版`,"tasks.interval":`每 {value}`,"tasks.interval.1d":`每天`,"tasks.interval.2d":`每 2 天`,"tasks.interval.3d":`每 3 天`,"tasks.interval.1w":`每周`,"tasks.interval.2w":`每 2 周`,"tasks.interval.1m":`每月`,"scheduled.title":`定时任务`,"scheduled.subtitle":`当前会话中的定时任务`,"scheduled.loading":`加载中...`,"scheduled.empty":`暂无定时任务`,"scheduled.emptyHint":`在对话中使用 /loop 或 CronCreate 创建`,"scheduled.create":`创建任务`,"scheduled.creating":`创建中...`,"scheduled.delete":`删除`,"scheduled.edit":`修改任务`,"scheduled.save":`保存修改`,"scheduled.saving":`保存中...`,"scheduled.enable":`启用`,"scheduled.disable":`禁用`,"scheduled.enabled":`已启用`,"scheduled.disabled":`已禁用`,"scheduled.triggered":`定时任务已启动`,"scheduled.taskId":`任务`,"scheduled.executions":`执行记录`,"scheduled.executionsTitle":`任务执行记录`,"scheduled.executionsBack":`返回任务列表`,"scheduled.executionsLoading":`正在加载执行记录...`,"scheduled.executionsEmpty":`暂无执行记录`,"scheduled.executionsFilteredEmpty":`没有符合筛选条件的执行记录`,"scheduled.executionsSearchPlaceholder":`搜索执行 ID、内容或错误...`,"scheduled.executionsClearSearch":`清除搜索`,"scheduled.executionsSelect":`选择`,"scheduled.executionsSelected":`已选 {count} 条`,"scheduled.executionsSelectAll":`全选可删除项`,"scheduled.executionsClearSelection":`取消全选`,"scheduled.executionsSelectOne":`选择执行记录 {id}`,"scheduled.executionsDeleteSelected":`删除所选`,"scheduled.executionsDeleteTitle":`删除 {count} 条执行记录?`,"scheduled.executionsDeleteMessage":`只会删除执行记录,不会删除定时任务或关联对话。此操作无法撤销。`,"scheduled.executionsDeleteSuccess":`已删除 {count} 条执行记录`,"scheduled.executionsDeleteFailed":`删除执行记录失败`,"scheduled.executionsDeleting":`删除中...`,"scheduled.executionsStatusFilter":`状态筛选`,"scheduled.executionsAllStatuses":`全部状态`,"scheduled.executionsTimeFilter":`时间筛选`,"scheduled.executionsAllTime":`全部时间`,"scheduled.executionsLastDay":`最近 24 小时`,"scheduled.executionsLastWeek":`最近 7 天`,"scheduled.executionsLastMonth":`最近 30 天`,"scheduled.executionsLoadMore":`加载更多`,"scheduled.executionsAllLoaded":`已加载全部记录`,"scheduled.executionDetails":`执行详情`,"scheduled.executionDetailsClose":`关闭执行详情`,"scheduled.executionId":`执行 ID`,"scheduled.executionStartedAt":`开始时间`,"scheduled.executionError":`错误信息`,"scheduled.execution.queued":`排队中`,"scheduled.execution.running":`执行中`,"scheduled.execution.owner":`执行实例`,"scheduled.execution.ownerDaemon":`后台服务实例`,"scheduled.execution.ownerWebui":`WebUI 实例`,"scheduled.execution.ownerCli":`CLI 实例`,"scheduled.execution.session":`会话`,"scheduled.execution.technicalDetails":`技术信息`,"scheduled.execution.succeeded":`成功`,"scheduled.execution.failed":`失败`,"scheduled.execution.openLive":`查看实时过程`,"scheduled.execution.openResult":`查看执行过程和结果`,"scheduled.execution.noConversation":`此执行记录没有关联对话,无法查看过程`,"scheduled.execution.openFailed":`打开执行对话失败`,"scheduled.execution.focusUnavailable":`已打开关联对话,但这条旧执行没有可定位的过程记录`,"scheduled.executionDelete":`删除执行记录`,"scheduled.executionDeleteOne":`删除执行记录 {id}`,"scheduled.executionDeleteTitle":`删除这条执行记录?`,"scheduled.executionDeleteActiveHint":`执行中或排队中的记录不能删除`,"scheduled.duration":`耗时`,"scheduled.cron":`Cron 表达式`,"scheduled.prompt":`执行内容`,"scheduled.promptPlaceholder":`定时触发时要执行的提示词...`,"scheduled.recurring":`循环`,"scheduled.oneShot":`一次性`,"scheduled.durable":`持久化`,"scheduled.sessionOnly":`仅会话`,"scheduled.lastFired":`上次触发`,"scheduled.custom":`自定义`,"scheduled.every":`每`,"scheduled.unit.minutes":`分钟`,"scheduled.unit.hours":`小时`,"scheduled.unit.days":`天`,"scheduled.unit.weeks":`周`,"plugins.title":`插件管理`,"plugins.installedPlugins":`已安装插件`,"plugins.browseMarketplace":`浏览市场`,"plugins.marketplaces":`插件市场`,"plugins.enabled":`已启用`,"plugins.disabled":`已禁用`,"plugins.enable":`启用`,"plugins.disable":`禁用`,"plugins.uninstall":`卸载`,"plugins.install":`安装`,"plugins.confirmUninstall":`确定要卸载此插件吗?`,"plugins.marketplace":`市场`,"plugins.addMarketplace":`添加市场`,"plugins.removeMarketplace":`移除`,"plugins.confirmRemoveMarketplace":`确定要移除此市场吗?`,"plugins.noPlugins":`暂无已安装的插件`,"plugins.noPluginsHint":`通过插件市场安装插件来扩展功能`,"plugins.noMarketplaces":`暂无配置的市场`,"plugins.noMarketplacesHint":`添加一个插件市场来浏览和安装插件`,"plugins.selectMarketplace":`选择市场`,"plugins.selectMarketplaceHint":`选择一个市场来浏览可用插件`,"plugins.marketplaceNotFound":`市场不存在`,"plugins.noAvailablePlugins":`该市场暂无可用插件`,"plugins.noAvailablePluginsHint":`请尝试添加其他市场或稍后再试`,"plugins.installed":`已安装`,"plugins.browsingMarketplace":`浏览中...`,"plugins.loading":`加载中...`,"plugins.error":`加载插件失败`,"plugins.retry":`重试`,"plugins.sourcePlaceholder":`市场地址(Git URL 或本地路径)`,"plugins.namePlaceholder":`市场名称(可选)`,"plugins.cancel":`取消`,"plugins.add":`添加`,"plugins.version":`版本`,"plugins.operationFailed":`操作失败`,"plugins.searchPlaceholder":`搜索插件...`,"plugins.allMarketplaces":`全部市场`,"plugins.noSearchResults":`没有找到匹配的插件`,"plugins.totalCount":`个插件`,"plugins.refresh":`刷新`,"plugins.kindAll":`全部`,"plugins.kindSkills":`Skills`,"plugins.kindMcp":`MCP`,"plugins.kindHooks":`Hooks`,"plugins.kindTools":`Tools`,"plugins.kindUnknown":`其他`,"plugins.filterStatusAll":`全部状态`,"plugins.filterStatusEnabled":`已启用`,"plugins.filterStatusDisabled":`未启用`,"plugins.infiniteRange":`已显示 {visible} / {total}`,"plugins.infiniteLoading":`向下滚动加载更多`,"plugins.infiniteEnd":`已显示全部`,"plugins.backToTop":`回到顶部`,"plugins.installedLabel":`已安装`,"plugins.category":`分类`,"plugins.author":`作者`,"plugins.license":`许可证`,"plugins.homepage":`主页`,"plugins.repository":`仓库`,"plugins.source":`来源`,"plugins.keywords":`关键词`,"plugins.features":`功能`,"plugins.scope":`范围`,"plugins.scope.user":`用户`,"plugins.scope.project":`项目`,"plugins.scope.project-local":`本地`,"plugins.installScope.user":`为你安装(用户级)`,"plugins.installScope.project":`为所有协作者安装(项目级)`,"plugins.installScope.local":`仅在此仓库为你安装(本地级)`,"plugins.policyCannotRemove":`不可卸载`,"plugins.policyCannotSwitchoff":`不可禁用`,"plugins.policyCannotEdit":`不可编辑`,"channel.from":`来自`,"channel.group":`群聊`,"channel.replyTo":`回复来自 {source}`,"channel.wechat":`微信`,"channel.wecom":`企业微信`,"channel.wecomBot":`企微机器人`,"remoteControl.title":`远程控制`,"remoteControl.subtitle":`管理渠道连接`,"remoteControl.connectedChannels":`已连接渠道`,"remoteControl.noChannels":`暂无已连接渠道`,"remoteControl.noChannelsHint":`添加微信或企业微信渠道,或从插件市场安装更多`,"remoteControl.addWeChat":`添加微信机器人`,"remoteControl.addWeCom":`添加企微机器人`,"remoteControl.connect":`连接`,"remoteControl.disconnect":`断开`,"remoteControl.delete":`删除`,"remoteControl.add":`添加`,"remoteControl.connected":`已连接`,"remoteControl.disconnected":`未连接`,"remoteControl.connecting":`连接中...`,"remoteControl.installMore":`安装更多渠道`,"remoteControl.installMoreHint":`浏览插件市场,安装第三方渠道插件`,"remoteControl.browseMarketplace":`浏览插件市场`,"remoteControl.builtIn":`内置`,"remoteControl.plugin":`插件`,"remoteControl.rebind":`重新绑定`,"remoteControl.unbind":`解绑`,"remoteControl.bot":`机器人`,"remoteControl.default":`默认`,"remoteControl.next":`下一步`,"remoteControl.cancel":`取消`,"remoteControl.wecomBotIdHint":`从企业微信管理后台 → 应用管理 → AI 助手获取`,"remoteControl.wecomSecretHint":`输入 Secret 后按回车或点“连接”`,"remoteControl.addWeComScan":`扫码接入`,"remoteControl.addWeComManual":`手动填写 Bot ID / Secret`,"remoteControl.scanWecomQr":`请用企业微信扫描二维码`,"remoteControl.fetchingQr":`正在获取二维码...`,"remoteControl.scanQr":`请用微信扫描二维码`,"remoteControl.streamMode":`流式回复`,"remoteControl.replyMode":`非流式回复`,"remoteControl.enableStreaming":`开启流式`,"remoteControl.disableStreaming":`关闭流式`,"remoteControl.cardMode":`卡片交互`,"remoteControl.textMode":`纯文本(旧版)`,"remoteControl.wecomGlobalTitle":`企微机器人全局默认`,"remoteControl.wecomGlobalHint":`点击切换默认行为;已单独设置的机器人不受影响`,"remoteControl.wecomGlobalStreamOn":`默认流式回复`,"remoteControl.wecomGlobalStreamOff":`默认非流式回复`,"remoteControl.wecomGlobalCardsOn":`默认卡片确认`,"remoteControl.wecomGlobalCardsOff":`默认文字确认`,"remoteControl.enableCards":`开启卡片`,"remoteControl.disableCards":`关闭卡片`,"sidebar.docs":`文档`,"docs.title":`文档中心`,"docs.search.placeholder":`搜索文档...`,"docs.search.noResults":`未找到相关文档`,"docs.search.resultsCount":`{count} 个结果`,"docs.loading":`加载中...`,"docs.loadError":`文档加载失败`,"docs.notFound":`未找到该文档`,"docs.apiReference":`API 文档`,"docs.toc":`目录`,"docs.retry":`重试`,"docs.backToList":`返回文档列表`,"docs.expandAll":`展开全部`,"docs.collapseAll":`收起全部`,"docs.openStandalone":`独立窗口打开`,"sidebar.stats":`统计`,"stats.title":`统计`,"stats.loading":`正在加载统计数据...`,"stats.refresh":`刷新`,"stats.noData":`暂无统计数据`,"stats.tab.overview":`概览`,"stats.tab.models":`模型`,"stats.tab.tools":`工具`,"stats.sessions":`会话数`,"stats.messages":`消息数`,"stats.activeDays":`活跃天数`,"stats.currentStreak":`当前连续`,"stats.longestStreak":`最长连续`,"stats.peakHour":`高峰时段`,"stats.longestSession":`最长会话`,"stats.favoriteModel":`最常用模型`,"stats.totalTokens":`总 Token`,"stats.timeRange":`统计范围: 最近 {days} 天`,"stats.heatmap.less":`少`,"stats.heatmap.more":`多`,"stats.days":`天`,"stats.tokensPerDay":`每日 Token 趋势`,"stats.allModels":`所有模型`,"stats.input":`输入`,"stats.output":`输出`,"stats.cacheRead":`缓存读取`,"stats.cacheHitRate":`缓存命中率`,"stats.cost":`成本`,"stats.topTools":`工具使用排行`,"stats.session.title":`当前会话`,"stats.session.apiDuration":`API 时长`,"stats.session.wallTime":`总时长`,"stats.session.linesAdded":`新增行`,"stats.session.linesDeleted":`删除行`,"stats.session.tokens":`Token`,"stats.na":`N/A`,"stats.heatmap.messages":`条消息`,"stats.funFact.moreTokens":`你已使用约 {times} 倍于《{book}》的 Token 量`,"stats.funFact.sameTokens":`你使用的 Token 量约等于一本《{book}》`,"stats.funFact.longerSession":`你最长的会话时长约为「{activity}」的 {times} 倍`,"sidebar.traces":`链路`,"traces.title":`链路追踪`,"traces.loading":`加载中...`,"traces.refresh":`刷新`,"traces.clear":`清空`,"traces.clearConfirm":`确定清空所有链路数据?`,"traces.noData":`暂无链路数据,发送一条消息后将自动收集`,"traces.selectWorker":`选择 Worker`,"traces.current":`当前`,"traces.spanCount":`{count} spans`,"traces.duration":`耗时`,"traces.status.ok":`成功`,"traces.status.error":`错误`,"traces.status.running":`运行中`,"traces.status.cancelled":`已取消`,"traces.bottleneck":`瓶颈`,"traces.bottleneckTip":`耗时最长,占总时间 {pct}%`,"traces.spanDetail":`Span 详情`,"traces.spanDetail.type":`类型`,"traces.spanDetail.duration":`耗时`,"traces.spanDetail.model":`模型`,"traces.spanDetail.tokens":`Token`,"traces.spanDetail.input":`输入`,"traces.spanDetail.output":`输出`,"traces.spanDetail.error":`错误`,"traces.spanDetail.cancelReason":`取消原因`,"traces.spanDetail.attributes":`属性`,"traces.legend.agent":`Agent`,"traces.legend.generation":`模型调用`,"traces.legend.function":`工具`,"traces.legend.handoff":`切换`,"traces.legend.guardrail":`防护`,"traces.back":`返回`,"traces.tab.timeline":`时间线`,"traces.tab.tree":`树形`,"traces.tab.flame":`火焰图`,"traces.tab.graph":`依赖图`,"traces.expandAll":`全部展开`,"traces.collapseAll":`全部收起`,"traces.search":`搜索 span...`,"traces.selfTime":`自身耗时`,"traces.spanDetail.overview":`概览`,"traces.spanDetail.io":`输入/输出`,"traces.noSpans":`无 span 数据`,"traces.noSpansFiltered":`当前筛选下无 span。`,"traces.clearFilter":`清除筛选`,"traces.auto":`自动`,"traces.auxiliaryCount":`{count} 个辅助 trace(memory、title 等)`,"traces.noIO":`无输入/输出数据`,"traces.noAttrs":`无属性`,"traces.io.expand":`展开`,"traces.io.collapse":`收起`,"traces.io.messages":`消息`,"traces.io.less":`收起`,"traces.io.moreChars":`+{count} 字符`,"traces.fit":`适应`,"traces.allSessions":`所有会话`,"traces.allInstances":`所有实例`,"traces.llmCalls":`{count} 次 LLM`,"traces.errors":`错误`,"traces.noErrors":`没有失败的 trace`,"traces.errorBanner":`检测到 {count} 个失败的 trace`,"traces.errorBannerCta":`点击仅查看错误 →`,"traces.errorSummaryTitle":`本次共有 {count} 处错误`,"traces.jumpToFirstError":`跳转到首个错误 span`,"traces.copyError":`复制错误`,"traces.onlyErrors":`仅错误`,"traces.filter.all":`全部`,"traces.filter.error":`错误`,"traces.filter.running":`运行中`,"traces.filter.cancelled":`已取消`,"traces.filter.ok":`成功`,"sidebar.metrics":`监控`,"metrics.title":`系统监控`,"metrics.loading":`加载指标数据...`,"metrics.refresh":`刷新`,"metrics.cpu":`CPU`,"metrics.memory":`内存`,"metrics.disk":`磁盘`,"metrics.cores":`核心`,"metrics.workers":`Workers`,"metrics.noWorkers":`暂无运行中的 Worker`,"metrics.current":`当前`,"metrics.uptime":`运行时长`,"metrics.version":`版本`,"sidebar.editor":`编辑器`,"dock.openFile":`打开文件`,"dock.file":`文件`,"dock.pickFromTree":`从工作区目录树中选择文件`,"dock.open":`打开`,"dock.closeTab":`关闭“{name}”`,"dock.closeOthers":`关闭其他标签页`,"dock.closeToRight":`关闭右侧标签页`,"dock.toggle":`工作台`,"dock.tabs":`工作台标签页`,"dock.resize":`调整工作台宽度`,"dock.collapse":`收起工作台`,"dock.fullscreen":`全屏显示工作台`,"dock.exitFullscreen":`退出全屏`,"dock.emptyTitle":`打开工作区工具`,"dock.emptyDescription":`选择资源管理器、文件搜索、源代码管理、文件或终端`,"dock.unseen":`有 {count} 个产出`,"browserPreview.blockedTitle":`此页面无法在内嵌窗口打开`,"browserPreview.blockedDescription":`目标站点的安全策略或登录重定向不支持内嵌访问,请在独立浏览器标签页中继续。`,"browserPreview.openExternal":`在浏览器中打开`,"browserPreview.checking":`正在检查页面是否可访问…`,"browserPreview.loadFailedTitle":`页面暂时无法打开`,"browserPreview.loadFailedDescription":`可能是网络异常,或目标页面已失效。`,"browserPreview.authRequiredTitle":`需要在浏览器中登录`,"browserPreview.authRequiredDescription":`目标页面需要登录凭据,内嵌窗口无法安全复用该站点的登录状态。`,"browserPreview.redirectLoopTitle":`页面重定向次数过多`,"browserPreview.redirectLoopDescription":`目标站点的登录或跳转流程未能完成,请改用独立浏览器。`,"browserPreview.timeoutTitle":`页面加载时间过长`,"browserPreview.timeoutDescription":`目标站点暂未完成响应,可以重新加载或改用独立浏览器。`,"browserPreview.retry":`重新加载`,"browserPreview.tryEmbedded":`仍然尝试内嵌打开`,"browserPreview.failureHint":`如果需要登录,建议先在独立浏览器完成登录后再重试。`,"editor.title":`代码编辑器`,"editor.loading":`加载中...`,"editor.loadingFile":`正在加载文件...`,"editor.loadError":`加载失败`,"editor.retryLoad":`重试加载`,"editor.fileTooLarge":`超过 2 MB,无法在编辑器打开`,"editor.noFile":`选择一个文件开始编辑`,"editor.unsaved":`未保存`,"editor.saving":`正在保存`,"editor.saveFailed":`保存失败`,"editor.overwrite":`覆盖磁盘文件`,"editor.moveFailed":`移动失败`,"editor.save":`保存`,"editor.saveAll":`全部保存`,"editor.close":`关闭`,"editor.closeTabAriaLabel":`关闭标签页 {name}`,"editor.closeOthers":`关闭其他`,"editor.closeAll":`关闭全部`,"editor.newFile":`新建文件`,"editor.newFolder":`新建文件夹`,"editor.rename":`重命名`,"editor.delete":`删除`,"editor.deleteConfirmTitle":`确认删除`,"editor.deleteConfirmMessage":`确定要删除选中的 {count} 个项目吗?此操作无法撤销。`,"editor.refresh":`刷新`,"editor.backToWorkDir":`回到工作目录`,"editor.emptyFolder":`空文件夹`,"editor.explorer":`资源管理器`,"editor.fileTreeAriaLabel":`工作区文件树`,"editor.symbolicLink":`符号链接`,"editor.toggleSidebar":`切换侧边栏`,"editor.collapseAll":`全部折叠`,"editor.showHiddenFiles":`显示隐藏文件`,"editor.hideHiddenFiles":`隐藏隐藏文件`,"editor.openFolder":`打开目录`,"editor.openFolderPlaceholder":`输入目录路径...`,"editor.parentFolder":`上级目录`,"editor.pin":`固定`,"editor.unpin":`取消固定`,"editor.copyPath":`复制路径`,"editor.copyRelativePath":`复制相对路径`,"editor.addToChat":`添加到对话`,"editor.cut":`剪切`,"editor.copy":`复制`,"editor.paste":`粘贴`,"editor.open":`打开`,"editor.copyName":`复制名称`,"editor.download":`下载`,"editor.downloadFailed":`下载失败`,"editor.openInTerminal":`在终端中打开`,"editor.uploadComplete":`已上传 {count} 个文件`,"editor.uploadFailed":`上传失败`,"editor.uploadStatus":`上传 {percent}%`,"editor.expandAll":`全部展开`,"editor.cursorPosition":`第 {line} 行,第 {col} 列`,"editor.view.image":`图片`,"editor.view.video":`视频`,"editor.view.svg":`SVG`,"editor.view.markdown":`Markdown 预览`,"editor.view.html":`HTML 预览`,"editor.view.pdf":`PDF`,"editor.view.binary":`二进制`,"editor.revealInExplorer":`在文件树中定位`,"editor.closeToRight":`关闭右侧`,"editor.closeSaved":`关闭已保存`,"editor.closeSaveFailedTitle":`无法关闭:{count} 个标签页保存失败`,"editor.closeSaveFailedMessage":`{count} 个标签页保存失败。是否放弃更改并关闭?`,"editor.discardAndClose":`放弃并关闭`,"editor.quickOpen":`快速打开文件`,"editor.focusExplorer":`聚焦资源管理器`,"editor.recentFiles":`最近文件`,"editor.quickOpenPlaceholder":`输入文件名以搜索...`,"editor.quickOpenEmpty":`没有匹配的文件`,"editor.quickOpenLoading":`正在加载文件列表...`,"editor.openEditors":`已打开的编辑器`,"editor.scrollTabsLeft":`向左滚动标签页`,"editor.scrollTabsRight":`向右滚动标签页`,"editor.selected":`已选`,"editor.lines":`行`,"editor.preview":`切换到预览`,"editor.source":`切换到源码`,"editor.openInNewWindow":`在新窗口中打开`,"editor.mobileBack":`返回文件树`,"ide.explorer":`资源管理器`,"ide.search":`搜索`,"ide.sourceControl":`源代码管理`,"ide.terminal":`终端`,"ide.terminals":`终端标签页`,"ide.allTerminals":`全部终端`,"ide.allTerminalsAriaLabel":`查看全部 {count} 个终端`,"ide.terminalOrdinal":`终端 {index}`,"ide.newTerminal":`新建终端`,"ide.toggleSidebar":`切换侧栏`,"ide.toggleTerminal":`切换终端`,"ide.resizeSidebar":`调整侧栏宽度`,"ide.resizeSidePanel":`调整侧边面板宽度`,"ide.resizeBottomPanel":`调整底部面板高度`,"ide.resizeSplit":`调整分屏比例`,"ide.hidePanel":`隐藏面板`,"ide.maximizePanel":`最大化面板`,"ide.restorePanel":`还原面板大小`,"ide.listView":`列表视图`,"ide.treeView":`树视图`,"ide.refresh":`刷新`,"ide.scm.title":`源代码管理`,"ide.scm.repositories":`仓库`,"ide.scm.changes":`变更`,"ide.scm.stagedChanges":`已暂存的更改`,"ide.scm.untracked":`未跟踪`,"ide.scm.noChanges":`没有更改`,"ide.scm.notGitRepo":`不是 Git 仓库`,"ide.scm.commitPlaceholder":`消息 (⌘Enter 提交)`,"ide.scm.commit":`提交`,"ide.scm.push":`推送`,"ide.scm.pull":`拉取`,"ide.scm.stage":`暂存`,"ide.scm.unstage":`取消暂存`,"ide.scm.stageAll":`全部暂存`,"ide.scm.unstageAll":`全部取消暂存`,"ide.scm.discard":`放弃更改`,"ide.scm.discardAll":`全部放弃`,"ide.scm.copyPath":`复制路径`,"ide.scm.openFile":`打开文件`,"ide.scm.binaryRevisionPreviewUnavailable":`暂存或已删除的二进制版本暂不支持预览`,"ide.scm.createBranch":`创建新分支...`,"ide.scm.newBranchPlaceholder":`新分支名称...`,"ide.scm.branchSearchPlaceholder":`搜索分支或标签...`,"ide.scm.switchBranch":`切换分支`,"ide.scm.localBranches":`本地分支`,"ide.scm.remoteBranches":`远程分支`,"ide.scm.noBranchMatch":`没有匹配的分支`,"ide.scm.noBranches":`没有分支`,"ide.scm.noBranch":`无分支`,"ide.scm.createBranchNamed":`创建分支 “{name}”`,"ide.scm.loadingBranches":`正在加载分支…`,"ide.scm.graph":`提交记录`,"ide.scm.closeDiff":`关闭差异`,"ide.scm.loadingDiff":`加载差异中...`,"ide.scm.diff":`差异`,"ide.scm.feedback.success":`操作完成`,"ide.scm.feedback.failed":`无法完成操作`,"ide.scm.feedback.switched":`已切换到分支 “{name}”。`,"ide.scm.feedback.created":`已创建分支 “{name}”。`,"ide.scm.feedback.pushed":`已成功推送更改。`,"ide.scm.feedback.pulled":`已成功拉取更改。`,"ide.scm.feedback.completed":`Git 操作已完成。`,"ide.scm.feedback.details":`查看技术详情`,"ide.scm.feedback.retry":`重试`,"ide.scm.error.busy":`仓库正被另一个 Git 操作占用。请等待操作完成;如果问题持续,请确认没有 Git 进程仍在运行后再重试。`,"ide.scm.error.localChanges":`当前未提交的更改会被覆盖。请先保存、暂存或放弃这些更改,再切换分支。`,"ide.scm.error.untrackedFiles":`未跟踪的文件会被覆盖。请先移动、提交或删除这些文件,再切换分支。`,"ide.scm.error.conflicts":`仓库中还有未解决的冲突。请先解决冲突,再切换分支。`,"ide.scm.error.branchNotFound":`找不到该分支。请刷新分支列表后重试。`,"ide.scm.error.switchFailed":`切换分支失败。请检查仓库状态后重试。`,"ide.scm.error.operationFailed":`Git 操作失败,请稍后重试。`,"ide.search.title":`搜索`,"ide.search.placeholder":`搜索`,"ide.search.searching":`搜索中...`,"ide.search.noResults":`未找到结果`,"ide.search.results":`在 {files} 个文件中找到 {count} 个结果`,"ide.search.matchCase":`区分大小写`,"ide.search.wholeWord":`全字匹配`,"ide.search.regex":`使用正则表达式`,"ide.search.filesToInclude":`要包含的文件`,"ide.search.includePlaceholder":`例如 *.ts, src/**/include`,"ide.search.filesToExclude":`要排除的文件`,"ide.search.excludePlaceholder":`例如 node_modules, *.min.js`,"ide.search.useExcludeSettings":`使用排除设置和忽略文件`,"ide.search.toggleFilters":`文件筛选器`,"ide.search.refresh":`重新搜索`,"ide.search.clear":`清除搜索`,"ide.search.cancel":`停止搜索`,"ide.search.limitReached":`仅显示前 {count} 个结果`,"ide.search.partialTimedOut":`搜索超时,显示已找到的部分结果`,"ide.search.partialError":`搜索未完整完成,显示已找到的部分结果`,"ide.search.resultsLabel":`搜索结果`,"ide.search.failed":`搜索失败`,"ide.search.timedOut":`搜索超时`,"sidebar.workers":`实例`,"workers.title":`Agent 实例管理`,"workers.refresh":`刷新`,"workers.active":`活跃 Workers`,"workers.empty":`没有活跃的 worker 进程`,"workers.daemon":`Daemon 服务`,"workers.daemon.running":`运行中`,"workers.daemon.stopped":`已停止`,"workers.daemon.start":`启动`,"workers.daemon.starting":`启动中...`,"workers.daemon.stop":`停止`,"workers.daemon.restart":`重启`,"workers.action.logs":`查看日志`,"workers.action.open":`打开`,"workers.action.kill":`终止`,"workers.action.kill.confirm":`确定要终止这个 worker 进程吗?`,"sidebar.logs":`日志`,"logs.title":`日志查看器`,"logs.selectWorker":`选择 Worker`,"logs.current":`当前`,"logs.search":`搜索日志...`,"logs.autoRefresh":`自动刷新`,"logs.refresh":`刷新`,"logs.empty":`暂无日志内容`,"command.autocompact.description":`设置自动压缩的上下文窗口大小`,"command.background.description":`将当前对话移至后台会话并打开智能体列表`,"command.bg.description":`将当前对话移至后台(/background 的别名)`,"command.branch.description":`从当前位置创建当前对话的分支`,"command.btw.description":`打开旁路会话,不打断主要 Agent 工作`,"command.code-review.description":`审查当前代码变更的正确性和质量,可选择直接修复问题`,"command.copy.description":`复制最近一条回复`,"command.debug.description":`启用调试日志并诊断会话问题`,"command.deep-research.description":`对问题进行多角度网络研究并生成带引用的报告`,"command.effort.description":`设置模型的思考强度`,"command.clear.description":`开始新的对话(之前的对话仍可通过 /resume 访问)`,"command.context.description":`计算并显示上下文 Token 分布`,"command.cost.description":`显示当前会话的总费用和持续时间`,"command.doctor.description":`诊断和验证 CodeBuddy 的安装和设置`,"command.feedback.description":`打开反馈页面以报告问题或提出建议`,"command.fork.description":`从当前位置创建当前对话的分支(/branch 的别名)`,"command.fork-bg.description":`将当前对话复制到新的后台会话,并继续当前工作`,"command.gateway.description":`管理远程控制网关。子命令: "status" 查看状态, "stop" 停止网关, "token" 重新生成访问令牌, "tunnel" 启动隧道`,"command.goal.title":`Goal`,"command.goal.description":`设置要持续追求的目标`,"command.remote-control.description":`管理远程控制长连接客户端(start, stop, status, list)`,"command.login.description":`切换腾讯云 CodeBuddy 账号`,"command.model:lite.description":`设置轻量子任务使用的快速低成本模型`,"command.model:reasoning.description":`设置复杂分析使用的增强推理模型`,"command.model:text-to-video.description":`设置或查看文生视频模型`,"command.model:image-to-video.description":`设置或查看图生视频模型`,"command.logout.description":`退出 CodeBuddy Code 账号`,"command.plan.description":`预览当前计划文件内容`,"command.pr-comments.description":`获取 GitHub Pull Request 的评论`,"command.release-notes.description":`查看更新日志`,"command.review.description":`审查 Pull Request`,"command.skills.description":`列出可用的技能`,"command.simplify.description":`在不改变行为的前提下简化已变更代码`,"command.todos.description":`显示当前会话的任务清单`,"command.verify.description":`运行应用和测试,验证代码改动是否符合预期`,"command.workflows.description":`列出正在运行和已保存的动态工作流`,"command.reload-plugins.description":`重新加载所有插件、技能、代理、钩子和 MCP/LSP 服务器(无需重启)`,"command.plugin-validate.description":`验证插件目录结构和清单文件`,"command.init.description":`正在分析你的代码库…`,"command.compact.description":`清除对话历史但保留摘要在上下文中。可选: /compact [摘要指令]`,"command.upgrade.description":`在浏览器中打开升级页面`,"command.statusline.description":`设置 CodeBuddy Code 的状态栏 UI`,"command.security-review.description":`对当前分支的待提交变更进行安全审查`,"command.insights.description":`生成 AI 驱动的 CodeBuddy Code 使用模式和活动洞察`,"command.loop.description":`按固定间隔运行提示或斜杠命令(例如 /loop 5m /foo,默认 10m)`,"command.task-manager.description":`团队任务管理 - 智能任务录入、分配、追踪和分析`,"sidebar.changes":`变更`,"fileChanges.title":`变更`,"fileChanges.changesSection":`文件变更`,"fileChanges.empty":`暂无文件变更`,"fileChanges.showChanges":`显示文件变更`,"fileChanges.hideChanges":`隐藏文件变更`,"fileChanges.revertAll":`撤回全部`,"fileChanges.revertCode":`回退代码`,"fileChanges.revertChat":`回退对话`,"fileChanges.revertCodeAndChat":`回退全部`,"fileChanges.checkpoints":`回退点`,"fileChanges.noCheckpoints":`暂无回退点`,"rewind.action":`回退到这里`,"rewind.title":`回退到这条消息`,"rewind.conversationForked":`这条消息之后的对话内容会被丢弃,可以改完再发。`,"rewind.codeRestored":`将同时恢复 {files} 的代码改动(+{additions} −{deletions})。`,"rewind.noCodeChanges":`这一轮没有代码改动,仅回退对话。`,"rewind.warning":`回退不会影响手动编辑或通过 bash 修改的文件。`,"rewind.failed":`回退失败或回退后刷新失败,请重试(必要时刷新页面)。`,"filePreview.binaryNotSupported":`该文件无法在编辑器中预览`,"filePreview.download":`下载文件`,"error.viewCrashed":`页面加载出错`,"error.appCrashed":`应用遇到了问题`,"error.newChatFailed":`创建新对话失败,请重试`,"error.jobCreateFailed":`创建智能体失败,请重试`,"error.switchSessionFailed":`切换会话失败,请重试`,"error.sessionOccupied":`该会话正被其他终端或进程占用,无法同时切换`,"error.sessionOccupiedPage":`此会话正在其他窗口或设备使用中。`,"error.acpConnectStuck":`连接时间过长`,"error.acpConnectChecking":`正在确认是超时还是已被其他窗口占用…`,"error.acpDisconnected":`和智能体的连接已断开,刚才的消息可能没发出去。`,"error.acpNoResponse":`发送后没有收到回复,连接可能已中断。`,"error.sessionUnavailable":`该会话当前不可用,请稍后重试`,"commandPalette.placeholder":`输入命令...`,"commandPalette.commands":`命令`,"commandPalette.views":`视图`,"commandPalette.actions":`操作`,"commandPalette.noResults":`没有匹配的命令`,"commandPalette.newChat":`新建对话`,"commandPalette.openSessionSwitcher":`打开对话面板`,"commandPalette.toggleTheme":`切换主题`,"commandPalette.toggleLocale":`切换语言`,"commandPalette.tip":`打开命令面板`,"app.confirm":`确定`,"app.cancel":`取消`,"tool.toolSingular":`个工具已执行`,"tool.toolPlural":`个工具已执行`,"tool.mcpAppLoadHint":`点击加载交互式界面`,"keybindings.title":`快捷键`,"keybindings.search.placeholder":`搜索快捷键... (如 submit, ctrl+enter)`,"keybindings.source.default":`默认`,"keybindings.source.user":`自定义`,"keybindings.record.title":`录制快捷键`,"keybindings.record.hint":`请按下快捷键组合...`,"keybindings.record.conflict":`冲突`,"keybindings.action.edit":`编辑`,"keybindings.action.reset":`重置`,"keybindings.action.unbind":`解绑`,"keybindings.reset.all":`重置全部`,"keybindings.noResults":`没有匹配的快捷键`,"keybindings.empty":`暂无快捷键`,"keybindings.loading":`加载中...`,"keybindings.ctx.Global":`全局`,"keybindings.ctx.Chat":`聊天输入`,"keybindings.ctx.InputBox":`文本输入`,"keybindings.ctx.Terminal":`终端`,"keybindings.ctx.Autocomplete":`自动补全`,"keybindings.ctx.Confirmation":`确认对话框`,"keybindings.ctx.HistorySearch":`历史搜索`,"keybindings.ctx.Task":`任务运行中`,"keybindings.ctx.Settings":`设置`,"keybindings.ctx.CommandPalette":`命令面板`,"keybindings.ctx.Select":`选择列表`,"keybindings.ctx.PermissionDialog":`权限对话框`,"keybindings.ctx.Help":`帮助`,"keybindings.ctx.Plugin":`插件`,"keybindings.ctx.DiffDialog":`Diff 对话框`,"keybindings.ctx.MessageSelector":`消息选择器`,"keybindings.ctxDesc.Global":`在任何位置都生效`,"keybindings.ctxDesc.Chat":`聊天输入框获得焦点时`,"keybindings.ctxDesc.InputBox":`文本输入框处于活跃状态时`,"keybindings.ctxDesc.Terminal":`终端视图处于活跃状态时`,"keybindings.ctxDesc.Autocomplete":`自动补全菜单显示时`,"keybindings.ctxDesc.Confirmation":`确认/权限对话框显示时`,"keybindings.ctxDesc.HistorySearch":`搜索命令历史时 (ctrl+r)`,"keybindings.ctxDesc.Task":`任务/代理在前台运行时`,"keybindings.ctxDesc.Settings":`设置面板打开时`,"keybindings.ctxDesc.CommandPalette":`命令面板打开时`,"keybindings.ctxDesc.Select":`选择/列表组件获得焦点时`,"keybindings.ctxDesc.PermissionDialog":`工具权限对话框显示时`,"keybindings.ctxDesc.Help":`帮助页面打开时`,"keybindings.ctxDesc.Plugin":`插件对话框打开时`,"keybindings.ctxDesc.DiffDialog":`Diff 对话框打开时`,"keybindings.ctxDesc.MessageSelector":`消息选择器 (rewind) 打开时`,"keybindings.act.app:interrupt":`中断`,"keybindings.act.app:exit":`退出`,"keybindings.act.app:redraw":`刷新屏幕`,"keybindings.act.app:toggleTodos":`切换待办事项`,"keybindings.act.app:toggleTranscript":`切换转录`,"keybindings.act.app:toggleSidebar":`切换侧边栏`,"keybindings.act.app:toggleTerminal":`切换终端`,"keybindings.act.app:commandPalette":`命令面板`,"keybindings.act.app:newChat":`新对话`,"keybindings.act.app:settings":`设置`,"keybindings.act.app:focusInput":`聚焦输入框`,"keybindings.act.app:keybindings":`快捷键设置`,"keybindings.act.history:search":`搜索历史`,"keybindings.act.history:previous":`上一条历史`,"keybindings.act.history:next":`下一条历史`,"keybindings.act.history:open":`最近会话`,"keybindings.act.sessions:switcher":`会话切换面板`,"keybindings.act.chat:cancel":`取消`,"keybindings.act.chat:submit":`发送`,"keybindings.act.chat:newline":`换行`,"keybindings.act.chat:killAgents":`终止代理`,"keybindings.act.chat:cycleMode":`切换模式`,"keybindings.act.chat:modelPicker":`选择模型`,"keybindings.act.chat:thinkingToggle":`切换思考`,"keybindings.act.chat:undo":`撤销`,"keybindings.act.chat:externalEditor":`外部编辑器`,"keybindings.act.chat:stash":`暂存`,"keybindings.act.chat:imagePaste":`粘贴图片`,"keybindings.act.autocomplete:accept":`接受补全`,"keybindings.act.autocomplete:dismiss":`关闭补全`,"keybindings.act.autocomplete:previous":`上一项`,"keybindings.act.autocomplete:next":`下一项`,"keybindings.act.confirm:yes":`确认`,"keybindings.act.confirm:no":`取消`,"keybindings.act.confirm:previous":`上一项`,"keybindings.act.confirm:next":`下一项`,"keybindings.act.confirm:toggle":`切换选中`,"keybindings.act.confirm:toggleExplanation":`切换说明`,"keybindings.act.task:background":`后台运行`,"keybindings.act.historySearch:next":`下一条`,"keybindings.act.historySearch:accept":`接受`,"keybindings.act.historySearch:cancel":`取消`,"keybindings.act.historySearch:execute":`执行`,"keybindings.act.settings:close":`关闭设置`,"keybindings.act.settings:search":`搜索设置`,"keybindings.act.select:previous":`上一项`,"keybindings.act.select:next":`下一项`,"keybindings.act.select:accept":`选择`,"keybindings.act.select:cancel":`取消`,"keybindings.act.commandPalette:close":`关闭面板`,"keybindings.act.commandPalette:execute":`执行命令`,"keybindings.act.commandPalette:previous":`上一项`,"keybindings.act.commandPalette:next":`下一项`,"keybindings.act.permission:toggleDebug":`切换调试`,"keybindings.act.diff:dismiss":`关闭 Diff`,"keybindings.act.diff:previousFile":`上一个文件`,"keybindings.act.diff:nextFile":`下一个文件`,"keybindings.act.diff:viewDetails":`查看详情`,"keybindings.act.plugin:toggle":`切换插件`,"keybindings.act.plugin:install":`安装插件`,"keybindings.act.help:dismiss":`关闭帮助`,"keybindings.act.transcript:exit":`退出转录`,"keybindings.act.transcript:toggleShowAll":`显示全部`,"keybindings.act.messageSelector:up":`向上`,"keybindings.act.messageSelector:down":`向下`,"keybindings.act.messageSelector:top":`到顶部`,"keybindings.act.messageSelector:bottom":`到底部`,"keybindings.act.messageSelector:select":`选择`,"common.close":`关闭`,"changes.revert":`还原`,"changes.revertDirectory":`还原目录`,"message.clickToEnlarge":`点击放大`,"channel.botIdPlaceholder":`输入 Bot ID`,"channel.secretPlaceholder":`输入 Secret`,"filePreview.zoomOut":`缩小`,"filePreview.zoomIn":`放大`,"filePreview.fitToWindow":`适应窗口`,"filePreview.actualSize":`实际大小 (1:1)`,"filePreview.pdfPreview":`PDF 预览`,"filePreview.videoNotSupported":`当前浏览器不支持播放此视频格式`,"goal.status.usage":`用法:/goal <条件>
|
|
9
9
|
示例:/goal 所有测试通过`,"goal.status.tooLong":`目标条件长度上限 {max} 字符(当前 {actual})`,"goal.status.hooksDisabled":`/goal 在 Hooks 被禁用时不可用(settings 中关闭了 disableAllHooks 或 allowManagedHooksOnly)。`,"goal.status.set":`已设置目标:{condition}`,"goal.status.setReplaced":`替换目标:{prev} → {condition}`,"goal.status.cleared":`已清除目标:{prev}`,"goal.status.noGoal":`当前无目标`,"goal.status.active":`当前目标:{condition}`,"goal.status.paused":`Goal paused:{condition}`,"goal.status.resumed":`Goal active:{condition}`,"goal.progress.title":`目标尚未达成… 继续`,"goal.progress.expand":`点击展开`,"goal.progress.condition":`目标`,"goal.progress.reason":`原因`,"goal.recap.active":`Goal active`,"goal.recap.paused":`Goal paused`,"goal.recap.achieved":`目标已达成`,"goal.recap.impossible":`目标无法达成`,"goal.recap.empty.title":`暂未设置目标`,"goal.recap.empty.hint":`使用 /goal <条件> 设置一个会话级停止条件。`,"goal.recap.empty.example":`示例:/goal 所有测试通过`,"goal.recap.footer.setAnother":`/goal <条件>`,"goal.recap.footer.toSetAnother":` 设置新目标 · `,"goal.recap.footer.escDismiss":`关闭`,"goal.recap.stats.turn":`轮`,"goal.recap.stats.turns":`轮`,"goal.recap.stats.token":`token`,"goal.recap.stats.tokens":`tokens`,"goal.bar.active":`/goal active {condition} · {elapsed}`,"goal.bar.paused":`/goal paused {condition} · {elapsed}`,"goal.bar.edit":`编辑目标`,"goal.bar.pause":`暂停目标`,"goal.bar.resume":`继续目标`,"goal.bar.clear":`清除目标`,"goal.resume.prompt":`继续当前目标:{condition}`,"goal.edit.title":`编辑目标`,"goal.edit.save":`保存`,"goal.edit.cancel":`取消`,"goal.edit.placeholder":`描述你的目标,定义可衡量的成果,以获得最佳效果`,"mcp.startup.booting":`正在启动 MCP 服务:{name}`,"mcp.startup.starting":`正在启动 MCP 服务 ({completed}/{total}):{names}`,"mcp.startup.elapsed":`{seconds}s`,"mcp.startup.ready":`MCP 服务已就绪({total})`,"mcp.startup.failed":`MCP 连接失败:{names}`,"mcp.startup.timedOut":`MCP 连接超时:{names}`},en:{"app.connecting":`Connecting to CodeBuddy Code...`,"agents.action.delete":`Delete`,"agents.action.delete.confirm":`Are you sure you want to delete this agent?`,"agents.action.delete.failed":`Could not delete this agent`,"agents.action.delete.worktreeKept":`Agent deleted; worktree kept at {path}`,"agents.action.more":`More actions`,"agents.action.new":`New agent`,"agents.action.cancelNew":`Cancel`,"agents.action.newConversation":`New chat in this agent`,"agents.action.rename":`Rename`,"agents.action.restart":`Restart`,"agents.action.takeover":`Take over here`,"agents.action.stop":`Stop`,"agents.action.pin":`Pin to top`,"agents.action.unpin":`Unpin`,"agents.action.ungroup":`Remove from project`,"agents.action.copySessionId":`Copy session ID`,"agents.action.copyCwd":`Copy working directory`,"agents.action.openInNewWindow":`Open in new window`,"agents.action.copyOk":`Copied to clipboard`,"agents.action.copyFailed":`Copy failed`,"agents.empty":`No active agents`,"agents.empty.hint":`Click + at the top of the panel to create an agent`,"agents.group.attention":`Waiting on you`,"agents.group.needsInput":`Needs Input`,"agents.group.working":`Working`,"agents.group.showMore":`Show {count} more`,"agents.group.showLess":`Show less`,"agents.group.pinned":`Pinned`,"agents.panel.title":`Agent instances`,"agents.panel.resize":`Resize agents panel`,"agents.project.rename":`Rename project`,"agents.search.clear":`Clear search`,"agents.search.close":`Close search`,"agents.search.noMatch":`No matching agents`,"agents.search.placeholder":`Search agents`,"agents.error.title":`Unable to complete the operation`,"agents.error.network":`Cannot reach the service. Check your connection and reload.`,"agents.error.authentication":`Your session has expired. Sign in again and retry.`,"agents.error.server":`The service is temporarily unavailable. Reload in a moment.`,"agents.error.unknown":`Failed to load agents. Please reload.`,"agents.error.retry":`Reload`,"workspace.mode.switch":`Switch workspace mode`,"workspace.mode.chat.title":`CodeBuddy Solo`,"workspace.mode.chat.desc":`Everyday chat, code and terminal`,"workspace.mode.buddys.title":`CodeBuddy Group`,"workspace.mode.buddys.desc":`Work together with your AI colleagues`,"workspace.mode.enabledToast":`CodeBuddy Group is on`,"workspace.mode.disabledToast":`CodeBuddy Group is off`,"workspace.mode.lockedToast":`CodeBuddy Group is disabled by an environment variable`,"workspace.mode.lockedOnToast":`CodeBuddy Group is enabled by an environment variable and cannot be turned off here`,"settings.notifications":`Notifications`,"settings.notify.title":`Notify me when done`,"settings.notify.desc":`While the page is in the background, send a system notification when a chat or a colleague finishes — sent by the local CodeBuddy: no browser permission, no port dependency`,"settings.notify.unsupported":`This platform cannot send system notifications (falls back to browser notifications if that site is already allowed)`,"settings.notify.test":`Send a test notification`,"settings.notify.testTitle":`CodeBuddy Code`,"settings.notify.testBody":`If you can see this, system notifications work`,"settings.notify.testFailed":`Not sent: this platform does not support system notifications`,"settings.notify.testThrottled":`Too fast — try again in a moment`,"settings.notify.browserHint.granted":`Cloud environment: system notifications unavailable — using browser notifications (permission granted)`,"settings.notify.browserHint.default":`Cloud environment: system notifications unavailable — browser notifications will be used (you will be asked for permission when enabling)`,"settings.notify.browserHint.denied":`Cloud environment: system notifications unavailable and browser notifications are blocked — allow them in the address-bar site settings`,"settings.notify.testBrowserSent":`System notifications unavailable, but a browser notification was sent (this path works)`,"notify.status.done":`Done`,"notify.status.failed":`Failed`,"notify.status.stopped":`Stopped`,"notify.status.needsInput":`Waiting for your reply`,"notify.chatFallbackName":`Current chat`,"notify.agentFallbackName":`AI colleague`,"agentHome.defaultName":`New agent`,"agentHome.greeting":`I'm here. What's the first thing you want me on?`,"agentHome.hint":`Say the first thing and I will get started`,"agentHome.hide":`Hide from sidebar`,"agentHome.delete.confirm":`This deletes the agent and all of its runs. Are you sure?`,"agentHome.opFailed":`Operation failed, please retry`,"agentHome.sendUnreachable":`Send failed: cannot reach the backend (it may have just restarted). Your text is kept — try again.`,"agentHome.more":`More`,"agentHome.hidden":`Hidden`,"agentHome.unhide":`Show in sidebar`,"agentHome.hiddenPreview":`Hidden`,"agentHome.notStarted":`Not started yet`,"agentHome.mainIdle":`Ready when you are`,"agentHome.room.invite":`Add to a room`,"agentHome.room.joinExisting":`Join an existing room`,"agentHome.room.createNew":`Select agents to create a room`,"agentHome.room.createConfirm":`Create room`,"agentHome.room.needMore":`You need another agent first`,"agentHome.room.notStarted":`Agents in this room`,"agentHome.room.remove":`Remove from room`,"agentHome.room.openMember":`Open conversation`,"agentHome.room.delete":`Delete room`,"agentHome.room.deleteConfirm":`This only dissolves the grouping. Each agent keeps its conversation. Continue?`,"agentHome.room.dissolveTitle":`The room will dissolve`,"agentHome.room.dissolveMessage":`Removing this agent leaves only one agent, so the room will dissolve. All agents remain available.`,"agentHome.room.dissolveConfirm":`Remove and dissolve`,"agentHome.room.full":`A room holds at most 6 agents`,"agentHome.room.already":`Already in the room`,"agentHome.room.teamingBadge":`Teaming`,"agentHome.room.teamingLocked":`Teaming — disband the team first`,"agentHome.room.minimalBlocked":`Minimal mode cannot join rooms or channels`,"agentHome.room.mergeHint":`Make a room`,"agentHome.room.joinHint":`Join room`,"agentHome.room.dropHere":`Drop an agent here to make a room`,"agentHome.recipient.label":`To:`,"agentHome.recipient.placeholder":`Search agents or rooms`,"agentHome.recipient.more":`Add another agent…`,"agentHome.recipient.remove":`Remove recipient`,"agentHome.recipient.createNew":`Create a new agent`,"agentHome.recipient.runHint":`Run · becomes an agent when added to a room`,"agentHome.recipient.sectionPeople":`Agents`,"agentHome.recipient.sectionRuns":`Runs`,"agentHome.recipient.sectionRooms":`Rooms`,"agentHome.recipient.open":`Open chat`,"agentHome.recipient.openRoom":`Open room`,"agentHome.recipient.tabAdd":`Tab to add`,"agentHome.recipient.enterOpen":`Enter to open`,"agentHome.recipient.soloHint":`Enter opens this agent's chat; add another agent to make a room`,"agentHome.recipient.roomHint":`Enter opens an agent in the room. New agents join the existing room.`,"agentHome.channel.new":`New channel`,"agentHome.tasks.title":`Task board`,"agentHome.tasks.empty":`No tasks yet. Work dispatched by the lead shows up here.`,"agentHome.tasks.loading":`Loading the board…`,"agentHome.tasks.loadFailed":`Could not load the board: {detail}`,"agentHome.tasks.stalled":`Stalled`,"agentHome.tasks.status.open":`Unclaimed`,"agentHome.tasks.status.claimed":`In progress`,"agentHome.tasks.status.done":`Done`,"agentHome.tasks.complete":`Mark done`,"agentHome.tasks.addPlaceholder":`Task title`,"agentHome.tasks.submit":`Add`,"agentHome.tasks.hide":`Hide task board`,"agentHome.tasks.progress":`{done} of {total} done`,"agentHome.tasks.unassigned":`Unassigned`,"agentHome.tasks.wakes":`Nudged {count}×`,"agentHome.tasks.subject":`Task title`,"agentHome.tasks.detail":`Details`,"agentHome.tasks.detailPlaceholder":`Details (optional)`,"agentHome.tasks.assignee":`Assignee`,"agentHome.tasks.edit":`Edit task`,"agentHome.tasks.save":`Save`,"agentHome.tasks.cancel":`Cancel`,"agentHome.tasks.delete":`Delete task`,"agentHome.tasks.deleteConfirm":`Delete this task? The channel timeline keeps its history, including who deleted it.`,"agentHome.tasks.filterAll":`All members`,"agentHome.tasks.filterLabel":`Filter`,"agentHome.tasks.filterEmpty":`No tasks for this teammate`,"agentHome.tasks.refs":`References`,"agentHome.tasks.refPlaceholder":`Link / file path / commit SHA`,"agentHome.tasks.refAdd":`Add`,"agentHome.tasks.refRemove":`Remove reference`,"agentHome.tasks.refCopy":`Click to copy`,"agentHome.tasks.refKind.file":`file`,"agentHome.tasks.refKind.issue":`issue`,"agentHome.tasks.refKind.pr":`PR`,"agentHome.tasks.refKind.commit":`commit`,"agentHome.tasks.refKind.url":`link`,"agentHome.taskEvent.user":`The user`,"agentHome.taskEvent.listSeparator":`, `,"agentHome.taskEvent.task":`{taskId} “{subject}”`,"agentHome.taskEvent.created":`{who} created {task}`,"agentHome.taskEvent.assigned":`, assigned to {name}`,"agentHome.taskEvent.claimed":`{who} claimed {task}`,"agentHome.taskEvent.completed":`{who} completed {task}`,"agentHome.taskEvent.released":`{who} released {task} back to unclaimed`,"agentHome.taskEvent.dispatched":`{who} dispatched {count} task(s): {list}`,"agentHome.taskEvent.nudged":`{who} nudged {task}`,"agentHome.taskEvent.ownerNote":` (owner: {name})`,"agentHome.taskEvent.escalated":`{who} released {task}’s claim`,"agentHome.taskEvent.wasOwnerNote":` (was: {name})`,"agentHome.taskEvent.stalled":`{task} reached its wake budget and is stalled; a lead or the user needs to step in`,"agentHome.taskEvent.updated":`{who} updated {task} ({fields})`,"agentHome.taskEvent.assigneeNote":` (assignee: {name})`,"agentHome.taskEvent.deleted":`{who} deleted {task}`,"agentHome.taskEvent.batchDone":`All {count} task(s) in this batch are done: {list}.`,"agentHome.taskEvent.field.subject":`title`,"agentHome.taskEvent.field.detail":`details`,"agentHome.taskEvent.field.assignee":`assignee`,"agentHome.taskEvent.field.refs":`references`,"agentHome.taskEvent.field.owner":`owner`,"agentHome.taskEvent.updatedGeneric":`{who} updated {task}`,"agentHome.channel.newAgent":`New agent`,"agentHome.channel.pickHint":`Select 2–6 agents. Cancel saves nothing.`,"agentHome.channel.create":`Create channel`,"agentHome.channel.createAction":`Create`,"agentHome.channel.name":`Name`,"agentHome.channel.namePlaceholder":`e.g. Project Falcon`,"agentHome.channel.addBot":`Add agents`,"agentHome.channel.loadEarlier":`Load earlier messages`,"agentHome.channel.refreshDelayed":`Channel updates are delayed. Retrying; showing previously loaded messages.`,"agentHome.channel.placeholder":`Message {name}`,"agentHome.channel.empty":`Send the first message in this channel`,"agentHome.channel.you":`You`,"agentHome.channel.someone":`a teammate`,"agentHome.channel.attachImage":`Upload image`,"agentHome.channel.attachFile":`Upload file`,"agentHome.channel.uploading":`Uploading {done}/{total}…`,"agentHome.channel.attachmentTooLarge":`{name} is too large ({maxMb}MB per file)`,"agentHome.channel.attachmentTooMany":`At most {max} attachments per message; {name} was not added`,"agentHome.channel.attachmentUploadFailed":`Attachment upload failed: {detail}`,"agentHome.channel.removeAttachment":`Remove attachment`,"agentHome.channel.reply":`Reply`,"agentHome.channel.replyingTo":`Replying to {name}: {text}`,"agentHome.channel.cancelReply":`Cancel reply`,"agentHome.channel.downloadAttachment":`Download`,"agentHome.channel.quoteMissing":`Original message is gone`,"agentHome.channel.widgetSelected":`Selected: {value}`,"agentHome.channel.workingNow":`Working: {names}…`,"agentHome.channel.untitled":`Channel`,"agentHome.channel.delete":`Delete channel`,"agentHome.channel.deleteConfirm":`Deletes this group chat only. Agents remain available.`,"agentHome.channel.oneOnly":`You can have more than one channel.`,"agentHome.channel.needTwo":`A channel needs at least two agents`,"agentHome.channel.pickPlaceholder":`Search agents, select 2–6`,"agentHome.channel.everyone":`All agents`,"agentHome.channel.mentioned":`@ you`,"agentHome.channel.memberCap":`{current}/{max}`,"agentHome.channel.pickHintBar":`Enter creates the channel. This is not a DM room.`,"agentHome.channel.info":`Channel info`,"agentHome.channel.members":`Members`,"agentHome.channel.addMember":`Add members`,"agentHome.channel.removeMember":`Remove from channel`,"agentHome.channel.restartMember":`Restart member (respawn offline process; rebuild if its run is gone)`,"agentHome.channel.restarted":`Member restarted`,"agentHome.channel.restartNotNeeded":`Member is already running`,"agentHome.channel.restartFailed":`Restart failed: {reason}`,"agentHome.channel.addSearch":`Search agents`,"agentHome.channel.noCandidates":`No agents available to add`,"agentHome.channel.defaultBlocked":`CodeBuddy is the user's 1:1 and can't join a room or channel`,"agentHome.team.defaultBlocked":`CodeBuddy is the user's 1:1 and can't join a room or channel`,"agentHome.channel.already":`Already in the channel`,"agentHome.channel.full":`A channel holds at most 6 agents`,"agentHome.channel.overflow":`That would exceed the 6-agent limit. {count} slot(s) left`,"agentHome.channel.remaining":`{count} agent slot(s) left`,"agentHome.channel.addConfirm":`Add`,"agentHome.channel.newAgentName":`New agent name`,"agentHome.channel.joinHint":`Join channel`,"agentHome.channel.leave":`Leave`,"agentHome.channel.back":`Back`,"agentHome.channel.draft":`Draft: {text}`,"agentHome.channel.system.turnEnded.timeout":`Round ended after a timeout — {name} did not respond in time`,"agentHome.channel.system.turnEnded.gone":`Round ended: {name} exited`,"agentHome.channel.system.turnEnded.silent":`Round ended: {name} did not respond after several nudges`,"agentHome.channel.system.turnEnded.exhausted":`Round ended: nobody picked up ({names})`,"agentHome.channel.moveTo":`Move to`,"agentHome.channel.ungrouped":`Ungrouped`,"agentHome.channel.newSection":`New group`,"agentHome.channel.sectionName":`Group name`,"agentHome.channel.renameSection":`Rename group`,"agentHome.channel.deleteSection":`Delete group`,"agentHome.channel.deleteSectionConfirm":`The group goes away. Agents and channels return to Ungrouped.`,"agentHome.channel.markUnread":`Mark as unread`,"agentHome.channel.copyId":`Copy channel id`,"agentHome.channel.plus":`Mention`,"relay.sentTo":`Sent to`,"relay.receivedFrom":`Message from`,"relay.openThread":`View conversation`,"relay.back":`Back to chat`,"relay.empty":`Nothing exchanged yet`,"relay.viewOnly":`This chat is view-only`,"relay.close":`Close chat`,"layout.toggle":`Layout`,"layout.sidebar":`Navigation sidebar`,"layout.dashboard":`Dashboard`,"layout.collapseSidebar":`Collapse sidebar`,"layout.expandSidebar":`Expand sidebar`,"layout.collapseAgents":`Collapse agents`,"layout.expandAgents":`Expand agents`,"layout.agents":`Agent panel`,"agents.title":`Agents`,"agents.instanceFallback":`Agent {id}`,"agents.panel.close":`Close`,"agents.input.placeholder":`Describe what this agent should do…`,"agents.input.hint":`Start a CodeBuddy agent in the selected working directory`,"agents.input.submit":`Create agent`,"agents.input.permission":`Launch permission`,"agents.input.permission.default":`Use default setting`,"agents.input.permission.default.desc":`Do not override the permission mode; use the configured default`,"agents.input.permission.ask":`Always ask`,"agents.input.model":`Model`,"agents.input.model.default":`Default model`,"agents.input.effort":`Thinking effort`,"agents.input.effort.default":`Use model default`,"agents.input.effort.default.desc":`Use the selected model's configured default thinking effort`,"agents.input.directory":`Working directory`,"agents.input.directory.hint":`The agent will run commands and edit files here`,"agents.input.directory.choose":`Choose working directory`,"agents.input.directory.current":`Current workspace`,"agents.input.directory.more":`+{count} more`,"agents.input.directory.loading":`Discovering repositories and worktrees…`,"agents.input.directory.browse":`Choose another directory…`,"agents.input.agent":`Current agent`,"agents.input.agent.menu":`Choose an agent`,"agents.input.agent.default":`Default agent`,"agents.input.agent.default.desc":`Use this project's default agent configuration`,"agents.input.settings":`Agent settings`,"agents.input.modelAndEffort":`Model & thinking`,"agents.input.shellJob":`Shell job`,"agents.input.shellPlaceholder":`Enter a command to run in the background…`,"agents.input.attachmentsNotForShell":`Shell jobs cannot carry attachments. Remove the files or the leading !`,"agents.input.startFrom":`Context`,"agents.input.startFrom.continue":`Inherit current chat`,"agents.input.startFrom.session":`Inherit selected chat`,"agents.input.startFrom.blank":`None`,"agents.input.startFrom.unavailable":`No context is available from the current chat`,"agents.input.worktree":`Worktree`,"agents.input.worktree.on":`Worktree isolation enabled`,"agents.input.worktree.off":`Worktree isolation disabled (Web default)`,"inherit.drawer.title":`Choose context`,"inherit.fromCurrent":`Current chat`,"inherit.fromSession":`Available chats`,"inherit.emptyForDirectory":`No conversations in this directory can be inherited yet`,"agents.worker.standalone":`Standalone process`,"agents.worker.remote":`Remote`,"agents.worker.openTabHint":`Open full instance in a new tab`,"agents.worker.noUrl":`No accessible address, host-side only`,"agents.worker.kind.interactive":`Terminal`,"agents.worker.kind.daemon":`Service`,"agents.worker.kind.daemonWorker":`Worker`,"agents.worker.kind.bg":`Background job`,"agents.state.failed":`Failed`,"agents.state.stopped":`Stopped`,"agents.state.idle":`Idle`,"agents.state.draft":`Not created`,"agents.state.completed":`Completed`,"agents.notice.failed":`Session ended unexpectedly. Click to review and restart.`,"agents.state.recovering":`Recovering…`,"recent.title":`Recent chats`,"sessions.current":`Active`,"sessions.currentTitle":`CodeBuddy`,"sessions.deleteCurrent":`Delete current chat`,"sessions.deleteCurrent.confirm":`This will end the current chat and delete its history. Continue?`,"sessions.foregroundHandoff":`Running in background; still owned by main chat`,"sessions.worker.openTab":`Open in new tab`,"sessions.section":`Instances`,"sessions.togglePanel":`Toggle sessions panel`,"agents.phase.preparing":`Preparing`,"agents.phase.modelRequesting":`Requesting the model…`,"agents.phase.modelStreaming":`Writing a response…`,"agents.phase.modelDone":`Finishing the turn…`,"agents.phase.toolExecuting":`Running a tool…`,"agents.phase.working":`Working…`,"agents.phase.retrying":`Retrying…`,"agents.phase.compacting":`Compacting the conversation…`,"agents.phase.cancelling":`Cancelling…`,"agents.phase.resuming":`Resuming…`,"agents.phase.starting":`Starting…`,"agents.phase.waitingPermission":`Waiting for permission`,"agents.phase.waitingInput":`Waiting for input`,"agents.live.background":`Continuing in its background process`,"agents.live.creating":`Creating the agent; it will open automatically when ready`,"agents.boot.spawning":`Starting the agent…`,"agents.boot.openingPage":`Opening the conversation…`,"agents.boot.connecting":`Connecting the session…`,"agents.boot.restoringWorker":`Restoring the agent…`,"agents.boot.step.spawn":`Start agent`,"agents.boot.step.page":`Open conversation`,"agents.boot.step.session":`Connect session`,"agents.boot.step.restore":`Restore agent`,"agents.boot.waited":`Waiting {seconds}s`,"agents.boot.hint":`You can send once the conversation is ready`,"agents.live.restoring":`Restoring the agent; the complete conversation is already available`,"agents.live.settled":`Agent has finished running`,"agents.live.foregroundHeld":`Owned by its host chat; prompts can still be queued`,"agents.live.occupiedFollow":`This agent is open in another window. Viewing read-only.`,"agents.live.occupiedInbox":`Messages go to the inbox`,"agents.live.occupiedTakeoverHint":`After taking over, the other window or device becomes read-only and any work in progress there may be interrupted`,"agents.live.latest":`Latest agent response`,"agents.live.tool":`Using tool`,"agents.live.result":`Result`,"agents.reply.sent":`Sent to this agent`,"agents.reply.saved":`Saved and will send when the agent resumes`,"agents.reply.failed":`Failed to send to the agent`,"agents.reply.answerPlaceholder":`Answer this agent…`,"agents.reply.useSuggestion":`Use suggested reply`,"agents.reply.tabSuggestion":`Tab uses suggestion · number keys choose an option`,"agents.reply.shellHint":`Start with ! to run a shell command inside this agent`,"agents.reply.shellMode":`Shell`,"agents.reply.sendShell":`Run shell command`,"app.connectFailed":`Connection failed`,"app.retry":`Retry`,"app.pwa.newVersion":`A new Web UI version is available`,"app.pwa.reloadNow":`Reload now`,"app.pwa.reloadLater":`Later`,"app.pwa.reloadedAfterIdle":`Updated to new version`,"chat.empty.title":`CodeBuddy Code`,"chat.empty.subtitle":`How can I help you today?`,"chat.empty.slogan":`Claw Your Ideas . Into Reality`,"chat.empty.tag.slides":`Slide Generation`,"chat.empty.tag.research":`Deep Research`,"chat.empty.tag.docs":`Document Processing`,"chat.empty.tag.data":`Data Analysis`,"chat.thinking":`Thinking`,"chat.waitingPermission":`Waiting for permission`,"chat.waitingUser":`Waiting for user`,"chat.error":`Error`,"chat.sessionEnded":`Session ended`,"chat.stopped":`Stopped`,"chat.messages":`Chat messages`,"chat.scrollToLatest":`Scroll to latest`,"chat.error.refusal":`The agent refused to continue execution. This may be due to content policy restrictions or other limitations.`,"chat.error.network":`Network connection failed or the service is temporarily unavailable. Please try again later.`,"chat.error.auth":`Authentication failed or insufficient permissions. Please sign in again and retry.`,"chat.error.quota":`Quota limit reached or too many requests. Please try again later.`,"chat.error.modelService":`The model service returned an error. Please retry or try again later.`,"chat.error.cancelled":`Request was cancelled. This can happen after system sleep or network interruption. Please try again.`,"chat.error.maxTokens":`Response was truncated due to reaching the maximum token limit. You may continue the conversation or ask for a more concise response.`,"chat.error.maxTurnRequests":`The maximum number of model requests per turn has been exceeded. You may send a new message to continue.`,"message.contentFilter.notice":`This topic is currently outside the scope of my capabilities, so I'm unable to discuss it further.`,"chat.newChat":`New Chat`,"chat.disclaimer":`Answers generated by AI are for reference only`,"chat.compacted":`Conversation compacted`,"chat.compacting":`Compacting conversation...`,"chat.compactCancelled":`Compaction cancelled`,"chat.compactSummary.show":`View summary`,"chat.compactSummary.hide":`Hide summary`,"phase.preparing":`Preparing`,"phase.modelRequesting":`Waiting for model`,"phase.modelStreaming":`Streaming`,"phase.modelDone":`Processing`,"phase.toolExecuting":`Running tool`,"phase.modelStreamingTool":`Writing`,"phase.retrying":`Retrying`,"chat.activity.inputTokens":`Context sent to the model: {tokens} tokens`,"chat.activity.contextTokens":`Most recent model context: {tokens} tokens`,"chat.activity.outputTokens":`Model output this request: {tokens} tokens`,"chat.activity.outputTokensEstimated":`Model output this request: about {tokens} tokens (streaming estimate)`,"progress.compacting":`Compacting context`,"hero.headline":`CodeBuddy Code`,"hero.newAgent":`New agent`,"input.placeholder":`Message the agent`,"input.placeholderGoal":`Describe your goal and define measurable outcomes for best results`,"input.placeholderMultitask":`Assign work to the coordinator, or keep talking to the main agent`,"input.placeholderRunning":`Messages will be queued...`,"input.placeholderRunningImmediate":`Message will be injected into this turn...`,"input.placeholderPending":`Please handle the permission request first...`,"input.draft":`Draft`,"input.send":`Send (Enter)`,"input.stop":`Stop`,"input.thinking":`Thinking`,"input.deepThinking":`Deep Thinking`,"input.promptFailed":`Prompt failed`,"input.sessionNotReady":`Session is not ready yet. Try sending again in a moment.`,"input.sessionNotReadyWithReason":`Session is not ready: {reason}`,"input.restoreTextOnly":`Send attachments after the agent is back`,"input.agentSwitchTimeout":`Agent preset switch timed out. Please try again.`,"input.sendQueued":`Send queued (Enter)`,"input.dropHint":`Drop files or paths here`,"input.addImage":`Add image`,"input.addFile":`Add file`,"input.goal":`Goal`,"input.imageTooLarge":`Image must be under 10MB`,"input.tooManyImages":`Up to 5 images allowed`,"input.fileTooLarge":`File must be under 50MB`,"input.tooManyFiles":`Up to 10 files allowed`,"input.attachmentUploadFailed":`Attachment upload failed. Please try again.`,"input.menu.image":`Image`,"input.menu.file":`File`,"input.menu.directory":`Directory`,"input.directory.current":`Current directory`,"input.directory.fixedHint":`The working directory is fixed when the session is created. Start a new session to use another one.`,"input.directory.additional":`Additional directories`,"input.directory.add":`Add directory`,"input.menu.mode":`Mode`,"input.menu.model":`Model`,"input.modeSelector":`Mode`,"input.modelSelector":`Model`,"mainAgent.defaultLabel":`Default preset`,"mainAgent.selectAgent":`Agent preset for the session you are about to start`,"mainAgent.lockedHint":`Agent mode can only be changed in an empty chat. Start a new chat to switch modes.`,"mainAgent.customTag":`local`,"mainAgent.empty":`No presets available`,"mainAgent.sectionTitle":`Agent presets`,"mainAgent.manage":`Manage presets`,"mainAgent.currentDefault":`Current default`,"mainAgent.currentDefaultHint":`Applies to sessions you start from now on. Running sessions keep the preset they began with.`,"mainAgent.isDefault":`Default`,"mainAgent.setDefault":`Set as default`,"mainAgent.defaultSaved":`Default preset saved`,"mainAgent.groupBuiltin":`Built-in`,"mainAgent.groupCustom":`Custom`,"mainAgent.createByAI":`Quick create with AI`,"mainAgent.createByAIHint":`Describe the agent in one sentence; AI generates its name, description and system prompt (saved to your user agents folder; tools auto-selected with least privilege). This is not Creator mode.`,"mainAgent.createByAIPlaceholder":`e.g. A read-only code reviewer agent using the hy3 model`,"mainAgent.creating":`Generating`,"mainAgent.createSuccess":`Agent created — pick it in any session`,"mainAgent.createFailed":`Failed to create agent`,"mainAgent.loadFailed":`Failed to load presets`,"mainAgent.capability":`Agent presets`,"mainAgent.capabilityHint":`When on, this Web UI can pick Standard / PTC / Minimal / Creator. WorkBuddy stays on native cli unless you also turn on “Allow unopted ACP hosts” and share the same settings file with the sidecar.`,"mainAgent.capabilityOn":`On`,"mainAgent.capabilityOff":`Off`,"mainAgent.noDescription":`No description.`,"mainAgent.mode.cli":`Standard mode`,"mainAgent.mode.ptc":`PTC mode`,"mainAgent.mode.minimal":`Minimal mode`,"mainAgent.mode.create":`Creator mode`,"mainAgent.mode.multitask":`Multitask`,"mainAgent.modeDesc.cli":`Full coding agent: edit files, run commands, search code and the web, plus Skills, plans, goals, and sub-agents.`,"mainAgent.modeDesc.ptc":`Standard capabilities, but worker tools go through REPL / Code Mode so the model composes steps in one program.`,"mainAgent.modeDesc.minimal":`REPL only; sandbox has Bash, Edit, and Skill (no MCP). No Read, Write, Glob, Grep, search, plan, or sub-agents. Inspect files with Bash and read r.stdout.`,"mainAgent.modeDesc.create":`Full Standard tools, plus guidance for writing user-level custom agents under ~/.codebuddy/agents (mainAgent: true is required to appear in the mode picker).`,"mainAgent.modeDesc.multitask":`Coordinator: spawn background Agents. Grep/Read only when not paired with Agent in the same turn; do not edit files yourself. You will be notified when a worker finishes.`,"mainAgent.capsule.multitask":`Multitask`,"mainAgent.capsule.multitaskDismiss":`Turn off Multitask`,"mainAgent.capsule.multitaskHint":`Coordinator overlay. Current mode stays the same. Click × to leave.`,"mainAgent.capsule.multitaskFailed":`Could not toggle Multitask`,"mainAgent.capsule.multitaskMinimalBlocked":`Multitask is not available in Minimal. Switch to Standard, PTC, or Creator first.`,"mainAgent.scope.user":`User`,"mainAgent.scope.project":`Project`,"mainAgent.delete":`Delete`,"mainAgent.deleteConfirm":`Confirm delete?`,"mainAgent.deleted":`Deleted {name}`,"mainAgent.deleteFailed":`Delete failed`,"mainAgent.searchPlaceholder":`Search agents by name or description`,"mainAgent.filterEmpty":`No matching agents`,"mainAgent.openFile":`Open file`,"mainAgent.openFailed":`Failed to open file`,"mainAgent.openInCreate":`Open in Creator mode`,"mainAgent.openInCreateSuccess":`Switched to Creator mode`,"mainAgent.openInCreateFailed":`Only blank sessions can switch to Creator mode`,"mainAgent.trustLocal":`local`,"input.deepThinkingDesc":`Let the model reason more deeply before answering`,"input.thinkingLevel":`Thinking level`,"input.thinkingMode":`Thinking`,"input.thoughtDefault":`Default`,"input.contextWindow":`Context window`,"input.editThinking":`Edit thinking config`,"input.modelHeader":`Model`,"input.contextUsage.title":`Context usage`,"input.contextUsage.hover":`Context used {pct}%`,"input.contextUsage.used":`context used`,"input.contextUsage.usedLabel":`Used`,"input.contextUsage.compact":`Compact conversation`,"input.contextUsage.systemPrompt":`System prompt`,"input.contextUsage.conversation":`Messages`,"input.contextUsage.tools":`Tools & agents`,"input.contextUsage.mcp":`Connectors & MCP`,"input.contextUsage.skills":`Skills`,"mode.default":`Default`,"mode.default.desc":`Prompts for permission on first use of each tool`,"mode.acceptEdits":`Accept Edits`,"mode.acceptEdits.desc":`Automatically accepts file edit permissions for the session`,"mode.plan":`Plan`,"mode.plan.desc":`Can analyze but not modify files or execute commands`,"mode.auto":`Auto`,"mode.auto.desc":`An AI classifier reviews actions: safe ones are auto-approved, risky ones are denied. Falls back to prompting if unavailable`,"mode.dontAsk":`Don't Ask`,"mode.dontAsk.desc":`Never shows permission prompts; runs pre-approved and safe actions, denies anything requiring approval`,"mode.bypassPermissions":`Bypass Permissions`,"mode.bypassPermissions.desc":`Skips all permission prompts`,"mode.fullAccess":`Full Access`,"mode.fullAccess.desc":`Skips ALL permission checks including dangerous commands for all agents`,"mode.work":`Work`,"mode.work.desc":`Standard work mode with normal permission flow`,"mode.delegate":`Delegate`,"mode.delegate.desc":`Permissions managed by parent session`,"input.newline":`New line`,"input.contextMenu.newline":`New line`,"input.contextMenu.send":`Send`,"queue.more":` more queued`,"queue.summary":`{count} messages pending`,"queue.steerCount":`{count} this turn`,"queue.holdCount":`{count} next turn`,"queue.holdHeader":`Queued follow-ups`,"queue.steerHeader":`Will be inserted on the next model request`,"queue.sendNow":`Send now`,"queue.remove":`Remove`,"queue.emptyPreview":`Attachment`,"queue.enqueueFailed":`Could not queue the message`,"status.running":`Running`,"tool.writeFile":`Write file`,"tool.readFile":`Read file`,"tool.execute":`Execute`,"tool.searchFiles":`Search files`,"tool.searchContent":`Search content`,"tool.fetchWeb":`Fetch web`,"tool.searchWeb":`Search web`,"tool.defaultName":`Tool`,"tool.repl":`REPL`,"tool.replRunning":`Running code…`,"tool.replCode":`Code`,"tool.replOutput":`Output`,"tool.replSubagentSummary":`Sub-agent output from REPL is shown separately above/below; raw REPL text is not repeated here.`,"tool.moreItems":`... {count} more`,"interruption.title":`Permission Required`,"interruption.tool":`Tool`,"interruption.allow":`Allow`,"interruption.allowAll":`Allow All`,"interruption.deny":`Deny`,"interruption.approved":`Approved`,"interruption.denied":`Denied`,"interruption.edits":`{count} edits`,"interruption.yes":`Yes`,"interruption.keepPlanning":`No, keep planning`,"interruption.exitPlanMode":`Exit plan mode`,"interruption.readyToCode":`Ready to code?`,"theme.light":`Light`,"theme.dark":`Dark`,"theme.system":`System`,"locale.zh":`Chinese`,"locale.en":`English`,"locale.system":`System`,"sidebar.nav.plugins":`Plugins`,"sidebar.nav.tasks":`Tasks`,"sidebar.search.placeholder":`Search...`,"sidebar.chatHistory":`Agent History`,"sidebar.workspace":`Workspace`,"sidebar.connectionStatus":`Connection Status`,"sidebar.status":`Status`,"sidebar.sessionId":`Session ID`,"sidebar.notConnected":`Not connected`,"sidebar.modelSelection":`Model Selection`,"sidebar.noModels":`No models available`,"sidebar.environment":`Environment`,"sidebar.cwd":`Working Directory`,"sidebar.os":`OS`,"sidebar.nodeVersion":`Node.js`,"sidebar.gatewayMode":`Gateway Mode`,"sidebar.tunnelUrl":`Tunnel URL`,"sidebar.clickToCopy":`Click to copy`,"sidebar.copied":`Copied`,"sidebar.permissionMode":`Permission Mode`,"sidebar.noModes":`No modes available`,"sidebar.preferences":`Preferences`,"sidebar.toggle":`Toggle Sidebar`,"sidebar.keybindings":`Keybindings`,"sidebar.group.workspace":`Workspace`,"sidebar.group.runtime":`Run`,"sidebar.group.observability":`Observability`,"sidebar.group.tools":`Tools`,"sidebar.group.preferences":`Preferences`,"bottomSheet.attachments":`Attach`,"bottomSheet.navigation":`Navigate`,"sidebar.theme":`Theme`,"sidebar.language":`Language`,"sidebar.user":`User`,"sidebar.authMethod":`Password`,"sidebar.noAuth":`No Auth`,"sidebar.version":`Remote UI v1.0`,"connection.connected":`Connected`,"connection.connecting":`Connecting`,"connection.disconnected":`Disconnected`,"connection.error":`Error`,"connection.occupiedShort":`Session occupied`,"connection.retry":`Retry connection`,"message.copyToClipboard":`Copy to clipboard`,"message.copied":`Copied`,"message.copy":`Copy`,"message.creditUsed":`Total used`,"message.creditUnit":`credits`,"mermaid.copySource":`Copy source`,"mermaid.exportSvg":`Export SVG`,"mermaid.zoomIn":`Zoom in`,"mermaid.zoomOut":`Zoom out`,"mermaid.fit":`Fit to view`,"mermaid.enterFullscreen":`Enter fullscreen`,"mermaid.exitFullscreen":`Exit fullscreen`,"mermaid.fullscreenUnavailable":`Fullscreen is unavailable in this environment`,"tool.copyParams":`Copy parameters`,"tool.copyResult":`Copy result`,"table.copyMarkdown":`Copy as Markdown`,"table.copyTsv":`Copy as TSV`,"chat.exportTitle":`Export chat`,"chat.exportMarkdown":`Export as Markdown`,"chat.exportJson":`Export as JSON`,"chat.exportEmpty":`This agent has no conversation to export yet`,"chat.exportFailed":`Could not export the conversation. Try again.`,"message.showMore":`Show more`,"message.showLess":`Show less`,"clipboard.copyFailed":`Copy failed: clipboard is not available in this environment. Please use HTTPS or manually select and copy the text.`,"message.assistantName":`CodeBuddy Code`,"thinking.title":`Thinking Process`,"thinking.thinking":`Thinking`,"thinking.done":`Thought`,"thinking.seconds":`{n}s`,"thinking.steps":`{n} steps`,"thinking.node":`Reasoning`,"thinking.note":`Progress note`,"thinking.expand":`Expand`,"thinking.collapse":`Collapse`,"diff.noChanges":`No changes`,"login.title":`CodeBuddy Remote Control`,"login.subtitle":`Enter the password shown in your terminal`,"login.placeholder":`Password`,"login.submit":`Login`,"login.error.incorrect":`Incorrect password`,"login.error.rateLimit":`Too many login attempts. Please try again later.`,"login.error.required":`Password is required`,"login.hint.password":`Tip: The password is displayed when the server starts.`,"login.hint.urlAuth":`You can also use <code>?password=xxx</code> to login automatically.`,"login.hint.disable":`Or set <code>gateway.auth: "none"</code> in <code>settings.json</code> under the CodeBuddy config directory (defaults to <code>~/.codebuddy</code>; override via the <code>CODEBUDDY_CONFIG_DIR</code> environment variable) to disable.`,"login.slogan":`Claw Your Ideas . Into Reality`,"login.tagline":`Triggered Anywhere, Completed Locally.`,"login.privacy":`Privacy Policy`,"login.terms":`Terms of Service`,"account.login.title":`Account Login`,"account.login.subtitle":`CodeBuddy is not signed in. Please choose a login method to authenticate.`,"account.login.button":`Login`,"account.login.polling":`Waiting for login...`,"account.login.polling.hint":`Please complete login in your browser. This page will redirect automatically.`,"account.login.openBrowser":`Open Browser to Login`,"account.login.copyUrl":`Copy Login URL`,"account.login.copied":`Copied`,"account.login.failed":`Login failed. Please try again.`,"account.login.retry":`Retry`,"account.logout":`Sign Out`,"account.logout.confirm":`Sign out of current account?`,"account.method.internal":`Chinese Site`,"account.method.external":`International Site`,"account.method.selfhosted":`Enterprise Domain`,"account.method.iOA":`iOA (Tencent only)`,"sidebar.interactionMode":`Interaction Mode`,"sidebar.chatMode":`Chat`,"sidebar.terminalMode":`Terminal`,"sidebar.canvas":`Canvas`,"canvas.title":`Infinite Canvas`,"canvas.addTerminal":`Add Terminal`,"canvas.zoomIn":`Zoom In`,"canvas.zoomOut":`Zoom Out`,"canvas.fitView":`Fit View`,"canvas.resetView":`Reset View`,"canvas.empty":`Click the + button in the toolbar to add a terminal`,"canvas.openStandalone":`Open canvas in new window`,"canvas.tileMenu.close":`Close`,"canvas.tileMenu.duplicate":`Duplicate Terminal`,"canvas.tileMenu.maximize":`Maximize`,"canvas.tileMenu.minimize":`Minimize`,"canvas.tileMenu.restore":`Restore`,"canvas.tileMenu.openStandalone":`Open in new window`,"canvas.standalone.missingPaneId":`Missing pane ID`,"canvas.defaultTitle":`Terminal`,"terminal.connecting":`Connecting terminal...`,"terminal.title":`Terminal`,"terminal.disconnected":`Terminal disconnected`,"terminal.error":`Terminal connection failed`,"terminal.reconnect":`Reconnect`,"terminal.split":`Split terminal`,"terminal.splitHorizontal":`Split Right`,"terminal.splitVertical":`Split Down`,"terminal.closePane":`Close Terminal`,"terminal.close":`Close`,"terminal.closeOthers":`Close Others`,"terminal.closeToRight":`Close to the Right`,"terminal.closeAll":`Close All`,"terminal.maxPanes":`Max panes reached`,"terminal.copySelection":`Copy`,"terminal.openLink.title":`Open external link?`,"terminal.openLink.message":`You are about to open {url}. Terminal links can be generated by untrusted programs. Only continue if you trust this destination.`,"terminal.openLink.confirm":`Open`,"composer.addToChat":`Add to chat`,"sidebar.instances":`Instances`,"sidebar.activeInstances":`active instances`,"sidebar.manageInstances":`Manage Instances`,"sidebar.remoteControl":`Channels`,"instance.title":`Instance List`,"instance.switch":`Instance`,"instance.switchTitle":`Switch Instance`,"instance.current":`Current`,"instance.manual":`Manual`,"instance.switchTo":`Switch to this instance`,"instance.manage":`Manage Instances`,"instance.managerTitle":`Instance Manager`,"instance.addInstance":`Add Instance`,"instance.name":`Instance Name`,"instance.namePlaceholder":`Custom instance name (optional, defaults to directory name)`,"instance.url":`Instance URL`,"instance.urlPlaceholder":`https://example.trycloudflare.com`,"instance.password":`Password`,"instance.optional":`Optional`,"instance.passwordPlaceholder":`Access password`,"instance.cancel":`Cancel`,"instance.add":`Add`,"instance.remove":`Remove this instance`,"instance.noInstances":`No other instances`,"instance.noInstancesHint":`Start more CodeBuddy Code instances or add remote instances manually`,"instance.cwd":`Working Directory`,"instance.topic":`Topic`,"instance.startedAt":`Started at`,"instance.local":`Local`,"instance.tunnel":`Tunnel`,"instance.uptime.days":`d ago`,"instance.uptime.hours":`h ago`,"instance.uptime.minutes":`m ago`,"instance.uptime.justNow":`Just now`,"instance.addError":`Failed to add instance`,"instance.removeError":`Failed to remove instance`,"instance.copyUrl":`Copy URL`,"instance.copied":`Copied`,"instance.subtitle":`Manage and switch between instances`,"instance.refresh":`Refresh`,"instance.refreshed":`Refreshed`,"instance.loading":`Loading instances...`,"instance.error":`Failed to load instances`,"instance.retry":`Retry`,"question.multiple":`multiple`,"question.customAnswer":`Or type a custom answer...`,"question.reviewAnswers":`Review answers`,"question.singleTitle":`Question`,"question.titleWithCount":`Questions ({count})`,"question.reviewTab":`Review`,"question.next":`Next`,"question.submit":`Submit`,"question.cancel":`Cancel`,"question.answered":`Answered`,"question.cancelled":`Question cancelled`,"question.invalid":`Invalid question parameters, cannot display`,"todo.title":`Tasks`,"todo.progress":`Task progress`,"todo.executing":`Task {n} executing`,"todo.untitled":`Untitled`,"todo.completedCount":`{count} completed`,"todo.allCompleted":`All tasks completed`,"todo.statusPendingSync":`Run ended · task status pending sync`,"todo.pendingSync":`Pending sync`,"bgTasks.summary":`{total} background tasks · {running} running`,"bgTasks.status.done":`Completed`,"bgTasks.status.failed":`Failed`,"bgTasks.status.ended":`Ended`,"bgTasks.status.elapsed":`Running {duration}`,"bgTasks.untitled":`Background command`,"bgTasks.noOutput":`No output yet`,"bgTasks.viewOutput":`View live output in the side panel`,"bgTasks.cancel":`Cancel task (terminates the process)`,"bgTasks.hide":`Remove from list`,"bgTasks.endReason.cancelled-by-user":`Cancelled`,"bgTasks.endReason.output-limit":`Terminated: output limit exceeded`,"bgTasks.endReason.interrupted":`Interrupted`,"bgTasks.endReason.stopped":`Stopped`,"bgTasks.endReason.sandbox-denied":`Blocked by sandbox`,"bgTasks.endReason.exit-status-unknown":`Ended, exit code not captured`,"bgTasks.endReason.exited":`Ended`,"history.title":`Agent history`,"history.description":`Continue a project conversation in the current agent`,"history.backgroundDescription":`This agent is working in the background; switch conversations after handoff`,"history.target":`Load into {name}`,"history.project":`Project`,"history.noProjects":`No projects available`,"history.noData":`No conversation history`,"history.noDataHint":`This project has no conversations to continue yet`,"history.backToChat":`Back to Chat`,"history.loading":`Loading...`,"history.loadError":`Failed to load`,"history.retry":`Retry`,"history.current":`Current`,"history.messages":`{count} messages`,"history.delete":`Delete`,"history.deleteConfirm":`Are you sure you want to delete this session?`,"history.deleteCancel":`Cancel`,"history.deleteOk":`Delete`,"history.rename":`Rename`,"history.renameTitle":`Rename Session`,"history.renamePlaceholder":`Enter new name`,"history.renameCancel":`Cancel`,"history.renameOk":`OK`,"history.cannotDeleteCurrent":`Cannot delete current session`,"history.renameFailed":`Rename failed`,"history.deleteFailed":`Delete failed`,"history.restore":`Open in current agent`,"history.restoreSuccess":`Continuing the conversation in the current agent`,"history.restoreFailed":`Failed to open historical conversation`,"history.openSessionSwitcher":`Search & manage all conversations`,"sessionSwitcher.title":`Conversations`,"sessionSwitcher.searchPlaceholder":`Search`,"sessionSwitcher.close":`Close`,"sessionSwitcher.groupPinned":`Pinned`,"sessionSwitcher.groupToday":`Today`,"sessionSwitcher.groupYesterday":`Yesterday`,"sessionSwitcher.firstQuestion":`First question`,"sessionSwitcher.lastQuestion":`Last question`,"sessionSwitcher.firstQuestionPrefix":`First asked`,"sessionSwitcher.lastQuestionPrefix":`Last asked`,"sessionSwitcher.loadMore":`Load more`,"sessionSwitcher.noSearchResult":`No matching conversations`,"sessionSwitcher.noSearchResultHint":`Search only covers loaded conversations; clear the query and scroll down to load more`,"sessionSwitcher.clearSearch":`Clear search`,"sessionSwitcher.pin":`Pin`,"sessionSwitcher.unpin":`Unpin`,"sessionSwitcher.pinFailed":`Failed to pin`,"sessionSwitcher.more":`More actions`,"sessionSwitcher.deleteCurrentHint":`The current conversation cannot be deleted`,"settings.title":`Preferences`,"settings.appearance":`Appearance`,"settings.model":`Model Selection`,"settings.customModels.manage":`Manage custom models`,"settings.customModels.entryLabel":`Custom models`,"settings.customModels.entryDesc":`Add OpenAI-compatible endpoints; create, edit, delete`,"settings.customModels.title":`Custom models`,"settings.customModels.addTitle":`Add custom model`,"settings.customModels.editTitle":`Edit custom model`,"settings.customModels.add":`Add`,"settings.customModels.edit":`Edit`,"settings.customModels.delete":`Delete`,"settings.customModels.deleteTitle":`Delete custom model?`,"settings.customModels.deleteMessage":`Delete model {id}. This cannot be undone.`,"settings.customModels.cancel":`Cancel`,"settings.customModels.save":`Save`,"settings.customModels.close":`Close`,"settings.customModels.empty":`No custom models yet`,"settings.customModels.hint":`Stored in ~/.codebuddy/models.json on this machine`,"settings.customModels.loadFailed":`Failed to load custom models`,"settings.customModels.saveFailed":`Save failed`,"settings.customModels.deleteFailed":`Delete failed`,"settings.customModels.apiKeyKeep":`Leave blank to keep existing key`,"settings.customModels.field.id":`Model ID`,"settings.customModels.field.name":`Display name`,"settings.customModels.field.vendor":`Vendor`,"settings.customModels.field.url":`Endpoint URL`,"settings.customModels.field.apiKey":`API Key`,"settings.customModels.field.maxInputTokens":`Max input tokens`,"settings.customModels.field.maxOutputTokens":`Max output tokens`,"settings.customModels.field.temperature":`Temperature`,"settings.customModels.field.temperatureDefault":`Leave blank for default (omit)`,"settings.customModels.field.supportsToolCall":`Tool calling`,"settings.customModels.field.supportsImages":`Images`,"settings.customModels.field.supportsReasoning":`Reasoning`,"settings.customModels.field.useCustomProtocol":`Custom protocol (skip /chat/completions suffix)`,"settings.customModels.err.idRequired":`Model ID is required`,"settings.customModels.err.idInvalid":`Model ID allows letters, digits, and . _ : - / only`,"settings.customModels.err.idDuplicate":`Model ID already exists`,"settings.customModels.err.urlRequired":`Endpoint URL is required`,"settings.customModels.err.urlInvalid":`URL must start with http:// or https://`,"settings.mode":`Permission Mode`,"settings.systemInfo":`System Info`,"settings.backToChat":`Back to Chat`,"settings.tab.user":`User`,"settings.tab.project":`Workspace`,"settings.scope.label":`Settings scope`,"settings.scope.userHint":`Applies to every CBC workspace for this user`,"settings.scope.projectHint":`Applies only to this workspace and can be shared with the project`,"settings.search.placeholder":`Search setting names, descriptions, or keys`,"settings.search.clear":`Clear settings search`,"settings.search.empty":`No matching settings`,"settings.search.results":`Settings search results updated`,"settings.sections":`Settings sections`,"settings.inherited":`Inherited from user settings`,"settings.inheritUser":`Use user setting`,"settings.invalidJson":`Enter a valid JSON object`,"settings.loadFailed":`Could not load settings. Try again.`,"agents.workspaceSettings":`Workspace settings`,"settings.workspaceFor":`{name} settings`,"settings.workspaceMissing":`This agent does not have an available workspace`,"settings.group.modelAndReasoning":`Model & Reasoning`,"settings.group.behavior":`Behavior`,"settings.group.memory":`Memory`,"settings.group.language":`Language`,"settings.group.advanced":`Advanced`,"settings.group.mainAgent":`Agent presets`,"settings.item.mainAgent.enabled":`Enable agent presets`,"settings.item.mainAgent.enabled.desc":`Lets Web / CLI pick Standard, PTC, Minimal, or Creator. Off = always native Standard.`,"settings.item.mainAgent.allowUnopted":`Allow unopted ACP hosts`,"settings.item.mainAgent.allowUnopted.desc":`Off by default, and only takes effect when the switch above is on. When on, a WorkBuddy sidecar that shares this settings file also uses preset resolution. Leave off unless you need that.`,"settings.group.sandbox":`Security Sandbox`,"settings.item.model":`Default Model`,"settings.item.model.desc":`Set the default AI model`,"settings.item.reasoningEffort":`Reasoning Effort`,"settings.item.reasoningEffort.desc":`Control model reasoning depth`,"settings.item.alwaysThinkingEnabled":`Always Enable Thinking`,"settings.item.autoCompactEnabled":`Auto Compact Context`,"settings.item.autoCompactWindow":`Auto-Compact Window (tokens)`,"settings.item.autoCompactWindow.desc":`Context window baseline for compaction. Trigger = min(this, model window) × threshold; leave empty to follow the model window. Env CODEBUDDY_AUTO_COMPACT_WINDOW takes precedence`,"settings.item.includeCoAuthoredBy":`Include Co-authored-by`,"settings.item.fileCheckpointingEnabled":`File Checkpointing`,"settings.item.fileCheckpointingEnabled.desc":`Enable file version rollback`,"settings.item.promptSuggestionEnabled":`Prompt Suggestions`,"settings.item.busySendMode":`Send while busy`,"settings.item.busySendMode.desc":`When the agent is still working, queue the message until this turn ends, or inject it into the current turn. Queued items can still be sent immediately.`,"settings.item.busySendMode.queue":`Queue`,"settings.item.busySendMode.immediate":`Inject into current turn`,"settings.item.ignoreGitIgnore":`Ignore .gitignore`,"settings.item.ignoreGitIgnore.desc":`Ignore .gitignore rules when searching`,"settings.item.deferToolLoading":`Defer Tool Loading`,"settings.item.hookOutputCollapsed":`Collapse Hook Output`,"settings.item.memory.enabled":`Enable Memory`,"settings.item.memory.autoMemoryEnabled":`Auto Memory`,"settings.item.memory.autoMemoryEnabled.desc":`Auto-save important info to memory`,"settings.item.language":`Response Language`,"settings.item.language.desc":`Language for AI responses`,"settings.item.cleanupPeriodDays":`Chat History Retention (days)`,"settings.item.imageHistoryRetainRounds":`Image Retention Rounds`,"settings.item.imageHistoryRetainRounds.desc":`Rounds to retain images in history`,"settings.item.env":`Environment Variables`,"settings.item.env.desc":`Variables applied to each session (JSON)`,"settings.item.sandbox.enabled":`Enable Sandbox`,"settings.item.sandbox.enabled.desc":`Run Bash commands in sandbox, restrict file and network access`,"settings.item.sandbox.autoAllowBashIfSandboxed":`Auto-approve in Sandbox`,"settings.item.sandbox.autoAllowBashIfSandboxed.desc":`Auto-approve commands when running in sandbox`,"settings.loading":`Loading...`,"settings.saved":`Saved`,"settings.saveFailed":`Save failed`,"settings.notSet":`Not set`,"settings.default":`Default`,"settings.reset":`Reset`,"settings.noProjectSettings":`No project-level settings available`,"settings.effort.minimal":`Minimal`,"settings.effort.low":`Low`,"settings.effort.medium":`Medium`,"settings.effort.high":`High`,"settings.effort.xhigh":`Extra High`,"settings.effort.max":`Max`,"page.title":`CodeBuddy Code`,"tool.processExited":`[Process exited]`,"tool.itemsCount":`{count} items`,"tool.showAllItems":`Show all {count} items`,"tool.moreLinesCount":`... {count} more lines`,"tool.generatedImage":`Generated image`,"tool.editedImage":`Edited image`,"tool.imageGen":`ImageGen`,"tool.imageEdit":`ImageEdit`,"tool.toolSearch":`ToolSearch`,"tool.teamCreate":`TeamCreate`,"tool.teamDelete":`TeamDelete`,"tool.taskCreate":`TaskCreate`,"tool.taskUpdate":`TaskUpdate`,"tool.taskList":`TaskList`,"tool.taskGet":`TaskGet`,"tool.sendMessage":`SendMessage`,"tool.shutdown":`Shutdown`,"tool.taskCompleted":`Task completed`,"tool.shutdownRejected":`Shutdown rejected`,"tool.planResponse":`Plan response`,"tool.approved":`approved`,"tool.rejected":`rejected`,"tool.userRejectedResult":`User rejected this tool use`,"tool.webSearch":`WebSearch`,"tool.webFetch":`WebFetch`,"tool.saveMemory":`SaveMemory`,"tool.askUserQuestion":`AskUserQuestion`,"tool.askUserForStructuredInput":`AskUserForStructuredInput`,"tool.structuredInputFieldsHeader":`Requested fields`,"tool.structuredInputEnumLabel":`Options`,"tool.structuredInputPendingHint":`Please fill in the fields below and submit`,"tool.structuredInputRequired":`required`,"tool.structuredInputSubmit":`Submit`,"tool.structuredInputSubmitting":`Submitting…`,"tool.structuredInputDecline":`Decline`,"tool.structuredInputCancel":`Cancel`,"tool.structuredInputResponded":`Responded`,"tool.structuredInputBooleanTrue":`true`,"tool.structuredInputBooleanFalse":`false`,"tool.enterPlanMode":`Enter Plan Mode`,"tool.exitPlanMode":`Exit Plan Mode`,"tool.allowedActions":`Allowed actions:`,"tool.skill":`Skill`,"tool.agent":`Agent`,"tool.failed":`failed`,"tool.completed":`completed`,"tool.toolsCount":`{count} tools`,"tool.background":`background`,"tool.permissionsCount":`{count} permissions`,"subagent.openDetail":`View execution detail`,"subagent.expandInline":`Expand inline`,"subagent.collapseInline":`Collapse`,"subagent.expandPrompt":`Show dispatch prompt`,"subagent.collapsePrompt":`Hide dispatch prompt`,"subagent.dispatchPrompt":`Dispatch prompt`,"subagent.returnValue":`Returned result`,"subagent.dockEmptyHint":`Click a subagent row in the conversation to inspect its execution here.`,"subagent.detailTab":`Subagent`,"workflow.detailTab":`Workflow`,"workflow.waiting":`Waiting for {count} dynamic workflow(s) to finish`,"workflow.startedFor":`Started {name}:`,"workflow.agentFallback":`Agent #{index}`,"workflow.approval.phasesIntro":`This dynamic workflow will spin up multiple subagents across the following phases:`,"workflow.approval.tokenHint":`Dynamic workflows can use a lot of tokens quickly by running many subagents in parallel, which counts against your usage limit. Stop a running workflow at any time from its card or the side panel, or type /workflows to open its details.`,"workflow.approval.viewScript":`View raw script ({count} lines)`,"workflow.approval.hideScript":`Hide raw script ({count} lines)`,"workflow.approval.savedWorkflow":`Saved workflow: {name}`,"workflow.approval.scriptPath":`Script: {path}`,"workflow.approval.dynamicWorkflow":`Dynamic workflow`,"workflow.startedHint":`Running in the background. Click the card to inspect it in the side panel; the final report will appear in the chat when it completes.`,"workflow.completedHint":`Workflow finished. Click the card to review each phase and agent.`,"workflow.noRuns":`No workflows in this session yet`,"workflow.mobileUnsupported":`Open workflow details on desktop`,"workflow.agentsProgress":`{done}/{total} agents done`,"workflow.phases":`Phases`,"workflow.allPhases":`All`,"workflow.overall":`Overall`,"workflow.status.running":`Running`,"workflow.status.paused":`Paused`,"workflow.status.completed":`Completed`,"workflow.status.failed":`Failed`,"workflow.status.aborted":`Stopped`,"workflow.status.starting":`Starting`,"workflow.openDetail":`View details`,"workflow.agents":`{count} agents`,"workflow.agentsDone":`{count} done`,"workflow.agentsRunning":`{count} running`,"workflow.agentsFailed":`{count} failed`,"workflow.agentsCached":`{count} cached`,"workflow.tokens":`{count} tokens`,"workflow.toolCalls":`{count} tool calls`,"workflow.phaseProgress":`Phase {done}/{total}`,"workflow.pause":`Pause`,"workflow.resume":`Resume`,"workflow.stop":`Stop`,"workflow.skipAgent":`Skip`,"workflow.phaseUngrouped":`Ungrouped`,"workflow.phasePending":`Pending`,"workflow.phaseSkipped":`Not run`,"workflow.noAgentsYet":`No agents dispatched yet`,"workflow.prompt":`Prompt`,"workflow.promptLines":`{count} lines`,"workflow.activity":`Recent activity`,"workflow.result":`Result`,"workflow.error":`Error`,"workflow.output":`Output`,"workflow.logs":`Logs`,"workflow.idle":`idle {time}`,"workflow.pausedHint":`Paused: running agents will finish, no new agents will be dispatched.`,"workflow.detailLoading":`Loading workflow details…`,"workflow.detailMissing":`This run is no longer in memory (process restarted or pruned).`,"workflow.detailError":`Failed to load workflow details`,"workflow.retry":`Retry`,"workflow.controlFailed":`Action had no effect; the workflow may have finished`,"workflow.cachedBadge":`cached`,"workflow.dockEmptyHint":`Click a workflow card in the conversation to inspect it here.`,"subagent.running":`running`,"subagent.detailPending":`The subagent just started and has no activity yet.`,"subagent.detailEmpty":`This subagent produced no activity.`,"subagent.detailGone":`This subagent's activity is no longer part of the current session; you can close this tab.`,"terminal.unknownError":`Unknown error`,"terminal.processExited":`[Process exited]`,"terminal.connectionLost":`Connection lost`,"terminal.wsConnectionFailed":`WebSocket connection failed`,"terminal.createSessionFailed":`Failed to create terminal session`,"terminal.reconnecting":`Reconnecting...`,"terminal.reconnectFailed":`Reconnect failed`,"terminal.search.placeholder":`Find`,"terminal.search.noResults":`No results`,"terminal.search.caseSensitive":`Match Case`,"terminal.search.wholeWord":`Match Whole Word`,"terminal.search.regex":`Use Regular Expression`,"terminal.search.previous":`Previous Match`,"terminal.search.next":`Next Match`,"terminal.search.close":`Close`,"team.title":`Team`,"team.activeCount":`{count} active`,"team.memberCount":`{count} members`,"team.doneCount":`{count} done`,"team.historyAndProgress":`Team members and task progress`,"team.waitingForTeammates":`Waiting for {count} agent{s}…`,"team.backToMain":`Back to main chat`,"team.switchMember":`Switch member`,"team.viewMemberHistory":`View member conversation history`,"team.recentCommunication":`Member updates`,"team.runningTaskCount":`{count} running`,"team.pendingTaskCount":`{count} pending`,"team.receivedFrom":`From {peer}`,"team.sentTo":`To {peer}`,"team.loadingHistory":`Loading conversation…`,"team.noHistory":`No conversation history yet`,"team.agentRunning":`Agent is running…`,"team.delivered":`Delivered`,"team.showLess":`Show less`,"team.moreLines":`… ({count} more lines)`,"team.tools":`{count} tools`,"team.tokens":`{count} tokens`,"instance.tunnelMode":`Tunnel`,"instance.localMode":`Local`,"workspace.searchPlaceholder":`Search directories...`,"workspace.switch":`Switch`,"workspace.switchHere":`Switch to this directory`,"workspace.switching":`Switching...`,"workspace.noResults":`No matching directories`,"workspace.emptyDir":`This directory is empty`,"workspace.pathPlaceholder":`Enter path or directory name...`,"workspace.selectDir":`Create bot in this directory`,"workspace.filterPlaceholder":`Filter subdirectories...`,"workspace.recent.title":`Recent Workspaces`,"workspace.recent.daysAgo":`d ago`,"workspace.recent.hoursAgo":`h ago`,"workspace.recent.minutesAgo":`m ago`,"workspace.recent.justNow":`Just now`,"workspace.recent.remove":`Remove`,"workspace.browseTitle":`Browse Workspaces`,"workspace.recentWorkspaces":`Recent Workspaces`,"workspace.createNew":`Create New Bot`,"workspace.browseDir":`Browse Directory`,"workspace.instanceLocal":`Local`,"workspace.instanceTunnel":`Tunnel`,"workspace.instanceCurrent":`Current`,"workspace.switchInstance":`Switch`,"workspace.switchingInstance":`Switching...`,"workspace.switchingWithGateway":`Preparing to switch...`,"workspace.instanceStarted":`Started`,"workspace.noWorkspaces":`No active workspaces`,"workspace.noWorkspacesHint":`Browse directories to create a new bot`,"workspace.instanceCount":`{count} bots`,"question.multiLabel":`multi`,"tasks.title":`Recommended Templates`,"tasks.subtitle":`Select a template to create a scheduled task`,"tasks.loading":`Loading recommended templates...`,"tasks.error":`Failed to load templates`,"tasks.retry":`Retry`,"tasks.refresh":`Refresh`,"tasks.refreshed":`Refreshed`,"tasks.empty":`No templates available`,"tasks.interval":`Every {value}`,"tasks.interval.1d":`Daily`,"tasks.interval.2d":`Every 2 days`,"tasks.interval.3d":`Every 3 days`,"tasks.interval.1w":`Weekly`,"tasks.interval.2w":`Every 2 weeks`,"tasks.interval.1m":`Monthly`,"scheduled.title":`Scheduled Tasks`,"scheduled.subtitle":`Scheduled tasks in the current session`,"scheduled.loading":`Loading...`,"scheduled.empty":`No scheduled tasks`,"scheduled.emptyHint":`Use /loop or CronCreate in chat to create one`,"scheduled.create":`Create Task`,"scheduled.creating":`Creating...`,"scheduled.delete":`Delete`,"scheduled.edit":`Edit Task`,"scheduled.save":`Save Changes`,"scheduled.saving":`Saving...`,"scheduled.enable":`Enable`,"scheduled.disable":`Disable`,"scheduled.enabled":`Enabled`,"scheduled.disabled":`Disabled`,"scheduled.triggered":`Scheduled task started`,"scheduled.taskId":`Task`,"scheduled.executions":`Execution history`,"scheduled.executionsTitle":`Task execution history`,"scheduled.executionsBack":`Back to tasks`,"scheduled.executionsLoading":`Loading execution history...`,"scheduled.executionsEmpty":`No executions yet`,"scheduled.executionsFilteredEmpty":`No executions match these filters`,"scheduled.executionsSearchPlaceholder":`Search execution ID, prompt, or error...`,"scheduled.executionsClearSearch":`Clear search`,"scheduled.executionsSelect":`Select`,"scheduled.executionsSelected":`{count} selected`,"scheduled.executionsSelectAll":`Select deletable`,"scheduled.executionsClearSelection":`Clear selection`,"scheduled.executionsSelectOne":`Select execution {id}`,"scheduled.executionsDeleteSelected":`Delete selected`,"scheduled.executionsDeleteTitle":`Delete {count} execution records?`,"scheduled.executionsDeleteMessage":`This only deletes execution records. The scheduled task and related conversations are kept. This action cannot be undone.`,"scheduled.executionsDeleteSuccess":`Deleted {count} execution records`,"scheduled.executionsDeleteFailed":`Failed to delete execution records`,"scheduled.executionsDeleting":`Deleting...`,"scheduled.executionsStatusFilter":`Filter by status`,"scheduled.executionsAllStatuses":`All statuses`,"scheduled.executionsTimeFilter":`Filter by time`,"scheduled.executionsAllTime":`All time`,"scheduled.executionsLastDay":`Last 24 hours`,"scheduled.executionsLastWeek":`Last 7 days`,"scheduled.executionsLastMonth":`Last 30 days`,"scheduled.executionsLoadMore":`Load more`,"scheduled.executionsAllLoaded":`All executions loaded`,"scheduled.executionDetails":`Execution details`,"scheduled.executionDetailsClose":`Close execution details`,"scheduled.executionId":`Execution ID`,"scheduled.executionStartedAt":`Started at`,"scheduled.executionError":`Error`,"scheduled.execution.queued":`Queued`,"scheduled.execution.running":`Running`,"scheduled.execution.owner":`Executor`,"scheduled.execution.ownerDaemon":`Background service`,"scheduled.execution.ownerWebui":`Web UI instance`,"scheduled.execution.ownerCli":`CLI instance`,"scheduled.execution.session":`Session`,"scheduled.execution.technicalDetails":`Technical details`,"scheduled.execution.succeeded":`Succeeded`,"scheduled.execution.failed":`Failed`,"scheduled.execution.openLive":`View live progress`,"scheduled.execution.openResult":`View progress and result`,"scheduled.execution.noConversation":`This execution has no related conversation to open`,"scheduled.execution.openFailed":`Failed to open execution conversation`,"scheduled.execution.focusUnavailable":`Opened the related conversation, but this older execution has no location marker`,"scheduled.executionDelete":`Delete execution record`,"scheduled.executionDeleteOne":`Delete execution record {id}`,"scheduled.executionDeleteTitle":`Delete this execution record?`,"scheduled.executionDeleteActiveHint":`Running or queued execution records cannot be deleted`,"scheduled.duration":`Duration`,"scheduled.cron":`Cron Expression`,"scheduled.prompt":`Prompt`,"scheduled.promptPlaceholder":`Prompt to execute on each fire...`,"scheduled.recurring":`Recurring`,"scheduled.oneShot":`One-shot`,"scheduled.durable":`Durable`,"scheduled.sessionOnly":`Session-only`,"scheduled.lastFired":`Last fired`,"scheduled.custom":`Custom`,"scheduled.every":`Every`,"scheduled.unit.minutes":`minutes`,"scheduled.unit.hours":`hours`,"scheduled.unit.days":`days`,"scheduled.unit.weeks":`weeks`,"plugins.title":`Plugins`,"plugins.installedPlugins":`Installed Plugins`,"plugins.browseMarketplace":`Browse Marketplace`,"plugins.marketplaces":`Marketplaces`,"plugins.enabled":`Enabled`,"plugins.disabled":`Disabled`,"plugins.enable":`Enable`,"plugins.disable":`Disable`,"plugins.uninstall":`Uninstall`,"plugins.install":`Install`,"plugins.confirmUninstall":`Are you sure you want to uninstall this plugin?`,"plugins.marketplace":`Marketplace`,"plugins.addMarketplace":`Add Marketplace`,"plugins.removeMarketplace":`Remove`,"plugins.confirmRemoveMarketplace":`Are you sure you want to remove this marketplace?`,"plugins.noPlugins":`No plugins installed`,"plugins.noPluginsHint":`Install plugins from a marketplace to extend functionality`,"plugins.noMarketplaces":`No marketplaces configured`,"plugins.noMarketplacesHint":`Add a plugin marketplace to browse and install plugins`,"plugins.selectMarketplace":`Select Marketplace`,"plugins.selectMarketplaceHint":`Select a marketplace to browse available plugins`,"plugins.marketplaceNotFound":`Marketplace not found`,"plugins.noAvailablePlugins":`No available plugins in this marketplace`,"plugins.noAvailablePluginsHint":`Try adding other marketplaces or check back later`,"plugins.installed":`Installed`,"plugins.browsingMarketplace":`Loading...`,"plugins.loading":`Loading...`,"plugins.error":`Failed to load plugins`,"plugins.retry":`Retry`,"plugins.sourcePlaceholder":`Marketplace URL (Git URL or local path)`,"plugins.namePlaceholder":`Marketplace name (optional)`,"plugins.cancel":`Cancel`,"plugins.add":`Add`,"plugins.version":`Version`,"plugins.operationFailed":`Operation failed`,"plugins.searchPlaceholder":`Search plugins...`,"plugins.allMarketplaces":`All Marketplaces`,"plugins.noSearchResults":`No matching plugins found`,"plugins.totalCount":`plugins`,"plugins.refresh":`Refresh`,"plugins.kindAll":`All`,"plugins.kindSkills":`Skills`,"plugins.kindMcp":`MCP`,"plugins.kindHooks":`Hooks`,"plugins.kindTools":`Tools`,"plugins.kindUnknown":`Other`,"plugins.filterStatusAll":`All status`,"plugins.filterStatusEnabled":`Enabled`,"plugins.filterStatusDisabled":`Disabled`,"plugins.infiniteRange":`Showing {visible} / {total}`,"plugins.infiniteLoading":`Scroll for more`,"plugins.infiniteEnd":`All loaded`,"plugins.backToTop":`Back to top`,"plugins.installedLabel":`Installed`,"plugins.category":`Category`,"plugins.author":`Author`,"plugins.license":`License`,"plugins.homepage":`Homepage`,"plugins.repository":`Repository`,"plugins.source":`Source`,"plugins.keywords":`Keywords`,"plugins.features":`Features`,"plugins.scope":`Scope`,"plugins.scope.user":`User`,"plugins.scope.project":`Project`,"plugins.scope.project-local":`Local`,"plugins.installScope.user":`Install for you (user scope)`,"plugins.installScope.project":`Install for all collaborators (project scope)`,"plugins.installScope.local":`Install for you, in this repo only (local scope)`,"plugins.policyCannotRemove":`Cannot be uninstalled`,"plugins.policyCannotSwitchoff":`Cannot be disabled`,"plugins.policyCannotEdit":`Cannot be edited`,"channel.from":`From`,"channel.group":`Group`,"channel.replyTo":`Reply to {source}`,"channel.wechat":`WeChat`,"channel.wecom":`WeCom`,"channel.wecomBot":`WeCom Bot`,"remoteControl.title":`Remote Control`,"remoteControl.subtitle":`Manage channel connections`,"remoteControl.connectedChannels":`Connected Channels`,"remoteControl.noChannels":`No channels connected`,"remoteControl.noChannelsHint":`Add a WeChat or WeCom channel, or install more from the marketplace`,"remoteControl.addWeChat":`Add WeChat Bot`,"remoteControl.addWeCom":`Add WeCom Bot`,"remoteControl.connect":`Connect`,"remoteControl.disconnect":`Disconnect`,"remoteControl.delete":`Delete`,"remoteControl.add":`Add`,"remoteControl.connected":`Connected`,"remoteControl.disconnected":`Disconnected`,"remoteControl.connecting":`Connecting...`,"remoteControl.installMore":`Install More Channels`,"remoteControl.installMoreHint":`Browse the plugin marketplace for third-party channel plugins`,"remoteControl.browseMarketplace":`Browse Marketplace`,"remoteControl.builtIn":`Built-in`,"remoteControl.plugin":`Plugin`,"remoteControl.rebind":`Rebind`,"remoteControl.unbind":`Unbind`,"remoteControl.bot":` Bot`,"remoteControl.default":`Default `,"remoteControl.next":`Next`,"remoteControl.cancel":`Cancel`,"remoteControl.wecomBotIdHint":`From: WeCom Admin → Apps → AI Assistant`,"remoteControl.wecomSecretHint":`Enter Secret and press Enter or click Connect`,"remoteControl.addWeComScan":`Scan QR to bind`,"remoteControl.addWeComManual":`Enter Bot ID / Secret`,"remoteControl.scanWecomQr":`Scan the QR code with WeCom`,"remoteControl.fetchingQr":`Fetching QR code...`,"remoteControl.scanQr":`Scan QR code with WeChat`,"remoteControl.streamMode":`Streaming`,"remoteControl.replyMode":`Non-streaming`,"remoteControl.enableStreaming":`Enable streaming`,"remoteControl.disableStreaming":`Disable streaming`,"remoteControl.cardMode":`Card interaction`,"remoteControl.textMode":`Text replies (legacy)`,"remoteControl.wecomGlobalTitle":`Global default (for WeCom bots without per-bot settings)`,"remoteControl.wecomGlobalHint":`Tap to switch the default reply mode; bots with explicit settings are unaffected`,"remoteControl.wecomGlobalStreamOn":`Stream by default`,"remoteControl.wecomGlobalStreamOff":`Default non-streaming`,"remoteControl.wecomGlobalCardsOn":`Card confirmations by default`,"remoteControl.wecomGlobalCardsOff":`Text confirmations by default`,"remoteControl.enableCards":`Enable cards`,"remoteControl.disableCards":`Use text replies`,"sidebar.docs":`Docs`,"docs.title":`Documentation`,"docs.search.placeholder":`Search docs...`,"docs.search.noResults":`No matching documents found`,"docs.search.resultsCount":`{count} results`,"docs.loading":`Loading...`,"docs.loadError":`Failed to load document`,"docs.notFound":`Document not found`,"docs.apiReference":`API Reference`,"docs.toc":`On this page`,"docs.retry":`Retry`,"docs.backToList":`Back to docs`,"docs.expandAll":`Expand all`,"docs.collapseAll":`Collapse all`,"docs.openStandalone":`Open in new window`,"sidebar.stats":`Statistics`,"stats.title":`Statistics`,"stats.loading":`Loading statistics...`,"stats.refresh":`Refresh`,"stats.noData":`No statistics available`,"stats.tab.overview":`Overview`,"stats.tab.models":`Models`,"stats.tab.tools":`Tools`,"stats.sessions":`Sessions`,"stats.messages":`Messages`,"stats.activeDays":`Active Days`,"stats.currentStreak":`Current Streak`,"stats.longestStreak":`Longest Streak`,"stats.peakHour":`Peak Hour`,"stats.longestSession":`Longest Session`,"stats.favoriteModel":`Favorite Model`,"stats.totalTokens":`Total Tokens`,"stats.timeRange":`Stats from the last {days} days`,"stats.heatmap.less":`Less`,"stats.heatmap.more":`More`,"stats.days":`days`,"stats.tokensPerDay":`Tokens per Day`,"stats.allModels":`All Models`,"stats.input":`Input`,"stats.output":`Output`,"stats.cacheRead":`Cache Read`,"stats.cacheHitRate":`Cache Hit Rate`,"stats.cost":`Cost`,"stats.topTools":`Top Tools`,"stats.session.title":`Current Session`,"stats.session.apiDuration":`API Duration`,"stats.session.wallTime":`Wall Time`,"stats.session.linesAdded":`Lines Added`,"stats.session.linesDeleted":`Lines Deleted`,"stats.session.tokens":`Tokens`,"stats.na":`N/A`,"stats.heatmap.messages":`messages`,"stats.funFact.moreTokens":`You've used ~{times}x more tokens than {book}`,"stats.funFact.sameTokens":`You've used the same number of tokens as {book}`,"stats.funFact.longerSession":`Your longest session is ~{times}x longer than {activity}`,"sidebar.traces":`Traces`,"traces.title":`Traces`,"traces.loading":`Loading...`,"traces.refresh":`Refresh`,"traces.clear":`Clear`,"traces.clearConfirm":`Clear all trace data?`,"traces.noData":`No trace data yet. Send a message and traces will be collected automatically.`,"traces.selectWorker":`Select Worker`,"traces.current":`current`,"traces.spanCount":`{count} spans`,"traces.duration":`Duration`,"traces.status.ok":`OK`,"traces.status.error":`Error`,"traces.status.running":`Running`,"traces.status.cancelled":`Cancelled`,"traces.bottleneck":`Bottleneck`,"traces.bottleneckTip":`Slowest span, {pct}% of total`,"traces.spanDetail":`Span Detail`,"traces.spanDetail.type":`Type`,"traces.spanDetail.duration":`Duration`,"traces.spanDetail.model":`Model`,"traces.spanDetail.tokens":`Tokens`,"traces.spanDetail.input":`Input`,"traces.spanDetail.output":`Output`,"traces.spanDetail.error":`Error`,"traces.spanDetail.cancelReason":`Cancel reason`,"traces.spanDetail.attributes":`Attributes`,"traces.legend.agent":`Agent`,"traces.legend.generation":`Generation`,"traces.legend.function":`Function`,"traces.legend.handoff":`Handoff`,"traces.legend.guardrail":`Guardrail`,"traces.back":`Back`,"traces.tab.timeline":`Timeline`,"traces.tab.tree":`Tree`,"traces.tab.flame":`Flame`,"traces.tab.graph":`Graph`,"traces.expandAll":`Expand All`,"traces.collapseAll":`Collapse All`,"traces.search":`Search spans...`,"traces.selfTime":`Self Time`,"traces.spanDetail.overview":`Overview`,"traces.spanDetail.io":`Input/Output`,"traces.noSpans":`No spans`,"traces.noSpansFiltered":`No spans match the current filter.`,"traces.clearFilter":`Clear filter`,"traces.auto":`auto`,"traces.auxiliaryCount":`{count} auxiliary traces (memory, title, etc.)`,"traces.noIO":`No input/output data`,"traces.noAttrs":`No attributes`,"traces.io.expand":`Expand`,"traces.io.collapse":`Collapse`,"traces.io.messages":`Messages`,"traces.io.less":`Less`,"traces.io.moreChars":`+{count} chars`,"traces.fit":`Fit`,"traces.allSessions":`All sessions`,"traces.allInstances":`All instances`,"traces.llmCalls":`{count} LLM`,"traces.errors":`errors`,"traces.noErrors":`No failed traces`,"traces.errorBanner":`{count} failed trace(s) detected`,"traces.errorBannerCta":`Show only errors →`,"traces.errorSummaryTitle":`{count} error(s) in this trace`,"traces.jumpToFirstError":`Jump to first error span`,"traces.copyError":`Copy`,"traces.onlyErrors":`Errors only`,"traces.filter.all":`All`,"traces.filter.error":`Error`,"traces.filter.running":`Running`,"traces.filter.cancelled":`Cancelled`,"traces.filter.ok":`OK`,"sidebar.metrics":`Metrics`,"metrics.title":`System Metrics`,"metrics.loading":`Loading metrics...`,"metrics.refresh":`Refresh`,"metrics.cpu":`CPU`,"metrics.memory":`Memory`,"metrics.disk":`Disk`,"metrics.cores":`cores`,"metrics.workers":`Workers`,"metrics.noWorkers":`No running workers`,"metrics.current":`Current`,"metrics.uptime":`Uptime`,"metrics.version":`Version`,"sidebar.editor":`Editor`,"dock.openFile":`Open file`,"dock.file":`File`,"dock.pickFromTree":`Select a file from the workspace tree`,"dock.open":`Open`,"dock.closeTab":`Close “{name}”`,"dock.closeOthers":`Close Other Tabs`,"dock.closeToRight":`Close Tabs to the Right`,"dock.toggle":`Workbench`,"dock.tabs":`Workbench tabs`,"dock.resize":`Resize workbench`,"dock.collapse":`Collapse workbench`,"dock.fullscreen":`Show workbench fullscreen`,"dock.exitFullscreen":`Exit fullscreen`,"dock.emptyTitle":`Open a workspace tool`,"dock.emptyDescription":`Choose Explorer, Search, Source Control, a file, or Terminal`,"dock.unseen":`{count} new outputs`,"browserPreview.blockedTitle":`This page cannot open in the embedded browser`,"browserPreview.blockedDescription":`The site security policy or sign-in redirects do not support embedded access. Continue in a separate browser tab.`,"browserPreview.openExternal":`Open in browser`,"browserPreview.checking":`Checking whether this page is available…`,"browserPreview.loadFailedTitle":`This page cannot be opened right now`,"browserPreview.loadFailedDescription":`The network may be unavailable, or the page may no longer exist.`,"browserPreview.authRequiredTitle":`Sign-in required in your browser`,"browserPreview.authRequiredDescription":`This page requires credentials that the embedded view cannot safely reuse.`,"browserPreview.redirectLoopTitle":`Too many redirects`,"browserPreview.redirectLoopDescription":`The site could not complete its sign-in or redirect flow. Continue in a separate browser tab.`,"browserPreview.timeoutTitle":`This page is taking too long to load`,"browserPreview.timeoutDescription":`The site has not finished responding. Reload it or continue in a separate browser tab.`,"browserPreview.retry":`Reload`,"browserPreview.tryEmbedded":`Try embedded view anyway`,"browserPreview.failureHint":`If sign-in is required, complete it in a separate browser tab and then retry.`,"editor.title":`Code Editor`,"editor.loading":`Loading...`,"editor.loadingFile":`Loading file...`,"editor.loadError":`Failed to load`,"editor.retryLoad":`Retry loading`,"editor.fileTooLarge":`This file exceeds 2 MB and cannot be opened in the editor`,"editor.noFile":`Select a file to start editing`,"editor.unsaved":`Unsaved`,"editor.saving":`Saving`,"editor.saveFailed":`Failed to save`,"editor.overwrite":`Overwrite on disk`,"editor.moveFailed":`Failed to move`,"editor.save":`Save`,"editor.saveAll":`Save All`,"editor.close":`Close`,"editor.closeTabAriaLabel":`Close tab {name}`,"editor.closeOthers":`Close Others`,"editor.closeAll":`Close All`,"editor.newFile":`New File`,"editor.newFolder":`New Folder`,"editor.rename":`Rename`,"editor.delete":`Delete`,"editor.deleteConfirmTitle":`Confirm Delete`,"editor.deleteConfirmMessage":`Delete the {count} selected item(s)? This action cannot be undone.`,"editor.refresh":`Refresh`,"editor.backToWorkDir":`Back to workspace`,"editor.emptyFolder":`Empty folder`,"editor.explorer":`EXPLORER`,"editor.fileTreeAriaLabel":`Workspace file tree`,"editor.symbolicLink":`Symbolic link`,"editor.toggleSidebar":`Toggle Sidebar`,"editor.collapseAll":`Collapse All`,"editor.showHiddenFiles":`Show Hidden Files`,"editor.hideHiddenFiles":`Hide Hidden Files`,"editor.openFolder":`Open Folder`,"editor.openFolderPlaceholder":`Enter directory path...`,"editor.parentFolder":`Parent Folder`,"editor.pin":`Pin`,"editor.unpin":`Unpin`,"editor.copyPath":`Copy Path`,"editor.copyRelativePath":`Copy Relative Path`,"editor.addToChat":`Add to Chat`,"editor.cut":`Cut`,"editor.copy":`Copy`,"editor.paste":`Paste`,"editor.open":`Open`,"editor.copyName":`Copy Name`,"editor.download":`Download`,"editor.downloadFailed":`Failed to download`,"editor.openInTerminal":`Open in Terminal`,"editor.uploadComplete":`Uploaded {count} file(s)`,"editor.uploadFailed":`Failed to upload`,"editor.uploadStatus":`Uploading {percent}%`,"editor.expandAll":`Expand All`,"editor.cursorPosition":`Ln {line}, Col {col}`,"editor.view.image":`Image`,"editor.view.video":`Video`,"editor.view.svg":`SVG`,"editor.view.markdown":`Markdown Preview`,"editor.view.html":`HTML Preview`,"editor.view.pdf":`PDF`,"editor.view.binary":`Binary`,"editor.revealInExplorer":`Reveal in Explorer`,"editor.closeToRight":`Close to the Right`,"editor.closeSaved":`Close Saved`,"editor.closeSaveFailedTitle":`Unable to Close: {count} Save(s) Failed`,"editor.closeSaveFailedMessage":`{count} tab(s) failed to save. Discard the changes and close?`,"editor.discardAndClose":`Discard and Close`,"editor.quickOpen":`Quick Open File`,"editor.focusExplorer":`Focus Explorer`,"editor.recentFiles":`Recent Files`,"editor.quickOpenPlaceholder":`Type filename to search...`,"editor.quickOpenEmpty":`No matching files`,"editor.quickOpenLoading":`Loading file list...`,"editor.openEditors":`Open editors`,"editor.scrollTabsLeft":`Scroll tabs left`,"editor.scrollTabsRight":`Scroll tabs right`,"editor.selected":`selected`,"editor.lines":`lines`,"editor.preview":`Switch to Preview`,"editor.source":`Switch to Source`,"editor.openInNewWindow":`Open in New Window`,"editor.mobileBack":`Back to file tree`,"ide.explorer":`Explorer`,"ide.search":`Search`,"ide.sourceControl":`Source Control`,"ide.terminal":`Terminal`,"ide.terminals":`Terminal tabs`,"ide.allTerminals":`All terminals`,"ide.allTerminalsAriaLabel":`View all {count} terminals`,"ide.terminalOrdinal":`Terminal {index}`,"ide.newTerminal":`New Terminal`,"ide.toggleSidebar":`Toggle Sidebar`,"ide.toggleTerminal":`Toggle Terminal`,"ide.resizeSidebar":`Resize sidebar`,"ide.resizeSidePanel":`Resize side panel`,"ide.resizeBottomPanel":`Resize bottom panel`,"ide.resizeSplit":`Resize split panes`,"ide.hidePanel":`Hide Panel`,"ide.maximizePanel":`Maximize Panel`,"ide.restorePanel":`Restore Panel Size`,"ide.listView":`List View`,"ide.treeView":`Tree View`,"ide.refresh":`Refresh`,"ide.scm.title":`Source Control`,"ide.scm.repositories":`Repositories`,"ide.scm.changes":`Changes`,"ide.scm.stagedChanges":`Staged Changes`,"ide.scm.untracked":`Untracked`,"ide.scm.noChanges":`No changes`,"ide.scm.notGitRepo":`Not a Git repository`,"ide.scm.commitPlaceholder":`Message (⌘Enter to commit)`,"ide.scm.commit":`Commit`,"ide.scm.push":`Push`,"ide.scm.pull":`Pull`,"ide.scm.stage":`Stage`,"ide.scm.unstage":`Unstage`,"ide.scm.stageAll":`Stage All`,"ide.scm.unstageAll":`Unstage All`,"ide.scm.discard":`Discard Changes`,"ide.scm.discardAll":`Discard All`,"ide.scm.copyPath":`Copy Path`,"ide.scm.openFile":`Open File`,"ide.scm.binaryRevisionPreviewUnavailable":`Staged or deleted binary revisions cannot be previewed yet`,"ide.scm.createBranch":`Create new branch...`,"ide.scm.newBranchPlaceholder":`New branch name...`,"ide.scm.branchSearchPlaceholder":`Select a branch or tag to checkout`,"ide.scm.switchBranch":`Switch Branch`,"ide.scm.localBranches":`branches`,"ide.scm.remoteBranches":`remotes`,"ide.scm.noBranchMatch":`No matching branches`,"ide.scm.noBranches":`No branches found`,"ide.scm.noBranch":`No branch`,"ide.scm.createBranchNamed":`Create branch "{name}"`,"ide.scm.loadingBranches":`Loading branches…`,"ide.scm.graph":`Graph`,"ide.scm.closeDiff":`Close Diff`,"ide.scm.loadingDiff":`Loading diff...`,"ide.scm.diff":`Diff`,"ide.scm.feedback.success":`Operation completed`,"ide.scm.feedback.failed":`Unable to complete operation`,"ide.scm.feedback.switched":`Switched to branch “{name}”.`,"ide.scm.feedback.created":`Created branch “{name}”.`,"ide.scm.feedback.pushed":`Changes pushed successfully.`,"ide.scm.feedback.pulled":`Changes pulled successfully.`,"ide.scm.feedback.completed":`Git operation completed.`,"ide.scm.feedback.details":`Show technical details`,"ide.scm.feedback.retry":`Retry`,"ide.scm.error.busy":`Another Git operation is using this repository. Wait for it to finish; if the problem persists, confirm no Git process is still running and retry.`,"ide.scm.error.localChanges":`Your uncommitted changes would be overwritten. Save, stage, or discard them before switching branches.`,"ide.scm.error.untrackedFiles":`Untracked files would be overwritten. Move, commit, or remove them before switching branches.`,"ide.scm.error.conflicts":`The repository has unresolved conflicts. Resolve them before switching branches.`,"ide.scm.error.branchNotFound":`This branch could not be found. Refresh the branch list and try again.`,"ide.scm.error.switchFailed":`Could not switch branches. Check the repository state and try again.`,"ide.scm.error.operationFailed":`The Git operation failed. Please try again.`,"ide.search.title":`Search`,"ide.search.placeholder":`Search`,"ide.search.searching":`Searching...`,"ide.search.noResults":`No results found`,"ide.search.results":`{count} results in {files} files`,"ide.search.matchCase":`Match Case`,"ide.search.wholeWord":`Match Whole Word`,"ide.search.regex":`Use Regular Expression`,"ide.search.filesToInclude":`files to include`,"ide.search.includePlaceholder":`e.g. *.ts, src/**/include`,"ide.search.filesToExclude":`files to exclude`,"ide.search.excludePlaceholder":`e.g. node_modules, *.min.js`,"ide.search.useExcludeSettings":`Use Exclude Settings and Ignore Files`,"ide.search.toggleFilters":`Toggle Filters`,"ide.search.refresh":`Refresh Search`,"ide.search.clear":`Clear Search`,"ide.search.cancel":`Stop Search`,"ide.search.limitReached":`Showing the first {count} results`,"ide.search.partialTimedOut":`Search timed out; showing partial results`,"ide.search.partialError":`Search did not complete; showing partial results`,"ide.search.resultsLabel":`Search results`,"ide.search.failed":`Search failed`,"ide.search.timedOut":`Search timed out`,"sidebar.workers":`Workers`,"workers.title":`Worker Processes`,"workers.refresh":`Refresh`,"workers.active":`Active Workers`,"workers.empty":`No active worker processes`,"workers.daemon":`Daemon`,"workers.daemon.running":`Running`,"workers.daemon.stopped":`Stopped`,"workers.daemon.start":`Start`,"workers.daemon.starting":`Starting...`,"workers.daemon.stop":`Stop`,"workers.daemon.restart":`Restart`,"workers.action.logs":`Logs`,"workers.action.open":`Open`,"workers.action.kill":`Kill`,"workers.action.kill.confirm":`Are you sure you want to kill this worker process?`,"sidebar.logs":`Logs`,"logs.title":`Log Viewer`,"logs.selectWorker":`Select Worker`,"logs.current":`current`,"logs.search":`Search logs...`,"logs.autoRefresh":`Auto Refresh`,"logs.refresh":`Refresh`,"logs.empty":`No log content`,"command.autocompact.description":`Set the context window size used for automatic compaction`,"command.background.description":`Move this conversation to a background session and open the agent list`,"command.bg.description":`Move this conversation to a background session (alias for /background)`,"command.branch.description":`Create a branch of the current conversation at this point`,"command.btw.description":`Open a side conversation without interrupting the main Agent work`,"command.code-review.description":`Review the current code changes for correctness and quality, with optional fixes`,"command.copy.description":`Copy the latest response`,"command.debug.description":`Enable debug logging and diagnose session issues`,"command.deep-research.description":`Research a question from multiple web sources and produce a cited report`,"command.effort.description":`Set the model reasoning effort level`,"command.clear.description":`Start a fresh conversation (previous chats remain accessible via /resume)`,"command.context.description":`Calculate and display context token distribution`,"command.cost.description":`Show the total cost and duration of the current session`,"command.doctor.description":`Diagnose and verify your CodeBuddy installation and settings`,"command.feedback.description":`Open the issue feedback page to report bugs or suggest features`,"command.fork.description":`Create a branch of the current conversation at this point (alias for /branch)`,"command.fork-bg.description":`Copy this conversation into a new background session and keep working here`,"command.gateway.description":`Manage the remote control gateway. Subcommands: "status" to show current status, "stop" to stop the gateway, "token" to regenerate access token, "tunnel" to start with tunnel`,"command.goal.title":`Goal`,"command.goal.description":`Set a goal to keep working toward`,"command.remote-control.description":`Manage remote control long connection clients (start, stop, status, list)`,"command.login.description":`Switch Tencent Cloud CodeBuddy accounts`,"command.model:lite.description":`Set the fast, low-cost model used for lightweight subtasks`,"command.model:reasoning.description":`Set the enhanced reasoning model used for complex analysis`,"command.model:text-to-video.description":`Set or list text-to-video models`,"command.model:image-to-video.description":`Set or list image-to-video models`,"command.logout.description":`Sign out from your CodeBuddy Code account`,"command.plan.description":`Preview the current plan file content`,"command.pr-comments.description":`Get comments from a GitHub pull request`,"command.release-notes.description":`View release notes`,"command.review.description":`Review a pull request`,"command.skills.description":`List available skills`,"command.simplify.description":`Simplify changed code without changing its behavior`,"command.todos.description":`Display the current session's todo list`,"command.verify.description":`Run the app and tests to verify code changes work as expected`,"command.workflows.description":`List running and saved Dynamic Workflows`,"command.reload-plugins.description":`Reload all plugins, skills, agents, hooks, and MCP/LSP servers without restarting`,"command.plugin-validate.description":`Validate a plugin directory structure and manifest`,"command.init.description":`Analyzing your codebase…`,"command.compact.description":`Clear conversation history but keep a summary in context. Optional: /compact [instructions for summarization]`,"command.upgrade.description":`Open upgrade page in browser`,"command.statusline.description":`Set up Codebuddy Code's status line UI`,"command.security-review.description":`Complete a security review of the pending changes on the current branch`,"command.insights.description":`Generate AI-powered insights about your CodeBuddy Code usage patterns and activity`,"command.loop.description":`Run a prompt or slash command on a recurring interval (e.g. /loop 5m /foo, defaults to 10m)`,"command.task-manager.description":`Team task management - Smart task entry, assignment, tracking and analysis`,"sidebar.changes":`Changes`,"fileChanges.title":`Changes`,"fileChanges.changesSection":`FILE CHANGES`,"fileChanges.empty":`No file changes`,"fileChanges.showChanges":`Show file changes`,"fileChanges.hideChanges":`Hide file changes`,"fileChanges.revertAll":`Revert all`,"fileChanges.revertCode":`Revert code`,"fileChanges.revertChat":`Revert chat`,"fileChanges.revertCodeAndChat":`Revert all`,"fileChanges.checkpoints":`Checkpoints`,"fileChanges.noCheckpoints":`No checkpoints`,"rewind.action":`Rewind to here`,"rewind.title":`Rewind to this message`,"rewind.conversationForked":`Messages after this one will be discarded; edit and resend if needed.`,"rewind.codeRestored":`The code will be restored +{additions} -{deletions} in {files}.`,"rewind.noCodeChanges":`No code changes in this turn; conversation only.`,"rewind.warning":`Rewinding does not affect files edited manually or via bash.`,"rewind.failed":`Rewind failed, or the view could not refresh. Please retry (refresh the page if needed).`,"filePreview.binaryNotSupported":`This file cannot be previewed in the editor`,"filePreview.download":`Download`,"error.viewCrashed":`This view encountered an error`,"error.appCrashed":`Something went wrong`,"error.newChatFailed":`Failed to create new chat, please try again`,"error.jobCreateFailed":`Failed to create agent, please try again`,"error.switchSessionFailed":`Failed to switch session, please try again`,"error.sessionOccupied":`This session is occupied by another terminal or process and cannot be switched to`,"error.sessionOccupiedPage":`This session is in use by another window or device.`,"error.acpConnectStuck":`This is taking longer than usual`,"error.acpConnectChecking":`Checking whether this is a timeout or another window holding the session…`,"error.acpDisconnected":`The agent connection dropped. Your last message may not have been sent.`,"error.acpNoResponse":`No reply came back after send. The connection may have dropped.`,"error.sessionUnavailable":`This session is currently unavailable. Please try again later.`,"commandPalette.placeholder":`Type a command...`,"commandPalette.commands":`Commands`,"commandPalette.views":`Views`,"commandPalette.actions":`Actions`,"commandPalette.noResults":`No matching commands`,"commandPalette.newChat":`New Chat`,"commandPalette.openSessionSwitcher":`Open conversations`,"commandPalette.toggleTheme":`Toggle Theme`,"commandPalette.toggleLocale":`Toggle Language`,"commandPalette.tip":`Open command palette`,"app.confirm":`Confirm`,"app.cancel":`Cancel`,"tool.toolSingular":`tool executed`,"tool.toolPlural":`tools executed`,"tool.mcpAppLoadHint":`Click to load interactive UI`,"keybindings.title":`Keybindings`,"keybindings.search.placeholder":`Search keybindings... (e.g. submit, ctrl+enter)`,"keybindings.source.default":`Default`,"keybindings.source.user":`User`,"keybindings.record.title":`Record Shortcut`,"keybindings.record.hint":`Press desired key combination...`,"keybindings.record.conflict":`Conflicts with`,"keybindings.action.edit":`Edit`,"keybindings.action.reset":`Reset`,"keybindings.action.unbind":`Unbind`,"keybindings.reset.all":`Reset all`,"keybindings.noResults":`No matching keybindings`,"keybindings.empty":`No keybindings`,"keybindings.loading":`Loading...`,"keybindings.ctx.Global":`Global`,"keybindings.ctx.Chat":`Chat Input`,"keybindings.ctx.InputBox":`Text Input`,"keybindings.ctx.Terminal":`Terminal`,"keybindings.ctx.Autocomplete":`Autocomplete`,"keybindings.ctx.Confirmation":`Confirmation`,"keybindings.ctx.HistorySearch":`History Search`,"keybindings.ctx.Task":`Task Running`,"keybindings.ctx.Settings":`Settings`,"keybindings.ctx.CommandPalette":`Command Palette`,"keybindings.ctx.Select":`Select List`,"keybindings.ctx.PermissionDialog":`Permission Dialog`,"keybindings.ctx.Help":`Help`,"keybindings.ctx.Plugin":`Plugin`,"keybindings.ctx.DiffDialog":`Diff Dialog`,"keybindings.ctx.MessageSelector":`Message Selector`,"keybindings.ctxDesc.Global":`Active everywhere, regardless of focus`,"keybindings.ctxDesc.Chat":`When the chat input is focused`,"keybindings.ctxDesc.InputBox":`When a text input is active`,"keybindings.ctxDesc.Terminal":`When the terminal view is active`,"keybindings.ctxDesc.Autocomplete":`When autocomplete menu is visible`,"keybindings.ctxDesc.Confirmation":`When a confirmation/permission dialog is shown`,"keybindings.ctxDesc.HistorySearch":`When searching command history (ctrl+r)`,"keybindings.ctxDesc.Task":`When a task/agent is running in the foreground`,"keybindings.ctxDesc.Settings":`When the settings panel is open`,"keybindings.ctxDesc.CommandPalette":`When the command palette is open`,"keybindings.ctxDesc.Select":`When a select/list component is focused`,"keybindings.ctxDesc.PermissionDialog":`When a tool permission dialog is shown`,"keybindings.ctxDesc.Help":`When the help overlay is open`,"keybindings.ctxDesc.Plugin":`When the plugin dialog is open`,"keybindings.ctxDesc.DiffDialog":`When the diff dialog is open`,"keybindings.ctxDesc.MessageSelector":`When the message selector (rewind) is open`,"keybindings.act.app:interrupt":`Interrupt`,"keybindings.act.app:exit":`Exit`,"keybindings.act.app:redraw":`Redraw Screen`,"keybindings.act.app:toggleTodos":`Toggle Todos`,"keybindings.act.app:toggleTranscript":`Toggle Transcript`,"keybindings.act.app:toggleSidebar":`Toggle Sidebar`,"keybindings.act.app:toggleTerminal":`Toggle Terminal`,"keybindings.act.app:commandPalette":`Command Palette`,"keybindings.act.app:newChat":`New Chat`,"keybindings.act.app:settings":`Settings`,"keybindings.act.app:focusInput":`Focus Input`,"keybindings.act.app:keybindings":`Keybinding Settings`,"keybindings.act.history:search":`Search History`,"keybindings.act.history:previous":`Previous History`,"keybindings.act.history:next":`Next History`,"keybindings.act.history:open":`Recent chats`,"keybindings.act.sessions:switcher":`Conversation switcher`,"keybindings.act.chat:cancel":`Cancel`,"keybindings.act.chat:submit":`Submit`,"keybindings.act.chat:newline":`New Line`,"keybindings.act.chat:killAgents":`Kill Agents`,"keybindings.act.chat:cycleMode":`Cycle Mode`,"keybindings.act.chat:modelPicker":`Model Picker`,"keybindings.act.chat:thinkingToggle":`Toggle Thinking`,"keybindings.act.chat:undo":`Undo`,"keybindings.act.chat:externalEditor":`External Editor`,"keybindings.act.chat:stash":`Stash`,"keybindings.act.chat:imagePaste":`Paste Image`,"keybindings.act.autocomplete:accept":`Accept`,"keybindings.act.autocomplete:dismiss":`Dismiss`,"keybindings.act.autocomplete:previous":`Previous`,"keybindings.act.autocomplete:next":`Next`,"keybindings.act.confirm:yes":`Confirm`,"keybindings.act.confirm:no":`Cancel`,"keybindings.act.confirm:previous":`Previous`,"keybindings.act.confirm:next":`Next`,"keybindings.act.confirm:toggle":`Toggle`,"keybindings.act.confirm:toggleExplanation":`Toggle Explanation`,"keybindings.act.task:background":`Run in Background`,"keybindings.act.historySearch:next":`Next`,"keybindings.act.historySearch:accept":`Accept`,"keybindings.act.historySearch:cancel":`Cancel`,"keybindings.act.historySearch:execute":`Execute`,"keybindings.act.settings:close":`Close Settings`,"keybindings.act.settings:search":`Search Settings`,"keybindings.act.select:previous":`Previous`,"keybindings.act.select:next":`Next`,"keybindings.act.select:accept":`Select`,"keybindings.act.select:cancel":`Cancel`,"keybindings.act.commandPalette:close":`Close Palette`,"keybindings.act.commandPalette:execute":`Execute Command`,"keybindings.act.commandPalette:previous":`Previous`,"keybindings.act.commandPalette:next":`Next`,"keybindings.act.permission:toggleDebug":`Toggle Debug`,"keybindings.act.diff:dismiss":`Close Diff`,"keybindings.act.diff:previousFile":`Previous File`,"keybindings.act.diff:nextFile":`Next File`,"keybindings.act.diff:viewDetails":`View Details`,"keybindings.act.plugin:toggle":`Toggle Plugin`,"keybindings.act.plugin:install":`Install Plugin`,"keybindings.act.help:dismiss":`Close Help`,"keybindings.act.transcript:exit":`Exit Transcript`,"keybindings.act.transcript:toggleShowAll":`Show All`,"keybindings.act.messageSelector:up":`Up`,"keybindings.act.messageSelector:down":`Down`,"keybindings.act.messageSelector:top":`Top`,"keybindings.act.messageSelector:bottom":`Bottom`,"keybindings.act.messageSelector:select":`Select`,"common.close":`Close`,"changes.revert":`Revert`,"changes.revertDirectory":`Revert directory`,"message.clickToEnlarge":`Click to enlarge`,"channel.botIdPlaceholder":`Enter Bot ID`,"channel.secretPlaceholder":`Enter Secret`,"filePreview.zoomOut":`Zoom Out`,"filePreview.zoomIn":`Zoom In`,"filePreview.fitToWindow":`Fit to Window`,"filePreview.actualSize":`Actual Size (1:1)`,"filePreview.pdfPreview":`PDF Preview`,"filePreview.videoNotSupported":`This browser cannot play this video format`,"goal.status.usage":`Usage: /goal <condition>
|
|
10
10
|
Example: /goal all tests pass`,"goal.status.tooLong":`Goal condition is limited to {max} characters (got {actual})`,"goal.status.hooksDisabled":`/goal cannot run while hooks are disabled (disableAllHooks or allowManagedHooksOnly is set).`,"goal.status.set":`Goal set: {condition}`,"goal.status.setReplaced":`Goal replaced: {prev} → {condition}`,"goal.status.cleared":`Goal cleared: {prev}`,"goal.status.noGoal":`No goal set`,"goal.status.active":`Goal active: {condition}`,"goal.status.paused":`Goal paused: {condition}`,"goal.status.resumed":`Goal active: {condition}`,"goal.progress.title":`Goal not yet met… continuing`,"goal.progress.expand":`click to expand`,"goal.progress.condition":`Goal`,"goal.progress.reason":`Reason`,"goal.recap.active":`Goal active`,"goal.recap.paused":`Goal paused`,"goal.recap.achieved":`Goal achieved`,"goal.recap.impossible":`Goal could not be achieved`,"goal.recap.empty.title":`No goal set yet`,"goal.recap.empty.hint":`Use /goal <condition> to set a session-scoped stop hook.`,"goal.recap.empty.example":`Example: /goal all tests pass`,"goal.recap.footer.setAnother":`/goal <condition>`,"goal.recap.footer.toSetAnother":` to set another · `,"goal.recap.footer.escDismiss":`to dismiss`,"goal.recap.stats.turn":`turn`,"goal.recap.stats.turns":`turns`,"goal.recap.stats.token":`token`,"goal.recap.stats.tokens":`tokens`,"goal.bar.active":`/goal active {condition} · {elapsed}`,"goal.bar.paused":`/goal paused {condition} · {elapsed}`,"goal.bar.edit":`Edit goal`,"goal.bar.pause":`Pause goal`,"goal.bar.resume":`Resume goal`,"goal.bar.clear":`Clear goal`,"goal.resume.prompt":`Continue the active goal: {condition}`,"goal.edit.title":`Edit goal`,"goal.edit.save":`Save`,"goal.edit.cancel":`Cancel`,"goal.edit.placeholder":`Describe your goal and define measurable outcomes for best results`,"mcp.startup.booting":`Booting MCP server: {name}`,"mcp.startup.starting":`Starting MCP servers ({completed}/{total}): {names}`,"mcp.startup.elapsed":`{seconds}s`,"mcp.startup.ready":`MCP servers ready ({total})`,"mcp.startup.failed":`MCP failed: {names}`,"mcp.startup.timedOut":`MCP timed out: {names}`}};function er(e,t){return t?e.replace(/\{(\w+)\}/g,(e,n)=>{let r=t[n];return r==null?e:String(r)}):e}function tr(){let{mode:e,resolved:t,setLocale:n,toggle:r}=$();function i(e,n){return er($n[t][e]??e,n)}function a(e,n){let r=$n[t][e];if(r!==void 0)return er(r,n)}return{t:i,tryT:a,locale:e,resolved:t,setLocale:n,toggleLocale:r}}export{ot as $,Bt as A,ye as At,Ct as B,S as Bt,rn as C,Fe as Ct,dn as D,ue as Dt,un as E,le as Et,P as F,u as Ft,dt as G,g as Gt,st as H,_ as Ht,F as I,d as It,_t as J,ke as Jt,rt as K,Le as Kt,zt as L,te as Lt,L as M,x as Mt,I as N,v as Nt,an as O,Pe as Ot,kt as P,p as Pt,at as Q,It as R,m as Rt,en as S,Te as St,on as T,fe as Tt,vt as U,ee as Ut,it as V,Ve as Vt,pt as W,y as Wt,ft as X,ce as Xt,gt as Y,De as Yt,ut as Z,G as _,ze as _t,Rn as a,D as at,W as b,_e as bt,Z as c,Ge as ct,kn as d,i as dt,lt as et,X as f,Me as ft,fn as g,Ne as gt,cn as h,Ee as ht,Jn as i,M as it,Vt as j,oe as jt,Tt as k,Se as kt,Mn as l,a as lt,K as m,h as mt,$n as n,Je as nt,Nn as o,O as ot,Cn as p,n as pt,mt as q,w as qt,$ as r,Ye as rt,Q as s,E as st,tr as t,A as tt,q as u,r as ut,sn as v,f as vt,nn as w,je as wt,Qt as x,Re as xt,ln as y,Ae as yt,xt as z,Be as zt};
|