dsh-coding-sidebar 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +2 -2
  2. package/lib/client-editor.js +436 -227
  3. package/lib/client-registry.js +639 -7397
  4. package/lib/client-terminal.js +239 -187
  5. package/lib/client.js +644 -7402
  6. package/lib/index.js +367 -67
  7. package/lib/types/agent-pty.d.ts +62 -4
  8. package/lib/types/bundle-route.d.ts +1 -1
  9. package/lib/types/client/EditorHost.d.ts +1 -1
  10. package/lib/types/client/FileTree.d.ts +2 -2
  11. package/lib/types/client/TreePanel.d.ts +1 -1
  12. package/lib/types/client/chunk-loader.d.ts +1 -1
  13. package/lib/types/client/chunks/locale.d.ts +3 -0
  14. package/lib/types/client/conversation-draft.d.ts +85 -4
  15. package/lib/types/client/locales.d.ts +1 -20
  16. package/lib/types/client/selection-popup.d.ts +58 -0
  17. package/lib/types/client/service.d.ts +1 -1
  18. package/lib/types/client/terminal-font.d.ts +25 -2
  19. package/lib/types/context-types.d.ts +3 -1
  20. package/lib/types/index.d.ts +9 -0
  21. package/lib/types/prefs-shared.d.ts +7 -5
  22. package/lib/types/pty-manager.d.ts +53 -0
  23. package/lib/types/wire.d.ts +6 -2
  24. package/package.json +1 -1
  25. package/src/agent-pty.ts +221 -33
  26. package/src/bundle-route.ts +1 -1
  27. package/src/client/BrowserView.tsx +17 -9
  28. package/src/client/EditorHost.tsx +1 -1
  29. package/src/client/FileTree.tsx +4 -4
  30. package/src/client/Sidebar.tsx +41 -22
  31. package/src/client/TerminalView.tsx +13 -0
  32. package/src/client/TextEditor.tsx +27 -45
  33. package/src/client/TreePanel.tsx +16 -1
  34. package/src/client/chunk-loader.ts +1 -1
  35. package/src/client/chunks/locale.tsx +60 -0
  36. package/src/client/conversation-draft.ts +233 -7
  37. package/src/client/index.tsx +19 -8
  38. package/src/client/locales-ar.ts +5 -4
  39. package/src/client/locales-de.ts +5 -4
  40. package/src/client/locales-fr.ts +5 -4
  41. package/src/client/locales-hi.ts +5 -4
  42. package/src/client/locales-id.ts +5 -4
  43. package/src/client/locales-it.ts +5 -4
  44. package/src/client/locales-ja.ts +5 -4
  45. package/src/client/locales-ko.ts +5 -4
  46. package/src/client/locales-nl.ts +5 -4
  47. package/src/client/locales-pl.ts +5 -4
  48. package/src/client/locales-pt.ts +5 -4
  49. package/src/client/locales-ru.ts +5 -4
  50. package/src/client/locales-sv.ts +5 -4
  51. package/src/client/locales-th.ts +5 -4
  52. package/src/client/locales-tr.ts +5 -4
  53. package/src/client/locales-vi.ts +5 -4
  54. package/src/client/locales-zh-HK.ts +5 -4
  55. package/src/client/locales-zh-MO.ts +5 -4
  56. package/src/client/locales-zh-TW.ts +5 -4
  57. package/src/client/locales.ts +17 -51
  58. package/src/client/selection-popup.ts +155 -0
  59. package/src/client/service.ts +1 -1
  60. package/src/client/state.ts +14 -7
  61. package/src/client/terminal-font.ts +34 -3
  62. package/src/context-types.ts +3 -2
  63. package/src/git.ts +17 -1
  64. package/src/index.ts +39 -6
  65. package/src/open-external.ts +3 -4
  66. package/src/prefs-shared.ts +7 -5
  67. package/src/pty-manager.ts +176 -5
  68. package/src/sidechat-routes.ts +13 -1
  69. package/src/tools.ts +24 -6
  70. package/src/wire.ts +3 -0
