@vantran-se/openchamber-web 2.0.9 → 2.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/dist/assets/{CodeMirrorCommentWidgets-DngoXxGT.js → CodeMirrorCommentWidgets-e9rY9Jxg.js} +1 -1
  2. package/dist/assets/{DiffView-UeB7OS2J.js → DiffView-rYnmKnFF.js} +1 -1
  3. package/dist/assets/{FilesView-Cs3Y7IF5.js → FilesView-DtzJk1Ke.js} +3 -3
  4. package/dist/assets/{GitView-DsJqHet1.js → GitView-DYd5gOSc.js} +1 -1
  5. package/dist/assets/{GuestAttachDialog-CN0FTkqY.js → GuestAttachDialog-Bsi0q3M9.js} +1 -1
  6. package/dist/assets/{GuestSurfacePane-BFbUwJOB.js → GuestSurfacePane-CYMRe3EI.js} +1 -1
  7. package/dist/assets/{JsonTreeView-B2artBdi.js → JsonTreeView-DIy-frOy.js} +1 -1
  8. package/dist/assets/{LinearIssuesView-DCcXvS3Q.js → LinearIssuesView-DDHJKaVb.js} +1 -1
  9. package/dist/assets/{MarkdownImageGallery-Du-Ph58N.js → MarkdownImageGallery-BMQ4KHaO.js} +1 -1
  10. package/dist/assets/{MarkdownRendererImpl-CnXfZsIi.js → MarkdownRendererImpl-CQi_ZSPc.js} +1 -1
  11. package/dist/assets/{OnboardingScreen-DdB_pV9d.js → OnboardingScreen-DiMFS3A7.js} +1 -1
  12. package/dist/assets/{PatchDiff-JvRN2s5u.js → PatchDiff-4jmPWx6l.js} +1 -1
  13. package/dist/assets/{PierreDiffViewer-BOIbtTSo.js → PierreDiffViewer-DKHxCmze.js} +1 -1
  14. package/dist/assets/{PlanView-DYZs8zCF.js → PlanView-CN21khuJ.js} +1 -1
  15. package/dist/assets/{PluginPane-CaHXDA-2.js → PluginPane-Dx0_Dldo.js} +1 -1
  16. package/dist/assets/{SettingsView-CfFMLncG.js → SettingsView-CBGx68I6.js} +1 -1
  17. package/dist/assets/{SettingsWindow-0vSQTxkV.js → SettingsWindow-B8RpyNyO.js} +1 -1
  18. package/dist/assets/{SubmoduleDiffSummary-DhLlAYSb.js → SubmoduleDiffSummary-hkelCkS-.js} +1 -1
  19. package/dist/assets/{ToolOutputDialog-CdV4zEAG.js → ToolOutputDialog-UbbhHm0d.js} +1 -1
  20. package/dist/assets/{ToolPartDiffPreview-XL2mZzAG.js → ToolPartDiffPreview-7FbKWkeu.js} +1 -1
  21. package/dist/assets/{VirtualizedFileDiff-ACObo6xZ.js → VirtualizedFileDiff-DapU3oMs.js} +1 -1
  22. package/dist/assets/{WalkthroughView-B-3eK3lX.js → WalkthroughView-DhvkEmfP.js} +1 -1
  23. package/dist/assets/{appThemeRegistry-CgfpF2VR.js → appThemeRegistry-CWAKiwky.js} +1 -1
  24. package/dist/assets/{ar-SA-G6X2FPQ2-ChXWTl2B.js → ar-SA-G6X2FPQ2-DswVk5Qr.js} +1 -1
  25. package/dist/assets/{az-AZ-76LH7QW2-qjuQaC-s.js → az-AZ-76LH7QW2-DjkREsRV.js} +1 -1
  26. package/dist/assets/{bg-BG-XCXSNQG7-dsvyn4OJ.js → bg-BG-XCXSNQG7-DQo0fDKV.js} +1 -1
  27. package/dist/assets/{bn-BD-2XOGV67Q-BjdT9u1P.js → bn-BD-2XOGV67Q-CzA0IjiR.js} +1 -1
  28. package/dist/assets/{ca-ES-6MX7JW3Y-BTTmpcqZ.js → ca-ES-6MX7JW3Y-L92o9vc1.js} +1 -1
  29. package/dist/assets/{commitAndPush-dBUe7z8F.js → commitAndPush-D51hG7WM.js} +1 -1
  30. package/dist/assets/{computeVirtualFileMetrics-DfI7BTln.js → computeVirtualFileMetrics-BWISD0Ee.js} +1 -1
  31. package/dist/assets/{cs-CZ-2BRQDIVT-C5rG2tZX.js → cs-CZ-2BRQDIVT-BXRAPYTK.js} +1 -1
  32. package/dist/assets/{da-DK-5WZEPLOC-BOaJLF6Z.js → da-DK-5WZEPLOC-Be9eTSFu.js} +1 -1
  33. package/dist/assets/{de-DE-XR44H4JA-Dt-4U2No.js → de-DE-XR44H4JA-D7jcygnK.js} +1 -1
  34. package/dist/assets/{de-DoDk6ixL.js → de-Dzva6tmf.js} +1 -1
  35. package/dist/assets/{el-GR-BZB4AONW-CR60bCOY.js → el-GR-BZB4AONW-DWPB-4gi.js} +1 -1
  36. package/dist/assets/{es-uuDOJL65.js → es-Be7FJA1p.js} +1 -1
  37. package/dist/assets/{es-ES-U4NZUMDT-BxBSKTXR.js → es-ES-U4NZUMDT-BteMlYd0.js} +1 -1
  38. package/dist/assets/{eu-ES-A7QVB2H4-DCoZ1mko.js → eu-ES-A7QVB2H4-D3K4uMB7.js} +1 -1
  39. package/dist/assets/{fa-IR-HGAKTJCU-CGlSV3Cv.js → fa-IR-HGAKTJCU-D7LwSGvX.js} +1 -1
  40. package/dist/assets/{fi-FI-Z5N7JZ37-DjiU77q2.js → fi-FI-Z5N7JZ37-61Yx90sI.js} +1 -1
  41. package/dist/assets/{fr-C0viImM8.js → fr-CvtTZ_7n.js} +1 -1
  42. package/dist/assets/{fr-FR-RHASNOE6-tQI46EwI.js → fr-FR-RHASNOE6-BokbdDAr.js} +1 -1
  43. package/dist/assets/{gl-ES-HMX3MZ6V-UebXQim9.js → gl-ES-HMX3MZ6V-CfKWvFjV.js} +1 -1
  44. package/dist/assets/{he-IL-6SHJWFNN-CrEAMSem.js → he-IL-6SHJWFNN-BiuDhPeJ.js} +1 -1
  45. package/dist/assets/{hi-IN-IWLTKZ5I-CDElf1It.js → hi-IN-IWLTKZ5I-CBpbpt_D.js} +1 -1
  46. package/dist/assets/{hu-HU-A5ZG7DT2-BxrPciUB.js → hu-HU-A5ZG7DT2-YdbIKZJs.js} +1 -1
  47. package/dist/assets/{id-ID-SAP4L64H-BEUMSOdC.js → id-ID-SAP4L64H-B6lOIjuX.js} +1 -1
  48. package/dist/assets/{index-BW492zXv.js → index-BvpIhpBI.js} +1 -1
  49. package/dist/assets/{index-hsqFIGlo.js → index-CxBGclAj.js} +1 -1
  50. package/dist/assets/{isDiffPlainText-BrLxBox_.js → isDiffPlainText-DU3lrpLL.js} +1 -1
  51. package/dist/assets/{isFilePlainText-Cgi_4AsZ.js → isFilePlainText-udb3VTt2.js} +1 -1
  52. package/dist/assets/{it-IT-JPQ66NNP-DU7yvppw.js → it-IT-JPQ66NNP-Bmx3ltTW.js} +1 -1
  53. package/dist/assets/{ja-B9orD75V.js → ja-BPgcBIXr.js} +1 -1
  54. package/dist/assets/{ja-JP-DBVTYXUO-3JN7QvVc.js → ja-JP-DBVTYXUO-Ble1Hn10.js} +1 -1
  55. package/dist/assets/{kaa-6HZHGXH3-ZZvAjpex.js → kaa-6HZHGXH3-DZbQ2VK_.js} +1 -1
  56. package/dist/assets/{kab-KAB-ZGHBKWFO-C4wThQdT.js → kab-KAB-ZGHBKWFO-iJv1iHzt.js} +1 -1
  57. package/dist/assets/{kk-KZ-P5N5QNE5-DtGbDE5-.js → kk-KZ-P5N5QNE5-CVPa7-_X.js} +1 -1
  58. package/dist/assets/{km-KH-HSX4SM5Z-BBzQ-auj.js → km-KH-HSX4SM5Z-CG3n2D2z.js} +1 -1
  59. package/dist/assets/{ko-DMWq9y4E.js → ko-DavkJfF9.js} +1 -1
  60. package/dist/assets/{ko-KR-MTYHY66A-DKypF9JQ.js → ko-KR-MTYHY66A-4ypCzC-G.js} +1 -1
  61. package/dist/assets/{ku-TR-6OUDTVRD-D9ejnihQ.js → ku-TR-6OUDTVRD-rnEkr74f.js} +1 -1
  62. package/dist/assets/{lt-LT-XHIRWOB4-Dqmjn0mI.js → lt-LT-XHIRWOB4-CyRnYc4K.js} +1 -1
  63. package/dist/assets/{lv-LV-5QDEKY6T-UrP5oB7q.js → lv-LV-5QDEKY6T-ZRIiC6FR.js} +1 -1
  64. package/dist/assets/{main-xwL5wKzs.js → main-CrXZnahe.js} +2 -2
  65. package/dist/assets/{main-BjJBl7Nu.js → main-xs-JggnC.js} +4 -4
  66. package/dist/assets/{markdownCore-DSFyd8zF.js → markdownCore-CUxMtJCS.js} +1 -1
  67. package/dist/assets/{miniChat-DYbqo1MM.js → miniChat-BISrLEQj.js} +2 -2
  68. package/dist/assets/{mobile-BfD16Eag.js → mobile-C5yhjorl.js} +2 -2
  69. package/dist/assets/{mr-IN-CRQNXWMA-IPWmH5Ni.js → mr-IN-CRQNXWMA-UgSO2DIH.js} +1 -1
  70. package/dist/assets/{my-MM-5M5IBNSE-BLfvJLfS.js → my-MM-5M5IBNSE-D_F1DCJR.js} +1 -1
  71. package/dist/assets/{nb-NO-T6EIAALU-DpTcOSVU.js → nb-NO-T6EIAALU-oIGhTIX7.js} +1 -1
  72. package/dist/assets/{nl-NL-IS3SIHDZ-BnEpZrEO.js → nl-NL-IS3SIHDZ-cScIrIxG.js} +1 -1
  73. package/dist/assets/{nn-NO-6E72VCQL-cguGGiOn.js → nn-NO-6E72VCQL-CjEAl_Lv.js} +1 -1
  74. package/dist/assets/{oc-FR-POXYY2M6-DZRflDPj.js → oc-FR-POXYY2M6-1rehXYxp.js} +1 -1
  75. package/dist/assets/{pa-IN-N4M65BXN-B4LAi-bY.js → pa-IN-N4M65BXN-7iWEsMEJ.js} +1 -1
  76. package/dist/assets/{patchFileDiff-DkL8Aa2N.js → patchFileDiff-DzgiH2zi.js} +1 -1
  77. package/dist/assets/{percentages-BXMCSKIN-ChsKj3Ud.js → percentages-BXMCSKIN-nJkK2U43.js} +4 -4
  78. package/dist/assets/{pl-DOQ2hiXE.js → pl-DU7WIv6_.js} +1 -1
  79. package/dist/assets/{pl-PL-T2D74RX3-DIa8_Rxw.js → pl-PL-T2D74RX3-8-4_uRcY.js} +1 -1
  80. package/dist/assets/{pt-BR-5N22H2LF-CjvHq8Nl.js → pt-BR-5N22H2LF-5f518RJn.js} +1 -1
  81. package/dist/assets/{pt-BR-GRNT4bJk.js → pt-BR-nKukDIco.js} +1 -1
  82. package/dist/assets/{pt-PT-UZXXM6DQ-De7WYkMm.js → pt-PT-UZXXM6DQ-CX60-bds.js} +1 -1
  83. package/dist/assets/{renderElectronMiniChatApp-COuZPzkA.js → renderElectronMiniChatApp-BsUuzGo8.js} +2 -2
  84. package/dist/assets/{renderMobileApp-BO162-O8.js → renderMobileApp-4lMkhU0J.js} +3 -3
  85. package/dist/assets/{ro-RO-JPDTUUEW-8cucu0w7.js → ro-RO-JPDTUUEW-WRbjlbWZ.js} +1 -1
  86. package/dist/assets/{ru-RU-B4JR7IUQ-C-EfBvoP.js → ru-RU-B4JR7IUQ-BOe15dMj.js} +1 -1
  87. package/dist/assets/{runtimeEndpointReset-B_5A-WIc.js → runtimeEndpointReset-D56xMbiw.js} +19 -19
  88. package/dist/assets/{scheduledTasksApi-MxDvG-t3.js → scheduledTasksApi-BZMS2h6Z.js} +1 -1
  89. package/dist/assets/{shikiHighlight-B39UxQvQ.js → shikiHighlight-BPUnGgQg.js} +1 -1
  90. package/dist/assets/{si-LK-N5RQ5JYF-Dtp4SfIy.js → si-LK-N5RQ5JYF-DdWuRf76.js} +1 -1
  91. package/dist/assets/{sk-SK-C5VTKIMK-C2URq6ko.js → sk-SK-C5VTKIMK-C6bkxrp7.js} +1 -1
  92. package/dist/assets/{sl-SI-NN7IZMDC-DFa24yvi.js → sl-SI-NN7IZMDC-9Kz16LlM.js} +1 -1
  93. package/dist/assets/{subset-shared.chunk-DT8U7cSF.js → subset-shared.chunk-TyCa-VC5.js} +1 -1
  94. package/dist/assets/{subset-worker.chunk-DsFk1l-v.js → subset-worker.chunk-BEUpJy0_.js} +1 -1
  95. package/dist/assets/{sv-SE-XGPEYMSR-BW357iMU.js → sv-SE-XGPEYMSR-CEKYbCUy.js} +1 -1
  96. package/dist/assets/{ta-IN-2NMHFXQM-ByJpqKo_.js → ta-IN-2NMHFXQM-lt4RexfZ.js} +1 -1
  97. package/dist/assets/{textMateThemeFromAppTheme-Dmu3ECWz.js → textMateThemeFromAppTheme-AUvSJIJn.js} +1 -1
  98. package/dist/assets/{th-TH-HPSO5L25-oBYiL2Sw.js → th-TH-HPSO5L25-BTLJeK_p.js} +1 -1
  99. package/dist/assets/{tr-CcLlZCMC.js → tr-C7G7YZuM.js} +1 -1
  100. package/dist/assets/{tr-TR-DEFEU3FU-DuccnkGw.js → tr-TR-DEFEU3FU-D1x5-N8S.js} +1 -1
  101. package/dist/assets/{uk-DeV8vTnQ.js → uk-D-OHqF3o.js} +1 -1
  102. package/dist/assets/{uk-UA-QMV73CPH-EKbyzxQM.js → uk-UA-QMV73CPH-BoCWhdiB.js} +1 -1
  103. package/dist/assets/{useAppFontEffects-Cz-1Efdn.js → useAppFontEffects-FdVEdwq7.js} +101 -101
  104. package/dist/assets/{useInlineCommentController-BFwu6eZI.js → useInlineCommentController-Bf5t_8QQ.js} +1 -1
  105. package/dist/assets/{useRootScrollLock-sHvuqb26.js → useRootScrollLock-BhAup8Zd.js} +2 -2
  106. package/dist/assets/{vendor-codemirror-language-data-CbrKiV7x.js → vendor-codemirror-language-data-CaoLP1ZV.js} +2 -2
  107. package/dist/assets/{vi-VN-M7AON7JQ-FnoyhtCt.js → vi-VN-M7AON7JQ-BNXFIbWh.js} +1 -1
  108. package/dist/assets/{web-components-CyKxJIMp.js → web-components-BKRdx0aw.js} +1 -1
  109. package/dist/assets/{zh-CN-CytFue-5.js → zh-CN-CN_mO1LM.js} +1 -1
  110. package/dist/assets/{zh-CN-LNUGB5OW-CxzUpimL.js → zh-CN-LNUGB5OW-BzAzBoiv.js} +1 -1
  111. package/dist/assets/{zh-HK-E62DVLB3-Bm2BpZIC.js → zh-HK-E62DVLB3-gszEMx80.js} +1 -1
  112. package/dist/assets/{zh-TW-B-BGC0pY.js → zh-TW-DRymoioH.js} +1 -1
  113. package/dist/assets/{zh-TW-RAJ6MFWO-NVEuq9tQ.js → zh-TW-RAJ6MFWO-jlMY0UDt.js} +1 -1
  114. package/dist/index.html +2 -2
  115. package/dist/mini-chat.html +2 -2
  116. package/dist/mobile.html +2 -2
  117. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import{bI as M,bT as V,ce as Y,cf as j,cg as K,fh as X,fi as J,fj as $,fk as Q,bU as Z}from"./useAppFontEffects-Cz-1Efdn.js";import{b as ee,t as p,z as I,B as ne,i as G,C as te,y as C}from"./computeVirtualFileMetrics-DfI7BTln.js";import{t as ie}from"./vendor-hast-util-to-html-BKBhbTDb.js";function U(e,n,t){if(e===n||e==null||n==null)return e===n;const i=new Set(t),a=Object.keys(e),r=new Set(Object.keys(n));for(const s of a)if(r.delete(s),!i.has(s)&&(!(s in n)||e[s]!==n[s]))return!1;for(const s of Array.from(r))if(!i.has(s))return!1;return!0}function Te(e,n){const t=e?.theme??M,i=n?.theme??M,a=R(e),r=R(n);return ee(t,i)&&U(e,n,["theme","parseDiffOptions"])&&U(a,r)}function R(e){if(e!=null&&"parseDiffOptions"in e)return e.parseDiffOptions}function H(e,n){return e?.start===n?.start&&e?.end===n?.end&&e?.side===n?.side&&e?.endSide===n?.endSide}function ae(){return p({tagName:"button",properties:{"data-utility-button":"",type:"button"},children:[I({name:"diffs-icon-plus",properties:{"data-icon":""}})]})}function re(e,n){return e.lineNumber===n.lineNumber&&e.side===n.side}var Ie=class{mode;options;hoveredLine;hoveredToken;pre;gutterUtilityLine;gutterUtilityContainer;gutterUtilityButton;gutterUtilitySlot;interactiveLinesAttr=!1;interactiveLineNumbersAttr=!1;hasPointerListeners=!1;hasDocumentPointerListeners=!1;selectedRange=null;activeLineHighlightSide;activeLineNumberOnly=!1;editorAttached=!1;proposedSelectedRange;renderedSelectionRange;selectionAnchor;queuedSelectionRender;pointerSession={mode:"idle"};constructor(e,n){this.mode=e,this.options=n}setOptions(e){this.options=e}cleanUp(){this.pre?.removeEventListener("click",this.handlePointerClick),this.pre?.removeEventListener("pointerdown",this.handlePointerDown),this.pre?.removeEventListener("pointermove",this.handlePointerMove),this.pre?.removeEventListener("pointerleave",this.handlePointerLeave),this.pre?.removeAttribute("data-interactive-lines"),this.pre?.removeAttribute("data-interactive-line-numbers"),this.pre=void 0,this.gutterUtilityContainer?.remove(),this.gutterUtilityLine=void 0,this.gutterUtilityContainer=void 0,this.gutterUtilityButton=void 0,this.gutterUtilitySlot=void 0,this.clearHoveredLine(),this.clearHoveredToken(),this.detachDocumentPointerListeners(),this.clearPointerSession(),this.queuedSelectionRender!=null&&(cancelAnimationFrame(this.queuedSelectionRender),this.queuedSelectionRender=void 0),this.interactiveLinesAttr=!1,this.interactiveLineNumbersAttr=!1,this.hasPointerListeners=!1}setup(e){this.setSelectionDirty();const{usesCustomGutterUtility:n=!1,enableGutterUtility:t=!1}=this.options;this.pre!==e&&(this.cleanUp(),this.pre=e),t?this.ensureGutterUtilityNode(n):this.gutterUtilityContainer!=null&&(this.gutterUtilityContainer.remove(),this.gutterUtilityLine=void 0,this.gutterUtilityContainer=void 0,this.gutterUtilityButton=void 0,this.gutterUtilitySlot=void 0,this.pointerSession.mode==="gutterSelecting"&&(this.clearPointerSession(),this.detachDocumentPointerListeners())),this.syncPointerListeners(e),this.updateInteractiveLineAttributes(),this.renderSelection(),this.placeUtility()}setSelectionDirty(){this.renderedSelectionRange=void 0}setEditorAttached(e){this.editorAttached!==e&&(this.editorAttached=e,this.setSelectionDirty(),this.renderSelection())}isSelectionDirty(){return this.renderedSelectionRange===null}setSelection(e,n){const t=!(e===this.selectedRange||H(e??void 0,this.selectedRange??void 0));!this.isSelectionDirty()&&!t||(this.proposedSelectedRange=void 0,this.selectedRange=e,this.activeLineHighlightSide=n?.activeLineSide,this.activeLineNumberOnly=n?.lineNumberOnly??!1,this.renderSelection(),this.placeUtility(),t&&n?.notify!==!1&&this.notifySelectionCommitted())}getSelection(){return this.selectedRange}getHoveredLine=()=>{const e=this.gutterUtilityLine??this.hoveredLine;if(e!=null){if(this.mode==="diff"&&e.type==="diff-line")return{lineNumber:e.lineNumber,side:e.annotationSide};if(this.mode==="file"&&e.type==="line")return{lineNumber:e.lineNumber}}};handlePointerClick=e=>{const{onHunkExpand:n,onLineClick:t,onLineNumberClick:i,onTokenClick:a,onMergeConflictActionClick:r}=this.options;n==null&&t==null&&i==null&&r==null&&a==null||this.options.onGutterUtilityClick!=null&&E(e.composedPath())||(k(this.options.__debugPointerEvents,"click","FileDiff.DEBUG.handlePointerClick:",e),this.handlePointerEvent({eventType:"click",event:e}))};handlePointerMove=e=>{if(e.pointerType!=="mouse")return;const{lineHoverHighlight:n="disabled",onLineEnter:t,onLineLeave:i,onTokenEnter:a,onTokenLeave:r,enableGutterUtility:s=!1}=this.options;n==="disabled"&&!s&&t==null&&i==null&&a==null&&r==null||(k(this.options.__debugPointerEvents,"move","FileDiff.DEBUG.handlePointerMove:",e),this.handlePointerEvent({eventType:"move",event:e}))};handlePointerLeave=e=>{const{__debugPointerEvents:n}=this.options;if(k(n,"move","FileDiff.DEBUG.handlePointerLeave: no event"),this.hoveredLine==null&&this.hoveredToken==null){k(n,"move","FileDiff.DEBUG.handlePointerLeave: returned early, no hovered line or token");return}this.hoveredToken!=null&&(this.options.onTokenLeave?.(this.hoveredToken,e),this.clearHoveredToken()),this.hoveredLine!=null&&(this.options.onLineLeave?.({...this.hoveredLine,event:e}),this.clearHoveredLine()),this.placeUtility()};handlePointerEvent({eventType:e,event:n}){const{__debugPointerEvents:t}=this.options,i=n.composedPath();k(t,e,"FileDiff.DEBUG.handlePointerEvent:",{eventType:e,composedPath:i});const a=this.resolvePointerTarget(i);k(t,e,"FileDiff.DEBUG.handlePointerEvent: resolvePointerTarget result:",a);const{onLineClick:r,onLineNumberClick:s,onLineEnter:l,onLineLeave:o,onTokenClick:d,onTokenEnter:c,onTokenLeave:m,onHunkExpand:h,onMergeConflictActionClick:f}=this.options;switch(e){case"move":{const u=T(a)&&this.hoveredLine?.lineElement===a.lineElement;A(a)&&this.hoveredToken?.tokenElement===a.tokenElement||(this.hoveredToken!=null&&(m?.(this.hoveredToken,n),this.clearHoveredToken()),A(a)&&(this.setHoveredToken(this.toTokenEventBaseProps(a)),c?.(this.hoveredToken,n))),u||(this.hoveredLine!=null&&(o?.({...this.hoveredLine,event:n}),this.clearHoveredLine()),T(a)?(this.setHoveredLine(this.toEventBaseProps(a)),this.placeUtility(),l?.({...this.hoveredLine,event:n})):this.placeUtility());break}case"click":{if(a==null)break;if(de(a)&&f!=null){f(a);break}if(se(a)&&h!=null){h(a.hunkIndex,a.all||n.shiftKey?"both":a.direction,a.all||n.shiftKey?Number.POSITIVE_INFINITY:void 0);break}if(!T(a))break;A(a)&&d!=null&&d(this.toTokenEventBaseProps(a),n);const u=this.toEventBaseProps(a);s!=null&&a.numberColumn?s({...u,event:n}):r?.({...u,event:n});break}}}syncPointerListeners(e){const{__debugPointerEvents:n,lineHoverHighlight:t="disabled",onLineClick:i,onLineNumberClick:a,onLineEnter:r,onLineLeave:s,onTokenClick:l,onTokenEnter:o,onTokenLeave:d,onHunkExpand:c,onMergeConflictActionClick:m,enableGutterUtility:h=!1,enableLineSelection:f=!1,onGutterUtilityClick:u}=this.options,v=u!=null,b=t!=="disabled"||i!=null||a!=null||r!=null||s!=null||l!=null||o!=null||d!=null||c!=null||m!=null||h||f||v;b&&!this.hasPointerListeners?(e.addEventListener("click",this.handlePointerClick),e.addEventListener("pointerdown",this.handlePointerDown),e.addEventListener("pointermove",this.handlePointerMove),e.addEventListener("pointerleave",this.handlePointerLeave),this.hasPointerListeners=!0,k(n,"click","FileDiff.DEBUG.attachEventListeners: Attaching click events for:",(()=>{const x=[];return(n==="both"||n==="click")&&(i!=null&&x.push("onLineClick"),a!=null&&x.push("onLineNumberClick"),c!=null&&x.push("expandable hunk separators"),m!=null&&x.push("merge conflict actions")),x})()),k(n,"move","FileDiff.DEBUG.attachEventListeners: Attaching pointer move event"),k(n,"move","FileDiff.DEBUG.attachEventListeners: Attaching pointer leave event")):!b&&this.hasPointerListeners&&(e.removeEventListener("click",this.handlePointerClick),e.removeEventListener("pointerdown",this.handlePointerDown),e.removeEventListener("pointermove",this.handlePointerMove),e.removeEventListener("pointerleave",this.handlePointerLeave),this.hasPointerListeners=!1);const g=this.pointerSession.mode==="selecting"||this.pointerSession.mode==="pendingSingleLineUnselect",y=this.pointerSession.mode==="gutterSelecting";(!f&&g||!v&&y)&&(this.clearPointerSession(),this.detachDocumentPointerListeners(),this.selectionAnchor=void 0,this.clearPendingSingleLineState())}updateInteractiveLineAttributes(){if(this.pre==null)return;const{onLineClick:e,onLineNumberClick:n,enableLineSelection:t=!1}=this.options,i=e!=null,a=n!=null||t;i&&!this.interactiveLinesAttr?(this.pre.setAttribute("data-interactive-lines",""),this.interactiveLinesAttr=!0):!i&&this.interactiveLinesAttr&&(this.pre.removeAttribute("data-interactive-lines"),this.interactiveLinesAttr=!1),a&&!this.interactiveLineNumbersAttr?(this.pre.setAttribute("data-interactive-line-numbers",""),this.interactiveLineNumbersAttr=!0):!a&&this.interactiveLineNumbersAttr&&(this.pre.removeAttribute("data-interactive-line-numbers"),this.interactiveLineNumbersAttr=!1)}handlePointerDown=e=>{if(e.pointerType==="mouse"&&e.button!==0||this.pre==null||this.pointerSession.mode!=="idle")return;const n=e.composedPath();E(n)&&this.options.onGutterUtilityClick!=null?this.startGutterSelectionFromPointerDown(e):(e.pointerType!=="mouse"&&this.revealUtilityFromGutterPath(n),this.startLineSelectionFromPointerDown(e))};startLineSelectionFromPointerDown(e){const{enableLineSelection:n=!1}=this.options;if(!n)return;const t=this.resolveSelectionInfo(e,{source:"event-path",requireNumberColumn:!0});if(t==null)return;const{pre:i}=this;if(i==null)return;e.preventDefault();const{lineNumber:a,eventSide:r,lineIndex:s}=t;if(e.shiftKey&&this.selectedRange!=null){const l=this.getIndexesFromSelection(this.selectedRange,i.getAttribute("data-diff-type")==="split");if(l==null)return;const o=l.start<=l.end?s>=l.start:s<=l.end;this.selectionAnchor={lineNumber:o?this.selectedRange.start:this.selectedRange.end,side:o?this.selectedRange.side:this.selectedRange.endSide??this.selectedRange.side},this.updateSelection(a,r,!1),this.notifySelectionStart(this.getCurrentSelectionRange()),this.pointerSession={mode:"selecting",pointerId:e.pointerId},this.attachDocumentPointerListeners();return}if(this.selectedRange?.start===a&&this.selectedRange?.end===a){const l={lineNumber:a,side:r};this.selectionAnchor=l,this.pointerSession={mode:"pendingSingleLineUnselect",pointerId:e.pointerId,anchor:l,pending:l},this.attachDocumentPointerListeners();return}this.options.controlledSelection===!0?this.proposedSelectedRange=null:this.selectedRange=null,this.placeUtility(),this.selectionAnchor={lineNumber:a,side:r},this.updateSelection(a,r,!1),this.notifySelectionStart(this.getCurrentSelectionRange()),this.pointerSession={mode:"selecting",pointerId:e.pointerId},this.attachDocumentPointerListeners()}startGutterSelectionFromPointerDown(e){const{enableLineSelection:n=!1,onGutterUtilityClick:t}=this.options;if(t==null)return;const i=this.currentSelectionEnds(),a=i?.bottom??this.resolveSelectionPoint(e,{source:"event-path",excludeUtility:!1}),r=i?.top??a;a==null||r==null||(e.preventDefault(),e.stopPropagation(),this.pointerSession={mode:"gutterSelecting",pointerId:e.pointerId,anchor:r,current:a},n&&(this.selectionAnchor={lineNumber:r.lineNumber,side:r.side},this.updateSelection(a.lineNumber,a.side,!1),this.notifySelectionStart(this.getCurrentSelectionRange())),this.attachDocumentPointerListeners())}handleDocumentPointerMove=e=>{const{enableLineSelection:n=!1}=this.options;switch(this.pointerSession.mode){case"idle":return;case"gutterSelecting":{if(e.pointerId!==this.pointerSession.pointerId)return;e.preventDefault();const t=this.resolveSelectionPoint(e,{source:"coordinates-first"});if(t==null)return;this.pointerSession.current=t,n===!0&&this.updateSelection(t.lineNumber,t.side);return}case"selecting":{if(e.pointerId!==this.pointerSession.pointerId)return;e.preventDefault();const t=this.resolveSelectionInfo(e,{source:"coordinates-first",requireNumberColumn:!1});if(t==null||this.selectionAnchor==null)return;this.updateSelection(t.lineNumber,t.eventSide);return}case"pendingSingleLineUnselect":{if(e.pointerId!==this.pointerSession.pointerId)return;e.preventDefault();const t=this.resolveSelectionInfo(e,{source:"coordinates-first",requireNumberColumn:!1});if(t==null||this.selectionAnchor==null)return;const i={lineNumber:t.lineNumber,side:t.eventSide};if(re(this.pointerSession.pending,i))return;this.updateSelection(t.lineNumber,t.eventSide,!1),this.notifySelectionStart(this.getCurrentSelectionRange()),this.notifySelectionChangeDelta(),this.pointerSession={mode:"selecting",pointerId:e.pointerId};return}}};handleDocumentPointerUp=e=>{const{enableLineSelection:n=!1,onGutterUtilityClick:t}=this.options;switch(this.pointerSession.mode){case"idle":return;case"gutterSelecting":{if(e.pointerId!==this.pointerSession.pointerId)return;e.preventDefault();const i=this.resolveSelectionPoint(e,{source:"coordinates-first"});i!=null&&(this.pointerSession.current=i,n&&this.updateSelection(i.lineNumber,i.side)),t?.(this.buildSelectedLineRange(this.pointerSession.anchor,this.pointerSession.current)),this.selectionAnchor=void 0,n&&(this.notifySelectionEnd(this.getCurrentSelectionRange()),this.notifySelectionCommitted(),this.clearProposedSelection()),this.clearPointerSession(),this.detachDocumentPointerListeners();return}case"pendingSingleLineUnselect":if(e.pointerId!==this.pointerSession.pointerId)return;e.preventDefault(),this.updateSelection(null,void 0,!1),this.selectionAnchor=void 0,this.clearPendingSingleLineState(),this.detachDocumentPointerListeners(),this.notifySelectionEnd(this.getCurrentSelectionRange()),this.notifySelectionCommitted(),this.clearProposedSelection();return;case"selecting":if(e.pointerId!==this.pointerSession.pointerId)return;e.preventDefault(),this.selectionAnchor=void 0,this.detachDocumentPointerListeners(),this.clearPointerSession(),this.notifySelectionEnd(this.getCurrentSelectionRange()),this.notifySelectionCommitted(),this.clearProposedSelection()}};handleDocumentPointerCancel=e=>{switch(this.pointerSession.mode){case"idle":return;case"gutterSelecting":case"selecting":case"pendingSingleLineUnselect":if("pointerId"in this.pointerSession&&e.pointerId!==this.pointerSession.pointerId)return;this.selectionAnchor=void 0,this.clearProposedSelection(),this.clearPendingSingleLineState(),this.clearPointerSession(),this.detachDocumentPointerListeners()}};clearHoveredLine(){this.hoveredLine!=null&&(this.hoveredLine.lineElement.removeAttribute("data-hovered"),this.hoveredLine.numberElement.removeAttribute("data-hovered"),this.hoveredLine=void 0)}setHoveredLine(e){const{lineHoverHighlight:n="disabled"}=this.options;this.hoveredLine!=null&&this.clearHoveredLine(),this.hoveredLine=e,n!=="disabled"&&((n==="both"||n==="line")&&this.hoveredLine.lineElement.setAttribute("data-hovered",""),(n==="both"||n==="number")&&this.hoveredLine.numberElement.setAttribute("data-hovered",""))}clearHoveredToken(){this.hoveredToken!=null&&(this.hoveredToken=void 0)}setHoveredToken(e){this.hoveredToken!=null&&this.clearHoveredToken(),this.hoveredToken=e}ensureGutterUtilityNode(e){if(this.gutterUtilityContainer==null&&(this.gutterUtilityContainer=document.createElement("div"),this.gutterUtilityContainer.setAttribute("data-gutter-utility-slot","")),e)this.gutterUtilityButton!=null&&(this.gutterUtilityButton.remove(),this.gutterUtilityButton=void 0),this.gutterUtilitySlot==null&&(this.gutterUtilitySlot=document.createElement("slot"),this.gutterUtilitySlot.name="gutter-utility-slot"),this.gutterUtilitySlot.parentNode!==this.gutterUtilityContainer&&this.gutterUtilityContainer.replaceChildren(this.gutterUtilitySlot);else{if(this.gutterUtilitySlot?.remove(),this.gutterUtilitySlot=void 0,this.gutterUtilityButton==null){const n=document.createElement("div");n.innerHTML=ie(ae());const t=n.firstElementChild;if(!(t instanceof HTMLButtonElement))throw new Error("InteractionManager.ensureGutterUtilityNode: Node element should be a button");t.remove(),this.gutterUtilityButton=t}this.gutterUtilityButton.parentNode!==this.gutterUtilityContainer&&this.gutterUtilityContainer.replaceChildren(this.gutterUtilityButton)}}revealUtilityFromGutterPath(e){if(this.placeUtilityFromSelection())return;const n=this.resolvePointerTarget(e);w(n)&&n.numberColumn&&this.showUtilityOnLine(this.toEventBaseProps(n))}placeUtility(){if(!this.placeUtilityFromSelection()){if(this.hoveredLine!=null){this.showUtilityOnLine(this.hoveredLine);return}this.hideUtility()}}placeUtilityFromSelection(){const e=this.currentSelectionEnds();if(e==null)return!1;const n=this.targetForSelectionPoint(e.bottom);return n==null?this.hideUtility():this.showUtilityOnLine(this.toEventBaseProps(n)),!0}showUtilityOnLine(e){this.gutterUtilityContainer!=null&&(this.gutterUtilityLine=e,e.numberElement.appendChild(this.gutterUtilityContainer))}hideUtility(){this.gutterUtilityContainer?.remove(),this.gutterUtilityLine=void 0}currentSelectionEnds(){const e=this.getCurrentSelectionRange();return e==null?void 0:this.selectionEnds(e)}selectionEnds(e){const n={lineNumber:e.start,side:e.side},t={lineNumber:e.end,side:e.endSide??e.side},i=this.selectionPointRowIndex(n),a=this.selectionPointRowIndex(t);if(!(i==null||a==null))return i>a?{top:t,bottom:n}:{top:n,bottom:t}}selectionPointRowIndex(e){const n=this.getLineIndex(e.lineNumber,e.side);if(n!=null)return this.isSplitDiff()?n[1]:n[0]}targetForSelectionPoint(e){if(this.pre==null)return;const n=this.getLineIndex(e.lineNumber,e.side);if(n==null)return;const t=this.mode==="diff"?`${n[0]},${n[1]}`:`${n[0]}`,i=this.pre.querySelectorAll(`[data-column-number="${e.lineNumber}"][data-line-index="${t}"]`);for(const a of i){if(!(a instanceof HTMLElement))continue;const r=this.resolvePointerTarget(L(a));if(w(r)&&!(this.mode==="diff"&&e.side!=null&&r.side!==e.side))return r}}attachDocumentPointerListeners(){this.hasDocumentPointerListeners||(document.addEventListener("pointermove",this.handleDocumentPointerMove),document.addEventListener("pointerup",this.handleDocumentPointerUp),document.addEventListener("pointercancel",this.handleDocumentPointerCancel),this.hasDocumentPointerListeners=!0)}detachDocumentPointerListeners(){this.hasDocumentPointerListeners&&(document.removeEventListener("pointermove",this.handleDocumentPointerMove),document.removeEventListener("pointerup",this.handleDocumentPointerUp),document.removeEventListener("pointercancel",this.handleDocumentPointerCancel),this.hasDocumentPointerListeners=!1)}clearPointerSession(){this.pointerSession={mode:"idle"}}clearPendingSingleLineState(){this.pointerSession.mode==="pendingSingleLineUnselect"&&(this.pointerSession={mode:"idle"})}selectionInfoFromPath(e,n){const t=this.resolvePointerTarget(e);if(w(t)&&!(n&&!t.numberColumn)&&t.splitLineIndex!=null)return{lineIndex:t.splitLineIndex,lineNumber:t.lineNumber,eventSide:this.mode==="diff"?t.side:void 0}}resolveSelectionInfo(e,n){const t=this.resolveSelectionPath(e,n);return t!=null?this.selectionInfoFromPath(t,n.requireNumberColumn):void 0}selectionPointFromPath(e){const n=this.resolvePointerTarget(e);if(w(n))return{lineNumber:n.lineNumber,side:this.mode==="diff"?n.side:void 0}}resolveSelectionPoint(e,n){const t=this.resolveSelectionPath(e,n);return t!=null?this.selectionPointFromPath(t):void 0}resolveSelectionPath(e,n){const t=n.excludeUtility!==!1;switch(n.source){case"event-path":return this.pathFromEventPath(e.composedPath(),t);case"coordinates-first":{const i=this.pathFromCoordinates(e,t);return i!==void 0?i??void 0:this.pathFromEventPath(e.composedPath(),t)}}}pathFromCoordinates(e,n){const t=this.hitTest(e);if(t!==void 0)return t===null?null:this.pathFromElement(t,n)??null}pathFromEventPath(e,n){if(!(n&&E(e))){for(const t of e)if(t instanceof Element)return this.pathFromElement(t,n)}}pathFromElement(e,n){const t=L(e);if(n&&E(t))return;const i=fe(e);return i!=null?L(i):this.pathFromAnnotationSlot(e)}pathFromAnnotationSlot(e){const n=ue(ce(e));if(n==null)return;const t=this.targetForSelectionPoint(n);return t!=null?L(t.lineElement):void 0}hitTest(e){if(!Number.isFinite(e.clientX)||!Number.isFinite(e.clientY))return;const n=this.pre?.getRootNode(),t=z(n)?n:z(document)?document:void 0;if(t!=null)return t.elementFromPoint(e.clientX,e.clientY)}getLineIndex(e,n){const{getLineIndex:t}=this.options;return t!=null?t(e,n):[e-1,e-1]}getCurrentSelectionRange(){return this.proposedSelectedRange!==void 0?this.proposedSelectedRange:this.selectedRange}clearProposedSelection(){this.proposedSelectedRange=void 0}updateSelection(e,n,t=!0){const i=this.getCurrentSelectionRange();let a;if(e==null)a=null;else{const r=this.selectionAnchor?.side??n,s=this.selectionAnchor?.lineNumber??e;a=this.buildSelectionRange(s,e,r,n)}H(i??void 0,a??void 0)||(this.activeLineHighlightSide=void 0,this.activeLineNumberOnly=!1,this.options.controlledSelection===!0?this.proposedSelectedRange=a:(this.selectedRange=a,this.queuedSelectionRender??=requestAnimationFrame(this.renderSelection)),this.placeUtility(),t&&this.notifySelectionChangeDelta())}getIndexesFromSelection(e,n){if(this.pre==null)return;const t=this.getLineIndex(e.start,e.side),i=this.getLineIndex(e.end,e.endSide??e.side);return t!=null&&i!=null?{start:n?t[1]:t[0],end:n?i[1]:i[0]}:void 0}highlightLineNumberOnly(){return this.activeLineHighlightSide!=null?this.activeLineNumberOnly:this.activeLineNumberOnly||this.editorAttached}renderSelection=()=>{if(this.queuedSelectionRender!=null&&(cancelAnimationFrame(this.queuedSelectionRender),this.queuedSelectionRender=void 0),this.pre==null||this.renderedSelectionRange===this.selectedRange)return;const e=this.pre.querySelectorAll("[data-selected-line]");for(const o of e)o.removeAttribute("data-selected-line");if(this.renderedSelectionRange=this.selectedRange,this.selectedRange==null)return;const{children:n}=this.pre;if(n.length===0)return;if(n.length>2)throw console.error(n),new Error("InteractionManager.renderSelection: Somehow there are more than 2 code elements...");const t=this.pre.getAttribute("data-diff-type")==="split",i=this.getIndexesFromSelection(this.selectedRange,t);if(i==null)throw console.error({rowRange:i,selectedRange:this.selectedRange}),new Error("InteractionManager.renderSelection: No valid rowRange");const a=i.start===i.end,r=Math.min(i.start,i.end),s=Math.max(i.start,i.end),l=this.highlightLineNumberOnly();for(const o of n){const d=this.activeLineHighlightSide;if(d!=null&&(d==="additions"&&o.hasAttribute("data-deletions")||d==="deletions"&&o.hasAttribute("data-additions")))continue;const[c,m]=o.children,h=m.children.length;if(h!==c.children.length)throw new Error("InteractionManager.renderSelection: gutter and content children dont match, something is wrong");for(let f=0;f<h;f++){const u=m.children[f],v=c.children[f];if(!(u instanceof HTMLElement)||!(v instanceof HTMLElement))continue;const b=this.parseLineIndex(u,t);if((b??0)>s)break;if(b==null||b<r)continue;let g=a?"single":b===r?"first":b===s?"last":"";v.setAttribute("data-selected-line",g),!l&&(u.setAttribute("data-selected-line",g),v.nextSibling instanceof HTMLElement&&u.nextSibling instanceof HTMLElement&&(u.nextSibling.hasAttribute("data-line-annotation")||u.nextSibling.hasAttribute("data-merge-conflict-actions"))&&(a?(g="last",u.setAttribute("data-selected-line","first")):b===r?g="":b===s&&u.setAttribute("data-selected-line",""),u.nextSibling.setAttribute("data-selected-line",g),v.nextSibling.setAttribute("data-selected-line",g)))}}};notifySelectionCommitted(){this.options.onLineSelected?.(this.getCurrentSelectionRange()??null)}notifySelectionChangeDelta(){this.options.onLineSelectionChange?.(this.getCurrentSelectionRange()??null)}notifySelectionStart(e){this.options.onLineSelectionStart?.(e)}notifySelectionEnd(e){this.options.onLineSelectionEnd?.(e)}toEventBaseProps(e){return this.mode==="file"?{type:"line",lineElement:e.lineElement,lineNumber:e.lineNumber,numberColumn:e.numberColumn,numberElement:e.numberElement}:{type:"diff-line",annotationSide:e.side,lineType:e.lineType,lineElement:e.lineElement,numberElement:e.numberElement,lineNumber:e.lineNumber,numberColumn:e.numberColumn}}toTokenEventBaseProps({lineCharEnd:e,lineCharStart:n,lineNumber:t,side:i,tokenElement:a,tokenText:r}){return this.mode==="file"?{type:"token",lineCharEnd:e,lineCharStart:n,lineNumber:t,tokenElement:a,tokenText:r}:{type:"token",lineCharEnd:e,lineCharStart:n,lineNumber:t,side:i,tokenElement:a,tokenText:r}}buildSelectedLineRange(e,n){return this.buildSelectionRange(e.lineNumber,n.lineNumber,e.side,n.side)}buildSelectionRange(e,n,t,i){return{start:e,end:n,...t!=null?{side:t}:{},...t!==i&&i!=null?{endSide:i}:{}}}resolvePointerTarget(e){let n=!1,t,i,a,r,s,l,o,d,c,m;for(const f of e){if(!(f instanceof HTMLElement))continue;if(m==null&&f.hasAttribute("data-merge-conflict-action")){const g=f.getAttribute("data-merge-conflict-action")??void 0,y=f.getAttribute("data-merge-conflict-conflict-index")??void 0,x=y!=null?Number.parseInt(y,10):NaN;le(g)&&Number.isFinite(x)&&(m={kind:"merge-conflict-action",resolution:g,conflictIndex:x})}if(l==null&&f.hasAttribute("data-char")){l=f;const g=f.getAttribute("data-char");if(g!=null){const y=Number.parseInt(g,10);if(!Number.isNaN(y)){const x=f.textContent??"",N=y+x.length;(x.trim()!==""||this.options.enableTokenInteractionsOnWhitespace===!0)&&(o={tokenElement:l,lineCharStart:y,lineCharEnd:N,tokenText:x});continue}}}const u=s==null?f.getAttribute("data-column-number")??void 0:void 0;if(u!=null){s=f,c=Number.parseInt(u,10),n=!0,t=O(f),r=f.getAttribute("data-line-index")??void 0;continue}const v=a==null?f.getAttribute("data-line")??void 0:void 0;if(v!=null){a=f,c=Number.parseInt(v,10),t=O(f),r=f.getAttribute("data-line-index")??void 0;continue}if(d==null&&(f.hasAttribute("data-expand-button")||f.hasAttribute("data-unmodified-lines"))){d={hunkIndex:void 0,direction:f.hasAttribute("data-expand-up")?"up":f.hasAttribute("data-expand-down")?"down":"both",all:f.hasAttribute("data-expand-all-button")};continue}const b=d!=null?f.getAttribute("data-expand-index")??void 0:void 0;if(d!=null&&b!=null){const g=Number.parseInt(b,10);Number.isNaN(g)||(d.hunkIndex=g);continue}if(i==null&&f.hasAttribute("data-code")){i=f;break}}if(m!=null)return m;if(d?.hunkIndex!=null)return{type:"line-info",hunkIndex:d.hunkIndex,direction:d.direction,all:d.all};if(a??=r!=null?D(i,`[data-line][data-line-index="${r}"]`):void 0,s??=r!=null?D(i,`[data-column-number][data-line-index="${r}"]`):void 0,i==null||a==null||s==null||t==null||c==null||Number.isNaN(c))return;const h=this.parseLineIndex(a,this.isSplitDiff());return o!=null?this.mode==="file"?{kind:"token",lineType:t,lineElement:a,lineNumber:c,numberColumn:n,numberElement:s,side:void 0,splitLineIndex:h,...o}:{kind:"token",lineType:t,lineElement:a,lineNumber:c,numberColumn:n,numberElement:s,side:F(t,i),splitLineIndex:h,...o}:this.mode==="file"?{kind:"line",lineType:t,lineElement:a,lineNumber:c,numberColumn:n,numberElement:s,side:void 0,splitLineIndex:h}:{kind:"line",lineType:t,lineElement:a,lineNumber:c,numberColumn:n,numberElement:s,side:F(t,i),splitLineIndex:h}}isSplitDiff(){return this.pre?.getAttribute("data-diff-type")==="split"}parseLineIndex(e,n){const t=(e.getAttribute("data-line-index")??"").split(",").map(i=>Number.parseInt(i,10)).filter(i=>!Number.isNaN(i));if(n&&t.length===2)return t[1];if(!n)return t[0]}};function Me({enableTokenInteractionsOnWhitespace:e,enableGutterUtility:n,lineHoverHighlight:t,onGutterUtilityClick:i,onLineClick:a,onLineEnter:r,onLineLeave:s,onLineNumberClick:l,onTokenClick:o,onTokenEnter:d,onTokenLeave:c,renderGutterUtility:m,__debugPointerEvents:h,enableLineSelection:f,controlledSelection:u,onLineSelected:v,onLineSelectionStart:b,onLineSelectionChange:g,onLineSelectionEnd:y},x,N,W){return{enableTokenInteractionsOnWhitespace:e,enableGutterUtility:oe({enableGutterUtility:n,renderGutterUtility:m,onGutterUtilityClick:i}),usesCustomGutterUtility:m!=null,lineHoverHighlight:t,onGutterUtilityClick:i,onHunkExpand:x,onMergeConflictActionClick:W,onLineClick:a,onLineEnter:r,onLineLeave:s,onLineNumberClick:l,onTokenClick:o,onTokenEnter:d,onTokenLeave:c,__debugPointerEvents:h,enableLineSelection:f,controlledSelection:u,onLineSelected:v,onLineSelectionStart:b,onLineSelectionChange:g,onLineSelectionEnd:y,getLineIndex:N}}function oe({enableGutterUtility:e,renderGutterUtility:n,onGutterUtilityClick:t}){if(t!=null&&n!=null)throw new Error("Cannot use both 'onGutterUtilityClick' and 'renderGutterUtility'. Use only one gutter utility API.");return e??!1}function w(e){return e!=null&&"kind"in e&&e.kind==="line"}function A(e){return e!=null&&"kind"in e&&e.kind==="token"}function T(e){return w(e)||A(e)}function se(e){return"type"in e&&e.type==="line-info"}function de(e){return"kind"in e&&e.kind==="merge-conflict-action"}function le(e){return e==="current"||e==="incoming"||e==="both"}function D(e,n){const t=e?.querySelector(n);return t instanceof HTMLElement?t:void 0}function L(e){const n=[];let t=e;for(;t!=null;)n.push(t),t=t.parentNode;return n}function fe(e){const n=e.closest("[data-line], [data-column-number]");if(n instanceof HTMLElement)return n;const t=e.closest('[data-line-annotation], [data-gutter-buffer="annotation"]');if(!(t instanceof HTMLElement))return;const i=t.previousElementSibling;return i instanceof HTMLElement&&(i.hasAttribute("data-line")||i.hasAttribute("data-column-number"))?i:void 0}function ce(e){const n=e.closest('[slot^="annotation-"]');if(n instanceof HTMLElement)return n.getAttribute("slot")??void 0;if(e instanceof HTMLElement){const t=e.getAttribute("name")??void 0;return t!=null&&t.startsWith("annotation-")?t:void 0}}function ue(e){if(e==null)return;const n=/^annotation-(?:(additions|deletions)-)?(\d+)$/.exec(e);if(n==null)return;const t=Number.parseInt(n[2],10);if(!(!Number.isFinite(t)||t<=0))return{lineNumber:t,side:n[1]}}function z(e){return e!=null&&typeof e.elementFromPoint=="function"}function F(e,n){switch(e){case"change-deletion":return"deletions";case"change-addition":return"additions";default:return n.hasAttribute("data-deletions")?"deletions":"additions"}}function O(e){const n=e.getAttribute("data-line-type");if(n!=null)switch(n){case"change-deletion":case"change-addition":case"context":case"context-expanded":return n;default:return}}function E(e){for(const n of e)if(n instanceof HTMLElement&&(n.hasAttribute("data-utility-button")||n.hasAttribute("data-gutter-utility-slot")||n.getAttribute("slot")==="gutter-utility-slot"||n.getAttribute("name")==="gutter-utility-slot"))return!0;return!1}function k(e="none",n,...t){switch(e){case"none":return;case"both":break;case"click":if(n!=="click")return;break;case"move":if(n!=="move")return;break}console.log(...t)}var Ue=class S{static resizeObserver;static managersByElement=new Map;static getResizeObserver(){const n=S.resizeObserver??new ResizeObserver(S.handleSharedResizeEntries);return S.resizeObserver=n,n}static handleSharedResizeEntries(n){const t=new Map;for(const i of n){const a=S.managersByElement.get(i.target);if(a==null)continue;const r=t.get(a);r==null?t.set(a,[i]):r.push(i)}for(const[i,a]of t)i.handleResizeEntries(a)}observedNodes=new Map;setup(n,t){const i=new Set;let a=0;const r=new Map(this.observedNodes);this.observedNodes.clear();for(const s of n.children){if(a===2)break;const l=(()=>{if(s instanceof HTMLElement&&s.tagName==="CODE")return s})();if(l==null)continue;a++;let o=r.get(l);if(o!=null&&o.type!=="code")throw new Error("ResizeManager.setup: somehow a code node is being used for an annotation, should be impossible");let d=l.firstElementChild;d instanceof HTMLElement||(d=null),o!=null?(this.observedNodes.set(l,o),r.delete(l),o.numberElement!==d?(o.numberElement!=null&&(this.unobserve(o.numberElement),r.delete(o.numberElement)),d!=null&&(this.observe(d),r.delete(d),this.observedNodes.set(d,o)),o.numberElement=d,o.numberWidth=0):o.numberElement!=null?(r.delete(o.numberElement),this.observedNodes.set(o.numberElement,o)):o.numberWidth=0):(o={type:"code",codeElement:l,numberElement:d,codeWidth:"auto",numberWidth:0},this.observedNodes.set(l,o),this.observe(l),d!=null&&(this.observedNodes.set(d,o),this.observe(d)))}if(a>1&&!t){const s=n.querySelectorAll('[data-line-annotation*=","]'),l=new Map;for(const o of s){if(!(o instanceof HTMLElement))continue;const d=o.getAttribute("data-line-annotation")??"";if(!/^-?\d+,-?\d+$/.test(d)){console.error("DiffFileRenderer.setupResizeObserver: Invalid element or annotation",{lineAnnotation:d,element:o});continue}let c=l.get(d);c==null&&(c=[],l.set(d,c)),c.push(o)}for(const[o,d]of l){if(d.length!==2){console.error("DiffFileRenderer.setupResizeObserver: Bad Pair",o,d);continue}const[c,m]=d,h=c.firstElementChild,f=m.firstElementChild;if(!(c instanceof HTMLElement)||!(m instanceof HTMLElement)||!(h instanceof HTMLElement)||!(f instanceof HTMLElement))continue;let u=r.get(h);if(u!=null){this.observedNodes.set(h,u),this.observedNodes.set(f,u),r.delete(h),r.delete(f);continue}const v=h.getBoundingClientRect().height,b=f.getBoundingClientRect().height;u={type:"annotations",column1:{container:c,child:h,childHeight:v},column2:{container:m,child:f,childHeight:b},currentHeight:"auto"},i.add({child1:h,child2:f,item:u,newHeight:Math.max(v,b)})}for(const o of i)this.applyNewHeight(o.item,o.newHeight),this.observedNodes.set(o.child1,o.item),this.observedNodes.set(o.child2,o.item),this.observe(o.child1),this.observe(o.child2);i.clear()}for(const[s,l]of r)this.unobserve(s),l.type==="code"?ge(l):pe(l);r.clear()}cleanUp(){for(const n of this.observedNodes.keys())this.unobserve(n);this.observedNodes.clear()}observe(n){const{managersByElement:t}=S,i=t.get(n);if(i!==this){if(i!=null&&i!==this)throw new Error("ResizeManager.observe: element is already owned by another ResizeManager");t.set(n,this),S.getResizeObserver().observe(n)}}unobserve(n){const{managersByElement:t,resizeObserver:i}=S,a=t.get(n);if(a!=null){if(a!==this)throw new Error("ResizeManager.unobserve: element is owned by another ResizeManager");t.delete(n),i?.unobserve(n),i!=null&&t.size===0&&(i.disconnect(),S.resizeObserver=void 0)}}handleResizeEntries(n){const t=new Map,i=new Set;for(const a of n){const{target:r,borderBoxSize:s,contentBoxSize:l}=a;if(!(r instanceof HTMLElement)){console.error("ResizeManager.handleResizeEntries: Invalid element for ResizeObserver",a);continue}const o=this.observedNodes.get(r);if(o==null){console.error("ResizeManager.handleResizeEntries: Not a valid observed node",a);continue}if(o.type==="annotations"){const d=(()=>{if(r===o.column1.child)return o.column1;if(r===o.column2.child)return o.column2})();if(d==null){console.error("ResizeManager.handleResizeEntries: Couldn't find a column for",{item:o,target:r});continue}d.childHeight=s[0].blockSize,i.add(o)}else if(o.type==="code"){const d=t.get(o)??{},c=l[0].inlineSize;r===o.codeElement?d.codeInlineSize=c:r===o.numberElement&&(d.numberInlineSize=c),t.set(o,d)}}this.applyAnnotationUpdates(i),i.clear(),this.applyColumnUpdates(t),t.clear()}applyAnnotationUpdates(n){for(const t of n)this.applyNewHeight(t,Math.max(t.column1.childHeight,t.column2.childHeight))}applyColumnUpdates=n=>{for(const[t,i]of n){const a=i.codeInlineSize!=null?he(i.codeInlineSize):t.codeWidth,r=i.numberInlineSize!=null?me(i.numberInlineSize):t.numberWidth,s=a!==t.codeWidth,l=r!==t.numberWidth;if(!(!s&&!l)&&(t.codeWidth=a,t.numberWidth=r,s&&t.codeElement.style.setProperty("--diffs-column-width",`${typeof a=="number"?`${a}px`:"auto"}`),l&&t.codeElement.style.setProperty("--diffs-column-number-width",`${r===0?"auto":`${r}px`}`),s||l&&a!=="auto")){const o=typeof a=="number"?Math.max(a-r,0):0;t.codeElement.style.setProperty("--diffs-column-content-width",`${o>0?`${o}px`:"auto"}`)}}};applyNewHeight(n,t){t!==n.currentHeight&&(n.currentHeight=Math.max(t,0),n.column1.container.style.setProperty("--diffs-annotation-min-height",`${n.currentHeight}px`),n.column2.container.style.setProperty("--diffs-annotation-min-height",`${n.currentHeight}px`))}};function he(e){const n=Math.max(Math.floor(e),0);return n===0?"auto":n}function me(e){return Math.max(Math.ceil(e),0)}function ge(e){e.codeElement.isConnected&&(e.codeElement.style.removeProperty("--diffs-column-content-width"),e.codeElement.style.removeProperty("--diffs-column-number-width"),e.codeElement.style.removeProperty("--diffs-column-width"))}function pe(e){e.column1.container.isConnected&&e.column1.container.style.removeProperty("--diffs-annotation-min-height"),e.column2.container.isConnected&&e.column2.container.style.removeProperty("--diffs-annotation-min-height")}function Re(e){for(const n of Array.isArray(e)?e:[e])if(!(n==="text"||n==="ansi")&&!ne.has(n))return!1;return!0}function He(e){for(const n of G(e))if(!te.has(n))return!1;return!0}function De(e,n){return e==null||n==null?e===n:e.startingLine===n.startingLine&&e.totalLines===n.totalLines&&e.bufferBefore===n.bufferBefore&&e.bufferAfter===n.bufferAfter}function ze(e){return p({tagName:"div",children:[p({tagName:"div",children:e.annotations?.map(n=>p({tagName:"slot",properties:{name:n}})),properties:{"data-annotation-content":""}})],properties:{"data-line-annotation":`${e.hunkIndex},${e.lineIndex}`}})}function be(e){switch(e){case"file":return"diffs-icon-file-code";case"change":return"diffs-icon-symbol-modified";case"new":return"diffs-icon-symbol-added";case"deleted":return"diffs-icon-symbol-deleted";case"rename-pure":case"rename-changed":return"diffs-icon-symbol-moved"}}function Fe({fileOrDiff:e,mode:n,stickyHeader:t}){const i="type"in e?e:void 0,a={"data-diffs-header":n,"data-change-type":i?.type,"data-sticky":t?"":void 0};return p({tagName:"div",children:[n==="custom"?p({tagName:"slot",properties:{name:V}}):ve({name:e.name,prevName:"prevName"in e?e.prevName:void 0,iconType:i?.type??"file"}),...n==="custom"?[]:[xe(i)]],properties:a})}function ve({name:e,prevName:n,iconType:t}){const i=[p({tagName:"slot",properties:{name:Y}}),I({name:be(t),properties:{"data-change-icon":t}})];return n!=null&&(i.push(p({tagName:"div",children:[p({tagName:"bdi",children:[C(n)]})],properties:{"data-prev-name":""}})),i.push(I({name:"diffs-icon-arrow-right-short",properties:{"data-rename-icon":""}}))),i.push(p({tagName:"div",children:[p({tagName:"bdi",children:[C(e)]})],properties:{"data-title":""}})),i.push(p({tagName:"slot",properties:{name:j}})),p({tagName:"div",children:i,properties:{"data-header-content":""}})}function xe(e){const n=[];if(e!=null){let t=0,i=0;for(const a of e.hunks)t+=a.additionLines,i+=a.deletionLines;(i>0||t===0)&&n.push(p({tagName:"span",children:[C(`-${i}`)],properties:{"data-deletions-count":""}})),(t>0||i===0)&&n.push(p({tagName:"span",children:[C(`+${t}`)],properties:{"data-additions-count":""}}))}return n.push(p({tagName:"slot",properties:{name:K}})),p({tagName:"div",children:n,properties:{"data-metadata":""}})}function Oe(e){return p({tagName:"pre",properties:ye(e)})}function ye({diffIndicators:e,disableBackground:n,disableLineNumbers:t,overflow:i,split:a,totalLines:r,type:s,customProperties:l}){return{...l,"data-diff":s==="diff"?"":void 0,"data-file":s==="file"?"":void 0,"data-diff-type":s==="diff"?a?"split":"single":void 0,"data-overflow":i,"data-disable-line-numbers":t?"":void 0,"data-background":n?void 0:"","data-indicators":e==="bars"||e==="classic"?e:void 0,tabIndex:0,style:`--diffs-min-number-column-width-default:${`${r}`.length}ch;`}}function Be(e,{theme:n,preferredHighlighter:t="shiki-js"}){return{langs:[e??"text"],themes:G(n),preferredHighlighter:t}}function $e(e){return`annotation-${"side"in e?`${e.side}-`:""}${e.lineNumber}`}const Ge="-1,-1";function _e(e){return e?.some(n=>n.lineNumber===0)??!1}function qe(e){const n=e[0];return n!=null&&n.length>0?n:void 0}function We(e){return e.startingLine===0&&e.totalLines>0}function Ve(e,n){return p({tagName:"div",children:e,properties:{"data-content":"",style:`grid-row: span ${n}`}})}function Ye(e){return e.useTokenTransformer===!0||e.onTokenClick!=null||e.onTokenEnter!=null||e.onTokenLeave!=null}const je=`<svg data-icon-sprite aria-hidden="true" width="0" height="0">
1
+ import{bI as M,bT as V,ce as Y,cf as j,cg as K,fh as X,fi as J,fj as $,fk as Q,bU as Z}from"./useAppFontEffects-FdVEdwq7.js";import{b as ee,t as p,z as I,B as ne,i as G,C as te,y as C}from"./computeVirtualFileMetrics-BWISD0Ee.js";import{t as ie}from"./vendor-hast-util-to-html-BKBhbTDb.js";function U(e,n,t){if(e===n||e==null||n==null)return e===n;const i=new Set(t),a=Object.keys(e),r=new Set(Object.keys(n));for(const s of a)if(r.delete(s),!i.has(s)&&(!(s in n)||e[s]!==n[s]))return!1;for(const s of Array.from(r))if(!i.has(s))return!1;return!0}function Te(e,n){const t=e?.theme??M,i=n?.theme??M,a=R(e),r=R(n);return ee(t,i)&&U(e,n,["theme","parseDiffOptions"])&&U(a,r)}function R(e){if(e!=null&&"parseDiffOptions"in e)return e.parseDiffOptions}function H(e,n){return e?.start===n?.start&&e?.end===n?.end&&e?.side===n?.side&&e?.endSide===n?.endSide}function ae(){return p({tagName:"button",properties:{"data-utility-button":"",type:"button"},children:[I({name:"diffs-icon-plus",properties:{"data-icon":""}})]})}function re(e,n){return e.lineNumber===n.lineNumber&&e.side===n.side}var Ie=class{mode;options;hoveredLine;hoveredToken;pre;gutterUtilityLine;gutterUtilityContainer;gutterUtilityButton;gutterUtilitySlot;interactiveLinesAttr=!1;interactiveLineNumbersAttr=!1;hasPointerListeners=!1;hasDocumentPointerListeners=!1;selectedRange=null;activeLineHighlightSide;activeLineNumberOnly=!1;editorAttached=!1;proposedSelectedRange;renderedSelectionRange;selectionAnchor;queuedSelectionRender;pointerSession={mode:"idle"};constructor(e,n){this.mode=e,this.options=n}setOptions(e){this.options=e}cleanUp(){this.pre?.removeEventListener("click",this.handlePointerClick),this.pre?.removeEventListener("pointerdown",this.handlePointerDown),this.pre?.removeEventListener("pointermove",this.handlePointerMove),this.pre?.removeEventListener("pointerleave",this.handlePointerLeave),this.pre?.removeAttribute("data-interactive-lines"),this.pre?.removeAttribute("data-interactive-line-numbers"),this.pre=void 0,this.gutterUtilityContainer?.remove(),this.gutterUtilityLine=void 0,this.gutterUtilityContainer=void 0,this.gutterUtilityButton=void 0,this.gutterUtilitySlot=void 0,this.clearHoveredLine(),this.clearHoveredToken(),this.detachDocumentPointerListeners(),this.clearPointerSession(),this.queuedSelectionRender!=null&&(cancelAnimationFrame(this.queuedSelectionRender),this.queuedSelectionRender=void 0),this.interactiveLinesAttr=!1,this.interactiveLineNumbersAttr=!1,this.hasPointerListeners=!1}setup(e){this.setSelectionDirty();const{usesCustomGutterUtility:n=!1,enableGutterUtility:t=!1}=this.options;this.pre!==e&&(this.cleanUp(),this.pre=e),t?this.ensureGutterUtilityNode(n):this.gutterUtilityContainer!=null&&(this.gutterUtilityContainer.remove(),this.gutterUtilityLine=void 0,this.gutterUtilityContainer=void 0,this.gutterUtilityButton=void 0,this.gutterUtilitySlot=void 0,this.pointerSession.mode==="gutterSelecting"&&(this.clearPointerSession(),this.detachDocumentPointerListeners())),this.syncPointerListeners(e),this.updateInteractiveLineAttributes(),this.renderSelection(),this.placeUtility()}setSelectionDirty(){this.renderedSelectionRange=void 0}setEditorAttached(e){this.editorAttached!==e&&(this.editorAttached=e,this.setSelectionDirty(),this.renderSelection())}isSelectionDirty(){return this.renderedSelectionRange===null}setSelection(e,n){const t=!(e===this.selectedRange||H(e??void 0,this.selectedRange??void 0));!this.isSelectionDirty()&&!t||(this.proposedSelectedRange=void 0,this.selectedRange=e,this.activeLineHighlightSide=n?.activeLineSide,this.activeLineNumberOnly=n?.lineNumberOnly??!1,this.renderSelection(),this.placeUtility(),t&&n?.notify!==!1&&this.notifySelectionCommitted())}getSelection(){return this.selectedRange}getHoveredLine=()=>{const e=this.gutterUtilityLine??this.hoveredLine;if(e!=null){if(this.mode==="diff"&&e.type==="diff-line")return{lineNumber:e.lineNumber,side:e.annotationSide};if(this.mode==="file"&&e.type==="line")return{lineNumber:e.lineNumber}}};handlePointerClick=e=>{const{onHunkExpand:n,onLineClick:t,onLineNumberClick:i,onTokenClick:a,onMergeConflictActionClick:r}=this.options;n==null&&t==null&&i==null&&r==null&&a==null||this.options.onGutterUtilityClick!=null&&E(e.composedPath())||(k(this.options.__debugPointerEvents,"click","FileDiff.DEBUG.handlePointerClick:",e),this.handlePointerEvent({eventType:"click",event:e}))};handlePointerMove=e=>{if(e.pointerType!=="mouse")return;const{lineHoverHighlight:n="disabled",onLineEnter:t,onLineLeave:i,onTokenEnter:a,onTokenLeave:r,enableGutterUtility:s=!1}=this.options;n==="disabled"&&!s&&t==null&&i==null&&a==null&&r==null||(k(this.options.__debugPointerEvents,"move","FileDiff.DEBUG.handlePointerMove:",e),this.handlePointerEvent({eventType:"move",event:e}))};handlePointerLeave=e=>{const{__debugPointerEvents:n}=this.options;if(k(n,"move","FileDiff.DEBUG.handlePointerLeave: no event"),this.hoveredLine==null&&this.hoveredToken==null){k(n,"move","FileDiff.DEBUG.handlePointerLeave: returned early, no hovered line or token");return}this.hoveredToken!=null&&(this.options.onTokenLeave?.(this.hoveredToken,e),this.clearHoveredToken()),this.hoveredLine!=null&&(this.options.onLineLeave?.({...this.hoveredLine,event:e}),this.clearHoveredLine()),this.placeUtility()};handlePointerEvent({eventType:e,event:n}){const{__debugPointerEvents:t}=this.options,i=n.composedPath();k(t,e,"FileDiff.DEBUG.handlePointerEvent:",{eventType:e,composedPath:i});const a=this.resolvePointerTarget(i);k(t,e,"FileDiff.DEBUG.handlePointerEvent: resolvePointerTarget result:",a);const{onLineClick:r,onLineNumberClick:s,onLineEnter:l,onLineLeave:o,onTokenClick:d,onTokenEnter:c,onTokenLeave:m,onHunkExpand:h,onMergeConflictActionClick:f}=this.options;switch(e){case"move":{const u=T(a)&&this.hoveredLine?.lineElement===a.lineElement;A(a)&&this.hoveredToken?.tokenElement===a.tokenElement||(this.hoveredToken!=null&&(m?.(this.hoveredToken,n),this.clearHoveredToken()),A(a)&&(this.setHoveredToken(this.toTokenEventBaseProps(a)),c?.(this.hoveredToken,n))),u||(this.hoveredLine!=null&&(o?.({...this.hoveredLine,event:n}),this.clearHoveredLine()),T(a)?(this.setHoveredLine(this.toEventBaseProps(a)),this.placeUtility(),l?.({...this.hoveredLine,event:n})):this.placeUtility());break}case"click":{if(a==null)break;if(de(a)&&f!=null){f(a);break}if(se(a)&&h!=null){h(a.hunkIndex,a.all||n.shiftKey?"both":a.direction,a.all||n.shiftKey?Number.POSITIVE_INFINITY:void 0);break}if(!T(a))break;A(a)&&d!=null&&d(this.toTokenEventBaseProps(a),n);const u=this.toEventBaseProps(a);s!=null&&a.numberColumn?s({...u,event:n}):r?.({...u,event:n});break}}}syncPointerListeners(e){const{__debugPointerEvents:n,lineHoverHighlight:t="disabled",onLineClick:i,onLineNumberClick:a,onLineEnter:r,onLineLeave:s,onTokenClick:l,onTokenEnter:o,onTokenLeave:d,onHunkExpand:c,onMergeConflictActionClick:m,enableGutterUtility:h=!1,enableLineSelection:f=!1,onGutterUtilityClick:u}=this.options,v=u!=null,b=t!=="disabled"||i!=null||a!=null||r!=null||s!=null||l!=null||o!=null||d!=null||c!=null||m!=null||h||f||v;b&&!this.hasPointerListeners?(e.addEventListener("click",this.handlePointerClick),e.addEventListener("pointerdown",this.handlePointerDown),e.addEventListener("pointermove",this.handlePointerMove),e.addEventListener("pointerleave",this.handlePointerLeave),this.hasPointerListeners=!0,k(n,"click","FileDiff.DEBUG.attachEventListeners: Attaching click events for:",(()=>{const x=[];return(n==="both"||n==="click")&&(i!=null&&x.push("onLineClick"),a!=null&&x.push("onLineNumberClick"),c!=null&&x.push("expandable hunk separators"),m!=null&&x.push("merge conflict actions")),x})()),k(n,"move","FileDiff.DEBUG.attachEventListeners: Attaching pointer move event"),k(n,"move","FileDiff.DEBUG.attachEventListeners: Attaching pointer leave event")):!b&&this.hasPointerListeners&&(e.removeEventListener("click",this.handlePointerClick),e.removeEventListener("pointerdown",this.handlePointerDown),e.removeEventListener("pointermove",this.handlePointerMove),e.removeEventListener("pointerleave",this.handlePointerLeave),this.hasPointerListeners=!1);const g=this.pointerSession.mode==="selecting"||this.pointerSession.mode==="pendingSingleLineUnselect",y=this.pointerSession.mode==="gutterSelecting";(!f&&g||!v&&y)&&(this.clearPointerSession(),this.detachDocumentPointerListeners(),this.selectionAnchor=void 0,this.clearPendingSingleLineState())}updateInteractiveLineAttributes(){if(this.pre==null)return;const{onLineClick:e,onLineNumberClick:n,enableLineSelection:t=!1}=this.options,i=e!=null,a=n!=null||t;i&&!this.interactiveLinesAttr?(this.pre.setAttribute("data-interactive-lines",""),this.interactiveLinesAttr=!0):!i&&this.interactiveLinesAttr&&(this.pre.removeAttribute("data-interactive-lines"),this.interactiveLinesAttr=!1),a&&!this.interactiveLineNumbersAttr?(this.pre.setAttribute("data-interactive-line-numbers",""),this.interactiveLineNumbersAttr=!0):!a&&this.interactiveLineNumbersAttr&&(this.pre.removeAttribute("data-interactive-line-numbers"),this.interactiveLineNumbersAttr=!1)}handlePointerDown=e=>{if(e.pointerType==="mouse"&&e.button!==0||this.pre==null||this.pointerSession.mode!=="idle")return;const n=e.composedPath();E(n)&&this.options.onGutterUtilityClick!=null?this.startGutterSelectionFromPointerDown(e):(e.pointerType!=="mouse"&&this.revealUtilityFromGutterPath(n),this.startLineSelectionFromPointerDown(e))};startLineSelectionFromPointerDown(e){const{enableLineSelection:n=!1}=this.options;if(!n)return;const t=this.resolveSelectionInfo(e,{source:"event-path",requireNumberColumn:!0});if(t==null)return;const{pre:i}=this;if(i==null)return;e.preventDefault();const{lineNumber:a,eventSide:r,lineIndex:s}=t;if(e.shiftKey&&this.selectedRange!=null){const l=this.getIndexesFromSelection(this.selectedRange,i.getAttribute("data-diff-type")==="split");if(l==null)return;const o=l.start<=l.end?s>=l.start:s<=l.end;this.selectionAnchor={lineNumber:o?this.selectedRange.start:this.selectedRange.end,side:o?this.selectedRange.side:this.selectedRange.endSide??this.selectedRange.side},this.updateSelection(a,r,!1),this.notifySelectionStart(this.getCurrentSelectionRange()),this.pointerSession={mode:"selecting",pointerId:e.pointerId},this.attachDocumentPointerListeners();return}if(this.selectedRange?.start===a&&this.selectedRange?.end===a){const l={lineNumber:a,side:r};this.selectionAnchor=l,this.pointerSession={mode:"pendingSingleLineUnselect",pointerId:e.pointerId,anchor:l,pending:l},this.attachDocumentPointerListeners();return}this.options.controlledSelection===!0?this.proposedSelectedRange=null:this.selectedRange=null,this.placeUtility(),this.selectionAnchor={lineNumber:a,side:r},this.updateSelection(a,r,!1),this.notifySelectionStart(this.getCurrentSelectionRange()),this.pointerSession={mode:"selecting",pointerId:e.pointerId},this.attachDocumentPointerListeners()}startGutterSelectionFromPointerDown(e){const{enableLineSelection:n=!1,onGutterUtilityClick:t}=this.options;if(t==null)return;const i=this.currentSelectionEnds(),a=i?.bottom??this.resolveSelectionPoint(e,{source:"event-path",excludeUtility:!1}),r=i?.top??a;a==null||r==null||(e.preventDefault(),e.stopPropagation(),this.pointerSession={mode:"gutterSelecting",pointerId:e.pointerId,anchor:r,current:a},n&&(this.selectionAnchor={lineNumber:r.lineNumber,side:r.side},this.updateSelection(a.lineNumber,a.side,!1),this.notifySelectionStart(this.getCurrentSelectionRange())),this.attachDocumentPointerListeners())}handleDocumentPointerMove=e=>{const{enableLineSelection:n=!1}=this.options;switch(this.pointerSession.mode){case"idle":return;case"gutterSelecting":{if(e.pointerId!==this.pointerSession.pointerId)return;e.preventDefault();const t=this.resolveSelectionPoint(e,{source:"coordinates-first"});if(t==null)return;this.pointerSession.current=t,n===!0&&this.updateSelection(t.lineNumber,t.side);return}case"selecting":{if(e.pointerId!==this.pointerSession.pointerId)return;e.preventDefault();const t=this.resolveSelectionInfo(e,{source:"coordinates-first",requireNumberColumn:!1});if(t==null||this.selectionAnchor==null)return;this.updateSelection(t.lineNumber,t.eventSide);return}case"pendingSingleLineUnselect":{if(e.pointerId!==this.pointerSession.pointerId)return;e.preventDefault();const t=this.resolveSelectionInfo(e,{source:"coordinates-first",requireNumberColumn:!1});if(t==null||this.selectionAnchor==null)return;const i={lineNumber:t.lineNumber,side:t.eventSide};if(re(this.pointerSession.pending,i))return;this.updateSelection(t.lineNumber,t.eventSide,!1),this.notifySelectionStart(this.getCurrentSelectionRange()),this.notifySelectionChangeDelta(),this.pointerSession={mode:"selecting",pointerId:e.pointerId};return}}};handleDocumentPointerUp=e=>{const{enableLineSelection:n=!1,onGutterUtilityClick:t}=this.options;switch(this.pointerSession.mode){case"idle":return;case"gutterSelecting":{if(e.pointerId!==this.pointerSession.pointerId)return;e.preventDefault();const i=this.resolveSelectionPoint(e,{source:"coordinates-first"});i!=null&&(this.pointerSession.current=i,n&&this.updateSelection(i.lineNumber,i.side)),t?.(this.buildSelectedLineRange(this.pointerSession.anchor,this.pointerSession.current)),this.selectionAnchor=void 0,n&&(this.notifySelectionEnd(this.getCurrentSelectionRange()),this.notifySelectionCommitted(),this.clearProposedSelection()),this.clearPointerSession(),this.detachDocumentPointerListeners();return}case"pendingSingleLineUnselect":if(e.pointerId!==this.pointerSession.pointerId)return;e.preventDefault(),this.updateSelection(null,void 0,!1),this.selectionAnchor=void 0,this.clearPendingSingleLineState(),this.detachDocumentPointerListeners(),this.notifySelectionEnd(this.getCurrentSelectionRange()),this.notifySelectionCommitted(),this.clearProposedSelection();return;case"selecting":if(e.pointerId!==this.pointerSession.pointerId)return;e.preventDefault(),this.selectionAnchor=void 0,this.detachDocumentPointerListeners(),this.clearPointerSession(),this.notifySelectionEnd(this.getCurrentSelectionRange()),this.notifySelectionCommitted(),this.clearProposedSelection()}};handleDocumentPointerCancel=e=>{switch(this.pointerSession.mode){case"idle":return;case"gutterSelecting":case"selecting":case"pendingSingleLineUnselect":if("pointerId"in this.pointerSession&&e.pointerId!==this.pointerSession.pointerId)return;this.selectionAnchor=void 0,this.clearProposedSelection(),this.clearPendingSingleLineState(),this.clearPointerSession(),this.detachDocumentPointerListeners()}};clearHoveredLine(){this.hoveredLine!=null&&(this.hoveredLine.lineElement.removeAttribute("data-hovered"),this.hoveredLine.numberElement.removeAttribute("data-hovered"),this.hoveredLine=void 0)}setHoveredLine(e){const{lineHoverHighlight:n="disabled"}=this.options;this.hoveredLine!=null&&this.clearHoveredLine(),this.hoveredLine=e,n!=="disabled"&&((n==="both"||n==="line")&&this.hoveredLine.lineElement.setAttribute("data-hovered",""),(n==="both"||n==="number")&&this.hoveredLine.numberElement.setAttribute("data-hovered",""))}clearHoveredToken(){this.hoveredToken!=null&&(this.hoveredToken=void 0)}setHoveredToken(e){this.hoveredToken!=null&&this.clearHoveredToken(),this.hoveredToken=e}ensureGutterUtilityNode(e){if(this.gutterUtilityContainer==null&&(this.gutterUtilityContainer=document.createElement("div"),this.gutterUtilityContainer.setAttribute("data-gutter-utility-slot","")),e)this.gutterUtilityButton!=null&&(this.gutterUtilityButton.remove(),this.gutterUtilityButton=void 0),this.gutterUtilitySlot==null&&(this.gutterUtilitySlot=document.createElement("slot"),this.gutterUtilitySlot.name="gutter-utility-slot"),this.gutterUtilitySlot.parentNode!==this.gutterUtilityContainer&&this.gutterUtilityContainer.replaceChildren(this.gutterUtilitySlot);else{if(this.gutterUtilitySlot?.remove(),this.gutterUtilitySlot=void 0,this.gutterUtilityButton==null){const n=document.createElement("div");n.innerHTML=ie(ae());const t=n.firstElementChild;if(!(t instanceof HTMLButtonElement))throw new Error("InteractionManager.ensureGutterUtilityNode: Node element should be a button");t.remove(),this.gutterUtilityButton=t}this.gutterUtilityButton.parentNode!==this.gutterUtilityContainer&&this.gutterUtilityContainer.replaceChildren(this.gutterUtilityButton)}}revealUtilityFromGutterPath(e){if(this.placeUtilityFromSelection())return;const n=this.resolvePointerTarget(e);w(n)&&n.numberColumn&&this.showUtilityOnLine(this.toEventBaseProps(n))}placeUtility(){if(!this.placeUtilityFromSelection()){if(this.hoveredLine!=null){this.showUtilityOnLine(this.hoveredLine);return}this.hideUtility()}}placeUtilityFromSelection(){const e=this.currentSelectionEnds();if(e==null)return!1;const n=this.targetForSelectionPoint(e.bottom);return n==null?this.hideUtility():this.showUtilityOnLine(this.toEventBaseProps(n)),!0}showUtilityOnLine(e){this.gutterUtilityContainer!=null&&(this.gutterUtilityLine=e,e.numberElement.appendChild(this.gutterUtilityContainer))}hideUtility(){this.gutterUtilityContainer?.remove(),this.gutterUtilityLine=void 0}currentSelectionEnds(){const e=this.getCurrentSelectionRange();return e==null?void 0:this.selectionEnds(e)}selectionEnds(e){const n={lineNumber:e.start,side:e.side},t={lineNumber:e.end,side:e.endSide??e.side},i=this.selectionPointRowIndex(n),a=this.selectionPointRowIndex(t);if(!(i==null||a==null))return i>a?{top:t,bottom:n}:{top:n,bottom:t}}selectionPointRowIndex(e){const n=this.getLineIndex(e.lineNumber,e.side);if(n!=null)return this.isSplitDiff()?n[1]:n[0]}targetForSelectionPoint(e){if(this.pre==null)return;const n=this.getLineIndex(e.lineNumber,e.side);if(n==null)return;const t=this.mode==="diff"?`${n[0]},${n[1]}`:`${n[0]}`,i=this.pre.querySelectorAll(`[data-column-number="${e.lineNumber}"][data-line-index="${t}"]`);for(const a of i){if(!(a instanceof HTMLElement))continue;const r=this.resolvePointerTarget(L(a));if(w(r)&&!(this.mode==="diff"&&e.side!=null&&r.side!==e.side))return r}}attachDocumentPointerListeners(){this.hasDocumentPointerListeners||(document.addEventListener("pointermove",this.handleDocumentPointerMove),document.addEventListener("pointerup",this.handleDocumentPointerUp),document.addEventListener("pointercancel",this.handleDocumentPointerCancel),this.hasDocumentPointerListeners=!0)}detachDocumentPointerListeners(){this.hasDocumentPointerListeners&&(document.removeEventListener("pointermove",this.handleDocumentPointerMove),document.removeEventListener("pointerup",this.handleDocumentPointerUp),document.removeEventListener("pointercancel",this.handleDocumentPointerCancel),this.hasDocumentPointerListeners=!1)}clearPointerSession(){this.pointerSession={mode:"idle"}}clearPendingSingleLineState(){this.pointerSession.mode==="pendingSingleLineUnselect"&&(this.pointerSession={mode:"idle"})}selectionInfoFromPath(e,n){const t=this.resolvePointerTarget(e);if(w(t)&&!(n&&!t.numberColumn)&&t.splitLineIndex!=null)return{lineIndex:t.splitLineIndex,lineNumber:t.lineNumber,eventSide:this.mode==="diff"?t.side:void 0}}resolveSelectionInfo(e,n){const t=this.resolveSelectionPath(e,n);return t!=null?this.selectionInfoFromPath(t,n.requireNumberColumn):void 0}selectionPointFromPath(e){const n=this.resolvePointerTarget(e);if(w(n))return{lineNumber:n.lineNumber,side:this.mode==="diff"?n.side:void 0}}resolveSelectionPoint(e,n){const t=this.resolveSelectionPath(e,n);return t!=null?this.selectionPointFromPath(t):void 0}resolveSelectionPath(e,n){const t=n.excludeUtility!==!1;switch(n.source){case"event-path":return this.pathFromEventPath(e.composedPath(),t);case"coordinates-first":{const i=this.pathFromCoordinates(e,t);return i!==void 0?i??void 0:this.pathFromEventPath(e.composedPath(),t)}}}pathFromCoordinates(e,n){const t=this.hitTest(e);if(t!==void 0)return t===null?null:this.pathFromElement(t,n)??null}pathFromEventPath(e,n){if(!(n&&E(e))){for(const t of e)if(t instanceof Element)return this.pathFromElement(t,n)}}pathFromElement(e,n){const t=L(e);if(n&&E(t))return;const i=fe(e);return i!=null?L(i):this.pathFromAnnotationSlot(e)}pathFromAnnotationSlot(e){const n=ue(ce(e));if(n==null)return;const t=this.targetForSelectionPoint(n);return t!=null?L(t.lineElement):void 0}hitTest(e){if(!Number.isFinite(e.clientX)||!Number.isFinite(e.clientY))return;const n=this.pre?.getRootNode(),t=z(n)?n:z(document)?document:void 0;if(t!=null)return t.elementFromPoint(e.clientX,e.clientY)}getLineIndex(e,n){const{getLineIndex:t}=this.options;return t!=null?t(e,n):[e-1,e-1]}getCurrentSelectionRange(){return this.proposedSelectedRange!==void 0?this.proposedSelectedRange:this.selectedRange}clearProposedSelection(){this.proposedSelectedRange=void 0}updateSelection(e,n,t=!0){const i=this.getCurrentSelectionRange();let a;if(e==null)a=null;else{const r=this.selectionAnchor?.side??n,s=this.selectionAnchor?.lineNumber??e;a=this.buildSelectionRange(s,e,r,n)}H(i??void 0,a??void 0)||(this.activeLineHighlightSide=void 0,this.activeLineNumberOnly=!1,this.options.controlledSelection===!0?this.proposedSelectedRange=a:(this.selectedRange=a,this.queuedSelectionRender??=requestAnimationFrame(this.renderSelection)),this.placeUtility(),t&&this.notifySelectionChangeDelta())}getIndexesFromSelection(e,n){if(this.pre==null)return;const t=this.getLineIndex(e.start,e.side),i=this.getLineIndex(e.end,e.endSide??e.side);return t!=null&&i!=null?{start:n?t[1]:t[0],end:n?i[1]:i[0]}:void 0}highlightLineNumberOnly(){return this.activeLineHighlightSide!=null?this.activeLineNumberOnly:this.activeLineNumberOnly||this.editorAttached}renderSelection=()=>{if(this.queuedSelectionRender!=null&&(cancelAnimationFrame(this.queuedSelectionRender),this.queuedSelectionRender=void 0),this.pre==null||this.renderedSelectionRange===this.selectedRange)return;const e=this.pre.querySelectorAll("[data-selected-line]");for(const o of e)o.removeAttribute("data-selected-line");if(this.renderedSelectionRange=this.selectedRange,this.selectedRange==null)return;const{children:n}=this.pre;if(n.length===0)return;if(n.length>2)throw console.error(n),new Error("InteractionManager.renderSelection: Somehow there are more than 2 code elements...");const t=this.pre.getAttribute("data-diff-type")==="split",i=this.getIndexesFromSelection(this.selectedRange,t);if(i==null)throw console.error({rowRange:i,selectedRange:this.selectedRange}),new Error("InteractionManager.renderSelection: No valid rowRange");const a=i.start===i.end,r=Math.min(i.start,i.end),s=Math.max(i.start,i.end),l=this.highlightLineNumberOnly();for(const o of n){const d=this.activeLineHighlightSide;if(d!=null&&(d==="additions"&&o.hasAttribute("data-deletions")||d==="deletions"&&o.hasAttribute("data-additions")))continue;const[c,m]=o.children,h=m.children.length;if(h!==c.children.length)throw new Error("InteractionManager.renderSelection: gutter and content children dont match, something is wrong");for(let f=0;f<h;f++){const u=m.children[f],v=c.children[f];if(!(u instanceof HTMLElement)||!(v instanceof HTMLElement))continue;const b=this.parseLineIndex(u,t);if((b??0)>s)break;if(b==null||b<r)continue;let g=a?"single":b===r?"first":b===s?"last":"";v.setAttribute("data-selected-line",g),!l&&(u.setAttribute("data-selected-line",g),v.nextSibling instanceof HTMLElement&&u.nextSibling instanceof HTMLElement&&(u.nextSibling.hasAttribute("data-line-annotation")||u.nextSibling.hasAttribute("data-merge-conflict-actions"))&&(a?(g="last",u.setAttribute("data-selected-line","first")):b===r?g="":b===s&&u.setAttribute("data-selected-line",""),u.nextSibling.setAttribute("data-selected-line",g),v.nextSibling.setAttribute("data-selected-line",g)))}}};notifySelectionCommitted(){this.options.onLineSelected?.(this.getCurrentSelectionRange()??null)}notifySelectionChangeDelta(){this.options.onLineSelectionChange?.(this.getCurrentSelectionRange()??null)}notifySelectionStart(e){this.options.onLineSelectionStart?.(e)}notifySelectionEnd(e){this.options.onLineSelectionEnd?.(e)}toEventBaseProps(e){return this.mode==="file"?{type:"line",lineElement:e.lineElement,lineNumber:e.lineNumber,numberColumn:e.numberColumn,numberElement:e.numberElement}:{type:"diff-line",annotationSide:e.side,lineType:e.lineType,lineElement:e.lineElement,numberElement:e.numberElement,lineNumber:e.lineNumber,numberColumn:e.numberColumn}}toTokenEventBaseProps({lineCharEnd:e,lineCharStart:n,lineNumber:t,side:i,tokenElement:a,tokenText:r}){return this.mode==="file"?{type:"token",lineCharEnd:e,lineCharStart:n,lineNumber:t,tokenElement:a,tokenText:r}:{type:"token",lineCharEnd:e,lineCharStart:n,lineNumber:t,side:i,tokenElement:a,tokenText:r}}buildSelectedLineRange(e,n){return this.buildSelectionRange(e.lineNumber,n.lineNumber,e.side,n.side)}buildSelectionRange(e,n,t,i){return{start:e,end:n,...t!=null?{side:t}:{},...t!==i&&i!=null?{endSide:i}:{}}}resolvePointerTarget(e){let n=!1,t,i,a,r,s,l,o,d,c,m;for(const f of e){if(!(f instanceof HTMLElement))continue;if(m==null&&f.hasAttribute("data-merge-conflict-action")){const g=f.getAttribute("data-merge-conflict-action")??void 0,y=f.getAttribute("data-merge-conflict-conflict-index")??void 0,x=y!=null?Number.parseInt(y,10):NaN;le(g)&&Number.isFinite(x)&&(m={kind:"merge-conflict-action",resolution:g,conflictIndex:x})}if(l==null&&f.hasAttribute("data-char")){l=f;const g=f.getAttribute("data-char");if(g!=null){const y=Number.parseInt(g,10);if(!Number.isNaN(y)){const x=f.textContent??"",N=y+x.length;(x.trim()!==""||this.options.enableTokenInteractionsOnWhitespace===!0)&&(o={tokenElement:l,lineCharStart:y,lineCharEnd:N,tokenText:x});continue}}}const u=s==null?f.getAttribute("data-column-number")??void 0:void 0;if(u!=null){s=f,c=Number.parseInt(u,10),n=!0,t=O(f),r=f.getAttribute("data-line-index")??void 0;continue}const v=a==null?f.getAttribute("data-line")??void 0:void 0;if(v!=null){a=f,c=Number.parseInt(v,10),t=O(f),r=f.getAttribute("data-line-index")??void 0;continue}if(d==null&&(f.hasAttribute("data-expand-button")||f.hasAttribute("data-unmodified-lines"))){d={hunkIndex:void 0,direction:f.hasAttribute("data-expand-up")?"up":f.hasAttribute("data-expand-down")?"down":"both",all:f.hasAttribute("data-expand-all-button")};continue}const b=d!=null?f.getAttribute("data-expand-index")??void 0:void 0;if(d!=null&&b!=null){const g=Number.parseInt(b,10);Number.isNaN(g)||(d.hunkIndex=g);continue}if(i==null&&f.hasAttribute("data-code")){i=f;break}}if(m!=null)return m;if(d?.hunkIndex!=null)return{type:"line-info",hunkIndex:d.hunkIndex,direction:d.direction,all:d.all};if(a??=r!=null?D(i,`[data-line][data-line-index="${r}"]`):void 0,s??=r!=null?D(i,`[data-column-number][data-line-index="${r}"]`):void 0,i==null||a==null||s==null||t==null||c==null||Number.isNaN(c))return;const h=this.parseLineIndex(a,this.isSplitDiff());return o!=null?this.mode==="file"?{kind:"token",lineType:t,lineElement:a,lineNumber:c,numberColumn:n,numberElement:s,side:void 0,splitLineIndex:h,...o}:{kind:"token",lineType:t,lineElement:a,lineNumber:c,numberColumn:n,numberElement:s,side:F(t,i),splitLineIndex:h,...o}:this.mode==="file"?{kind:"line",lineType:t,lineElement:a,lineNumber:c,numberColumn:n,numberElement:s,side:void 0,splitLineIndex:h}:{kind:"line",lineType:t,lineElement:a,lineNumber:c,numberColumn:n,numberElement:s,side:F(t,i),splitLineIndex:h}}isSplitDiff(){return this.pre?.getAttribute("data-diff-type")==="split"}parseLineIndex(e,n){const t=(e.getAttribute("data-line-index")??"").split(",").map(i=>Number.parseInt(i,10)).filter(i=>!Number.isNaN(i));if(n&&t.length===2)return t[1];if(!n)return t[0]}};function Me({enableTokenInteractionsOnWhitespace:e,enableGutterUtility:n,lineHoverHighlight:t,onGutterUtilityClick:i,onLineClick:a,onLineEnter:r,onLineLeave:s,onLineNumberClick:l,onTokenClick:o,onTokenEnter:d,onTokenLeave:c,renderGutterUtility:m,__debugPointerEvents:h,enableLineSelection:f,controlledSelection:u,onLineSelected:v,onLineSelectionStart:b,onLineSelectionChange:g,onLineSelectionEnd:y},x,N,W){return{enableTokenInteractionsOnWhitespace:e,enableGutterUtility:oe({enableGutterUtility:n,renderGutterUtility:m,onGutterUtilityClick:i}),usesCustomGutterUtility:m!=null,lineHoverHighlight:t,onGutterUtilityClick:i,onHunkExpand:x,onMergeConflictActionClick:W,onLineClick:a,onLineEnter:r,onLineLeave:s,onLineNumberClick:l,onTokenClick:o,onTokenEnter:d,onTokenLeave:c,__debugPointerEvents:h,enableLineSelection:f,controlledSelection:u,onLineSelected:v,onLineSelectionStart:b,onLineSelectionChange:g,onLineSelectionEnd:y,getLineIndex:N}}function oe({enableGutterUtility:e,renderGutterUtility:n,onGutterUtilityClick:t}){if(t!=null&&n!=null)throw new Error("Cannot use both 'onGutterUtilityClick' and 'renderGutterUtility'. Use only one gutter utility API.");return e??!1}function w(e){return e!=null&&"kind"in e&&e.kind==="line"}function A(e){return e!=null&&"kind"in e&&e.kind==="token"}function T(e){return w(e)||A(e)}function se(e){return"type"in e&&e.type==="line-info"}function de(e){return"kind"in e&&e.kind==="merge-conflict-action"}function le(e){return e==="current"||e==="incoming"||e==="both"}function D(e,n){const t=e?.querySelector(n);return t instanceof HTMLElement?t:void 0}function L(e){const n=[];let t=e;for(;t!=null;)n.push(t),t=t.parentNode;return n}function fe(e){const n=e.closest("[data-line], [data-column-number]");if(n instanceof HTMLElement)return n;const t=e.closest('[data-line-annotation], [data-gutter-buffer="annotation"]');if(!(t instanceof HTMLElement))return;const i=t.previousElementSibling;return i instanceof HTMLElement&&(i.hasAttribute("data-line")||i.hasAttribute("data-column-number"))?i:void 0}function ce(e){const n=e.closest('[slot^="annotation-"]');if(n instanceof HTMLElement)return n.getAttribute("slot")??void 0;if(e instanceof HTMLElement){const t=e.getAttribute("name")??void 0;return t!=null&&t.startsWith("annotation-")?t:void 0}}function ue(e){if(e==null)return;const n=/^annotation-(?:(additions|deletions)-)?(\d+)$/.exec(e);if(n==null)return;const t=Number.parseInt(n[2],10);if(!(!Number.isFinite(t)||t<=0))return{lineNumber:t,side:n[1]}}function z(e){return e!=null&&typeof e.elementFromPoint=="function"}function F(e,n){switch(e){case"change-deletion":return"deletions";case"change-addition":return"additions";default:return n.hasAttribute("data-deletions")?"deletions":"additions"}}function O(e){const n=e.getAttribute("data-line-type");if(n!=null)switch(n){case"change-deletion":case"change-addition":case"context":case"context-expanded":return n;default:return}}function E(e){for(const n of e)if(n instanceof HTMLElement&&(n.hasAttribute("data-utility-button")||n.hasAttribute("data-gutter-utility-slot")||n.getAttribute("slot")==="gutter-utility-slot"||n.getAttribute("name")==="gutter-utility-slot"))return!0;return!1}function k(e="none",n,...t){switch(e){case"none":return;case"both":break;case"click":if(n!=="click")return;break;case"move":if(n!=="move")return;break}console.log(...t)}var Ue=class S{static resizeObserver;static managersByElement=new Map;static getResizeObserver(){const n=S.resizeObserver??new ResizeObserver(S.handleSharedResizeEntries);return S.resizeObserver=n,n}static handleSharedResizeEntries(n){const t=new Map;for(const i of n){const a=S.managersByElement.get(i.target);if(a==null)continue;const r=t.get(a);r==null?t.set(a,[i]):r.push(i)}for(const[i,a]of t)i.handleResizeEntries(a)}observedNodes=new Map;setup(n,t){const i=new Set;let a=0;const r=new Map(this.observedNodes);this.observedNodes.clear();for(const s of n.children){if(a===2)break;const l=(()=>{if(s instanceof HTMLElement&&s.tagName==="CODE")return s})();if(l==null)continue;a++;let o=r.get(l);if(o!=null&&o.type!=="code")throw new Error("ResizeManager.setup: somehow a code node is being used for an annotation, should be impossible");let d=l.firstElementChild;d instanceof HTMLElement||(d=null),o!=null?(this.observedNodes.set(l,o),r.delete(l),o.numberElement!==d?(o.numberElement!=null&&(this.unobserve(o.numberElement),r.delete(o.numberElement)),d!=null&&(this.observe(d),r.delete(d),this.observedNodes.set(d,o)),o.numberElement=d,o.numberWidth=0):o.numberElement!=null?(r.delete(o.numberElement),this.observedNodes.set(o.numberElement,o)):o.numberWidth=0):(o={type:"code",codeElement:l,numberElement:d,codeWidth:"auto",numberWidth:0},this.observedNodes.set(l,o),this.observe(l),d!=null&&(this.observedNodes.set(d,o),this.observe(d)))}if(a>1&&!t){const s=n.querySelectorAll('[data-line-annotation*=","]'),l=new Map;for(const o of s){if(!(o instanceof HTMLElement))continue;const d=o.getAttribute("data-line-annotation")??"";if(!/^-?\d+,-?\d+$/.test(d)){console.error("DiffFileRenderer.setupResizeObserver: Invalid element or annotation",{lineAnnotation:d,element:o});continue}let c=l.get(d);c==null&&(c=[],l.set(d,c)),c.push(o)}for(const[o,d]of l){if(d.length!==2){console.error("DiffFileRenderer.setupResizeObserver: Bad Pair",o,d);continue}const[c,m]=d,h=c.firstElementChild,f=m.firstElementChild;if(!(c instanceof HTMLElement)||!(m instanceof HTMLElement)||!(h instanceof HTMLElement)||!(f instanceof HTMLElement))continue;let u=r.get(h);if(u!=null){this.observedNodes.set(h,u),this.observedNodes.set(f,u),r.delete(h),r.delete(f);continue}const v=h.getBoundingClientRect().height,b=f.getBoundingClientRect().height;u={type:"annotations",column1:{container:c,child:h,childHeight:v},column2:{container:m,child:f,childHeight:b},currentHeight:"auto"},i.add({child1:h,child2:f,item:u,newHeight:Math.max(v,b)})}for(const o of i)this.applyNewHeight(o.item,o.newHeight),this.observedNodes.set(o.child1,o.item),this.observedNodes.set(o.child2,o.item),this.observe(o.child1),this.observe(o.child2);i.clear()}for(const[s,l]of r)this.unobserve(s),l.type==="code"?ge(l):pe(l);r.clear()}cleanUp(){for(const n of this.observedNodes.keys())this.unobserve(n);this.observedNodes.clear()}observe(n){const{managersByElement:t}=S,i=t.get(n);if(i!==this){if(i!=null&&i!==this)throw new Error("ResizeManager.observe: element is already owned by another ResizeManager");t.set(n,this),S.getResizeObserver().observe(n)}}unobserve(n){const{managersByElement:t,resizeObserver:i}=S,a=t.get(n);if(a!=null){if(a!==this)throw new Error("ResizeManager.unobserve: element is owned by another ResizeManager");t.delete(n),i?.unobserve(n),i!=null&&t.size===0&&(i.disconnect(),S.resizeObserver=void 0)}}handleResizeEntries(n){const t=new Map,i=new Set;for(const a of n){const{target:r,borderBoxSize:s,contentBoxSize:l}=a;if(!(r instanceof HTMLElement)){console.error("ResizeManager.handleResizeEntries: Invalid element for ResizeObserver",a);continue}const o=this.observedNodes.get(r);if(o==null){console.error("ResizeManager.handleResizeEntries: Not a valid observed node",a);continue}if(o.type==="annotations"){const d=(()=>{if(r===o.column1.child)return o.column1;if(r===o.column2.child)return o.column2})();if(d==null){console.error("ResizeManager.handleResizeEntries: Couldn't find a column for",{item:o,target:r});continue}d.childHeight=s[0].blockSize,i.add(o)}else if(o.type==="code"){const d=t.get(o)??{},c=l[0].inlineSize;r===o.codeElement?d.codeInlineSize=c:r===o.numberElement&&(d.numberInlineSize=c),t.set(o,d)}}this.applyAnnotationUpdates(i),i.clear(),this.applyColumnUpdates(t),t.clear()}applyAnnotationUpdates(n){for(const t of n)this.applyNewHeight(t,Math.max(t.column1.childHeight,t.column2.childHeight))}applyColumnUpdates=n=>{for(const[t,i]of n){const a=i.codeInlineSize!=null?he(i.codeInlineSize):t.codeWidth,r=i.numberInlineSize!=null?me(i.numberInlineSize):t.numberWidth,s=a!==t.codeWidth,l=r!==t.numberWidth;if(!(!s&&!l)&&(t.codeWidth=a,t.numberWidth=r,s&&t.codeElement.style.setProperty("--diffs-column-width",`${typeof a=="number"?`${a}px`:"auto"}`),l&&t.codeElement.style.setProperty("--diffs-column-number-width",`${r===0?"auto":`${r}px`}`),s||l&&a!=="auto")){const o=typeof a=="number"?Math.max(a-r,0):0;t.codeElement.style.setProperty("--diffs-column-content-width",`${o>0?`${o}px`:"auto"}`)}}};applyNewHeight(n,t){t!==n.currentHeight&&(n.currentHeight=Math.max(t,0),n.column1.container.style.setProperty("--diffs-annotation-min-height",`${n.currentHeight}px`),n.column2.container.style.setProperty("--diffs-annotation-min-height",`${n.currentHeight}px`))}};function he(e){const n=Math.max(Math.floor(e),0);return n===0?"auto":n}function me(e){return Math.max(Math.ceil(e),0)}function ge(e){e.codeElement.isConnected&&(e.codeElement.style.removeProperty("--diffs-column-content-width"),e.codeElement.style.removeProperty("--diffs-column-number-width"),e.codeElement.style.removeProperty("--diffs-column-width"))}function pe(e){e.column1.container.isConnected&&e.column1.container.style.removeProperty("--diffs-annotation-min-height"),e.column2.container.isConnected&&e.column2.container.style.removeProperty("--diffs-annotation-min-height")}function Re(e){for(const n of Array.isArray(e)?e:[e])if(!(n==="text"||n==="ansi")&&!ne.has(n))return!1;return!0}function He(e){for(const n of G(e))if(!te.has(n))return!1;return!0}function De(e,n){return e==null||n==null?e===n:e.startingLine===n.startingLine&&e.totalLines===n.totalLines&&e.bufferBefore===n.bufferBefore&&e.bufferAfter===n.bufferAfter}function ze(e){return p({tagName:"div",children:[p({tagName:"div",children:e.annotations?.map(n=>p({tagName:"slot",properties:{name:n}})),properties:{"data-annotation-content":""}})],properties:{"data-line-annotation":`${e.hunkIndex},${e.lineIndex}`}})}function be(e){switch(e){case"file":return"diffs-icon-file-code";case"change":return"diffs-icon-symbol-modified";case"new":return"diffs-icon-symbol-added";case"deleted":return"diffs-icon-symbol-deleted";case"rename-pure":case"rename-changed":return"diffs-icon-symbol-moved"}}function Fe({fileOrDiff:e,mode:n,stickyHeader:t}){const i="type"in e?e:void 0,a={"data-diffs-header":n,"data-change-type":i?.type,"data-sticky":t?"":void 0};return p({tagName:"div",children:[n==="custom"?p({tagName:"slot",properties:{name:V}}):ve({name:e.name,prevName:"prevName"in e?e.prevName:void 0,iconType:i?.type??"file"}),...n==="custom"?[]:[xe(i)]],properties:a})}function ve({name:e,prevName:n,iconType:t}){const i=[p({tagName:"slot",properties:{name:Y}}),I({name:be(t),properties:{"data-change-icon":t}})];return n!=null&&(i.push(p({tagName:"div",children:[p({tagName:"bdi",children:[C(n)]})],properties:{"data-prev-name":""}})),i.push(I({name:"diffs-icon-arrow-right-short",properties:{"data-rename-icon":""}}))),i.push(p({tagName:"div",children:[p({tagName:"bdi",children:[C(e)]})],properties:{"data-title":""}})),i.push(p({tagName:"slot",properties:{name:j}})),p({tagName:"div",children:i,properties:{"data-header-content":""}})}function xe(e){const n=[];if(e!=null){let t=0,i=0;for(const a of e.hunks)t+=a.additionLines,i+=a.deletionLines;(i>0||t===0)&&n.push(p({tagName:"span",children:[C(`-${i}`)],properties:{"data-deletions-count":""}})),(t>0||i===0)&&n.push(p({tagName:"span",children:[C(`+${t}`)],properties:{"data-additions-count":""}}))}return n.push(p({tagName:"slot",properties:{name:K}})),p({tagName:"div",children:n,properties:{"data-metadata":""}})}function Oe(e){return p({tagName:"pre",properties:ye(e)})}function ye({diffIndicators:e,disableBackground:n,disableLineNumbers:t,overflow:i,split:a,totalLines:r,type:s,customProperties:l}){return{...l,"data-diff":s==="diff"?"":void 0,"data-file":s==="file"?"":void 0,"data-diff-type":s==="diff"?a?"split":"single":void 0,"data-overflow":i,"data-disable-line-numbers":t?"":void 0,"data-background":n?void 0:"","data-indicators":e==="bars"||e==="classic"?e:void 0,tabIndex:0,style:`--diffs-min-number-column-width-default:${`${r}`.length}ch;`}}function Be(e,{theme:n,preferredHighlighter:t="shiki-js"}){return{langs:[e??"text"],themes:G(n),preferredHighlighter:t}}function $e(e){return`annotation-${"side"in e?`${e.side}-`:""}${e.lineNumber}`}const Ge="-1,-1";function _e(e){return e?.some(n=>n.lineNumber===0)??!1}function qe(e){const n=e[0];return n!=null&&n.length>0?n:void 0}function We(e){return e.startingLine===0&&e.totalLines>0}function Ve(e,n){return p({tagName:"div",children:e,properties:{"data-content":"",style:`grid-row: span ${n}`}})}function Ye(e){return e.useTokenTransformer===!0||e.onTokenClick!=null||e.onTokenEnter!=null||e.onTokenLeave!=null}const je=`<svg data-icon-sprite aria-hidden="true" width="0" height="0">
2
2
  <symbol id="diffs-icon-arrow-right-short" viewBox="0 0 16 16">
3
3
  <path d="M8.47 4.22a.75.75 0 0 0 0 1.06l1.97 1.97H3.75a.75.75 0 0 0 0 1.5h6.69l-1.97 1.97a.75.75 0 1 0 1.06 1.06l3.25-3.25a.75.75 0 0 0 0-1.06L9.53 4.22a.75.75 0 0 0-1.06 0"/>
4
4
  </symbol>
@@ -1,4 +1,4 @@
1
- import{G as e,H as t,J as s,K as i,L as o,M as a,N as n,O as r,Q as l,R as c,T as d,U as g,V as p,W as m,X as h,Y as u}from"./useAppFontEffects-Cz-1Efdn.js";import"./vendor-react-C3AD0CRp.js";import"./vendor-scheduler-7OC5HNn7.js";import"./index-BW492zXv.js";import"./vendor-zod-C3BVLiwa.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-XNmn2Hnw.js";import"./vendor-use-sync-external-store-DVVwmGAS.js";import"./vendor-opencode-client-DSZl7jSi.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-class-variance-authority-CyPa587s.js";import"./vendor-clsx-C_d985j6.js";import"./vendor-base-ui-BV0ycO3d.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-dom-BERnAEiB.js";import"./vendor-floating-ui-core-DBVSD8FA.js";import"./vendor-floating-ui-react-dom-VN3-0QGl.js";import"./vendor-dnd-kit-core-B-dmENub.js";import"./vendor-dnd-kit-utilities-D2MO70n8.js";import"./vendor-dnd-kit-accessibility-vxqCsF6D.js";import"./vendor-dnd-kit-sortable-DiuAkJDx.js";import"./vendor-tanstack-react-virtual-BHz8HhxS.js";import"./vendor-tanstack-virtual-core-BoA4iGMw.js";import"./vendor-framer-motion-0pQCvQRa.js";import"./vendor-motion-dom-DcCgeG69.js";import"./vendor-motion-utils-BGh8QBgx.js";import"./contextPanelEmbeddedChat-CirXEPJq.js";import"./vendor-sonner-CMlKUx1I.js";import"./vendor-cmdk-WpnCe4Xz.js";import"./vendor-radix-ui-react-dialog-Cya58wJc.js";import"./vendor-radix-ui-primitive-DOdKROq0.js";import"./vendor-radix-ui-react-compose-refs-OwL660na.js";import"./vendor-radix-ui-react-context-BGG-1ggC.js";import"./vendor-radix-ui-react-id-CciEoFzD.js";import"./vendor-radix-ui-react-use-layout-effect-ChlApEEc.js";import"./vendor-radix-ui-react-use-controllable-state-DprBN3PW.js";import"./vendor-radix-ui-react-use-callback-ref-D1Sqy0CZ.js";import"./vendor-radix-ui-react-dismissable-layer-3AH-Or1W.js";import"./vendor-radix-ui-react-primitive-CUfg3gbV.js";import"./vendor-radix-ui-react-slot-CLI2-QJb.js";import"./vendor-babel-runtime-CF3RwP-h.js";import"./vendor-radix-ui-react-use-escape-keydown-D0tG0-sR.js";import"./vendor-radix-ui-react-focus-scope-CqvJmvlR.js";import"./vendor-radix-ui-react-portal-EaY9b0dR.js";import"./vendor-radix-ui-react-presence-DBDb0ROU.js";import"./vendor-radix-ui-react-focus-guards-DOvT22db.js";import"./vendor-react-remove-scroll-CdTdY8wV.js";import"./vendor-tslib-De9GV7Vy.js";import"./vendor-react-remove-scroll-bar-DAxITgbW.js";import"./vendor-react-style-singleton-XBDcq1Ec.js";import"./vendor-get-nonce-C-Z93AgS.js";import"./vendor-use-sidecar-CzUV4Fx5.js";import"./vendor-use-callback-ref-h1JrcWGd.js";import"./vendor-aria-hidden-DvXkyWUv.js";import"./vendor-codemirror-language-Cg8boEOY.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-codemirror-state-C9awkmn-.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-view-CiLROUVV.js";import"./vendor-style-mod-NZ5MEPvj.js";import"./vendor-w3c-keyname-Vcq4gwWv.js";import"./vendor-crelt-C8TCjufn.js";import"./vendor-lezer-highlight-CDMHUZ74.js";import"./vendor-codemirror-lang-javascript-CN8Enbjc.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-Dw1gdHuT.js";import"./vendor-codemirror-lang-json-DzRRSgj9.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-B_seq3PB.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-CcuPVz08.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-B3FiTjDN.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-CbrKiV7x.js";import"./vendor-codemirror-lang-python-frX4-6UW.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-codemirror-commands-Cg3hFNyu.js";import"./vendor-legendapp-list-ZsDnss2w.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";const b={"settings.themeImport.selectAll":"全选","settings.themeImport.deselectAll":"取消全选","settings.themeImport.complete":"导入完成","settings.themeImport.catalogTitle":"导入 VS Code 主题 (Open VSX)","settings.themeImport.catalogHint":"在 Open VSX 中搜索 VS Code 主题。仅发布在 Microsoft Marketplace 的主题可能不会显示。","settings.themeImport.search":"搜索主题","settings.themeImport.catalogError":"无法从 Open VSX 加载主题。请重新搜索。","settings.themeImport.empty":"在 Open VSX 中未找到主题。","settings.themeImport.back":"返回搜索","settings.themeImport.chooseFile":"选择 JSON 文件","settings.themeImport.importSelected":"导入所选变体","settings.themeImport.installed":"已导入","settings.themeImport.partialError":"部分主题无法保存。已成功导入的主题会保留。您可以重试其余变体。","settings.themeImport.delete":"删除已导入的主题 {name}","settings.themeImport.deleteError":"无法删除主题,主题已保留。","settings.themeImport.action":"导入 VS Code 主题","settings.themeImport.busy":"正在导入主题…","settings.themeImport.hint":"导入 VS Code 的 .json 或 .jsonc 主题,包括语法和 diff 颜色。主题保存在已连接的 OpenChamber 服务器上。","settings.themeImport.success":"已导入 {name}。","settings.themeImport.error.invalid":"此文件不是受支持的 VS Code 颜色主题。","settings.themeImport.error.include":"此主题引用了其他文件。请在 VS Code 中运行 Developer: Generate Color Theme From Current Settings,然后导入生成的 JSON。","settings.themeImport.error.size":"主题文件不能超过 512 KiB。","settings.themeImport.error.background":"此主题没有 editor.background 颜色。请从 VS Code 导出完整的颜色主题。","settings.themeImport.error.save":"无法保存主题。请检查连接后重试。","settings.themeImport.error.connection":"连接的服务器已更改。未应用主题。","settings.themeImport.error.unsupported":"VS Code 中不支持导入主题。","settings.themeImport.error.conflict":"此导入的主题已在服务器上被编辑,未覆盖原文件。","settings.openchamber.visual.field.alwaysShowScrollbars":"始终显示滚动条","settings.openchamber.visual.field.alwaysShowScrollbarsHint":"即使指针位于可滚动区域之外,也保持滚动条可见。仅在此设备上生效。","settings.providers.page.openCodeGo.title":"OpenCode Go 用量跟踪","settings.providers.page.openCodeGo.description":"连接 OpenCode Go 控制面板以显示滚动、每周和每月配额。","settings.providers.page.openCodeGo.workspaceId":"工作区 ID","settings.providers.page.openCodeGo.authCookie":"身份验证 Cookie","settings.providers.page.openCodeGo.apiKey":"API 密钥","settings.providers.page.openCodeGo.help":"从控制面板网址复制工作区 ID,并从浏览器开发者工具复制 auth Cookie。OpenChamber 绝不会扫描浏览器 Cookie 存储。","settings.providers.page.openCodeGo.save":"保存并验证","settings.providers.page.openCodeGo.replace":"替换","settings.providers.page.openCodeGo.validate":"验证","settings.providers.page.openCodeGo.delete":"删除","settings.providers.page.quotaCredentials.saved":"已保存 {provider} 凭据。","settings.providers.page.quotaCredentials.accessToken":"访问令牌","settings.providers.page.quotaCredentials.usageToken":"用量 API 令牌","settings.providers.page.quotaCredentials.exeDevTokenInstructions":"在终端中运行此命令,然后在下方粘贴令牌。该令牌只能读取 LLM 积分用量,并将在 30 天后过期。","settings.providers.page.quotaCredentials.refreshToken":"刷新令牌","settings.providers.page.quotaCredentials.tokenPlaceholder":"粘贴令牌","settings.providers.page.openCodeGo.saveFailed":"无法验证 OpenCode Go 凭据。","settings.providers.page.openCodeGo.valid":"OpenCode Go 凭据有效。","settings.providers.page.openCodeGo.invalid":"OpenCode Go 凭据无效或已过期。","settings.providers.page.openCodeGo.deleted":"已删除 OpenCode Go 凭据。","settings.providers.page.openCodeGo.deleteFailed":"无法删除 OpenCode Go 凭据。","settings.appearance.language.label":"语言","settings.appearance.language.description":"选择界面语言。","settings.appearance.language.select":"选择语言","settings.window.description":"OpenChamber 设置窗口。","settings.view.home.title":"设置","settings.view.home.description":"跳转到常用页面。","settings.view.home.cards.providers.title":"提供商","settings.view.home.cards.providers.description":"连接模型和凭据","settings.view.home.cards.agents.title":"智能体","settings.view.home.cards.agents.description":"提示词、工具、权限","settings.view.home.cards.skillsCatalog.title":"技能目录","settings.view.home.cards.skillsCatalog.description":"从目录安装技能","settings.view.home.cards.mcp.title":"MCP","settings.view.home.cards.mcp.description":"配置 MCP 服务器和连接","settings.view.home.cards.plugins.title":"Plugins","settings.view.home.cards.plugins.description":"Manage opencode plugins","settings.view.home.cards.usage.title":"用量","settings.view.home.cards.usage.description":"配额和花费可见性","settings.view.unavailable.title":"不可用","settings.view.unavailable.description":"此设置页面在当前运行环境中不可用。","settings.view.badge.beta":"测试版","settings.view.actions.backToSettings":"返回设置","settings.view.actions.closeSettings":"关闭设置","settings.view.actions.closeSettingsWithShortcut":"关闭设置({shortcut}+,)","settings.view.actions.back":"返回","settings.view.actions.resizeNavigation":"调整设置导航宽度","settings.view.search.placeholder":"搜索设置","settings.view.search.aria":"搜索设置","settings.view.search.clear":"清除设置搜索","settings.view.search.noResults":"没有匹配的设置","settings.view.nav.group.general":"OpenChamber","settings.view.nav.group.projects":"工作区","settings.view.nav.group.opencode":"OpenCode","settings.view.nav.group.content":"资源库","settings.page.projects.title":"项目","settings.page.remoteInstances.title":"远程实例","settings.page.providers.title":"提供商","settings.page.usage.title":"用量","settings.page.agents.title":"智能体","settings.page.commands.title":"命令","settings.page.mcp.title":"MCP","settings.page.plugins.title":"Plugins","settings.page.skills.title":"技能","settings.page.skillsCatalog.title":"技能目录","settings.page.git.title":"Git","settings.page.appearance.title":"外观","settings.page.appearance.description":"自定义 OpenChamber 的外观与体验。","settings.page.chat.title":"聊天","settings.page.chat.description":"配置消息和工具的显示方式。","settings.page.shortcuts.title":"快捷键","settings.page.shortcuts.description":"自定义键盘快捷键。","settings.page.general.title":"通用","settings.page.general.description":"应用启动、安全、连接与隐私。","settings.page.sessions.title":"会话","settings.page.sessions.description":"设置会话的默认值和保留策略。","settings.page.magicPrompts.title":"魔法提示词","settings.page.notifications.title":"通知","settings.page.notifications.description":"选择何时以及如何接收通知。","settings.page.voice.title":"语音","settings.page.voice.description":"配置语音朗读与听写。","settings.page.tunnel.title":"外部隧道","settings.page.tunnel.description":"通过远程隧道公开此实例。","settings.page.about.title":"关于","settings.page.snippets.title":"代码片段","settings.snippets.sidebar.title":"代码片段","settings.snippets.sidebar.total":"共 {count} 个","settings.snippets.sidebar.actions.create":"创建代码片段","settings.snippets.sidebar.actions.more":"{name} 的更多操作","settings.snippets.sidebar.toast.deleted":"代码片段已删除","settings.snippets.sidebar.toast.deleteFailed":"删除代码片段失败","settings.snippets.sidebar.dialog.deleteTitle":"删除代码片段?","settings.snippets.sidebar.dialog.deleteDescription":"这将永久删除 #{name}。","settings.snippets.page.empty.title":"选择代码片段","settings.snippets.page.empty.description":"从侧边栏选择代码片段进行编辑。","settings.snippets.page.title.new":"新建代码片段","settings.snippets.page.field.namePlaceholder":"snippet-name","settings.snippets.page.field.descriptionPlaceholder":"这个代码片段的作用","settings.snippets.page.field.aliases":"别名","settings.snippets.page.field.aliasesPlaceholder":"safe, careful","settings.snippets.page.field.content":"内容","settings.snippets.page.field.contentPlaceholder":"代码片段 Markdown...","settings.snippets.page.hint":"在提示词中使用 #name。支持别名和与 opencode-snippets 兼容的 prepend/append 块。","settings.snippets.page.toast.nameRequired":"代码片段名称为必填项","settings.snippets.page.toast.contentRequired":"代码片段内容为必填项","settings.snippets.page.toast.saveFailed":"保存代码片段失败","settings.snippets.page.toast.saved":"代码片段已保存","settings.openchamber.tunnel.title":"外部隧道","settings.openchamber.tunnel.description":"通过快速链接或你自己的 Cloudflare Managed Remote 隧道配置安全远程访问。","settings.openchamber.tunnel.note.serverSideEnforced":"安全隧道访问在服务端强制执行。","settings.openchamber.tunnel.note.connectLinksOneTime":"连接链接为一次性,隧道停止或连接链接 TTL 到期后会被吊销。","settings.openchamber.tunnel.note.cloudflareConnectorTarget":"Cloudflare connector 目标:","settings.openchamber.tunnel.note.cloudflareConnectorTargetUse":"对于 Cloudflare connector 目标,请使用","settings.openchamber.tunnel.note.tokensSavedPerTunnel":"Token 按隧道保存并从磁盘复用。","settings.openchamber.tunnel.note.customConfigUsed":"启动隧道时将使用自定义配置文件。","settings.openchamber.tunnel.note.defaultConfigUsed":"为空时,cloudflared 使用默认配置(~/.cloudflared/config.yml)。","settings.openchamber.tunnel.note.managedRemoteRequiresDomain":"Managed Remote 隧道需要你在 Cloudflare 账户中购买的域名。","settings.openchamber.tunnel.note.managedLocalUsesConfig":"Managed Local 隧道使用本地 cloudflared 配置文件。","settings.openchamber.tunnel.note.startModeAndGenerateLink":"启动 {mode} 隧道并生成一次性连接链接。此隧道使用期间请勿关闭应用。","settings.openchamber.tunnel.note.scanQrToConnect":"用手机扫码连接。","settings.openchamber.tunnel.section.redeemedAccessLinks":"已兑换访问链接","settings.openchamber.tunnel.section.savedManagedRemoteTunnels":"已保存的 Managed Remote 隧道","settings.openchamber.tunnel.notAvailable.cloudflaredNotFound":"未找到 cloudflared","settings.openchamber.tunnel.notAvailable.dependencyNotFound":"未找到 {dependency}。","settings.openchamber.tunnel.notAvailable.installHint":"安装它以启用远程隧道访问:","settings.openchamber.tunnel.field.provider":"提供商","settings.openchamber.tunnel.field.providerPlaceholder":"选择提供商","settings.openchamber.tunnel.field.tunnelType":"隧道类型","settings.openchamber.tunnel.field.connectLinkTtl":"连接链接 TTL","settings.openchamber.tunnel.field.tunnelSessionTtl":"隧道会话 TTL","settings.openchamber.tunnel.field.hostnameLabel":"主机名:","settings.openchamber.tunnel.field.savedTokenAvailablePlaceholder":"已保存 token(可选替换)","settings.openchamber.tunnel.field.pasteTokenPlaceholder":"粘贴此隧道的 token","settings.openchamber.tunnel.field.newPresetNamePlaceholder":"隧道名称(例如 Production)","settings.openchamber.tunnel.field.newPresetHostnamePlaceholder":"主机名(例如 oc.example.com)","settings.openchamber.tunnel.field.newPresetTokenPlaceholder":"Token","settings.openchamber.tunnel.field.managedRemoteTokenInfoAria":"Managed Remote 隧道 token 信息","settings.openchamber.tunnel.field.configurationFile":"配置文件","settings.openchamber.tunnel.field.configurationFilePlaceholder":"使用默认 cloudflared 配置","settings.openchamber.tunnel.field.managedRemoteTunnelToConnect":"用于连接的 Managed Remote 隧道","settings.openchamber.tunnel.field.selectSavedTunnelPlaceholder":"选择已保存隧道","settings.openchamber.tunnel.field.publicUrlHint":"公开 URL(没有 token 无法访问)","settings.openchamber.tunnel.field.connectLink":"连接链接","settings.openchamber.tunnel.field.expires":"到期","settings.openchamber.tunnel.field.connectQrAlt":"隧道连接二维码","settings.openchamber.tunnel.actions.removePresetAria":"移除 {name}","settings.openchamber.tunnel.actions.saveToken":"保存 token","settings.openchamber.tunnel.actions.browseConfigFileAria":"浏览配置文件","settings.openchamber.tunnel.actions.clearConfigFileAria":"清除配置文件","settings.openchamber.tunnel.actions.openManagedRemoteDocs":"查看 Managed Remote 隧道配置文档","settings.openchamber.tunnel.actions.openManagedLocalDocs":"查看 Managed Local 隧道配置文档","settings.openchamber.tunnel.actions.startTunnel":"启动隧道","settings.openchamber.tunnel.actions.startingTunnel":"正在启动隧道...","settings.openchamber.tunnel.actions.stopTunnel":"停止隧道","settings.openchamber.tunnel.actions.stopping":"正在停止...","settings.openchamber.tunnel.actions.newConnectLink":"新建连接链接","settings.openchamber.tunnel.actions.copied":"已复制","settings.openchamber.tunnel.actions.retry":"重试","settings.openchamber.tunnel.option.moreProvidersSoon":"更多提供商即将上线","settings.openchamber.tunnel.option.mode.quick.label":"Quick","settings.openchamber.tunnel.option.mode.quick.tooltip":"Quick Tunnel 仅尽力提供,不保证可用性。","settings.openchamber.tunnel.option.mode.managedRemote.label":"Managed Remote","settings.openchamber.tunnel.option.mode.managedRemote.tooltip":"Managed Remote 使用你的 Cloudflare 账户与主机名提供长期访问。","settings.openchamber.tunnel.option.mode.managedLocal.label":"Managed Local","settings.openchamber.tunnel.option.mode.managedLocal.tooltip":"Managed Local 使用本地 cloudflared 配置文件。","settings.openchamber.tunnel.warning.quickModeReliability":"如需更可靠的长期访问,请切换到 Managed Remote 或 Managed Local 隧道模式。","settings.openchamber.tunnel.warning.replacesActiveTunnel":"启动该隧道会替换当前活动隧道,并吊销现有连接链接与远程会话。","settings.openchamber.tunnel.badge.quick":"QUICK","settings.openchamber.tunnel.badge.remote":"REMOTE","settings.openchamber.tunnel.badge.local":"LOCAL","settings.openchamber.tunnel.state.loading":"加载中","settings.openchamber.tunnel.state.expired":"已过期","settings.openchamber.tunnel.state.revoked":"已吊销","settings.openchamber.tunnel.state.inactive":"不活跃","settings.openchamber.tunnel.state.noExpiry":"无过期时间","settings.openchamber.tunnel.state.never":"永不过期","settings.openchamber.tunnel.state.tunnelReady":"隧道已就绪","settings.openchamber.tunnel.session.redeemedAt":"已兑换 {time}","settings.openchamber.tunnel.session.expiresIn":"{remaining} 后过期","settings.openchamber.tunnel.session.inactiveWithReason":"不活跃({reason})","settings.openchamber.tunnel.error.invalidConfigExtension":"配置文件必须使用 .yml、.yaml 或 .json 扩展名。","settings.openchamber.tunnel.tooltip.tokensSavedPath":"Token 保存在 ~/.config/openchamber/cloudflare-managed-remote-tunnels.json。","settings.openchamber.tunnel.empty.noManagedRemoteTunnels":"尚未保存任何 Managed Remote 隧道。","settings.openchamber.tunnel.toast.checkAvailabilityFailed":"检查隧道可用性失败","settings.openchamber.tunnel.toast.saveSettingsFailed":"保存隧道设置失败","settings.openchamber.tunnel.toast.saveTtlFailed":"保存隧道 TTL 设置失败","settings.openchamber.tunnel.toast.saveTokenFailed":"保存 Managed Remote 隧道 token 失败","settings.openchamber.tunnel.toast.selectOrAddManagedRemoteFirst":"请先选择或添加一个 Managed Remote 隧道","settings.openchamber.tunnel.toast.managedRemoteTokenRequiredBeforeStarting":"启动前必须提供 Managed Remote 隧道 token","settings.openchamber.tunnel.toast.addManagedRemoteTokenBeforeStarting":"请先添加 Managed Remote 隧道 token 再启动","settings.openchamber.tunnel.toast.startFailed":"启动隧道失败","settings.openchamber.tunnel.toast.startedButNoPublicUrl":"隧道已启动,但未返回公开 URL","settings.openchamber.tunnel.toast.replacedTunnelSingleSingle":"已替换之前的隧道:吊销 1 个链接,失效 1 个会话。","settings.openchamber.tunnel.toast.replacedTunnelSingleManySessions":"已替换之前的隧道:吊销 1 个链接,失效 {invalidatedSessionCount} 个会话。","settings.openchamber.tunnel.toast.replacedTunnelManyLinksSingleSession":"已替换之前的隧道:吊销 {revokedBootstrapCount} 个链接,失效 1 个会话。","settings.openchamber.tunnel.toast.replacedTunnelManyMany":"已替换之前的隧道:吊销 {revokedBootstrapCount} 个链接,失效 {invalidatedSessionCount} 个会话。","settings.openchamber.tunnel.toast.linkReady":"隧道链接已就绪","settings.openchamber.tunnel.toast.stopped":"隧道已停止","settings.openchamber.tunnel.toast.stopFailed":"停止隧道失败","settings.openchamber.tunnel.toast.connectLinkCopied":"连接链接已复制","settings.openchamber.tunnel.toast.copyUrlFailed":"复制 URL 失败","settings.openchamber.tunnel.toast.saveSelectedManagedRemoteFailed":"保存所选 Managed Remote 隧道失败","settings.openchamber.tunnel.toast.tunnelNameRequired":"隧道名称为必填项","settings.openchamber.tunnel.toast.managedRemoteHostnameRequired":"Managed Remote 隧道主机名为必填项","settings.openchamber.tunnel.toast.managedRemoteTokenRequired":"Managed Remote 隧道 token 为必填项","settings.openchamber.tunnel.toast.hostnameAlreadyExists":"该主机名已存在","settings.openchamber.tunnel.toast.managedRemoteSaved":"Managed Remote 隧道已保存","settings.openchamber.tunnel.toast.managedRemoteRemoved":"Managed Remote 隧道已移除","settings.magicPrompts.sidebar.title":"魔法提示词","settings.magicPrompts.sidebar.description":"选择要编辑的提示词模板。","settings.magicPrompts.sidebar.group.git":"Git","settings.magicPrompts.sidebar.group.github":"GitHub","settings.magicPrompts.sidebar.group.planning":"规划","settings.magicPrompts.sidebar.group.session":"会话","settings.magicPrompts.sidebar.item.gitCommitGenerate":"提交生成","settings.magicPrompts.sidebar.item.gitPrGenerate":"PR 生成","settings.magicPrompts.sidebar.item.gitConflictResolve":"合并/Rebase 冲突解决","settings.magicPrompts.sidebar.item.gitCherrypickConflictResolve":"Cherry-pick 冲突解决","settings.magicPrompts.sidebar.item.githubPrReview":"PR 审查","settings.magicPrompts.sidebar.item.githubIssueReview":"Issue 审查","settings.magicPrompts.sidebar.item.githubPrFailedChecksReview":"PR 失败检查审查","settings.magicPrompts.sidebar.item.githubPrCommentsReview":"PR 评论审查","settings.magicPrompts.sidebar.item.githubSinglePrCommentReview":"单条 PR 评论审查","settings.magicPrompts.sidebar.item.planTodo":"待办规划","settings.magicPrompts.sidebar.item.planImprove":"改进计划","settings.magicPrompts.sidebar.item.planImplement":"执行计划","settings.magicPrompts.sidebar.item.sessionSummary":"会话总结","settings.magicPrompts.sidebar.item.sessionWorkspaceReview":"工作区审查","settings.magicPrompts.sidebar.item.sessionExplore":"代码库导览","settings.magicPrompts.sidebar.item.sessionFeaturePlan":"功能规划","settings.magicPrompts.sidebar.item.sessionCraftGoal":"创建 Goal","settings.magicPrompts.page.group.sessionCraftGoal.title":"创建 Goal","settings.magicPrompts.page.group.sessionCraftGoal.description":"由 /craft-goal 斜杠命令使用的提示词:可见用户消息 + 隐藏说明。通过引导式探索将想法或任务转化为清晰且有证据可验证的 Goal。","settings.magicPrompts.sidebar.item.sessionCatchUp":"快速回顾","settings.magicPrompts.sidebar.item.sessionDebug":"调试","settings.magicPrompts.sidebar.item.sessionWeigh":"权衡方案","settings.magicPrompts.sidebar.item.sessionFusion":"融合","settings.remoteInstances.sidebar.title":"远程实例","settings.remoteInstances.sidebar.total":"总计 {count}","settings.remoteInstances.sidebar.newSshInstanceName":"新的 SSH 连接","settings.remoteInstances.sidebar.actions.addSshInstance":"添加 SSH 连接","settings.remoteInstances.sidebar.actions.connect":"连接","settings.remoteInstances.sidebar.actions.disconnect":"断开连接","settings.remoteInstances.sidebar.actions.retry":"重试","settings.remoteInstances.sidebar.actions.remove":"移除","settings.remoteInstances.sidebar.confirm.localPortInUseRetry":"本地端口已被占用。是否选择一个随机空闲本地端口并重试?","settings.remoteInstances.sidebar.toast.createFailed":"无法创建 SSH 连接","settings.remoteInstances.sidebar.toast.retriedWithRandomPort":"已使用随机本地端口重试","settings.remoteInstances.sidebar.toast.connectFailed":"连接实例失败","settings.remoteInstances.sidebar.toast.disconnectFailed":"断开实例连接失败","settings.remoteInstances.sidebar.toast.retryFailed":"重试连接失败","settings.remoteInstances.sidebar.toast.removeFailed":"移除实例失败","settings.remoteInstances.direct.sidebarTitle":"服务器链接","settings.remoteInstances.direct.sidebarDescription":"使用链接或令牌连接","settings.remoteInstances.direct.title":"其他 OpenChamber 服务器","settings.remoteInstances.direct.description":"此应用可切换到的服务器。从另一台服务器导入配对链接,或通过地址添加。","settings.remoteInstances.direct.addDialog.description":"通过 URL 添加另一个 OpenChamber 服务器。适用于服务器已在运行且你拥有连接令牌的情况。","settings.remoteInstances.direct.field.labelPlaceholder":"标签(可选)","settings.remoteInstances.direct.field.urlPlaceholder":"https://host:port","settings.remoteInstances.direct.field.tokenPlaceholder":"连接令牌(受信任的本地服务器可选)","settings.remoteInstances.direct.note":"连接令牌会保存在此设备上,并且只在此应用连接到该服务器时使用。","settings.remoteInstances.direct.headers.title":"Additional headers","settings.remoteInstances.direct.headers.description":"Optional HTTP headers for desktop API requests. Authorization is reserved for the connection token.","settings.remoteInstances.direct.headers.field.namePlaceholder":"Header name","settings.remoteInstances.direct.headers.field.valuePlaceholder":"Header value","settings.remoteInstances.direct.headers.actions.add":"Add header","settings.remoteInstances.direct.headers.removeAria":"Remove header","settings.remoteInstances.direct.actions.add":"添加服务器","settings.remoteInstances.direct.import.description":"粘贴来自另一个 OpenChamber 服务器的连接链接。","settings.remoteInstances.direct.import.placeholder":"openchamber://connect?...","settings.remoteInstances.direct.import.action":"导入链接","settings.remoteInstances.direct.error.invalidConnectLink":"无效的 OpenChamber 连接链接。","settings.remoteInstances.direct.state.loading":"正在加载服务器...","settings.remoteInstances.direct.state.empty":"尚未添加其他服务器。","settings.remoteInstances.clientAuth.title":"连接到此服务器","settings.remoteInstances.clientAuth.description":"创建安全链接或令牌,让 OpenChamber Desktop 可以连接到此服务器。","settings.remoteInstances.clientAuth.field.labelPlaceholder":"设备名称 — 例如 My iPhone","settings.remoteInstances.clientAuth.actions.create":"创建令牌","settings.remoteInstances.clientAuth.actions.pair":"创建链接","settings.remoteInstances.clientAuth.actions.revoke":"撤销","settings.remoteInstances.clientAuth.actions.clearRevoked":"清除已撤销","settings.remoteInstances.clientAuth.qrAlt":"OpenChamber connection QR code","settings.remoteInstances.clientAuth.qrEnlarge":"放大二维码","settings.remoteInstances.clientAuth.qrScanHint":"用另一台设备上的 OpenChamber 应用扫描。一次性使用且会过期。","settings.remoteInstances.clientAuth.qrDialogTitle":"扫码连接","settings.remoteInstances.clientAuth.actions.addDevice":"添加设备","settings.remoteInstances.clientAuth.actions.copied":"已复制","settings.remoteInstances.clientAuth.addDevice.transportLabel":"你会在哪里使用这台设备?","settings.remoteInstances.clientAuth.addDevice.subtitle":"创建一次性二维码,把另一台设备连接到此服务器。","settings.remoteInstances.clientAuth.addDevice.transport.local":"仅本机","settings.remoteInstances.clientAuth.addDevice.transport.localHint":"供同一台电脑上的应用使用。","settings.remoteInstances.clientAuth.addDevice.transport.lan":"仅家庭网络","settings.remoteInstances.clientAuth.addDevice.transport.lanHint":"通过 Wi-Fi 直接连接。离开此网络后无法使用。","settings.remoteInstances.clientAuth.addDevice.transport.relay":"任何地方","settings.remoteInstances.clientAuth.addDevice.transport.relayHint":"在家和外出都可用。外出时流量经由 OpenChamber Private Relay(端到端加密隧道)传输,无需配置。","settings.remoteInstances.clientAuth.addDevice.fallback.relay":"外出时也允许通过加密中继连接","settings.remoteInstances.clientAuth.addDevice.fallback.preferLocal":"在家时优先使用直接连接","settings.remoteInstances.clientAuth.addDevice.create":"创建二维码","settings.remoteInstances.clientAuth.addDevice.done":"完成","settings.remoteInstances.clientAuth.addDevice.connectedToast":"设备已连接。","settings.remoteInstances.clientAuth.pairingUrl":"连接链接","settings.remoteInstances.clientAuth.createdToken":"请立即复制此令牌。出于安全考虑,它不会再次显示。","settings.remoteInstances.clientAuth.state.loading":"正在加载令牌...","settings.remoteInstances.clientAuth.state.empty":"尚无已连接设备。","settings.remoteInstances.clientAuth.state.revoked":"已撤销","settings.remoteInstances.clientAuth.state.thisDevice":"此设备","settings.remoteInstances.clientAuth.state.pending":"等待连接…","settings.remoteInstances.clientAuth.state.viaRelay":"Relay","settings.remoteInstances.clientAuth.state.connectedDirect":"已连接 · 局域网","settings.remoteInstances.clientAuth.state.connectedRelay":"已连接 · 中继","settings.remoteInstances.clientAuth.lastUsed":"上次使用 {date}","settings.remoteInstances.clientAuth.neverUsed":"从未使用","settings.remoteInstances.relay.title":"OpenChamber Relay","settings.remoteInstances.relay.autoHint":"通过中继配对设备时自动开启。","settings.remoteInstances.relay.description":"无需开放端口,即可让你的其他设备从任何地方连接。流量端到端加密,中继无法读取内容。","settings.remoteInstances.relay.enableHint":"在此服务器上启用中继之前,不会共享任何内容。","settings.remoteInstances.relay.actions.enable":"启用中继","settings.remoteInstances.relay.actions.disable":"停用","settings.remoteInstances.relay.confirm.disable":"停用中继?通过它连接的设备将立即断开。","settings.remoteInstances.relay.state.loading":"正在检查中继状态...","settings.remoteInstances.relay.state.disabled":"已停用","settings.remoteInstances.relay.state.connecting":"连接中","settings.remoteInstances.relay.state.connected":"已连接","settings.remoteInstances.relay.state.reconnecting":"重新连接中","settings.remoteInstances.relay.state.error":"错误","settings.remoteInstances.relay.status.clientsOne":"已连接 {count} 台设备","settings.remoteInstances.relay.status.clientsMany":"已连接 {count} 台设备","settings.remoteInstances.relay.pair.title":"配对设备","settings.remoteInstances.relay.pair.labelPlaceholder":"设备名称(可选)","settings.remoteInstances.relay.pair.includeToken":"包含访问令牌(扫一次即完成配对)","settings.remoteInstances.relay.pair.noTokenHint":"不包含令牌时,设备连接后需使用此服务器的界面密码登录。","settings.remoteInstances.relay.pair.generate":"创建配对链接","settings.remoteInstances.relay.pair.requiresConnected":"中继连接后即可配对。","settings.remoteInstances.relay.pair.linkLabel":"配对链接","settings.remoteInstances.relay.pair.warning":"此链接可访问此服务器,请勿分享。","settings.remoteInstances.relay.pair.qrAlt":"中继配对二维码","settings.remoteInstances.relay.pair.showQr":"显示二维码","settings.remoteInstances.relay.pair.qrDialogTitle":"扫描配对","settings.remoteInstances.relay.pair.qrDialogDescription":"用其他设备上的 OpenChamber 应用扫描此二维码。","settings.remoteInstances.relay.pair.manageHint":"可在上方“连接到此服务器”列表中管理或吊销已配对的设备。","settings.remoteInstances.relay.toast.enableFailed":"无法启用中继","settings.remoteInstances.relay.toast.disableFailed":"无法停用中继","settings.remoteInstances.relay.toast.offerFailed":"无法创建配对链接","settings.remoteInstances.relay.toast.linkCopied":"已复制配对链接","settings.remoteInstances.sidebar.phase.ready":"就绪","settings.remoteInstances.sidebar.phase.error":"错误","settings.remoteInstances.sidebar.phase.reconnect":"重连","settings.remoteInstances.sidebar.phase.installing":"安装中","settings.remoteInstances.sidebar.phase.updating":"更新中","settings.remoteInstances.sidebar.phase.forwarding":"转发中","settings.remoteInstances.sidebar.phase.starting":"启动中","settings.remoteInstances.sidebar.phase.connecting":"连接中","settings.remoteInstances.sidebar.phase.idle":"空闲","settings.remoteInstances.page.section.instance":"实例","settings.remoteInstances.page.section.instanceDescription":"为此连接选择 SSH 命令和显示名称。","settings.remoteInstances.page.field.mode":"模式","settings.remoteInstances.page.field.modeHint":"选择是由 OpenChamber 为你启动服务器,还是连接到已在运行的服务器。","settings.remoteInstances.page.field.modePlaceholder":"选择模式","settings.remoteInstances.page.field.modeManaged":"帮我启动","settings.remoteInstances.page.field.modeExternal":"已在运行","settings.remoteInstances.page.field.preferredRemotePort":"远程机器上的端口","settings.remoteInstances.page.field.preferredRemotePortHint":"OpenChamber 在远程机器上使用的端口。留空则自动选择。","settings.remoteInstances.page.field.keepServerRunning":"保持服务运行","settings.remoteInstances.page.field.keepServerRunningHint":"断开后让远程服务器继续运行。关闭时会在断开时停止,并在下次连接时重新启动。","settings.remoteInstances.page.field.bindHost":"谁可以访问","settings.remoteInstances.page.field.bindHostHint":"谁可以打开这台电脑上的转发地址。无论哪种选择,远程机器本身都只能通过 SSH 隧道访问。","settings.remoteInstances.page.field.preferredLocalPort":"这台电脑上的端口","settings.remoteInstances.page.field.preferredLocalPortHint":"为隧道在这台电脑上打开的端口。留空则自动选择。","settings.remoteInstances.page.field.forwardType":"转发类型","settings.remoteInstances.page.field.localHostPlaceholder":"127.0.0.1","settings.remoteInstances.page.field.remoteHostPlaceholder":"127.0.0.1","settings.remoteInstances.page.field.auto":"自动","settings.remoteInstances.page.confirm.bindAllInterfaces":"绑定到 0.0.0.0 会将转发端口暴露到本地网络。是否继续?","settings.remoteInstances.page.preview.localSocks5":"(本地 SOCKS5)","settings.remoteInstances.page.preview.local":"(本地)","settings.remoteInstances.page.preview.remote":"(远程)","settings.remoteInstances.page.toast.openLocalEndpointFailed":"无法打开本地地址","settings.remoteInstances.page.toast.localUrlCopied":"本地 URL 已复制","settings.remoteInstances.page.actions.copyLocalUrl":"复制本地 URL","settings.remoteInstances.page.actions.open":"打开","settings.remoteInstances.page.logsDialog.selectedInstanceFallback":"所选实例","settings.remoteInstances.page.patternDialog.descriptionWithHost":"{host} 需要一个具体目标地址。","settings.remoteInstances.page.patternDialog.description":"输入目标地址。","settings.common.infoAria":"更多信息","settings.common.actions.cancel":"取消","settings.common.actions.close":"关闭","settings.common.actions.create":"创建","settings.common.actions.delete":"删除","settings.openchamber.appLinks.title":"受信任的应用链接","settings.openchamber.appLinks.info":"此列表中的链接在本设备上打开时不再询问。其他应用链接在打开前始终需要确认。","settings.openchamber.appLinks.empty":"本设备上暂无受信任的应用链接。打开链接时选择“信任并打开”即可添加到这里。","settings.openchamber.appLinks.removeAria":"移除受信任的 {scheme} 链接","settings.common.actions.reset":"重置","settings.common.actions.rename":"重命名","settings.common.actions.duplicate":"复制","settings.common.actions.import":"导入","settings.common.actions.copyAll":"全部复制","settings.common.actions.clear":"清除","settings.common.actions.saving":"保存中...","settings.common.status.saved":"已保存","settings.common.status.saveFailed":"保存失败","settings.common.status.saveFailedReason":"无法保存:{reason}","settings.common.actions.saveChanges":"保存更改","settings.common.scope.global":"全局","settings.common.scope.project":"项目","settings.common.field.description":"描述","settings.common.badge.new":"新建","settings.common.badge.modified":"已修改","settings.common.permission.allow":"允许","settings.common.permission.ask":"询问","settings.common.permission.deny":"拒绝","settings.common.state.comingSoon":"即将推出...","settings.projects.actions.title":"操作","settings.projects.shared.badge":"在仓库中","settings.projects.shared.actionsFromRepo":"存储在仓库中({path})。拉取仓库的每个人都会获得。","settings.projects.shared.commandsFromRepo":"首先运行,存储在仓库中({path})","settings.projects.shared.invalid":"无法读取 {path} 中的项目配置:{reason}","settings.projects.shared.trusted":"已在此实例上信任仓库命令","settings.projects.shared.resetTrust":"重置信任","settings.projects.shared.title":"仓库配置","settings.projects.shared.description":"存储在仓库本身的设置,拉取仓库的每个人都会获得相同的操作、设置命令、启动项和计划。在你移入项目之前不会写入任何内容。","settings.projects.shared.file":"文件","settings.projects.shared.status.missing":"尚未在仓库中","settings.projects.shared.status.ok":"已在仓库中","settings.projects.shared.plansDir":"计划文件夹","settings.projects.shared.plansDirPlaceholder":".openchamber/plans","settings.projects.shared.plansDirInfo":"仓库计划的存放位置(相对于仓库)。留空表示 .openchamber/plans。自定义文件夹(如 docs/plans)会完全替代默认值:只读写该文件夹。更改时请自行移动现有文件。","settings.projects.shared.plansDirAria":"仓库计划文件夹","settings.projects.shared.actions.share":"移至仓库","settings.projects.shared.actions.showTitle":"在你的菜单中重新显示此仓库操作。","settings.projects.shared.actions.hideTitle":"仅在你的菜单中隐藏此仓库操作;仓库不会改变。","settings.projects.shared.actions.makePersonalTitle":"从仓库中移除,仅保留在此实例上你的设置中。","settings.projects.shared.actions.shareTitle":"存储到仓库内的 {path},拉取仓库的每个人都会获得。它会从你的个人设置中移除。","settings.projects.shared.actions.shareAfterSave":"先保存你的修改,然后再移动","settings.projects.shared.actions.makePersonal":"移至我的设置","settings.projects.shared.actions.hide":"对我隐藏","settings.projects.shared.actions.show":"显示","settings.projects.shared.hiddenBadge":"已隐藏","settings.projects.shared.replaceMode":"仅使用我的设置命令,跳过仓库中的命令","settings.projects.shared.replaceModeAria":"仅使用我的设置命令,跳过仓库中的命令","settings.projects.shared.toast.shareFailed":"更新仓库配置失败","settings.projects.actions.description":"按项目显示在项目名旁边表头中的命令。","settings.projects.actions.validation.fillNameAndCommand":"保存前请填写操作名称和命令。","settings.projects.actions.state.loading":"加载中...","settings.projects.actions.state.empty":"尚未配置任何操作。","settings.projects.actions.state.untitled":"未命名操作","settings.projects.actions.state.noDesktopSshForwards":"没有可用的本地 SSH 转发。","settings.projects.actions.field.selectIconAria":"选择图标","settings.projects.actions.field.iconAria":"图标 {icon}","settings.projects.actions.field.actionNamePlaceholder":"操作名称","settings.projects.actions.field.command":"命令","settings.projects.actions.field.commandPlaceholder":"例如 bun run lint","settings.projects.actions.runIn.label":"运行位置","settings.projects.actions.runIn.info":"选择从关联 worktree 启动时此操作的运行位置。","settings.projects.actions.runIn.project":"父检出目录","settings.projects.actions.runIn.worktree":"当前 worktree","settings.projects.actions.runIn.aria":"此操作的工作目录","settings.projects.actions.field.autoOpenUrl":"自动打开 URL","settings.projects.actions.field.autoOpenUrlForAria":"为 {title} 自动打开 URL","settings.projects.actions.field.autoOpenUrlDescription":"从输出中打开 URL,或使用下面的自定义 URL","settings.projects.actions.field.overrideUrlPlaceholder":"覆盖 URL(可选)","settings.projects.actions.field.overrideUrlTooltip":"如果填写此字段,将使用自定义 URL。为空时,应用会从输出中选择最佳 URL 打开。","settings.projects.actions.field.desktopSshForward":"桌面 SSH 转发","settings.projects.actions.field.useOutputManualUrl":"使用输出/手动 URL","settings.projects.actions.actions.add":"添加操作","settings.projects.actions.actions.save":"保存操作","settings.projects.actions.toast.saveFailed":"保存操作失败","settings.projects.actions.toast.saved":"项目操作已保存","settings.openchamber.about.title":"关于 OpenChamber","settings.openchamber.about.field.version":"版本","settings.openchamber.about.field.openCodeVersion":"OpenCode 版本","settings.openchamber.about.field.instanceUrls":"实例 URL","settings.openchamber.about.field.applicationUrl":"应用","settings.openchamber.about.field.tunnelUrl":"隧道","settings.openchamber.about.state.checking":"检查中...","settings.openchamber.about.state.upToDate":"已是最新","settings.openchamber.about.state.unknown":"未知","settings.openchamber.about.actions.checkUpdates":"检查更新","settings.openchamber.about.actions.update":"更新","settings.openchamber.about.actions.updateOpenChamberToVersion":"将 OpenChamber 更新到 {version}","settings.openchamber.about.actions.updateServerToVersion":"将 OpenChamber 服务器更新到 {version}","settings.openchamber.about.actions.updateDesktopToVersion":"将 OpenChamber 桌面版更新到 {version}","settings.openchamber.about.actions.updateOpenCodeToVersion":"将 OpenCode 更新到 {version}","settings.openchamber.about.actions.checkServerForUpdates":"检查服务器更新","settings.openchamber.about.serviceManagerUpdate":"OpenChamber {version} 已可用。此服务器由服务管理器运行,无法自行更新。请在服务器上运行以下命令,然后重启服务:","settings.openchamber.about.openCode.installedVersion":"已安装 OpenCode {version}。重新加载 OpenCode 以开始使用。","settings.openchamber.about.openCode.installed":"已安装 OpenCode 更新。重新加载 OpenCode 以开始使用。","settings.openchamber.about.openCode.manualUpdate":"OpenCode {version} 已可用。请按照你安装 OpenCode 的方式更新它,然后重启 OpenChamber。","settings.openchamber.about.native.serverOpenChamberVersion":"服务器:OpenChamber {version}","settings.openchamber.about.native.serverOpenCodeVersion":"服务器:OpenCode {version}","settings.openchamber.about.native.appVersion":"此应用:{version}","settings.openchamber.about.toast.serverLatestVersion":"服务器已是最新版 OpenChamber","settings.openchamber.about.actions.checkForUpdates":"检查更新","settings.openchamber.about.toast.latestVersion":"你已是最新版本","settings.agents.sidebar.title":"智能体","settings.agents.sidebar.total":"总计 {count}","settings.agents.sidebar.empty.title":"未配置智能体","settings.agents.sidebar.empty.description":"使用上方 + 按钮创建一个","settings.agents.sidebar.section.builtIn":"内置智能体","settings.agents.sidebar.section.custom":"自定义智能体","settings.agents.sidebar.badge.system":"系统","settings.agents.sidebar.dialog.deleteTitle":"删除智能体","settings.agents.sidebar.dialog.resetTitle":"重置智能体","settings.agents.sidebar.dialog.deleteDescription":"确定要删除智能体“{name}”吗?","settings.agents.sidebar.dialog.resetDescription":"确定要将智能体“{name}”重置为默认配置吗?","settings.agents.sidebar.renameDialog.title":"重命名智能体","settings.agents.sidebar.renameDialog.description":"为智能体“@{name}”输入新名称","settings.agents.sidebar.renameDialog.placeholder":"新智能体名称...","settings.agents.sidebar.toast.builtInCannotDelete":"内置智能体无法删除","settings.agents.sidebar.toast.agentDeleted":"智能体“{name}”已删除","settings.agents.sidebar.toast.agentReset":"智能体“{name}”已重置为默认值","settings.agents.sidebar.toast.deleteFailed":"删除智能体失败","settings.agents.sidebar.toast.definitionNotFound":"未找到智能体定义。未进行任何更改。","settings.agents.sidebar.toast.resetFailed":"重置智能体失败","settings.agents.sidebar.toast.agentNameRequired":"智能体名称为必填项","settings.agents.sidebar.toast.agentExists":"已存在同名智能体","settings.agents.sidebar.toast.removeOldAfterRenameFailed":"重命名后移除旧智能体失败","settings.agents.sidebar.toast.renameFailed":"重命名智能体失败","settings.agents.sidebar.toast.agentRenamed":'智能体已重命名为 "{name}"',"settings.agents.page.toast.permissionNameRequired":"权限名称为必填项","settings.agents.page.toast.created":"智能体创建成功","settings.agents.page.toast.updated":"智能体更新成功","settings.agents.page.toast.createFailed":"创建智能体失败","settings.agents.page.toast.updateFailed":"更新智能体失败","settings.agents.page.toast.saveUnexpectedError":"保存时发生错误","settings.agents.page.empty.title":"从侧边栏选择一个智能体","settings.agents.page.empty.description":"或新建一个智能体","settings.agents.page.title.new":"新建智能体","settings.agents.page.subtitle.new":"配置新的助手人格","settings.agents.page.subtitle.edit":"编辑智能体设置","settings.agents.page.section.identityRole":"身份与角色","settings.agents.page.section.modelParameters":"模型与参数","settings.agents.page.section.systemPrompt":"系统提示词","settings.agents.page.permissionsEditor.sectionInfo":"按配置文件中保存的原样编辑此代理自身的权限规则。“继承”表示不设置该键,将应用全局配置和默认值。","settings.agents.page.permissionsEditor.ruleCount":"{count} 条规则","settings.agents.page.permissionsEditor.action.allow":"允许","settings.agents.page.permissionsEditor.action.ask":"询问","settings.agents.page.permissionsEditor.action.deny":"拒绝","settings.agents.page.permissionsEditor.action.default":"默认","settings.agents.page.permissionsEditor.action.inherit":"继承","settings.agents.page.permissionsEditor.actions.addKey":"添加键","settings.agents.page.permissionsEditor.customKeyPlaceholder":"自定义权限键…","settings.agents.page.permissionsEditor.defaultAria":"所有工具的默认权限","settings.agents.page.permissionsEditor.defaultInfo":"代理级别的回退(* 键),适用于没有单独规则的工具。","settings.agents.page.permissionsEditor.defaultLabel":"所有工具的默认值","settings.agents.page.permissionsEditor.effectiveHint":"→ {action}","settings.agents.page.permissionsEditor.mcpTitle":"MCP 服务器","settings.agents.page.permissionsEditor.mcpInfo":"配置中的每个 MCP 服务器一行。规则覆盖该服务器提供的所有工具。已禁用或失败的服务器也会列出,方便提前设置规则。","settings.agents.page.permissionsEditor.mcpStatus.disabled":"已禁用","settings.agents.page.permissionsEditor.mcpStatus.pending":"启动中","settings.agents.page.permissionsEditor.keyAria":"{key} 的权限","settings.agents.page.permissionsEditor.patternActionAria":"{key} 模式的操作","settings.agents.page.permissionsEditor.patternPlaceholder":"模式,例如 rm -rf * 或 /path/**","settings.agents.page.permissionsEditor.actions.addRule":"添加规则","settings.agents.page.permissionsEditor.actions.removeRuleAria":"删除规则","settings.agents.page.permissionsEditor.actions.retry":"重试","settings.agents.page.permissionsEditor.state.loadFailed":"无法加载代理的权限配置。","settings.agents.page.permissionsEditor.toast.saveFailed":"保存权限失败","settings.agents.page.section.toolPermissions":"工具权限","settings.agents.page.field.agentName":"智能体名称","settings.agents.page.field.agentNamePlaceholder":"agent-name","settings.agents.page.field.scopePlaceholder":"作用域","settings.agents.page.field.descriptionPlaceholder":"这个智能体的作用是什么?","settings.agents.page.runtimeProvided.note":"由 OpenCode 或插件提供,没有自己的配置文件。灰色提示显示当前值;你输入的内容会保存为覆盖。","settings.agents.page.field.mode":"模式","settings.agents.page.field.modeTooltip":"主智能体与子智能体可见性","settings.agents.page.field.overrideModel":"覆盖模型","settings.agents.page.field.variant":"思考变体","settings.agents.page.field.variantTooltip":"可选。如果模型支持推理,变体控制推理深度。","settings.agents.page.field.variantHint":"模型特定(如 Anthropic variant)","settings.agents.page.field.variantPlaceholder":"例如 high, max, low, none","settings.agents.page.field.temperature":"Temperature","settings.agents.page.field.temperatureTooltip":"控制随机性。越高越有创造性,越低越聚焦。","settings.agents.page.field.temperatureRange":"0.0 到 2.0","settings.agents.page.field.clearTemperatureAria":"清除 Temperature 覆盖","settings.agents.page.field.topP":"Top P","settings.agents.page.field.topPTooltip":"核采样多样性。越低越倾向高概率 token。","settings.agents.page.field.topPRange":"0.0 到 1.0","settings.agents.page.field.clearTopPAria":"清除 Top P 覆盖","settings.agents.page.field.systemPromptPlaceholder":"你是一名专业编码助手...","settings.agents.page.mode.primary":"主智能体","settings.agents.page.mode.subagent":"子智能体","settings.agents.page.mode.all":"全部","settings.agents.page.permissions.defaultLabel":"默认","settings.agents.page.permissions.hideEditor":"隐藏编辑器","settings.agents.page.permissions.advancedEditor":"高级编辑器","settings.agents.page.permissions.globalSummary":"全局:{summary}","settings.agents.page.permissions.rulesSummary":"规则:{summary}","settings.agents.page.permissions.globalDefault":"全局默认","settings.agents.page.permissions.pattern":"模式","settings.agents.page.permissions.addCustomRule":"添加自定义规则","settings.agents.page.permissions.permissionPlaceholder":"权限...","settings.agents.page.permissions.patternPlaceholder":"模式(例如 *)","settings.page.behavior.title":"行为","settings.page.behavior.description":"引导智能体的回复方式。","settings.behavior.page.title":"行为","settings.behavior.page.warning.title":"全局规则会与项目规则合并使用","settings.behavior.page.warning.description":"此处所做的更改会更新 {path}。当项目级 AGENTS.md 存在时,OpenCode 也会包含它。","settings.behavior.page.section.systemPrompt":"全局 AGENTS.md","settings.behavior.page.field.systemPromptPlaceholder":`你是一个有帮助的 AI 助手...
1
+ import{G as e,H as t,J as s,K as i,L as o,M as a,N as n,O as r,Q as l,R as c,T as d,U as g,V as p,W as m,X as h,Y as u}from"./useAppFontEffects-FdVEdwq7.js";import"./vendor-react-C3AD0CRp.js";import"./vendor-scheduler-7OC5HNn7.js";import"./index-BvpIhpBI.js";import"./vendor-zod-C3BVLiwa.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-XNmn2Hnw.js";import"./vendor-use-sync-external-store-DVVwmGAS.js";import"./vendor-opencode-client-DSZl7jSi.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-class-variance-authority-CyPa587s.js";import"./vendor-clsx-C_d985j6.js";import"./vendor-base-ui-BV0ycO3d.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-dom-BERnAEiB.js";import"./vendor-floating-ui-core-DBVSD8FA.js";import"./vendor-floating-ui-react-dom-VN3-0QGl.js";import"./vendor-dnd-kit-core-B-dmENub.js";import"./vendor-dnd-kit-utilities-D2MO70n8.js";import"./vendor-dnd-kit-accessibility-vxqCsF6D.js";import"./vendor-dnd-kit-sortable-DiuAkJDx.js";import"./vendor-tanstack-react-virtual-BHz8HhxS.js";import"./vendor-tanstack-virtual-core-BoA4iGMw.js";import"./vendor-framer-motion-0pQCvQRa.js";import"./vendor-motion-dom-DcCgeG69.js";import"./vendor-motion-utils-BGh8QBgx.js";import"./contextPanelEmbeddedChat-CirXEPJq.js";import"./vendor-sonner-CMlKUx1I.js";import"./vendor-cmdk-WpnCe4Xz.js";import"./vendor-radix-ui-react-dialog-Cya58wJc.js";import"./vendor-radix-ui-primitive-DOdKROq0.js";import"./vendor-radix-ui-react-compose-refs-OwL660na.js";import"./vendor-radix-ui-react-context-BGG-1ggC.js";import"./vendor-radix-ui-react-id-CciEoFzD.js";import"./vendor-radix-ui-react-use-layout-effect-ChlApEEc.js";import"./vendor-radix-ui-react-use-controllable-state-DprBN3PW.js";import"./vendor-radix-ui-react-use-callback-ref-D1Sqy0CZ.js";import"./vendor-radix-ui-react-dismissable-layer-3AH-Or1W.js";import"./vendor-radix-ui-react-primitive-CUfg3gbV.js";import"./vendor-radix-ui-react-slot-CLI2-QJb.js";import"./vendor-babel-runtime-CF3RwP-h.js";import"./vendor-radix-ui-react-use-escape-keydown-D0tG0-sR.js";import"./vendor-radix-ui-react-focus-scope-CqvJmvlR.js";import"./vendor-radix-ui-react-portal-EaY9b0dR.js";import"./vendor-radix-ui-react-presence-DBDb0ROU.js";import"./vendor-radix-ui-react-focus-guards-DOvT22db.js";import"./vendor-react-remove-scroll-CdTdY8wV.js";import"./vendor-tslib-De9GV7Vy.js";import"./vendor-react-remove-scroll-bar-DAxITgbW.js";import"./vendor-react-style-singleton-XBDcq1Ec.js";import"./vendor-get-nonce-C-Z93AgS.js";import"./vendor-use-sidecar-CzUV4Fx5.js";import"./vendor-use-callback-ref-h1JrcWGd.js";import"./vendor-aria-hidden-DvXkyWUv.js";import"./vendor-codemirror-language-Cg8boEOY.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-codemirror-state-C9awkmn-.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-view-CiLROUVV.js";import"./vendor-style-mod-NZ5MEPvj.js";import"./vendor-w3c-keyname-Vcq4gwWv.js";import"./vendor-crelt-C8TCjufn.js";import"./vendor-lezer-highlight-CDMHUZ74.js";import"./vendor-codemirror-lang-javascript-CN8Enbjc.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-Dw1gdHuT.js";import"./vendor-codemirror-lang-json-DzRRSgj9.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-B_seq3PB.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-CcuPVz08.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-B3FiTjDN.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-CaoLP1ZV.js";import"./vendor-codemirror-lang-python-frX4-6UW.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-codemirror-commands-Cg3hFNyu.js";import"./vendor-legendapp-list-ZsDnss2w.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";const b={"settings.themeImport.selectAll":"全选","settings.themeImport.deselectAll":"取消全选","settings.themeImport.complete":"导入完成","settings.themeImport.catalogTitle":"导入 VS Code 主题 (Open VSX)","settings.themeImport.catalogHint":"在 Open VSX 中搜索 VS Code 主题。仅发布在 Microsoft Marketplace 的主题可能不会显示。","settings.themeImport.search":"搜索主题","settings.themeImport.catalogError":"无法从 Open VSX 加载主题。请重新搜索。","settings.themeImport.empty":"在 Open VSX 中未找到主题。","settings.themeImport.back":"返回搜索","settings.themeImport.chooseFile":"选择 JSON 文件","settings.themeImport.importSelected":"导入所选变体","settings.themeImport.installed":"已导入","settings.themeImport.partialError":"部分主题无法保存。已成功导入的主题会保留。您可以重试其余变体。","settings.themeImport.delete":"删除已导入的主题 {name}","settings.themeImport.deleteError":"无法删除主题,主题已保留。","settings.themeImport.action":"导入 VS Code 主题","settings.themeImport.busy":"正在导入主题…","settings.themeImport.hint":"导入 VS Code 的 .json 或 .jsonc 主题,包括语法和 diff 颜色。主题保存在已连接的 OpenChamber 服务器上。","settings.themeImport.success":"已导入 {name}。","settings.themeImport.error.invalid":"此文件不是受支持的 VS Code 颜色主题。","settings.themeImport.error.include":"此主题引用了其他文件。请在 VS Code 中运行 Developer: Generate Color Theme From Current Settings,然后导入生成的 JSON。","settings.themeImport.error.size":"主题文件不能超过 512 KiB。","settings.themeImport.error.background":"此主题没有 editor.background 颜色。请从 VS Code 导出完整的颜色主题。","settings.themeImport.error.save":"无法保存主题。请检查连接后重试。","settings.themeImport.error.connection":"连接的服务器已更改。未应用主题。","settings.themeImport.error.unsupported":"VS Code 中不支持导入主题。","settings.themeImport.error.conflict":"此导入的主题已在服务器上被编辑,未覆盖原文件。","settings.openchamber.visual.field.alwaysShowScrollbars":"始终显示滚动条","settings.openchamber.visual.field.alwaysShowScrollbarsHint":"即使指针位于可滚动区域之外,也保持滚动条可见。仅在此设备上生效。","settings.providers.page.openCodeGo.title":"OpenCode Go 用量跟踪","settings.providers.page.openCodeGo.description":"连接 OpenCode Go 控制面板以显示滚动、每周和每月配额。","settings.providers.page.openCodeGo.workspaceId":"工作区 ID","settings.providers.page.openCodeGo.authCookie":"身份验证 Cookie","settings.providers.page.openCodeGo.apiKey":"API 密钥","settings.providers.page.openCodeGo.help":"从控制面板网址复制工作区 ID,并从浏览器开发者工具复制 auth Cookie。OpenChamber 绝不会扫描浏览器 Cookie 存储。","settings.providers.page.openCodeGo.save":"保存并验证","settings.providers.page.openCodeGo.replace":"替换","settings.providers.page.openCodeGo.validate":"验证","settings.providers.page.openCodeGo.delete":"删除","settings.providers.page.quotaCredentials.saved":"已保存 {provider} 凭据。","settings.providers.page.quotaCredentials.accessToken":"访问令牌","settings.providers.page.quotaCredentials.usageToken":"用量 API 令牌","settings.providers.page.quotaCredentials.exeDevTokenInstructions":"在终端中运行此命令,然后在下方粘贴令牌。该令牌只能读取 LLM 积分用量,并将在 30 天后过期。","settings.providers.page.quotaCredentials.refreshToken":"刷新令牌","settings.providers.page.quotaCredentials.tokenPlaceholder":"粘贴令牌","settings.providers.page.openCodeGo.saveFailed":"无法验证 OpenCode Go 凭据。","settings.providers.page.openCodeGo.valid":"OpenCode Go 凭据有效。","settings.providers.page.openCodeGo.invalid":"OpenCode Go 凭据无效或已过期。","settings.providers.page.openCodeGo.deleted":"已删除 OpenCode Go 凭据。","settings.providers.page.openCodeGo.deleteFailed":"无法删除 OpenCode Go 凭据。","settings.appearance.language.label":"语言","settings.appearance.language.description":"选择界面语言。","settings.appearance.language.select":"选择语言","settings.window.description":"OpenChamber 设置窗口。","settings.view.home.title":"设置","settings.view.home.description":"跳转到常用页面。","settings.view.home.cards.providers.title":"提供商","settings.view.home.cards.providers.description":"连接模型和凭据","settings.view.home.cards.agents.title":"智能体","settings.view.home.cards.agents.description":"提示词、工具、权限","settings.view.home.cards.skillsCatalog.title":"技能目录","settings.view.home.cards.skillsCatalog.description":"从目录安装技能","settings.view.home.cards.mcp.title":"MCP","settings.view.home.cards.mcp.description":"配置 MCP 服务器和连接","settings.view.home.cards.plugins.title":"Plugins","settings.view.home.cards.plugins.description":"Manage opencode plugins","settings.view.home.cards.usage.title":"用量","settings.view.home.cards.usage.description":"配额和花费可见性","settings.view.unavailable.title":"不可用","settings.view.unavailable.description":"此设置页面在当前运行环境中不可用。","settings.view.badge.beta":"测试版","settings.view.actions.backToSettings":"返回设置","settings.view.actions.closeSettings":"关闭设置","settings.view.actions.closeSettingsWithShortcut":"关闭设置({shortcut}+,)","settings.view.actions.back":"返回","settings.view.actions.resizeNavigation":"调整设置导航宽度","settings.view.search.placeholder":"搜索设置","settings.view.search.aria":"搜索设置","settings.view.search.clear":"清除设置搜索","settings.view.search.noResults":"没有匹配的设置","settings.view.nav.group.general":"OpenChamber","settings.view.nav.group.projects":"工作区","settings.view.nav.group.opencode":"OpenCode","settings.view.nav.group.content":"资源库","settings.page.projects.title":"项目","settings.page.remoteInstances.title":"远程实例","settings.page.providers.title":"提供商","settings.page.usage.title":"用量","settings.page.agents.title":"智能体","settings.page.commands.title":"命令","settings.page.mcp.title":"MCP","settings.page.plugins.title":"Plugins","settings.page.skills.title":"技能","settings.page.skillsCatalog.title":"技能目录","settings.page.git.title":"Git","settings.page.appearance.title":"外观","settings.page.appearance.description":"自定义 OpenChamber 的外观与体验。","settings.page.chat.title":"聊天","settings.page.chat.description":"配置消息和工具的显示方式。","settings.page.shortcuts.title":"快捷键","settings.page.shortcuts.description":"自定义键盘快捷键。","settings.page.general.title":"通用","settings.page.general.description":"应用启动、安全、连接与隐私。","settings.page.sessions.title":"会话","settings.page.sessions.description":"设置会话的默认值和保留策略。","settings.page.magicPrompts.title":"魔法提示词","settings.page.notifications.title":"通知","settings.page.notifications.description":"选择何时以及如何接收通知。","settings.page.voice.title":"语音","settings.page.voice.description":"配置语音朗读与听写。","settings.page.tunnel.title":"外部隧道","settings.page.tunnel.description":"通过远程隧道公开此实例。","settings.page.about.title":"关于","settings.page.snippets.title":"代码片段","settings.snippets.sidebar.title":"代码片段","settings.snippets.sidebar.total":"共 {count} 个","settings.snippets.sidebar.actions.create":"创建代码片段","settings.snippets.sidebar.actions.more":"{name} 的更多操作","settings.snippets.sidebar.toast.deleted":"代码片段已删除","settings.snippets.sidebar.toast.deleteFailed":"删除代码片段失败","settings.snippets.sidebar.dialog.deleteTitle":"删除代码片段?","settings.snippets.sidebar.dialog.deleteDescription":"这将永久删除 #{name}。","settings.snippets.page.empty.title":"选择代码片段","settings.snippets.page.empty.description":"从侧边栏选择代码片段进行编辑。","settings.snippets.page.title.new":"新建代码片段","settings.snippets.page.field.namePlaceholder":"snippet-name","settings.snippets.page.field.descriptionPlaceholder":"这个代码片段的作用","settings.snippets.page.field.aliases":"别名","settings.snippets.page.field.aliasesPlaceholder":"safe, careful","settings.snippets.page.field.content":"内容","settings.snippets.page.field.contentPlaceholder":"代码片段 Markdown...","settings.snippets.page.hint":"在提示词中使用 #name。支持别名和与 opencode-snippets 兼容的 prepend/append 块。","settings.snippets.page.toast.nameRequired":"代码片段名称为必填项","settings.snippets.page.toast.contentRequired":"代码片段内容为必填项","settings.snippets.page.toast.saveFailed":"保存代码片段失败","settings.snippets.page.toast.saved":"代码片段已保存","settings.openchamber.tunnel.title":"外部隧道","settings.openchamber.tunnel.description":"通过快速链接或你自己的 Cloudflare Managed Remote 隧道配置安全远程访问。","settings.openchamber.tunnel.note.serverSideEnforced":"安全隧道访问在服务端强制执行。","settings.openchamber.tunnel.note.connectLinksOneTime":"连接链接为一次性,隧道停止或连接链接 TTL 到期后会被吊销。","settings.openchamber.tunnel.note.cloudflareConnectorTarget":"Cloudflare connector 目标:","settings.openchamber.tunnel.note.cloudflareConnectorTargetUse":"对于 Cloudflare connector 目标,请使用","settings.openchamber.tunnel.note.tokensSavedPerTunnel":"Token 按隧道保存并从磁盘复用。","settings.openchamber.tunnel.note.customConfigUsed":"启动隧道时将使用自定义配置文件。","settings.openchamber.tunnel.note.defaultConfigUsed":"为空时,cloudflared 使用默认配置(~/.cloudflared/config.yml)。","settings.openchamber.tunnel.note.managedRemoteRequiresDomain":"Managed Remote 隧道需要你在 Cloudflare 账户中购买的域名。","settings.openchamber.tunnel.note.managedLocalUsesConfig":"Managed Local 隧道使用本地 cloudflared 配置文件。","settings.openchamber.tunnel.note.startModeAndGenerateLink":"启动 {mode} 隧道并生成一次性连接链接。此隧道使用期间请勿关闭应用。","settings.openchamber.tunnel.note.scanQrToConnect":"用手机扫码连接。","settings.openchamber.tunnel.section.redeemedAccessLinks":"已兑换访问链接","settings.openchamber.tunnel.section.savedManagedRemoteTunnels":"已保存的 Managed Remote 隧道","settings.openchamber.tunnel.notAvailable.cloudflaredNotFound":"未找到 cloudflared","settings.openchamber.tunnel.notAvailable.dependencyNotFound":"未找到 {dependency}。","settings.openchamber.tunnel.notAvailable.installHint":"安装它以启用远程隧道访问:","settings.openchamber.tunnel.field.provider":"提供商","settings.openchamber.tunnel.field.providerPlaceholder":"选择提供商","settings.openchamber.tunnel.field.tunnelType":"隧道类型","settings.openchamber.tunnel.field.connectLinkTtl":"连接链接 TTL","settings.openchamber.tunnel.field.tunnelSessionTtl":"隧道会话 TTL","settings.openchamber.tunnel.field.hostnameLabel":"主机名:","settings.openchamber.tunnel.field.savedTokenAvailablePlaceholder":"已保存 token(可选替换)","settings.openchamber.tunnel.field.pasteTokenPlaceholder":"粘贴此隧道的 token","settings.openchamber.tunnel.field.newPresetNamePlaceholder":"隧道名称(例如 Production)","settings.openchamber.tunnel.field.newPresetHostnamePlaceholder":"主机名(例如 oc.example.com)","settings.openchamber.tunnel.field.newPresetTokenPlaceholder":"Token","settings.openchamber.tunnel.field.managedRemoteTokenInfoAria":"Managed Remote 隧道 token 信息","settings.openchamber.tunnel.field.configurationFile":"配置文件","settings.openchamber.tunnel.field.configurationFilePlaceholder":"使用默认 cloudflared 配置","settings.openchamber.tunnel.field.managedRemoteTunnelToConnect":"用于连接的 Managed Remote 隧道","settings.openchamber.tunnel.field.selectSavedTunnelPlaceholder":"选择已保存隧道","settings.openchamber.tunnel.field.publicUrlHint":"公开 URL(没有 token 无法访问)","settings.openchamber.tunnel.field.connectLink":"连接链接","settings.openchamber.tunnel.field.expires":"到期","settings.openchamber.tunnel.field.connectQrAlt":"隧道连接二维码","settings.openchamber.tunnel.actions.removePresetAria":"移除 {name}","settings.openchamber.tunnel.actions.saveToken":"保存 token","settings.openchamber.tunnel.actions.browseConfigFileAria":"浏览配置文件","settings.openchamber.tunnel.actions.clearConfigFileAria":"清除配置文件","settings.openchamber.tunnel.actions.openManagedRemoteDocs":"查看 Managed Remote 隧道配置文档","settings.openchamber.tunnel.actions.openManagedLocalDocs":"查看 Managed Local 隧道配置文档","settings.openchamber.tunnel.actions.startTunnel":"启动隧道","settings.openchamber.tunnel.actions.startingTunnel":"正在启动隧道...","settings.openchamber.tunnel.actions.stopTunnel":"停止隧道","settings.openchamber.tunnel.actions.stopping":"正在停止...","settings.openchamber.tunnel.actions.newConnectLink":"新建连接链接","settings.openchamber.tunnel.actions.copied":"已复制","settings.openchamber.tunnel.actions.retry":"重试","settings.openchamber.tunnel.option.moreProvidersSoon":"更多提供商即将上线","settings.openchamber.tunnel.option.mode.quick.label":"Quick","settings.openchamber.tunnel.option.mode.quick.tooltip":"Quick Tunnel 仅尽力提供,不保证可用性。","settings.openchamber.tunnel.option.mode.managedRemote.label":"Managed Remote","settings.openchamber.tunnel.option.mode.managedRemote.tooltip":"Managed Remote 使用你的 Cloudflare 账户与主机名提供长期访问。","settings.openchamber.tunnel.option.mode.managedLocal.label":"Managed Local","settings.openchamber.tunnel.option.mode.managedLocal.tooltip":"Managed Local 使用本地 cloudflared 配置文件。","settings.openchamber.tunnel.warning.quickModeReliability":"如需更可靠的长期访问,请切换到 Managed Remote 或 Managed Local 隧道模式。","settings.openchamber.tunnel.warning.replacesActiveTunnel":"启动该隧道会替换当前活动隧道,并吊销现有连接链接与远程会话。","settings.openchamber.tunnel.badge.quick":"QUICK","settings.openchamber.tunnel.badge.remote":"REMOTE","settings.openchamber.tunnel.badge.local":"LOCAL","settings.openchamber.tunnel.state.loading":"加载中","settings.openchamber.tunnel.state.expired":"已过期","settings.openchamber.tunnel.state.revoked":"已吊销","settings.openchamber.tunnel.state.inactive":"不活跃","settings.openchamber.tunnel.state.noExpiry":"无过期时间","settings.openchamber.tunnel.state.never":"永不过期","settings.openchamber.tunnel.state.tunnelReady":"隧道已就绪","settings.openchamber.tunnel.session.redeemedAt":"已兑换 {time}","settings.openchamber.tunnel.session.expiresIn":"{remaining} 后过期","settings.openchamber.tunnel.session.inactiveWithReason":"不活跃({reason})","settings.openchamber.tunnel.error.invalidConfigExtension":"配置文件必须使用 .yml、.yaml 或 .json 扩展名。","settings.openchamber.tunnel.tooltip.tokensSavedPath":"Token 保存在 ~/.config/openchamber/cloudflare-managed-remote-tunnels.json。","settings.openchamber.tunnel.empty.noManagedRemoteTunnels":"尚未保存任何 Managed Remote 隧道。","settings.openchamber.tunnel.toast.checkAvailabilityFailed":"检查隧道可用性失败","settings.openchamber.tunnel.toast.saveSettingsFailed":"保存隧道设置失败","settings.openchamber.tunnel.toast.saveTtlFailed":"保存隧道 TTL 设置失败","settings.openchamber.tunnel.toast.saveTokenFailed":"保存 Managed Remote 隧道 token 失败","settings.openchamber.tunnel.toast.selectOrAddManagedRemoteFirst":"请先选择或添加一个 Managed Remote 隧道","settings.openchamber.tunnel.toast.managedRemoteTokenRequiredBeforeStarting":"启动前必须提供 Managed Remote 隧道 token","settings.openchamber.tunnel.toast.addManagedRemoteTokenBeforeStarting":"请先添加 Managed Remote 隧道 token 再启动","settings.openchamber.tunnel.toast.startFailed":"启动隧道失败","settings.openchamber.tunnel.toast.startedButNoPublicUrl":"隧道已启动,但未返回公开 URL","settings.openchamber.tunnel.toast.replacedTunnelSingleSingle":"已替换之前的隧道:吊销 1 个链接,失效 1 个会话。","settings.openchamber.tunnel.toast.replacedTunnelSingleManySessions":"已替换之前的隧道:吊销 1 个链接,失效 {invalidatedSessionCount} 个会话。","settings.openchamber.tunnel.toast.replacedTunnelManyLinksSingleSession":"已替换之前的隧道:吊销 {revokedBootstrapCount} 个链接,失效 1 个会话。","settings.openchamber.tunnel.toast.replacedTunnelManyMany":"已替换之前的隧道:吊销 {revokedBootstrapCount} 个链接,失效 {invalidatedSessionCount} 个会话。","settings.openchamber.tunnel.toast.linkReady":"隧道链接已就绪","settings.openchamber.tunnel.toast.stopped":"隧道已停止","settings.openchamber.tunnel.toast.stopFailed":"停止隧道失败","settings.openchamber.tunnel.toast.connectLinkCopied":"连接链接已复制","settings.openchamber.tunnel.toast.copyUrlFailed":"复制 URL 失败","settings.openchamber.tunnel.toast.saveSelectedManagedRemoteFailed":"保存所选 Managed Remote 隧道失败","settings.openchamber.tunnel.toast.tunnelNameRequired":"隧道名称为必填项","settings.openchamber.tunnel.toast.managedRemoteHostnameRequired":"Managed Remote 隧道主机名为必填项","settings.openchamber.tunnel.toast.managedRemoteTokenRequired":"Managed Remote 隧道 token 为必填项","settings.openchamber.tunnel.toast.hostnameAlreadyExists":"该主机名已存在","settings.openchamber.tunnel.toast.managedRemoteSaved":"Managed Remote 隧道已保存","settings.openchamber.tunnel.toast.managedRemoteRemoved":"Managed Remote 隧道已移除","settings.magicPrompts.sidebar.title":"魔法提示词","settings.magicPrompts.sidebar.description":"选择要编辑的提示词模板。","settings.magicPrompts.sidebar.group.git":"Git","settings.magicPrompts.sidebar.group.github":"GitHub","settings.magicPrompts.sidebar.group.planning":"规划","settings.magicPrompts.sidebar.group.session":"会话","settings.magicPrompts.sidebar.item.gitCommitGenerate":"提交生成","settings.magicPrompts.sidebar.item.gitPrGenerate":"PR 生成","settings.magicPrompts.sidebar.item.gitConflictResolve":"合并/Rebase 冲突解决","settings.magicPrompts.sidebar.item.gitCherrypickConflictResolve":"Cherry-pick 冲突解决","settings.magicPrompts.sidebar.item.githubPrReview":"PR 审查","settings.magicPrompts.sidebar.item.githubIssueReview":"Issue 审查","settings.magicPrompts.sidebar.item.githubPrFailedChecksReview":"PR 失败检查审查","settings.magicPrompts.sidebar.item.githubPrCommentsReview":"PR 评论审查","settings.magicPrompts.sidebar.item.githubSinglePrCommentReview":"单条 PR 评论审查","settings.magicPrompts.sidebar.item.planTodo":"待办规划","settings.magicPrompts.sidebar.item.planImprove":"改进计划","settings.magicPrompts.sidebar.item.planImplement":"执行计划","settings.magicPrompts.sidebar.item.sessionSummary":"会话总结","settings.magicPrompts.sidebar.item.sessionWorkspaceReview":"工作区审查","settings.magicPrompts.sidebar.item.sessionExplore":"代码库导览","settings.magicPrompts.sidebar.item.sessionFeaturePlan":"功能规划","settings.magicPrompts.sidebar.item.sessionCraftGoal":"创建 Goal","settings.magicPrompts.page.group.sessionCraftGoal.title":"创建 Goal","settings.magicPrompts.page.group.sessionCraftGoal.description":"由 /craft-goal 斜杠命令使用的提示词:可见用户消息 + 隐藏说明。通过引导式探索将想法或任务转化为清晰且有证据可验证的 Goal。","settings.magicPrompts.sidebar.item.sessionCatchUp":"快速回顾","settings.magicPrompts.sidebar.item.sessionDebug":"调试","settings.magicPrompts.sidebar.item.sessionWeigh":"权衡方案","settings.magicPrompts.sidebar.item.sessionFusion":"融合","settings.remoteInstances.sidebar.title":"远程实例","settings.remoteInstances.sidebar.total":"总计 {count}","settings.remoteInstances.sidebar.newSshInstanceName":"新的 SSH 连接","settings.remoteInstances.sidebar.actions.addSshInstance":"添加 SSH 连接","settings.remoteInstances.sidebar.actions.connect":"连接","settings.remoteInstances.sidebar.actions.disconnect":"断开连接","settings.remoteInstances.sidebar.actions.retry":"重试","settings.remoteInstances.sidebar.actions.remove":"移除","settings.remoteInstances.sidebar.confirm.localPortInUseRetry":"本地端口已被占用。是否选择一个随机空闲本地端口并重试?","settings.remoteInstances.sidebar.toast.createFailed":"无法创建 SSH 连接","settings.remoteInstances.sidebar.toast.retriedWithRandomPort":"已使用随机本地端口重试","settings.remoteInstances.sidebar.toast.connectFailed":"连接实例失败","settings.remoteInstances.sidebar.toast.disconnectFailed":"断开实例连接失败","settings.remoteInstances.sidebar.toast.retryFailed":"重试连接失败","settings.remoteInstances.sidebar.toast.removeFailed":"移除实例失败","settings.remoteInstances.direct.sidebarTitle":"服务器链接","settings.remoteInstances.direct.sidebarDescription":"使用链接或令牌连接","settings.remoteInstances.direct.title":"其他 OpenChamber 服务器","settings.remoteInstances.direct.description":"此应用可切换到的服务器。从另一台服务器导入配对链接,或通过地址添加。","settings.remoteInstances.direct.addDialog.description":"通过 URL 添加另一个 OpenChamber 服务器。适用于服务器已在运行且你拥有连接令牌的情况。","settings.remoteInstances.direct.field.labelPlaceholder":"标签(可选)","settings.remoteInstances.direct.field.urlPlaceholder":"https://host:port","settings.remoteInstances.direct.field.tokenPlaceholder":"连接令牌(受信任的本地服务器可选)","settings.remoteInstances.direct.note":"连接令牌会保存在此设备上,并且只在此应用连接到该服务器时使用。","settings.remoteInstances.direct.headers.title":"Additional headers","settings.remoteInstances.direct.headers.description":"Optional HTTP headers for desktop API requests. Authorization is reserved for the connection token.","settings.remoteInstances.direct.headers.field.namePlaceholder":"Header name","settings.remoteInstances.direct.headers.field.valuePlaceholder":"Header value","settings.remoteInstances.direct.headers.actions.add":"Add header","settings.remoteInstances.direct.headers.removeAria":"Remove header","settings.remoteInstances.direct.actions.add":"添加服务器","settings.remoteInstances.direct.import.description":"粘贴来自另一个 OpenChamber 服务器的连接链接。","settings.remoteInstances.direct.import.placeholder":"openchamber://connect?...","settings.remoteInstances.direct.import.action":"导入链接","settings.remoteInstances.direct.error.invalidConnectLink":"无效的 OpenChamber 连接链接。","settings.remoteInstances.direct.state.loading":"正在加载服务器...","settings.remoteInstances.direct.state.empty":"尚未添加其他服务器。","settings.remoteInstances.clientAuth.title":"连接到此服务器","settings.remoteInstances.clientAuth.description":"创建安全链接或令牌,让 OpenChamber Desktop 可以连接到此服务器。","settings.remoteInstances.clientAuth.field.labelPlaceholder":"设备名称 — 例如 My iPhone","settings.remoteInstances.clientAuth.actions.create":"创建令牌","settings.remoteInstances.clientAuth.actions.pair":"创建链接","settings.remoteInstances.clientAuth.actions.revoke":"撤销","settings.remoteInstances.clientAuth.actions.clearRevoked":"清除已撤销","settings.remoteInstances.clientAuth.qrAlt":"OpenChamber connection QR code","settings.remoteInstances.clientAuth.qrEnlarge":"放大二维码","settings.remoteInstances.clientAuth.qrScanHint":"用另一台设备上的 OpenChamber 应用扫描。一次性使用且会过期。","settings.remoteInstances.clientAuth.qrDialogTitle":"扫码连接","settings.remoteInstances.clientAuth.actions.addDevice":"添加设备","settings.remoteInstances.clientAuth.actions.copied":"已复制","settings.remoteInstances.clientAuth.addDevice.transportLabel":"你会在哪里使用这台设备?","settings.remoteInstances.clientAuth.addDevice.subtitle":"创建一次性二维码,把另一台设备连接到此服务器。","settings.remoteInstances.clientAuth.addDevice.transport.local":"仅本机","settings.remoteInstances.clientAuth.addDevice.transport.localHint":"供同一台电脑上的应用使用。","settings.remoteInstances.clientAuth.addDevice.transport.lan":"仅家庭网络","settings.remoteInstances.clientAuth.addDevice.transport.lanHint":"通过 Wi-Fi 直接连接。离开此网络后无法使用。","settings.remoteInstances.clientAuth.addDevice.transport.relay":"任何地方","settings.remoteInstances.clientAuth.addDevice.transport.relayHint":"在家和外出都可用。外出时流量经由 OpenChamber Private Relay(端到端加密隧道)传输,无需配置。","settings.remoteInstances.clientAuth.addDevice.fallback.relay":"外出时也允许通过加密中继连接","settings.remoteInstances.clientAuth.addDevice.fallback.preferLocal":"在家时优先使用直接连接","settings.remoteInstances.clientAuth.addDevice.create":"创建二维码","settings.remoteInstances.clientAuth.addDevice.done":"完成","settings.remoteInstances.clientAuth.addDevice.connectedToast":"设备已连接。","settings.remoteInstances.clientAuth.pairingUrl":"连接链接","settings.remoteInstances.clientAuth.createdToken":"请立即复制此令牌。出于安全考虑,它不会再次显示。","settings.remoteInstances.clientAuth.state.loading":"正在加载令牌...","settings.remoteInstances.clientAuth.state.empty":"尚无已连接设备。","settings.remoteInstances.clientAuth.state.revoked":"已撤销","settings.remoteInstances.clientAuth.state.thisDevice":"此设备","settings.remoteInstances.clientAuth.state.pending":"等待连接…","settings.remoteInstances.clientAuth.state.viaRelay":"Relay","settings.remoteInstances.clientAuth.state.connectedDirect":"已连接 · 局域网","settings.remoteInstances.clientAuth.state.connectedRelay":"已连接 · 中继","settings.remoteInstances.clientAuth.lastUsed":"上次使用 {date}","settings.remoteInstances.clientAuth.neverUsed":"从未使用","settings.remoteInstances.relay.title":"OpenChamber Relay","settings.remoteInstances.relay.autoHint":"通过中继配对设备时自动开启。","settings.remoteInstances.relay.description":"无需开放端口,即可让你的其他设备从任何地方连接。流量端到端加密,中继无法读取内容。","settings.remoteInstances.relay.enableHint":"在此服务器上启用中继之前,不会共享任何内容。","settings.remoteInstances.relay.actions.enable":"启用中继","settings.remoteInstances.relay.actions.disable":"停用","settings.remoteInstances.relay.confirm.disable":"停用中继?通过它连接的设备将立即断开。","settings.remoteInstances.relay.state.loading":"正在检查中继状态...","settings.remoteInstances.relay.state.disabled":"已停用","settings.remoteInstances.relay.state.connecting":"连接中","settings.remoteInstances.relay.state.connected":"已连接","settings.remoteInstances.relay.state.reconnecting":"重新连接中","settings.remoteInstances.relay.state.error":"错误","settings.remoteInstances.relay.status.clientsOne":"已连接 {count} 台设备","settings.remoteInstances.relay.status.clientsMany":"已连接 {count} 台设备","settings.remoteInstances.relay.pair.title":"配对设备","settings.remoteInstances.relay.pair.labelPlaceholder":"设备名称(可选)","settings.remoteInstances.relay.pair.includeToken":"包含访问令牌(扫一次即完成配对)","settings.remoteInstances.relay.pair.noTokenHint":"不包含令牌时,设备连接后需使用此服务器的界面密码登录。","settings.remoteInstances.relay.pair.generate":"创建配对链接","settings.remoteInstances.relay.pair.requiresConnected":"中继连接后即可配对。","settings.remoteInstances.relay.pair.linkLabel":"配对链接","settings.remoteInstances.relay.pair.warning":"此链接可访问此服务器,请勿分享。","settings.remoteInstances.relay.pair.qrAlt":"中继配对二维码","settings.remoteInstances.relay.pair.showQr":"显示二维码","settings.remoteInstances.relay.pair.qrDialogTitle":"扫描配对","settings.remoteInstances.relay.pair.qrDialogDescription":"用其他设备上的 OpenChamber 应用扫描此二维码。","settings.remoteInstances.relay.pair.manageHint":"可在上方“连接到此服务器”列表中管理或吊销已配对的设备。","settings.remoteInstances.relay.toast.enableFailed":"无法启用中继","settings.remoteInstances.relay.toast.disableFailed":"无法停用中继","settings.remoteInstances.relay.toast.offerFailed":"无法创建配对链接","settings.remoteInstances.relay.toast.linkCopied":"已复制配对链接","settings.remoteInstances.sidebar.phase.ready":"就绪","settings.remoteInstances.sidebar.phase.error":"错误","settings.remoteInstances.sidebar.phase.reconnect":"重连","settings.remoteInstances.sidebar.phase.installing":"安装中","settings.remoteInstances.sidebar.phase.updating":"更新中","settings.remoteInstances.sidebar.phase.forwarding":"转发中","settings.remoteInstances.sidebar.phase.starting":"启动中","settings.remoteInstances.sidebar.phase.connecting":"连接中","settings.remoteInstances.sidebar.phase.idle":"空闲","settings.remoteInstances.page.section.instance":"实例","settings.remoteInstances.page.section.instanceDescription":"为此连接选择 SSH 命令和显示名称。","settings.remoteInstances.page.field.mode":"模式","settings.remoteInstances.page.field.modeHint":"选择是由 OpenChamber 为你启动服务器,还是连接到已在运行的服务器。","settings.remoteInstances.page.field.modePlaceholder":"选择模式","settings.remoteInstances.page.field.modeManaged":"帮我启动","settings.remoteInstances.page.field.modeExternal":"已在运行","settings.remoteInstances.page.field.preferredRemotePort":"远程机器上的端口","settings.remoteInstances.page.field.preferredRemotePortHint":"OpenChamber 在远程机器上使用的端口。留空则自动选择。","settings.remoteInstances.page.field.keepServerRunning":"保持服务运行","settings.remoteInstances.page.field.keepServerRunningHint":"断开后让远程服务器继续运行。关闭时会在断开时停止,并在下次连接时重新启动。","settings.remoteInstances.page.field.bindHost":"谁可以访问","settings.remoteInstances.page.field.bindHostHint":"谁可以打开这台电脑上的转发地址。无论哪种选择,远程机器本身都只能通过 SSH 隧道访问。","settings.remoteInstances.page.field.preferredLocalPort":"这台电脑上的端口","settings.remoteInstances.page.field.preferredLocalPortHint":"为隧道在这台电脑上打开的端口。留空则自动选择。","settings.remoteInstances.page.field.forwardType":"转发类型","settings.remoteInstances.page.field.localHostPlaceholder":"127.0.0.1","settings.remoteInstances.page.field.remoteHostPlaceholder":"127.0.0.1","settings.remoteInstances.page.field.auto":"自动","settings.remoteInstances.page.confirm.bindAllInterfaces":"绑定到 0.0.0.0 会将转发端口暴露到本地网络。是否继续?","settings.remoteInstances.page.preview.localSocks5":"(本地 SOCKS5)","settings.remoteInstances.page.preview.local":"(本地)","settings.remoteInstances.page.preview.remote":"(远程)","settings.remoteInstances.page.toast.openLocalEndpointFailed":"无法打开本地地址","settings.remoteInstances.page.toast.localUrlCopied":"本地 URL 已复制","settings.remoteInstances.page.actions.copyLocalUrl":"复制本地 URL","settings.remoteInstances.page.actions.open":"打开","settings.remoteInstances.page.logsDialog.selectedInstanceFallback":"所选实例","settings.remoteInstances.page.patternDialog.descriptionWithHost":"{host} 需要一个具体目标地址。","settings.remoteInstances.page.patternDialog.description":"输入目标地址。","settings.common.infoAria":"更多信息","settings.common.actions.cancel":"取消","settings.common.actions.close":"关闭","settings.common.actions.create":"创建","settings.common.actions.delete":"删除","settings.openchamber.appLinks.title":"受信任的应用链接","settings.openchamber.appLinks.info":"此列表中的链接在本设备上打开时不再询问。其他应用链接在打开前始终需要确认。","settings.openchamber.appLinks.empty":"本设备上暂无受信任的应用链接。打开链接时选择“信任并打开”即可添加到这里。","settings.openchamber.appLinks.removeAria":"移除受信任的 {scheme} 链接","settings.common.actions.reset":"重置","settings.common.actions.rename":"重命名","settings.common.actions.duplicate":"复制","settings.common.actions.import":"导入","settings.common.actions.copyAll":"全部复制","settings.common.actions.clear":"清除","settings.common.actions.saving":"保存中...","settings.common.status.saved":"已保存","settings.common.status.saveFailed":"保存失败","settings.common.status.saveFailedReason":"无法保存:{reason}","settings.common.actions.saveChanges":"保存更改","settings.common.scope.global":"全局","settings.common.scope.project":"项目","settings.common.field.description":"描述","settings.common.badge.new":"新建","settings.common.badge.modified":"已修改","settings.common.permission.allow":"允许","settings.common.permission.ask":"询问","settings.common.permission.deny":"拒绝","settings.common.state.comingSoon":"即将推出...","settings.projects.actions.title":"操作","settings.projects.shared.badge":"在仓库中","settings.projects.shared.actionsFromRepo":"存储在仓库中({path})。拉取仓库的每个人都会获得。","settings.projects.shared.commandsFromRepo":"首先运行,存储在仓库中({path})","settings.projects.shared.invalid":"无法读取 {path} 中的项目配置:{reason}","settings.projects.shared.trusted":"已在此实例上信任仓库命令","settings.projects.shared.resetTrust":"重置信任","settings.projects.shared.title":"仓库配置","settings.projects.shared.description":"存储在仓库本身的设置,拉取仓库的每个人都会获得相同的操作、设置命令、启动项和计划。在你移入项目之前不会写入任何内容。","settings.projects.shared.file":"文件","settings.projects.shared.status.missing":"尚未在仓库中","settings.projects.shared.status.ok":"已在仓库中","settings.projects.shared.plansDir":"计划文件夹","settings.projects.shared.plansDirPlaceholder":".openchamber/plans","settings.projects.shared.plansDirInfo":"仓库计划的存放位置(相对于仓库)。留空表示 .openchamber/plans。自定义文件夹(如 docs/plans)会完全替代默认值:只读写该文件夹。更改时请自行移动现有文件。","settings.projects.shared.plansDirAria":"仓库计划文件夹","settings.projects.shared.actions.share":"移至仓库","settings.projects.shared.actions.showTitle":"在你的菜单中重新显示此仓库操作。","settings.projects.shared.actions.hideTitle":"仅在你的菜单中隐藏此仓库操作;仓库不会改变。","settings.projects.shared.actions.makePersonalTitle":"从仓库中移除,仅保留在此实例上你的设置中。","settings.projects.shared.actions.shareTitle":"存储到仓库内的 {path},拉取仓库的每个人都会获得。它会从你的个人设置中移除。","settings.projects.shared.actions.shareAfterSave":"先保存你的修改,然后再移动","settings.projects.shared.actions.makePersonal":"移至我的设置","settings.projects.shared.actions.hide":"对我隐藏","settings.projects.shared.actions.show":"显示","settings.projects.shared.hiddenBadge":"已隐藏","settings.projects.shared.replaceMode":"仅使用我的设置命令,跳过仓库中的命令","settings.projects.shared.replaceModeAria":"仅使用我的设置命令,跳过仓库中的命令","settings.projects.shared.toast.shareFailed":"更新仓库配置失败","settings.projects.actions.description":"按项目显示在项目名旁边表头中的命令。","settings.projects.actions.validation.fillNameAndCommand":"保存前请填写操作名称和命令。","settings.projects.actions.state.loading":"加载中...","settings.projects.actions.state.empty":"尚未配置任何操作。","settings.projects.actions.state.untitled":"未命名操作","settings.projects.actions.state.noDesktopSshForwards":"没有可用的本地 SSH 转发。","settings.projects.actions.field.selectIconAria":"选择图标","settings.projects.actions.field.iconAria":"图标 {icon}","settings.projects.actions.field.actionNamePlaceholder":"操作名称","settings.projects.actions.field.command":"命令","settings.projects.actions.field.commandPlaceholder":"例如 bun run lint","settings.projects.actions.runIn.label":"运行位置","settings.projects.actions.runIn.info":"选择从关联 worktree 启动时此操作的运行位置。","settings.projects.actions.runIn.project":"父检出目录","settings.projects.actions.runIn.worktree":"当前 worktree","settings.projects.actions.runIn.aria":"此操作的工作目录","settings.projects.actions.field.autoOpenUrl":"自动打开 URL","settings.projects.actions.field.autoOpenUrlForAria":"为 {title} 自动打开 URL","settings.projects.actions.field.autoOpenUrlDescription":"从输出中打开 URL,或使用下面的自定义 URL","settings.projects.actions.field.overrideUrlPlaceholder":"覆盖 URL(可选)","settings.projects.actions.field.overrideUrlTooltip":"如果填写此字段,将使用自定义 URL。为空时,应用会从输出中选择最佳 URL 打开。","settings.projects.actions.field.desktopSshForward":"桌面 SSH 转发","settings.projects.actions.field.useOutputManualUrl":"使用输出/手动 URL","settings.projects.actions.actions.add":"添加操作","settings.projects.actions.actions.save":"保存操作","settings.projects.actions.toast.saveFailed":"保存操作失败","settings.projects.actions.toast.saved":"项目操作已保存","settings.openchamber.about.title":"关于 OpenChamber","settings.openchamber.about.field.version":"版本","settings.openchamber.about.field.openCodeVersion":"OpenCode 版本","settings.openchamber.about.field.instanceUrls":"实例 URL","settings.openchamber.about.field.applicationUrl":"应用","settings.openchamber.about.field.tunnelUrl":"隧道","settings.openchamber.about.state.checking":"检查中...","settings.openchamber.about.state.upToDate":"已是最新","settings.openchamber.about.state.unknown":"未知","settings.openchamber.about.actions.checkUpdates":"检查更新","settings.openchamber.about.actions.update":"更新","settings.openchamber.about.actions.updateOpenChamberToVersion":"将 OpenChamber 更新到 {version}","settings.openchamber.about.actions.updateServerToVersion":"将 OpenChamber 服务器更新到 {version}","settings.openchamber.about.actions.updateDesktopToVersion":"将 OpenChamber 桌面版更新到 {version}","settings.openchamber.about.actions.updateOpenCodeToVersion":"将 OpenCode 更新到 {version}","settings.openchamber.about.actions.checkServerForUpdates":"检查服务器更新","settings.openchamber.about.serviceManagerUpdate":"OpenChamber {version} 已可用。此服务器由服务管理器运行,无法自行更新。请在服务器上运行以下命令,然后重启服务:","settings.openchamber.about.openCode.installedVersion":"已安装 OpenCode {version}。重新加载 OpenCode 以开始使用。","settings.openchamber.about.openCode.installed":"已安装 OpenCode 更新。重新加载 OpenCode 以开始使用。","settings.openchamber.about.openCode.manualUpdate":"OpenCode {version} 已可用。请按照你安装 OpenCode 的方式更新它,然后重启 OpenChamber。","settings.openchamber.about.native.serverOpenChamberVersion":"服务器:OpenChamber {version}","settings.openchamber.about.native.serverOpenCodeVersion":"服务器:OpenCode {version}","settings.openchamber.about.native.appVersion":"此应用:{version}","settings.openchamber.about.toast.serverLatestVersion":"服务器已是最新版 OpenChamber","settings.openchamber.about.actions.checkForUpdates":"检查更新","settings.openchamber.about.toast.latestVersion":"你已是最新版本","settings.agents.sidebar.title":"智能体","settings.agents.sidebar.total":"总计 {count}","settings.agents.sidebar.empty.title":"未配置智能体","settings.agents.sidebar.empty.description":"使用上方 + 按钮创建一个","settings.agents.sidebar.section.builtIn":"内置智能体","settings.agents.sidebar.section.custom":"自定义智能体","settings.agents.sidebar.badge.system":"系统","settings.agents.sidebar.dialog.deleteTitle":"删除智能体","settings.agents.sidebar.dialog.resetTitle":"重置智能体","settings.agents.sidebar.dialog.deleteDescription":"确定要删除智能体“{name}”吗?","settings.agents.sidebar.dialog.resetDescription":"确定要将智能体“{name}”重置为默认配置吗?","settings.agents.sidebar.renameDialog.title":"重命名智能体","settings.agents.sidebar.renameDialog.description":"为智能体“@{name}”输入新名称","settings.agents.sidebar.renameDialog.placeholder":"新智能体名称...","settings.agents.sidebar.toast.builtInCannotDelete":"内置智能体无法删除","settings.agents.sidebar.toast.agentDeleted":"智能体“{name}”已删除","settings.agents.sidebar.toast.agentReset":"智能体“{name}”已重置为默认值","settings.agents.sidebar.toast.deleteFailed":"删除智能体失败","settings.agents.sidebar.toast.definitionNotFound":"未找到智能体定义。未进行任何更改。","settings.agents.sidebar.toast.resetFailed":"重置智能体失败","settings.agents.sidebar.toast.agentNameRequired":"智能体名称为必填项","settings.agents.sidebar.toast.agentExists":"已存在同名智能体","settings.agents.sidebar.toast.removeOldAfterRenameFailed":"重命名后移除旧智能体失败","settings.agents.sidebar.toast.renameFailed":"重命名智能体失败","settings.agents.sidebar.toast.agentRenamed":'智能体已重命名为 "{name}"',"settings.agents.page.toast.permissionNameRequired":"权限名称为必填项","settings.agents.page.toast.created":"智能体创建成功","settings.agents.page.toast.updated":"智能体更新成功","settings.agents.page.toast.createFailed":"创建智能体失败","settings.agents.page.toast.updateFailed":"更新智能体失败","settings.agents.page.toast.saveUnexpectedError":"保存时发生错误","settings.agents.page.empty.title":"从侧边栏选择一个智能体","settings.agents.page.empty.description":"或新建一个智能体","settings.agents.page.title.new":"新建智能体","settings.agents.page.subtitle.new":"配置新的助手人格","settings.agents.page.subtitle.edit":"编辑智能体设置","settings.agents.page.section.identityRole":"身份与角色","settings.agents.page.section.modelParameters":"模型与参数","settings.agents.page.section.systemPrompt":"系统提示词","settings.agents.page.permissionsEditor.sectionInfo":"按配置文件中保存的原样编辑此代理自身的权限规则。“继承”表示不设置该键,将应用全局配置和默认值。","settings.agents.page.permissionsEditor.ruleCount":"{count} 条规则","settings.agents.page.permissionsEditor.action.allow":"允许","settings.agents.page.permissionsEditor.action.ask":"询问","settings.agents.page.permissionsEditor.action.deny":"拒绝","settings.agents.page.permissionsEditor.action.default":"默认","settings.agents.page.permissionsEditor.action.inherit":"继承","settings.agents.page.permissionsEditor.actions.addKey":"添加键","settings.agents.page.permissionsEditor.customKeyPlaceholder":"自定义权限键…","settings.agents.page.permissionsEditor.defaultAria":"所有工具的默认权限","settings.agents.page.permissionsEditor.defaultInfo":"代理级别的回退(* 键),适用于没有单独规则的工具。","settings.agents.page.permissionsEditor.defaultLabel":"所有工具的默认值","settings.agents.page.permissionsEditor.effectiveHint":"→ {action}","settings.agents.page.permissionsEditor.mcpTitle":"MCP 服务器","settings.agents.page.permissionsEditor.mcpInfo":"配置中的每个 MCP 服务器一行。规则覆盖该服务器提供的所有工具。已禁用或失败的服务器也会列出,方便提前设置规则。","settings.agents.page.permissionsEditor.mcpStatus.disabled":"已禁用","settings.agents.page.permissionsEditor.mcpStatus.pending":"启动中","settings.agents.page.permissionsEditor.keyAria":"{key} 的权限","settings.agents.page.permissionsEditor.patternActionAria":"{key} 模式的操作","settings.agents.page.permissionsEditor.patternPlaceholder":"模式,例如 rm -rf * 或 /path/**","settings.agents.page.permissionsEditor.actions.addRule":"添加规则","settings.agents.page.permissionsEditor.actions.removeRuleAria":"删除规则","settings.agents.page.permissionsEditor.actions.retry":"重试","settings.agents.page.permissionsEditor.state.loadFailed":"无法加载代理的权限配置。","settings.agents.page.permissionsEditor.toast.saveFailed":"保存权限失败","settings.agents.page.section.toolPermissions":"工具权限","settings.agents.page.field.agentName":"智能体名称","settings.agents.page.field.agentNamePlaceholder":"agent-name","settings.agents.page.field.scopePlaceholder":"作用域","settings.agents.page.field.descriptionPlaceholder":"这个智能体的作用是什么?","settings.agents.page.runtimeProvided.note":"由 OpenCode 或插件提供,没有自己的配置文件。灰色提示显示当前值;你输入的内容会保存为覆盖。","settings.agents.page.field.mode":"模式","settings.agents.page.field.modeTooltip":"主智能体与子智能体可见性","settings.agents.page.field.overrideModel":"覆盖模型","settings.agents.page.field.variant":"思考变体","settings.agents.page.field.variantTooltip":"可选。如果模型支持推理,变体控制推理深度。","settings.agents.page.field.variantHint":"模型特定(如 Anthropic variant)","settings.agents.page.field.variantPlaceholder":"例如 high, max, low, none","settings.agents.page.field.temperature":"Temperature","settings.agents.page.field.temperatureTooltip":"控制随机性。越高越有创造性,越低越聚焦。","settings.agents.page.field.temperatureRange":"0.0 到 2.0","settings.agents.page.field.clearTemperatureAria":"清除 Temperature 覆盖","settings.agents.page.field.topP":"Top P","settings.agents.page.field.topPTooltip":"核采样多样性。越低越倾向高概率 token。","settings.agents.page.field.topPRange":"0.0 到 1.0","settings.agents.page.field.clearTopPAria":"清除 Top P 覆盖","settings.agents.page.field.systemPromptPlaceholder":"你是一名专业编码助手...","settings.agents.page.mode.primary":"主智能体","settings.agents.page.mode.subagent":"子智能体","settings.agents.page.mode.all":"全部","settings.agents.page.permissions.defaultLabel":"默认","settings.agents.page.permissions.hideEditor":"隐藏编辑器","settings.agents.page.permissions.advancedEditor":"高级编辑器","settings.agents.page.permissions.globalSummary":"全局:{summary}","settings.agents.page.permissions.rulesSummary":"规则:{summary}","settings.agents.page.permissions.globalDefault":"全局默认","settings.agents.page.permissions.pattern":"模式","settings.agents.page.permissions.addCustomRule":"添加自定义规则","settings.agents.page.permissions.permissionPlaceholder":"权限...","settings.agents.page.permissions.patternPlaceholder":"模式(例如 *)","settings.page.behavior.title":"行为","settings.page.behavior.description":"引导智能体的回复方式。","settings.behavior.page.title":"行为","settings.behavior.page.warning.title":"全局规则会与项目规则合并使用","settings.behavior.page.warning.description":"此处所做的更改会更新 {path}。当项目级 AGENTS.md 存在时,OpenCode 也会包含它。","settings.behavior.page.section.systemPrompt":"全局 AGENTS.md","settings.behavior.page.field.systemPromptPlaceholder":`你是一个有帮助的 AI 助手...
2
2
 
3
3
  使用此空间定义 AI 在所有会话和提供商中的绝对行为规则。`,"settings.behavior.page.section.responseStyle":"回复风格","settings.behavior.page.responseStyle.tooltip":"启用后,这些说明会指导助手在每个新对话中的回复方式。它们会随你的第一条消息一起发送,不会更改全局 AGENTS.md 规则。","settings.behavior.page.responseStyle.enableAria":"启用回复风格说明","settings.behavior.page.responseStyle.enable":"向新对话添加回复风格说明","settings.behavior.page.responseStyle.preset":"预设","settings.behavior.page.responseStyle.option.concise":"简洁","settings.behavior.page.responseStyle.option.detailed":"详细","settings.behavior.page.responseStyle.option.mentor":"导师","settings.behavior.page.responseStyle.option.pushback":"反驳","settings.behavior.page.responseStyle.option.noFiller":"无废话","settings.behavior.page.responseStyle.option.matchEnergy":"匹配我的语气","settings.behavior.page.responseStyle.option.warmPeer":"亲近的同事","settings.behavior.page.responseStyle.option.custom":"自定义","settings.behavior.page.responseStyle.customPlaceholder":"编写要添加到第一条消息的说明...","settings.behavior.page.toast.saved":"行为保存成功","settings.behavior.page.toast.saveFailed":"行为保存失败","settings.behavior.page.toast.agentsMdChangedOnDisk":"AGENTS.md 已在 OpenChamber 之外被修改,因此你的编辑未保存。请先复制你的内容,然后重新打开此页面以加载当前文件。","settings.commands.sidebar.title":"命令","settings.commands.sidebar.total":"总计 {count}","settings.commands.sidebar.empty.title":"未配置命令","settings.commands.sidebar.empty.description":"使用上方 + 按钮创建一个","settings.commands.sidebar.section.builtIn":"内置命令","settings.commands.sidebar.section.custom":"自定义命令","settings.commands.sidebar.dialog.deleteTitle":"删除命令","settings.commands.sidebar.dialog.resetTitle":"重置命令","settings.commands.sidebar.dialog.deleteDescription":"确定要删除命令“{name}”吗?","settings.commands.sidebar.dialog.resetDescription":"确定要将命令“{name}”重置为默认配置吗?","settings.commands.sidebar.renameDialog.title":"重命名命令","settings.commands.sidebar.renameDialog.description":"为命令“/{name}”输入新名称","settings.commands.sidebar.renameDialog.placeholder":"新命令名称...","settings.commands.sidebar.toast.builtInCannotDelete":"内置命令无法删除","settings.commands.sidebar.toast.commandDeleted":"命令“{name}”已删除","settings.commands.sidebar.toast.commandReset":"命令“{name}”已重置为默认值","settings.commands.sidebar.toast.deleteFailed":"删除命令失败","settings.commands.sidebar.toast.resetFailed":"重置命令失败","settings.commands.sidebar.toast.commandNameRequired":"命令名称为必填项","settings.commands.sidebar.toast.commandExists":"已存在同名命令","settings.commands.sidebar.toast.removeOldAfterRenameFailed":"重命名后移除旧命令失败","settings.commands.sidebar.toast.renameFailed":"重命名命令失败","settings.commands.page.toast.templateRequired":"命令模板为必填项","settings.commands.page.toast.created":"命令创建成功","settings.commands.page.toast.updated":"命令更新成功","settings.commands.page.toast.createFailed":"创建命令失败","settings.commands.page.toast.updateFailed":"更新命令失败","settings.commands.page.toast.saveUnexpectedError":"保存时发生错误","settings.commands.page.empty.title":"从侧边栏选择一个命令","settings.commands.page.empty.description":"或新建一个命令","settings.commands.page.title.new":"新建命令","settings.commands.page.subtitle.new":"配置新的斜杠命令","settings.commands.page.subtitle.edit":"编辑命令设置","settings.commands.page.section.identity":"身份","settings.commands.page.section.executionContext":"执行上下文","settings.commands.page.section.template":"命令模板","settings.commands.page.field.commandName":"命令名称","settings.commands.page.field.commandNamePlaceholder":"command-name","settings.commands.page.field.descriptionPlaceholder":"这个命令的作用是什么?","settings.commands.page.field.overrideAgent":"覆盖智能体","settings.commands.page.field.templatePlaceholder":`在此输入命令模板...
4
4