@@ -7363,6 +7363,7 @@ globalThis.__dshChunks__["terminal"] = (require) => {
7363
7363
  terminalDepsFailed: "终端依赖 node-pty 加载失败",
7364
7364
  terminalDepsHint: "在 DSH 所在环境的终端或 cmd 中执行以下命令修复,然后点重试(node-pty 与 DSH 核心保持同一版本):",
7365
7365
  terminalDepsProfile: "(检测到 profile:{profile})",
7366
+ terminalShellNotFound: "未找到配置的 Shell:{name},请到 设置 → 侧边卡片 → 终端 检查 Shell 路径",
7366
7367
  refresh: "刷新",
7367
7368
  refreshUnsavedConfirm: "文件已在磁盘更新,刷新将丢弃未保存编辑。继续吗?",
7368
7369
  save: "保存",
@@ -7486,10 +7487,10 @@ globalThis.__dshChunks__["terminal"] = (require) => {
7486
7487
  settingsConflict: "设置已被其他窗口修改,请重试",
7487
7488
  binaryNoPreview: "此文件类型不支持预览",
7488
7489
  downloadToView: "下载查看",
7489
- settingsSubagentTitle: "检测到子代理时自动展开任务管理页",
7490
- settingsSubagentDesc: "当前会话产生新的子代理时,自动展开侧边栏并打开任务管理页;关闭后需手动打开",
7491
- settingsJobsTitle: "有新后台任务时自动展开后台任务页",
7492
- settingsJobsDesc: "当前会话出现新的后台任务时,自动展开侧边栏并打开后台任务页(每个新任务都会触发);关闭后需手动打开",
7490
+ settingsSubagentTitle: "检测到子代理时自动激活任务管理页",
7491
+ settingsSubagentDesc: "当前会话产生新的子代理时,自动激活任务管理页;宽屏同时展开侧边栏,窄屏不强制展开全屏抽屉;关闭后需手动打开",
7492
+ settingsJobsTitle: "有新后台任务时自动激活后台任务页",
7493
+ settingsJobsDesc: "当前会话出现新的后台任务时,自动激活后台任务页(每个新任务都会触发);宽屏同时展开侧边栏,窄屏不强制展开全屏抽屉;关闭后需手动打开",
7493
7494
  settingsToolsTitle: "为模型注入终端工具",
7494
7495
  settingsToolsDesc: "开启后,模型可通过 terminal_create 等 8 个工具创建并操作侧边栏终端(默认关闭)",
7495
7496
  settingsFontFamilyTitle: "终端字体",
@@ -7698,6 +7699,7 @@ globalThis.__dshChunks__["terminal"] = (require) => {
7698
7699
  terminalDepsFailed: "Terminal dependency node-pty failed to load",
7699
7700
  terminalDepsHint: "Run the command below in a terminal or cmd on the DSH machine to repair it, then retry (node-pty stays in sync with the DSH core version):",
7700
7701
  terminalDepsProfile: " (detected profile: {profile})",
7702
+ terminalShellNotFound: "Configured shell not found: {name} — check the shell path under Settings → Side card → Terminal",
7701
7703
  refresh: "Refresh",
7702
7704
  refreshUnsavedConfirm: "The file changed on disk. Refreshing will discard unsaved edits. Continue?",
7703
7705
  save: "Save",
@@ -7821,10 +7823,10 @@ globalThis.__dshChunks__["terminal"] = (require) => {
7821
7823
  settingsConflict: "The setting changed in another window — please retry",
7822
7824
  binaryNoPreview: "This file type cannot be previewed",
7823
7825
  downloadToView: "Download to view",
7824
- settingsSubagentTitle: "Auto-open the Tasks page when a subagent appears",
7825
- settingsSubagentDesc: "Expand the side card and open the Tasks page when the current conversation spawns a new subagent; turn off to open it manually",
7826
- settingsJobsTitle: "Auto-open the Jobs page on a new background job",
7827
- settingsJobsDesc: "Expand the side card and open the Jobs page whenever a new background job appears for the current conversation (every new job triggers); turn off to open it manually",
7826
+ settingsSubagentTitle: "Auto-activate the Tasks page when a subagent appears",
7827
+ settingsSubagentDesc: "Activate the Tasks page when the current conversation spawns a new subagent; on wide screens the side card expands with it, narrow screens never force the full-screen drawer; turn off to open it manually",
7828
+ settingsJobsTitle: "Auto-activate the Jobs page on a new background job",
7829
+ settingsJobsDesc: "Activate the Jobs page whenever a new background job appears for the current conversation (every new job triggers); on wide screens the side card expands with it, narrow screens never force the full-screen drawer; turn off to open it manually",
7828
7830
  settingsToolsTitle: "Inject terminal tools for the model",
7829
7831
  settingsToolsDesc: "When enabled, the model can create and drive sidebar terminals through the 8 terminal_* tools (off by default)",
7830
7832
  settingsFontFamilyTitle: "Terminal font family",
@@ -8329,6 +8331,16 @@ globalThis.__dshChunks__["terminal"] = (require) => {
8329
8331
  observer.disconnect();
8330
8332
  };
8331
8333
  }
8334
+ //#endregion
8335
+ //#region src/client/terminal-font.ts
8336
+ /**
8337
+ * Terminal font resolution: the user's custom font prefs (SidebarPrefs,
8338
+ * configured under the terminal card's secondary settings) turned into the
8339
+ * xterm options. Kept as a pure module (no DOM, no xterm) so the fallback
8340
+ * chain and clamping are unit-testable without mounting a terminal.
8341
+ */
8342
+ /** The built-in fallback stack when neither the user nor the theme sets one. */
8343
+ const DEFAULT_TERMINAL_FONT_FAMILY = "\"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace";
8332
8344
  /**
8333
8345
  * Icon fonts appended to whichever base stack wins, so shell prompts that
8334
8346
  * draw glyphs from the Nerd Font Private Use Areas resolve to a real glyph
@@ -8520,11 +8532,41 @@ globalThis.__dshChunks__["terminal"] = (require) => {
8520
8532
  return trimmed;
8521
8533
  }
8522
8534
  /**
8535
+ * Guarantee the stack ends in a generic family, so a font the browser cannot
8536
+ * resolve degrades to a monospace one.
8537
+ *
8538
+ * Without this a stack of unresolvable names (a misspelled family, or one only
8539
+ * installed on the machine running the shell rather than the one running the
8540
+ * browser) falls through to the browser's *standard* font, which is
8541
+ * proportional — xterm then measures its cell from a proportional advance and
8542
+ * the whole grid breaks, rather than merely losing the requested typeface.
8543
+ *
8544
+ * This does not sniff whether the named families exist (an explicit non-goal
8545
+ * of the terminal font design): it only terminates the stack. A stack that
8546
+ * already names a generic family is returned untouched, so a user who
8547
+ * deliberately wrote one keeps it. Generics are matched unquoted only — a
8548
+ * quoted `"monospace"` is a family *name*, not the keyword.
8549
+ *
8550
+ * @param stack - the resolved font-family value.
8551
+ * @returns the stack, ending in a generic family.
8552
+ */
8553
+ function withMonospaceFallback(stack) {
8554
+ const families = splitFamilies(stack);
8555
+ if (families.length === 0) return DEFAULT_TERMINAL_FONT_FAMILY;
8556
+ const only = families.length === 1 ? families[0] : void 0;
8557
+ if (only !== void 0 && CSS_WIDE_KEYWORDS.has(only.toLowerCase())) return DEFAULT_TERMINAL_FONT_FAMILY;
8558
+ if (families.some((family) => GENERIC_FAMILIES.has(family.toLowerCase()))) return families.join(", ");
8559
+ return `${families.join(", ")}, monospace`;
8560
+ }
8561
+ /**
8523
8562
  * Resolve the xterm font options for the given prefs.
8524
8563
  *
8525
8564
  * The base family keeps its existing precedence — user pref > theme code
8526
- * font > built-in stack — and then {@link withIconFontFallbacks} tops it up
8527
- * so prompt icons resolve regardless of which base won.
8565
+ * font > built-in stack. {@link withMonospaceFallback} then terminates the
8566
+ * stack with a generic family so an unresolvable name degrades to a
8567
+ * monospace instead of the proportional standard font, and finally
8568
+ * {@link withIconFontFallbacks} tops it up so prompt icons resolve
8569
+ * regardless of which base won.
8528
8570
  *
8529
8571
  * @param prefs - the current side card preferences.
8530
8572
  * @param themeFontFamily - the app's theme code font (`--ds-font-family-code`
@@ -8533,7 +8575,7 @@ globalThis.__dshChunks__["terminal"] = (require) => {
8533
8575
  */
8534
8576
  function resolveTerminalFont(prefs, themeFontFamily) {
8535
8577
  return {
8536
- fontFamily: withIconFontFallbacks(usableBase(prefs.terminalFontFamily) || usableBase(themeFontFamily) || "\"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace"),
8578
+ fontFamily: withIconFontFallbacks(withMonospaceFallback(usableBase(prefs.terminalFontFamily) || usableBase(themeFontFamily) || "\"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace")),
8537
8579
  fontSize: clampTerminalFontSize(prefs.terminalFontSize)
8538
8580
  };
8539
8581
  }
@@ -8711,207 +8753,207 @@ globalThis.__dshChunks__["terminal"] = (require) => {
8711
8753
  document.head.appendChild(tag);
8712
8754
  }
8713
8755
  var sidebar_module_css_default = {
8714
- "dropLeft": "S5HVoW_dropLeft",
8715
- "terminalDepsActions": "S5HVoW_terminalDepsActions",
8716
- "toggleCluster": "S5HVoW_toggleCluster",
8717
- "tabTitle": "S5HVoW_tabTitle",
8718
- "explorerEmpty": "S5HVoW_explorerEmpty",
8719
- "editorTreePanelFull": "S5HVoW_editorTreePanelFull",
8720
- "producedChip": "S5HVoW_producedChip",
8721
- "openWithChevron": "S5HVoW_openWithChevron",
8722
- "gitCommit": "S5HVoW_gitCommit",
8723
8756
  "floatTitle": "S5HVoW_floatTitle",
8724
- "gitDiffLine": "S5HVoW_gitDiffLine",
8725
- "editorSearchHint": "S5HVoW_editorSearchHint",
8726
- "gitDiffFileChevron": "S5HVoW_gitDiffFileChevron",
8727
- "gitName": "S5HVoW_gitName",
8757
+ "tabBar": "S5HVoW_tabBar",
8758
+ "editorBanner": "S5HVoW_editorBanner",
8759
+ "openWithPin": "S5HVoW_openWithPin",
8760
+ "terminalRepairCommand": "S5HVoW_terminalRepairCommand",
8761
+ "editorCm": "S5HVoW_editorCm",
8728
8762
  "gitPlaceholder": "S5HVoW_gitPlaceholder",
8729
- "gitDiffFileTag": "S5HVoW_gitDiffFileTag",
8763
+ "gitCommitInput": "S5HVoW_gitCommitInput",
8764
+ "gitCommit": "S5HVoW_gitCommit",
8765
+ "editorBody": "S5HVoW_editorBody",
8766
+ "browserBlocked": "S5HVoW_browserBlocked",
8767
+ "tabBarPlus": "S5HVoW_tabBarPlus",
8768
+ "gitDiffTabTitle": "S5HVoW_gitDiffTabTitle",
8769
+ "editorTreeResize": "S5HVoW_editorTreeResize",
8770
+ "producedLabel": "S5HVoW_producedLabel",
8771
+ "sandboxStatus": "S5HVoW_sandboxStatus",
8772
+ "dropLeft": "S5HVoW_dropLeft",
8773
+ "splitCol": "S5HVoW_splitCol",
8774
+ "tabClose": "S5HVoW_tabClose",
8775
+ "editorTreeToggleActive": "S5HVoW_editorTreeToggleActive",
8776
+ "editorSearchInput": "S5HVoW_editorSearchInput",
8777
+ "divider": "S5HVoW_divider",
8778
+ "terminal": "S5HVoW_terminal",
8730
8779
  "gitHeader": "S5HVoW_gitHeader",
8731
- "gitLogHash": "S5HVoW_gitLogHash",
8780
+ "gitWorktreeLabel": "S5HVoW_gitWorktreeLabel",
8781
+ "gitBadge": "S5HVoW_gitBadge",
8782
+ "editorBinaryNotice": "S5HVoW_editorBinaryNotice",
8783
+ "splitRow": "S5HVoW_splitRow",
8784
+ "explorerBroken": "S5HVoW_explorerBroken",
8785
+ "uploadOverlay": "S5HVoW_uploadOverlay",
8786
+ "uploadDropZone": "S5HVoW_uploadDropZone",
8787
+ "selectionPopup": "S5HVoW_selectionPopup",
8788
+ "gitDiffFileTag": "S5HVoW_gitDiffFileTag",
8789
+ "tabTitle": "S5HVoW_tabTitle",
8790
+ "gitDiffHunkHeader": "S5HVoW_gitDiffHunkHeader",
8791
+ "openWithLabel": "S5HVoW_openWithLabel",
8792
+ "tabBarDrop": "S5HVoW_tabBarDrop",
8793
+ "editorTreeSearch": "S5HVoW_editorTreeSearch",
8794
+ "producedRow": "S5HVoW_producedRow",
8795
+ "gitDiffAdd": "S5HVoW_gitDiffAdd",
8796
+ "toggleCluster": "S5HVoW_toggleCluster",
8797
+ "dropUp": "S5HVoW_dropUp",
8798
+ "explorerCopied": "S5HVoW_explorerCopied",
8799
+ "dsh-toc-flash": "S5HVoW_dsh-toc-flash",
8800
+ "uploadOverlayStatus": "S5HVoW_uploadOverlayStatus",
8801
+ "dsh-row-in": "S5HVoW_dsh-row-in",
8802
+ "floatDropHintLabel": "S5HVoW_floatDropHintLabel",
8803
+ "explorerRowRevealed": "S5HVoW_explorerRowRevealed",
8804
+ "sandboxStatusOn": "S5HVoW_sandboxStatusOn",
8805
+ "sandboxDot": "S5HVoW_sandboxDot",
8732
8806
  "uploadOverlayCancel": "S5HVoW_uploadOverlayCancel",
8733
- "terminalWrap": "S5HVoW_terminalWrap",
8734
- "iconButton": "S5HVoW_iconButton",
8735
- "dropCenter": "S5HVoW_dropCenter",
8807
+ "uploadDropChatHint": "S5HVoW_uploadDropChatHint",
8808
+ "uploadDropZoneText": "S5HVoW_uploadDropZoneText",
8809
+ "sandboxStatusOff": "S5HVoW_sandboxStatusOff",
8736
8810
  "paneEmptyCards": "S5HVoW_paneEmptyCards",
8737
- "tabBoundaryError": "S5HVoW_tabBoundaryError",
8738
- "browserBar": "S5HVoW_browserBar",
8739
- "browserMessage": "S5HVoW_browserMessage",
8740
- "dividerActive": "S5HVoW_dividerActive",
8811
+ "explorerName": "S5HVoW_explorerName",
8812
+ "gitDiffTab": "S5HVoW_gitDiffTab",
8813
+ "pane": "S5HVoW_pane",
8814
+ "gitDiffFileChevronExpanded": "S5HVoW_gitDiffFileChevronExpanded",
8815
+ "terminalBanner": "S5HVoW_terminalBanner",
8816
+ "gitConfirmDesc": "S5HVoW_gitConfirmDesc",
8817
+ "gitLogRow": "S5HVoW_gitLogRow",
8818
+ "gitLogRef": "S5HVoW_gitLogRef",
8819
+ "editorHeader": "S5HVoW_editorHeader",
8820
+ "gitLogMeta": "S5HVoW_gitLogMeta",
8821
+ "terminalDepsNote": "S5HVoW_terminalDepsNote",
8822
+ "gitDiffCode": "S5HVoW_gitDiffCode",
8823
+ "gitLogMore": "S5HVoW_gitLogMore",
8824
+ "browserLiveCanvas": "S5HVoW_browserLiveCanvas",
8825
+ "editorError": "S5HVoW_editorError",
8826
+ "gitLogSubject": "S5HVoW_gitLogSubject",
8827
+ "paneTab": "S5HVoW_paneTab",
8741
8828
  "editorTreeDock": "S5HVoW_editorTreeDock",
8742
- "splitCol": "S5HVoW_splitCol",
8743
- "editorMain": "S5HVoW_editorMain",
8744
8829
  "editorTreePanel": "S5HVoW_editorTreePanel",
8745
- "browserFrame": "S5HVoW_browserFrame",
8746
- "terminalBannerUrl": "S5HVoW_terminalBannerUrl",
8747
- "paneDrop": "S5HVoW_paneDrop",
8748
- "gitSection": "S5HVoW_gitSection",
8749
- "gitBadge": "S5HVoW_gitBadge",
8750
- "gitDiffAdd": "S5HVoW_gitDiffAdd",
8751
- "dropDown": "S5HVoW_dropDown",
8752
- "uploadOverlay": "S5HVoW_uploadOverlay",
8830
+ "browserMessage": "S5HVoW_browserMessage",
8831
+ "explorerRow": "S5HVoW_explorerRow",
8832
+ "gitDiffNum": "S5HVoW_gitDiffNum",
8833
+ "tabBoundaryError": "S5HVoW_tabBoundaryError",
8834
+ "tab": "S5HVoW_tab",
8835
+ "gitDiffFilePath": "S5HVoW_gitDiffFilePath",
8836
+ "uploadOverlayTitle": "S5HVoW_uploadOverlayTitle",
8837
+ "gitLogHash": "S5HVoW_gitLogHash",
8838
+ "editorBinary": "S5HVoW_editorBinary",
8839
+ "terminalDepsTitle": "S5HVoW_terminalDepsTitle",
8840
+ "explorerBody": "S5HVoW_explorerBody",
8841
+ "explorerSymlink": "S5HVoW_explorerSymlink",
8842
+ "floatWindow": "S5HVoW_floatWindow",
8753
8843
  "terminalRetry": "S5HVoW_terminalRetry",
8844
+ "uploadDropHero": "S5HVoW_uploadDropHero",
8845
+ "dropDown": "S5HVoW_dropDown",
8846
+ "browserInput": "S5HVoW_browserInput",
8754
8847
  "gitDiffExpand": "S5HVoW_gitDiffExpand",
8755
- "divider": "S5HVoW_divider",
8756
- "browserStart": "S5HVoW_browserStart",
8757
- "explorerBroken": "S5HVoW_explorerBroken",
8758
- "editorBinary": "S5HVoW_editorBinary",
8759
8848
  "tabList": "S5HVoW_tabList",
8760
- "dropRight": "S5HVoW_dropRight",
8849
+ "gitDiff": "S5HVoW_gitDiff",
8850
+ "floatWindowDragging": "S5HVoW_floatWindowDragging",
8851
+ "explorerError": "S5HVoW_explorerError",
8852
+ "gitError": "S5HVoW_gitError",
8853
+ "gitDiffFileOld": "S5HVoW_gitDiffFileOld",
8854
+ "panelResizeActive": "S5HVoW_panelResizeActive",
8855
+ "uploadDropZonePill": "S5HVoW_uploadDropZonePill",
8856
+ "editorPlaceholder": "S5HVoW_editorPlaceholder",
8857
+ "paneCard": "S5HVoW_paneCard",
8858
+ "split": "S5HVoW_split",
8859
+ "browserBar": "S5HVoW_browserBar",
8860
+ "boundaryError": "S5HVoW_boundaryError",
8861
+ "gitDiffLine": "S5HVoW_gitDiffLine",
8862
+ "terminalDepsHint": "S5HVoW_terminalDepsHint",
8863
+ "explorerRef": "S5HVoW_explorerRef",
8864
+ "iconButton": "S5HVoW_iconButton",
8761
8865
  "tabBadge": "S5HVoW_tabBadge",
8762
- "floatHeader": "S5HVoW_floatHeader",
8763
- "editorSearchResult": "S5HVoW_editorSearchResult",
8764
8866
  "gitRowSelected": "S5HVoW_gitRowSelected",
8765
- "terminalBanner": "S5HVoW_terminalBanner",
8766
- "gitLogMore": "S5HVoW_gitLogMore",
8767
- "openWithLabel": "S5HVoW_openWithLabel",
8768
- "editorTreeResize": "S5HVoW_editorTreeResize",
8769
- "floatResize": "S5HVoW_floatResize",
8770
- "editorSearchInput": "S5HVoW_editorSearchInput",
8771
- "browserLiveStatus": "S5HVoW_browserLiveStatus",
8772
- "openWithPin": "S5HVoW_openWithPin",
8773
- "gitLogLine2": "S5HVoW_gitLogLine2",
8774
- "workbench": "S5HVoW_workbench",
8775
- "gitError": "S5HVoW_gitError",
8776
- "gitWorktreeRow": "S5HVoW_gitWorktreeRow",
8777
- "gitWorktreeLabel": "S5HVoW_gitWorktreeLabel",
8778
- "gitDiffNum": "S5HVoW_gitDiffNum",
8867
+ "floatHeader": "S5HVoW_floatHeader",
8868
+ "splitChild": "S5HVoW_splitChild",
8869
+ "floatContent": "S5HVoW_floatContent",
8779
8870
  "dividerCol": "S5HVoW_dividerCol",
8780
- "uploadDropChatHint": "S5HVoW_uploadDropChatHint",
8781
- "sandboxAction": "S5HVoW_sandboxAction",
8782
- "explorerBody": "S5HVoW_explorerBody",
8783
- "gitDiff": "S5HVoW_gitDiff",
8784
- "selectionPopup": "S5HVoW_selectionPopup",
8785
8871
  "terminalDepsBanner": "S5HVoW_terminalDepsBanner",
8786
- "browserInput": "S5HVoW_browserInput",
8787
- "floatWindow": "S5HVoW_floatWindow",
8788
- "sandboxDot": "S5HVoW_sandboxDot",
8789
- "gitBranchSelect": "S5HVoW_gitBranchSelect",
8790
- "tabBarPlus": "S5HVoW_tabBarPlus",
8791
- "explorerRow": "S5HVoW_explorerRow",
8792
- "panelBody": "S5HVoW_panelBody",
8793
- "editorTreeToggleActive": "S5HVoW_editorTreeToggleActive",
8794
- "orphanedType": "S5HVoW_orphanedType",
8872
+ "terminalBannerUrl": "S5HVoW_terminalBannerUrl",
8873
+ "gitDiffMeta": "S5HVoW_gitDiffMeta",
8874
+ "browserBlockedTitle": "S5HVoW_browserBlockedTitle",
8795
8875
  "panelResize": "S5HVoW_panelResize",
8796
- "splitRow": "S5HVoW_splitRow",
8797
- "tab": "S5HVoW_tab",
8798
- "terminalDepsTitle": "S5HVoW_terminalDepsTitle",
8799
- "editorBinaryNotice": "S5HVoW_editorBinaryNotice",
8800
- "panelResizeActive": "S5HVoW_panelResizeActive",
8876
+ "dropRight": "S5HVoW_dropRight",
8877
+ "dropCenter": "S5HVoW_dropCenter",
8878
+ "paneTabHidden": "S5HVoW_paneTabHidden",
8879
+ "editorSearchResult": "S5HVoW_editorSearchResult",
8880
+ "tabActive": "S5HVoW_tabActive",
8881
+ "explorerHidden": "S5HVoW_explorerHidden",
8882
+ "editorTreePanelFull": "S5HVoW_editorTreePanelFull",
8883
+ "browserStart": "S5HVoW_browserStart",
8884
+ "workbench": "S5HVoW_workbench",
8885
+ "editorStatus": "S5HVoW_editorStatus",
8886
+ "terminalWrap": "S5HVoW_terminalWrap",
8887
+ "gitSectionHeader": "S5HVoW_gitSectionHeader",
8888
+ "gitLink": "S5HVoW_gitLink",
8889
+ "gitRow": "S5HVoW_gitRow",
8890
+ "explorerEmpty": "S5HVoW_explorerEmpty",
8891
+ "gitDiffTabHeader": "S5HVoW_gitDiffTabHeader",
8892
+ "gitDiffFile": "S5HVoW_gitDiffFile",
8893
+ "explorerRoot": "S5HVoW_explorerRoot",
8894
+ "editorDownloadLink": "S5HVoW_editorDownloadLink",
8895
+ "terminalDepsActions": "S5HVoW_terminalDepsActions",
8896
+ "browserLive": "S5HVoW_browserLive",
8897
+ "toggleButton": "S5HVoW_toggleButton",
8898
+ "floatDropHint": "S5HVoW_floatDropHint",
8899
+ "dropOverlay": "S5HVoW_dropOverlay",
8900
+ "explorer": "S5HVoW_explorer",
8901
+ "gitDiffFileChevron": "S5HVoW_gitDiffFileChevron",
8902
+ "gitDiffDel": "S5HVoW_gitDiffDel",
8903
+ "gitLogLine2": "S5HVoW_gitLogLine2",
8801
8904
  "uploadDropChatCard": "S5HVoW_uploadDropChatCard",
8802
- "explorerError": "S5HVoW_explorerError",
8803
- "browserBlockedButton": "S5HVoW_browserBlockedButton",
8804
- "gitDiffHunkHeader": "S5HVoW_gitDiffHunkHeader",
8805
- "producedMore": "S5HVoW_producedMore",
8806
- "browser": "S5HVoW_browser",
8807
- "floatContent": "S5HVoW_floatContent",
8808
- "dividerRow": "S5HVoW_dividerRow",
8809
- "dropUp": "S5HVoW_dropUp",
8810
- "uploadOverlayProgressFill": "S5HVoW_uploadOverlayProgressFill",
8811
- "browserBlockedActions": "S5HVoW_browserBlockedActions",
8812
- "uploadOverlayCard": "S5HVoW_uploadOverlayCard",
8813
- "browserBlockedTitle": "S5HVoW_browserBlockedTitle",
8814
- "gitDiffFileOld": "S5HVoW_gitDiffFileOld",
8815
- "gitDiffMeta": "S5HVoW_gitDiffMeta",
8816
- "floatWindowDragging": "S5HVoW_floatWindowDragging",
8817
- "editor": "S5HVoW_editor",
8818
- "sandboxStatus": "S5HVoW_sandboxStatus",
8819
- "browserBlocked": "S5HVoW_browserBlocked",
8820
- "pinnedTab": "S5HVoW_pinnedTab",
8821
- "explorerRowRevealed": "S5HVoW_explorerRowRevealed",
8822
- "gitLogRef": "S5HVoW_gitLogRef",
8823
- "gitDiffHunkSection": "S5HVoW_gitDiffHunkSection",
8905
+ "gitBranchSelect": "S5HVoW_gitBranchSelect",
8906
+ "editorMain": "S5HVoW_editorMain",
8824
8907
  "gitRowMain": "S5HVoW_gitRowMain",
8825
- "gitDiffCode": "S5HVoW_gitDiffCode",
8826
- "gitDiffTab": "S5HVoW_gitDiffTab",
8827
- "panel": "S5HVoW_panel",
8828
- "explorerHeader": "S5HVoW_explorerHeader",
8829
- "dirtyDot": "S5HVoW_dirtyDot",
8830
- "editorError": "S5HVoW_editorError",
8831
- "gitDiffDel": "S5HVoW_gitDiffDel",
8832
- "producedRow": "S5HVoW_producedRow",
8908
+ "gitLogLine1": "S5HVoW_gitLogLine1",
8909
+ "browserLiveTarget": "S5HVoW_browserLiveTarget",
8910
+ "browserBlockedDesc": "S5HVoW_browserBlockedDesc",
8911
+ "sandboxAction": "S5HVoW_sandboxAction",
8912
+ "producedChip": "S5HVoW_producedChip",
8913
+ "editorSearchHint": "S5HVoW_editorSearchHint",
8914
+ "producedMore": "S5HVoW_producedMore",
8915
+ "dividerActive": "S5HVoW_dividerActive",
8916
+ "openWithChevron": "S5HVoW_openWithChevron",
8917
+ "paneContent": "S5HVoW_paneContent",
8918
+ "paneDrop": "S5HVoW_paneDrop",
8833
8919
  "editorPathInput": "S5HVoW_editorPathInput",
8834
- "gitDiffMetaText": "S5HVoW_gitDiffMetaText",
8835
- "gitLogRow": "S5HVoW_gitLogRow",
8836
- "browserLive": "S5HVoW_browserLive",
8837
- "gitDiffTabTitle": "S5HVoW_gitDiffTabTitle",
8838
- "tabBarDrop": "S5HVoW_tabBarDrop",
8839
8920
  "floatClose": "S5HVoW_floatClose",
8840
- "tabClose": "S5HVoW_tabClose",
8841
- "explorerName": "S5HVoW_explorerName",
8842
- "editorTitle": "S5HVoW_editorTitle",
8843
- "browserBlockedDesc": "S5HVoW_browserBlockedDesc",
8844
- "gitDiffCtx": "S5HVoW_gitDiffCtx",
8845
- "uploadOverlayTitle": "S5HVoW_uploadOverlayTitle",
8846
- "browserLiveCanvas": "S5HVoW_browserLiveCanvas",
8847
- "boundaryError": "S5HVoW_boundaryError",
8848
- "gitConfirmDesc": "S5HVoW_gitConfirmDesc",
8849
- "gitCommitInput": "S5HVoW_gitCommitInput",
8850
- "dsh-toc-flash": "S5HVoW_dsh-toc-flash",
8851
- "editorBanner": "S5HVoW_editorBanner",
8852
- "openWithName": "S5HVoW_openWithName",
8853
- "pane": "S5HVoW_pane",
8854
- "tabActive": "S5HVoW_tabActive",
8855
- "split": "S5HVoW_split",
8856
- "explorerSymlink": "S5HVoW_explorerSymlink",
8857
- "uploadOverlayProgress": "S5HVoW_uploadOverlayProgress",
8858
- "toggleButton": "S5HVoW_toggleButton",
8859
- "editorBody": "S5HVoW_editorBody",
8860
- "editorDownloadLink": "S5HVoW_editorDownloadLink",
8861
- "terminalDepsHint": "S5HVoW_terminalDepsHint",
8862
- "dropOverlay": "S5HVoW_dropOverlay",
8863
- "paneTab": "S5HVoW_paneTab",
8864
- "uploadOverlayStatus": "S5HVoW_uploadOverlayStatus",
8865
- "terminal": "S5HVoW_terminal",
8866
- "gitLogMeta": "S5HVoW_gitLogMeta",
8867
- "dsh-row-in": "S5HVoW_dsh-row-in",
8868
8921
  "gitCommitButton": "S5HVoW_gitCommitButton",
8869
- "uploadDropZone": "S5HVoW_uploadDropZone",
8870
- "paneTabHidden": "S5HVoW_paneTabHidden",
8871
- "explorerRef": "S5HVoW_explorerRef",
8872
- "gitDiffHunk": "S5HVoW_gitDiffHunk",
8873
- "paneCard": "S5HVoW_paneCard",
8874
- "terminalDepsCommandRow": "S5HVoW_terminalDepsCommandRow",
8875
- "uploadDropZonePill": "S5HVoW_uploadDropZonePill",
8922
+ "orphanedType": "S5HVoW_orphanedType",
8923
+ "panel": "S5HVoW_panel",
8924
+ "panelBody": "S5HVoW_panelBody",
8925
+ "uploadOverlayCard": "S5HVoW_uploadOverlayCard",
8926
+ "uploadOverlayProgress": "S5HVoW_uploadOverlayProgress",
8927
+ "dirtyDot": "S5HVoW_dirtyDot",
8928
+ "gitName": "S5HVoW_gitName",
8929
+ "browserLiveStatus": "S5HVoW_browserLiveStatus",
8930
+ "pinnedTab": "S5HVoW_pinnedTab",
8931
+ "gitEmpty": "S5HVoW_gitEmpty",
8932
+ "explorerHeader": "S5HVoW_explorerHeader",
8876
8933
  "explorerDir": "S5HVoW_explorerDir",
8877
- "sandboxStatusOn": "S5HVoW_sandboxStatusOn",
8878
- "editorCm": "S5HVoW_editorCm",
8879
- "producedLabel": "S5HVoW_producedLabel",
8880
- "explorerCopied": "S5HVoW_explorerCopied",
8881
- "uploadDropHero": "S5HVoW_uploadDropHero",
8882
- "gitDiffFile": "S5HVoW_gitDiffFile",
8883
- "tabBar": "S5HVoW_tabBar",
8884
- "editorStatus": "S5HVoW_editorStatus",
8934
+ "browserBlockedActions": "S5HVoW_browserBlockedActions",
8935
+ "gitDiffHunk": "S5HVoW_gitDiffHunk",
8936
+ "openWithName": "S5HVoW_openWithName",
8937
+ "uploadOverlayProgressFill": "S5HVoW_uploadOverlayProgressFill",
8885
8938
  "git": "S5HVoW_git",
8886
- "editorHeader": "S5HVoW_editorHeader",
8887
- "gitDiffTabHeader": "S5HVoW_gitDiffTabHeader",
8888
- "terminalDepsNote": "S5HVoW_terminalDepsNote",
8889
- "panelHidden": "S5HVoW_panelHidden",
8890
- "sandboxStatusOff": "S5HVoW_sandboxStatusOff",
8891
- "editorPlaceholder": "S5HVoW_editorPlaceholder",
8892
- "floatDropHintLabel": "S5HVoW_floatDropHintLabel",
8893
- "explorer": "S5HVoW_explorer",
8894
- "gitEmpty": "S5HVoW_gitEmpty",
8939
+ "browser": "S5HVoW_browser",
8940
+ "gitWorktreeRow": "S5HVoW_gitWorktreeRow",
8941
+ "gitDiffMetaText": "S5HVoW_gitDiffMetaText",
8942
+ "editorStatusError": "S5HVoW_editorStatusError",
8895
8943
  "openWithPinActive": "S5HVoW_openWithPinActive",
8896
- "explorerRoot": "S5HVoW_explorerRoot",
8944
+ "browserBlockedButton": "S5HVoW_browserBlockedButton",
8897
8945
  "explorerRowDropTarget": "S5HVoW_explorerRowDropTarget",
8898
- "splitChild": "S5HVoW_splitChild",
8899
- "editorStatusError": "S5HVoW_editorStatusError",
8900
- "gitLogSubject": "S5HVoW_gitLogSubject",
8901
- "browserLiveTarget": "S5HVoW_browserLiveTarget",
8902
- "editorTreeSearch": "S5HVoW_editorTreeSearch",
8903
- "terminalRepairCommand": "S5HVoW_terminalRepairCommand",
8904
- "gitSectionHeader": "S5HVoW_gitSectionHeader",
8905
- "gitLink": "S5HVoW_gitLink",
8906
- "gitRow": "S5HVoW_gitRow",
8907
- "floatDropHint": "S5HVoW_floatDropHint",
8908
- "explorerHidden": "S5HVoW_explorerHidden",
8909
8946
  "sandboxStatusText": "S5HVoW_sandboxStatusText",
8910
- "gitDiffFilePath": "S5HVoW_gitDiffFilePath",
8911
- "gitDiffFileChevronExpanded": "S5HVoW_gitDiffFileChevronExpanded",
8912
- "gitLogLine1": "S5HVoW_gitLogLine1",
8913
- "uploadDropZoneText": "S5HVoW_uploadDropZoneText",
8914
- "paneContent": "S5HVoW_paneContent"
8947
+ "gitDiffCtx": "S5HVoW_gitDiffCtx",
8948
+ "terminalDepsCommandRow": "S5HVoW_terminalDepsCommandRow",
8949
+ "editor": "S5HVoW_editor",
8950
+ "panelHidden": "S5HVoW_panelHidden",
8951
+ "browserFrame": "S5HVoW_browserFrame",
8952
+ "gitSection": "S5HVoW_gitSection",
8953
+ "gitDiffHunkSection": "S5HVoW_gitDiffHunkSection",
8954
+ "floatResize": "S5HVoW_floatResize",
8955
+ "dividerRow": "S5HVoW_dividerRow",
8956
+ "editorTitle": "S5HVoW_editorTitle"
8915
8957
  };
8916
8958
  //#endregion
8917
8959
  //#region src/client/TerminalView.tsx
@@ -8958,6 +9000,12 @@ globalThis.__dshChunks__["terminal"] = (require) => {
8958
9000
  */
8959
9001
  const PTY_DEPS_MISSING = "pty-deps-missing";
8960
9002
  /**
9003
+ * The WS close-reason prefix the host sends when the CONFIGURED shell was
9004
+ * not found (mirror of src/index.ts wsCloseReasonOf; wire contract, keep the
9005
+ * literal in lockstep). The view renders a localized, actionable banner.
9006
+ */
9007
+ const SHELL_NOT_FOUND_PREFIX = "shell-not-found:";
9008
+ /**
8961
9009
  * Curated ANSI palettes for the terminal. The surface colors (background,
8962
9010
  * foreground, cursor, selection) ride the theme tokens so the terminal
8963
9011
  * blends with the panel in both schemes; the 16 ANSI colors are the same
@@ -9117,6 +9165,10 @@ globalThis.__dshChunks__["terminal"] = (require) => {
9117
9165
  });
9118
9166
  return;
9119
9167
  }
9168
+ if (event.code === 1011 && event.reason.startsWith(SHELL_NOT_FOUND_PREFIX)) {
9169
+ setFatal(t("terminalShellNotFound", { name: event.reason.slice(16) || "?" }));
9170
+ return;
9171
+ }
9120
9172
  if (event.code === 1011 && event.reason !== "") {
9121
9173
  setFatal(event.reason);
9122
9174
  return;