dsh-coding-sidebar 1.0.7 → 1.0.9

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 (81) hide show
  1. package/README.md +2 -2
  2. package/lib/client-editor.js +485 -228
  3. package/lib/client-registry.js +1238 -7583
  4. package/lib/client-terminal.js +345 -189
  5. package/lib/client.js +1213 -7558
  6. package/lib/index.js +518 -69
  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/DiffView.d.ts +33 -1
  10. package/lib/types/client/EditorHost.d.ts +4 -1
  11. package/lib/types/client/FileTree.d.ts +6 -2
  12. package/lib/types/client/TerminalWaitBanner.d.ts +6 -0
  13. package/lib/types/client/TreePanel.d.ts +4 -1
  14. package/lib/types/client/api.d.ts +26 -0
  15. package/lib/types/client/chunk-loader.d.ts +1 -1
  16. package/lib/types/client/chunks/locale.d.ts +3 -0
  17. package/lib/types/client/conversation-draft.d.ts +85 -4
  18. package/lib/types/client/locales.d.ts +13 -20
  19. package/lib/types/client/selection-popup.d.ts +58 -0
  20. package/lib/types/client/service.d.ts +1 -1
  21. package/lib/types/client/state.d.ts +15 -0
  22. package/lib/types/client/terminal-font.d.ts +25 -2
  23. package/lib/types/context-types.d.ts +3 -1
  24. package/lib/types/fs-operations.d.ts +42 -0
  25. package/lib/types/git.d.ts +15 -0
  26. package/lib/types/index.d.ts +9 -0
  27. package/lib/types/prefs-shared.d.ts +7 -5
  28. package/lib/types/pty-manager.d.ts +53 -0
  29. package/lib/types/wire.d.ts +6 -2
  30. package/package.json +1 -1
  31. package/src/agent-pty.ts +221 -33
  32. package/src/bundle-route.ts +1 -1
  33. package/src/client/DiffTab.tsx +10 -1
  34. package/src/client/DiffView.tsx +174 -19
  35. package/src/client/EditorHost.tsx +9 -2
  36. package/src/client/FileTree.tsx +151 -8
  37. package/src/client/Sidebar.tsx +95 -25
  38. package/src/client/TerminalView.tsx +41 -0
  39. package/src/client/TerminalWaitBanner.tsx +32 -0
  40. package/src/client/TextEditor.tsx +27 -45
  41. package/src/client/TreePanel.tsx +22 -2
  42. package/src/client/api.ts +20 -0
  43. package/src/client/chunk-loader.ts +1 -1
  44. package/src/client/chunks/locale.tsx +60 -0
  45. package/src/client/conversation-draft.ts +233 -7
  46. package/src/client/index.tsx +19 -8
  47. package/src/client/locales-ar.ts +17 -4
  48. package/src/client/locales-de.ts +17 -4
  49. package/src/client/locales-fr.ts +17 -4
  50. package/src/client/locales-hi.ts +17 -4
  51. package/src/client/locales-id.ts +17 -4
  52. package/src/client/locales-it.ts +17 -4
  53. package/src/client/locales-ja.ts +17 -4
  54. package/src/client/locales-ko.ts +17 -4
  55. package/src/client/locales-nl.ts +17 -4
  56. package/src/client/locales-pl.ts +17 -4
  57. package/src/client/locales-pt.ts +17 -4
  58. package/src/client/locales-ru.ts +17 -4
  59. package/src/client/locales-sv.ts +17 -4
  60. package/src/client/locales-th.ts +17 -4
  61. package/src/client/locales-tr.ts +17 -4
  62. package/src/client/locales-vi.ts +17 -4
  63. package/src/client/locales-zh-HK.ts +17 -4
  64. package/src/client/locales-zh-MO.ts +17 -4
  65. package/src/client/locales-zh-TW.ts +17 -4
  66. package/src/client/locales.ts +41 -51
  67. package/src/client/selection-popup.ts +155 -0
  68. package/src/client/service.ts +1 -1
  69. package/src/client/sidebar.module.css +68 -0
  70. package/src/client/state.ts +56 -10
  71. package/src/client/terminal-font.ts +34 -3
  72. package/src/context-types.ts +3 -2
  73. package/src/fs-operations.ts +126 -4
  74. package/src/git.ts +56 -3
  75. package/src/index.ts +82 -7
  76. package/src/open-external.ts +3 -4
  77. package/src/prefs-shared.ts +7 -5
  78. package/src/pty-manager.ts +176 -5
  79. package/src/sidechat-routes.ts +13 -1
  80. package/src/tools.ts +24 -6
  81. 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: "保存",
@@ -7427,6 +7428,18 @@ globalThis.__dshChunks__["terminal"] = (require) => {
7427
7428
  producedOpen: "在侧边栏中打开",
7428
7429
  showInFolder: "在文件夹中显示",
7429
7430
  disconnected: "终端连接断开,重连中…",
7431
+ terminalWaitBanner: "Agent 正在等待 {needle}",
7432
+ terminalSkipWait: "跳过等待",
7433
+ gitFoldExpand: "展开 {count} 行上下文",
7434
+ gitFoldLoading: "展开中…",
7435
+ gitFoldFailed: "展开失败",
7436
+ rename: "重命名",
7437
+ renameInvalid: "名称不能为空,且不能包含路径分隔符。",
7438
+ delete: "删除",
7439
+ deleteTitle: "删除「{name}」?",
7440
+ deleteDescFile: "将永久删除该文件,此操作不可撤销。",
7441
+ deleteDescDir: "将永久删除该目录及其全部内容,此操作不可撤销。",
7442
+ dismiss: "关闭",
7430
7443
  exited: "终端进程已退出",
7431
7444
  noSession: "选择一个会话以使用侧边栏",
7432
7445
  pluginNotLoaded: "插件未加载,标签页暂不可用:",
@@ -7486,10 +7499,10 @@ globalThis.__dshChunks__["terminal"] = (require) => {
7486
7499
  settingsConflict: "设置已被其他窗口修改,请重试",
7487
7500
  binaryNoPreview: "此文件类型不支持预览",
7488
7501
  downloadToView: "下载查看",
7489
- settingsSubagentTitle: "检测到子代理时自动展开任务管理页",
7490
- settingsSubagentDesc: "当前会话产生新的子代理时,自动展开侧边栏并打开任务管理页;关闭后需手动打开",
7491
- settingsJobsTitle: "有新后台任务时自动展开后台任务页",
7492
- settingsJobsDesc: "当前会话出现新的后台任务时,自动展开侧边栏并打开后台任务页(每个新任务都会触发);关闭后需手动打开",
7502
+ settingsSubagentTitle: "检测到子代理时自动激活任务管理页",
7503
+ settingsSubagentDesc: "当前会话产生新的子代理时,自动激活任务管理页;宽屏同时展开侧边栏,窄屏不强制展开全屏抽屉;关闭后需手动打开",
7504
+ settingsJobsTitle: "有新后台任务时自动激活后台任务页",
7505
+ settingsJobsDesc: "当前会话出现新的后台任务时,自动激活后台任务页(每个新任务都会触发);宽屏同时展开侧边栏,窄屏不强制展开全屏抽屉;关闭后需手动打开",
7493
7506
  settingsToolsTitle: "为模型注入终端工具",
7494
7507
  settingsToolsDesc: "开启后,模型可通过 terminal_create 等 8 个工具创建并操作侧边栏终端(默认关闭)",
7495
7508
  settingsFontFamilyTitle: "终端字体",
@@ -7698,6 +7711,7 @@ globalThis.__dshChunks__["terminal"] = (require) => {
7698
7711
  terminalDepsFailed: "Terminal dependency node-pty failed to load",
7699
7712
  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
7713
  terminalDepsProfile: " (detected profile: {profile})",
7714
+ terminalShellNotFound: "Configured shell not found: {name} — check the shell path under Settings → Side card → Terminal",
7701
7715
  refresh: "Refresh",
7702
7716
  refreshUnsavedConfirm: "The file changed on disk. Refreshing will discard unsaved edits. Continue?",
7703
7717
  save: "Save",
@@ -7762,6 +7776,18 @@ globalThis.__dshChunks__["terminal"] = (require) => {
7762
7776
  producedOpen: "Open in sidebar",
7763
7777
  showInFolder: "Show in folder",
7764
7778
  disconnected: "Terminal disconnected, reconnecting…",
7779
+ terminalWaitBanner: "Agent is waiting for {needle}",
7780
+ terminalSkipWait: "Skip wait",
7781
+ gitFoldExpand: "Expand {count} context lines",
7782
+ gitFoldLoading: "Expanding…",
7783
+ gitFoldFailed: "Failed to expand",
7784
+ rename: "Rename",
7785
+ renameInvalid: "The name cannot be empty or contain path separators.",
7786
+ delete: "Delete",
7787
+ deleteTitle: "Delete \"{name}\"?",
7788
+ deleteDescFile: "This permanently deletes the file. This cannot be undone.",
7789
+ deleteDescDir: "This permanently deletes the directory and everything inside it. This cannot be undone.",
7790
+ dismiss: "Dismiss",
7765
7791
  exited: "Terminal process exited",
7766
7792
  noSession: "Select a conversation to use the sidebar",
7767
7793
  pluginNotLoaded: "Plugin not loaded; tab unavailable:",
@@ -7821,10 +7847,10 @@ globalThis.__dshChunks__["terminal"] = (require) => {
7821
7847
  settingsConflict: "The setting changed in another window — please retry",
7822
7848
  binaryNoPreview: "This file type cannot be previewed",
7823
7849
  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",
7850
+ settingsSubagentTitle: "Auto-activate the Tasks page when a subagent appears",
7851
+ 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",
7852
+ settingsJobsTitle: "Auto-activate the Jobs page on a new background job",
7853
+ 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
7854
  settingsToolsTitle: "Inject terminal tools for the model",
7829
7855
  settingsToolsDesc: "When enabled, the model can create and drive sidebar terminals through the 8 terminal_* tools (off by default)",
7830
7856
  settingsFontFamilyTitle: "Terminal font family",
@@ -8099,6 +8125,15 @@ globalThis.__dshChunks__["terminal"] = (require) => {
8099
8125
  path,
8100
8126
  content
8101
8127
  })),
8128
+ /** Rename one tree row within its directory (single-segment name; a
8129
+ * destination-existence clash is a 409; symlink rows rename the link). */
8130
+ fsRename: (scope, path, name) => call("fs.rename", scopePayload(scope, {
8131
+ path,
8132
+ name
8133
+ })),
8134
+ /** Delete one tree row permanently (recursive for directories; a symlink
8135
+ * row unlinks the link only). */
8136
+ fsRemove: (scope, path) => call("fs.remove", scopePayload(scope, { path })),
8102
8137
  /** Upload one file's raw bytes into `dir` (keeps the folder tree via
8103
8138
  * `relativePath`); the host streams it under the session workspace. */
8104
8139
  uploadFile: (scope, dir, relativePath, body, signal) => fetchUpload(scope, dir, relativePath, body, signal),
@@ -8120,6 +8155,13 @@ globalThis.__dshChunks__["terminal"] = (require) => {
8120
8155
  }), signal),
8121
8156
  /** Full patch text of one commit (diff display for the history rows). */
8122
8157
  gitCommitDiff: (scope, hash, worktree, signal) => call("git.commit-diff", gitPayload(scope, worktree, { hash }), signal),
8158
+ /** Both sides' full file contents for a diff-fold expansion; a missing
8159
+ * side is null (untracked / deleted) and the view degrades the fold. */
8160
+ gitFoldContents: (scope, opts, worktree, signal) => call("git.fold-contents", gitPayload(scope, worktree, {
8161
+ path: opts.path,
8162
+ ...opts.staged !== void 0 ? { staged: opts.staged } : {},
8163
+ ...opts.hash !== void 0 ? { hash: opts.hash } : {}
8164
+ }), signal),
8123
8165
  /** Discard the worktree changes of one file (the index is untouched). */
8124
8166
  gitDiscard: (scope, path, worktree) => call("git.discard", gitPayload(scope, worktree, { path })),
8125
8167
  /** Revert one commit onto the current branch. */
@@ -8132,6 +8174,9 @@ globalThis.__dshChunks__["terminal"] = (require) => {
8132
8174
  ptyClose: (scope, tab) => call("pty.close", scopePayload(scope, { tab })),
8133
8175
  /** Release an agent terminal by uuid (tab closed while WS was down). */
8134
8176
  agentPtyClose: (uuid) => call("agent-pty.close", { uuid }),
8177
+ /** Skip every active terminal_wait_for on one agent terminal (the wait
8178
+ * banner's skip button). Idempotent: {skipped:0} when none is active. */
8179
+ agentSkipWait: (uuid) => call("agent-pty.skip-wait", { uuid }),
8135
8180
  /** Terminal dependency status (issue #140): after a WS close 1011 with
8136
8181
  * reason `pty-deps-missing` the view fetches the full repair details here
8137
8182
  * (the close reason itself is capped at 123 bytes). */
@@ -8329,6 +8374,16 @@ globalThis.__dshChunks__["terminal"] = (require) => {
8329
8374
  observer.disconnect();
8330
8375
  };
8331
8376
  }
8377
+ //#endregion
8378
+ //#region src/client/terminal-font.ts
8379
+ /**
8380
+ * Terminal font resolution: the user's custom font prefs (SidebarPrefs,
8381
+ * configured under the terminal card's secondary settings) turned into the
8382
+ * xterm options. Kept as a pure module (no DOM, no xterm) so the fallback
8383
+ * chain and clamping are unit-testable without mounting a terminal.
8384
+ */
8385
+ /** The built-in fallback stack when neither the user nor the theme sets one. */
8386
+ const DEFAULT_TERMINAL_FONT_FAMILY = "\"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace";
8332
8387
  /**
8333
8388
  * Icon fonts appended to whichever base stack wins, so shell prompts that
8334
8389
  * draw glyphs from the Nerd Font Private Use Areas resolve to a real glyph
@@ -8520,11 +8575,41 @@ globalThis.__dshChunks__["terminal"] = (require) => {
8520
8575
  return trimmed;
8521
8576
  }
8522
8577
  /**
8578
+ * Guarantee the stack ends in a generic family, so a font the browser cannot
8579
+ * resolve degrades to a monospace one.
8580
+ *
8581
+ * Without this a stack of unresolvable names (a misspelled family, or one only
8582
+ * installed on the machine running the shell rather than the one running the
8583
+ * browser) falls through to the browser's *standard* font, which is
8584
+ * proportional — xterm then measures its cell from a proportional advance and
8585
+ * the whole grid breaks, rather than merely losing the requested typeface.
8586
+ *
8587
+ * This does not sniff whether the named families exist (an explicit non-goal
8588
+ * of the terminal font design): it only terminates the stack. A stack that
8589
+ * already names a generic family is returned untouched, so a user who
8590
+ * deliberately wrote one keeps it. Generics are matched unquoted only — a
8591
+ * quoted `"monospace"` is a family *name*, not the keyword.
8592
+ *
8593
+ * @param stack - the resolved font-family value.
8594
+ * @returns the stack, ending in a generic family.
8595
+ */
8596
+ function withMonospaceFallback(stack) {
8597
+ const families = splitFamilies(stack);
8598
+ if (families.length === 0) return DEFAULT_TERMINAL_FONT_FAMILY;
8599
+ const only = families.length === 1 ? families[0] : void 0;
8600
+ if (only !== void 0 && CSS_WIDE_KEYWORDS.has(only.toLowerCase())) return DEFAULT_TERMINAL_FONT_FAMILY;
8601
+ if (families.some((family) => GENERIC_FAMILIES.has(family.toLowerCase()))) return families.join(", ");
8602
+ return `${families.join(", ")}, monospace`;
8603
+ }
8604
+ /**
8523
8605
  * Resolve the xterm font options for the given prefs.
8524
8606
  *
8525
8607
  * 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.
8608
+ * font > built-in stack. {@link withMonospaceFallback} then terminates the
8609
+ * stack with a generic family so an unresolvable name degrades to a
8610
+ * monospace instead of the proportional standard font, and finally
8611
+ * {@link withIconFontFallbacks} tops it up so prompt icons resolve
8612
+ * regardless of which base won.
8528
8613
  *
8529
8614
  * @param prefs - the current side card preferences.
8530
8615
  * @param themeFontFamily - the app's theme code font (`--ds-font-family-code`
@@ -8533,7 +8618,7 @@ globalThis.__dshChunks__["terminal"] = (require) => {
8533
8618
  */
8534
8619
  function resolveTerminalFont(prefs, themeFontFamily) {
8535
8620
  return {
8536
- fontFamily: withIconFontFallbacks(usableBase(prefs.terminalFontFamily) || usableBase(themeFontFamily) || "\"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace"),
8621
+ fontFamily: withIconFontFallbacks(withMonospaceFallback(usableBase(prefs.terminalFontFamily) || usableBase(themeFontFamily) || "\"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace")),
8537
8622
  fontSize: clampTerminalFontSize(prefs.terminalFontSize)
8538
8623
  };
8539
8624
  }
@@ -8701,7 +8786,7 @@ globalThis.__dshChunks__["terminal"] = (require) => {
8701
8786
  }
8702
8787
  //#endregion
8703
8788
  //#region \0dsh-css:/Users/libing/kk_Projects/dsh-coding-sidebar/src/client/sidebar.module.css.mjs
8704
- const css = "[data-dsh-panel-host]{z-index:25;pointer-events:none;position:fixed;inset:0;overflow:hidden}[data-dsh-panel-host][data-dsh-panel-host-degraded]{position:absolute;top:0;left:0}.S5HVoW_toggleCluster{top:calc(3px + env(safe-area-inset-top));z-index:45;pointer-events:auto;flex-direction:row;gap:4px;display:flex;position:absolute;right:10px}.S5HVoW_panel:not(.S5HVoW_panelHidden) .S5HVoW_tabBar{padding-right:72px}.S5HVoW_toggleButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), color var(--ds-transition-duration-slow) var(--ds-ease-in-out);background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;display:flex}.S5HVoW_toggleButton:hover:not(:disabled):not([aria-disabled=true]){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_toggleButton:disabled,.S5HVoW_toggleButton[aria-disabled=true]{opacity:.4;cursor:default}.S5HVoW_panel{box-sizing:border-box;z-index:40;pointer-events:auto;background:var(--dsw-alias-bg-layer-1);border-left:1px solid var(--dsw-alias-border-l2);padding-bottom:env(safe-area-inset-bottom);transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), width var(--ds-transition-duration-slow) var(--ds-ease-in-out);flex-direction:column;display:flex;position:absolute;top:0;bottom:0;right:0}.S5HVoW_panelHidden{pointer-events:none;visibility:hidden;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), width var(--ds-transition-duration-slow) var(--ds-ease-in-out), visibility 0s linear var(--ds-transition-duration-slow);transform:translate(102%)}.S5HVoW_panel[data-dragging]{transition:none}.S5HVoW_panelResize{cursor:col-resize;z-index:2;touch-action:none;width:8px;position:absolute;top:0;bottom:0;left:-4px}.S5HVoW_panelResizeActive{background:var(--dsw-alias-interactive-bg-hover-accent)}.S5HVoW_panelBody{flex:1;min-width:0;min-height:0;display:flex}.S5HVoW_panel{contain:layout style}body[data-dsh-sidebar-dragging] .S5HVoW_panel{will-change:transform}.S5HVoW_floatWindow{z-index:42;pointer-events:auto;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);box-shadow:var(--dsw-shadow-lv3);contain:layout style;border-radius:8px;flex-direction:column;display:flex;position:absolute;overflow:hidden}.S5HVoW_floatWindowDragging{will-change:left, top, width, height}.S5HVoW_floatHeader{height:34px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1);cursor:grab;user-select:none;flex:none;align-items:center;gap:4px;padding:0 4px 0 10px;display:flex}.S5HVoW_floatWindowDragging .S5HVoW_floatHeader{cursor:grabbing}.S5HVoW_floatTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.S5HVoW_floatClose{width:18px;height:18px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.S5HVoW_floatClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_floatContent{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden}.S5HVoW_floatResize{z-index:2;cursor:nwse-resize;touch-action:none;width:14px;height:14px;position:absolute;bottom:0;right:0}.S5HVoW_floatResize:hover{background:var(--dsw-alias-interactive-bg-hover-accent)}.S5HVoW_pane[data-dsh-float-dock-over]{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px}.S5HVoW_floatDropHint{z-index:46;pointer-events:none;border:2px dashed var(--dsw-alias-interactive-bg-hover-accent);background:color-mix(in srgb, var(--dsw-alias-interactive-bg-hover-accent) 12%, transparent);border-radius:8px;justify-content:center;align-items:center;display:flex;position:absolute}.S5HVoW_floatDropHintLabel{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:999px;padding:4px 12px}.S5HVoW_toggleCluster,.S5HVoW_toggleButton,.S5HVoW_tabBar,.S5HVoW_floatHeader{-webkit-app-region:no-drag}body[data-dsh-title-bar-compat] .S5HVoW_toggleCluster{top:calc(var(--dsh-title-bar-strip,40px) + 3px)}body[data-dsh-title-bar-compat] .S5HVoW_panel{padding-top:var(--dsh-title-bar-strip,40px)}.S5HVoW_iconButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.S5HVoW_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_iconButton:disabled{opacity:.4;cursor:default}.S5HVoW_workbench,.S5HVoW_split{flex:1;min-width:0;min-height:0;display:flex}.S5HVoW_splitRow{flex-direction:row}.S5HVoW_splitCol{flex-direction:column}.S5HVoW_splitChild{display:flex;position:relative;overflow:hidden}.S5HVoW_divider{z-index:3;touch-action:none;flex:none;position:relative}.S5HVoW_dividerRow:after,.S5HVoW_dividerCol:after{content:\"\";background:var(--dsw-alias-border-l2);transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out);position:absolute}.S5HVoW_dividerRow{cursor:col-resize;width:7px;margin:0 -2px}.S5HVoW_dividerRow:after{width:1px;top:0;bottom:0;left:50%;transform:translate(-50%)}.S5HVoW_dividerCol{cursor:row-resize;height:7px;margin:-2px 0}.S5HVoW_dividerCol:after{height:1px;top:50%;left:0;right:0;transform:translateY(-50%)}.S5HVoW_divider:hover:after,.S5HVoW_dividerActive:after{background:var(--dsw-alias-interactive-bg-hover-accent)}.S5HVoW_pane{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.S5HVoW_paneDrop{outline:1px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.S5HVoW_dropOverlay{z-index:6;pointer-events:none;background:var(--dsw-alias-interactive-bg-hover-accent);opacity:.5;position:absolute}.S5HVoW_dropLeft{width:25%;top:0;bottom:0;left:0}.S5HVoW_dropRight{width:25%;top:0;bottom:0;right:0}.S5HVoW_dropUp{height:25%;top:0;left:0;right:0}.S5HVoW_dropDown{height:25%;bottom:0;left:0;right:0}.S5HVoW_dropCenter{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px;background:0 0;inset:25%}.S5HVoW_paneContent{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.S5HVoW_paneTab{flex-direction:column;flex:1;min-height:0;display:flex}.S5HVoW_paneTabHidden{display:none}.S5HVoW_paneEmptyCards{flex:1;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));align-content:start;gap:8px;min-height:0;padding:12px;display:grid;overflow:hidden}.S5HVoW_paneCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;text-align:center;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:12px 8px;display:flex}.S5HVoW_paneCard:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l2)}.S5HVoW_paneCard:disabled{opacity:.45;cursor:default}.S5HVoW_tabBar{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);flex:none;align-items:stretch;height:34px;display:flex}.S5HVoW_tabBarDrop{outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.S5HVoW_tabList{scrollbar-width:none;flex:1;min-width:0;display:flex;overflow-x:auto}.S5HVoW_tabList::-webkit-scrollbar{display:none}.S5HVoW_tab{min-width:64px;max-width:160px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);border-right:1px solid var(--dsw-alias-border-l1);cursor:pointer;user-select:none;background:0 0;flex:none;align-items:center;gap:4px;padding:0 4px 0 10px;display:flex}.S5HVoW_tab:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_tabActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.S5HVoW_tabTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.S5HVoW_tabBadge{min-width:16px;height:15px;font:var(--dsw-font-xxxs-strong-11);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-brand-primary);border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0 4px;display:inline-flex}.S5HVoW_tabClose{width:18px;height:18px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.S5HVoW_tabClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_tabBarPlus{background:var(--dsw-alias-bg-layer-1);width:22px;height:22px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border:none;border-radius:5px;flex:none;justify-content:center;align-self:center;align-items:center;margin:0 6px;padding:0;display:inline-flex;position:sticky;right:0}.S5HVoW_tabBarPlus:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_pinnedTab{color:var(--dsw-alias-label-tertiary);font-style:italic}.S5HVoW_pinnedTab:hover{color:var(--dsw-alias-label-secondary)}.S5HVoW_explorer{flex-direction:column;flex:1;min-height:0;display:flex}.S5HVoW_explorerHeader{flex:none;justify-content:space-between;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.S5HVoW_explorerRoot{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.S5HVoW_explorerBody{flex:1;min-height:0;padding:4px 8px 8px;overflow:hidden auto}.S5HVoW_explorerRow{box-sizing:border-box;width:100%;max-width:100%;height:34px;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;white-space:nowrap;animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);background:0 0;border:none;border-radius:8px;align-items:center;gap:6px;padding:0 8px;display:flex}.S5HVoW_explorerRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_explorerRowRevealed{background:color-mix(in srgb, var(--dsw-alias-interactive-bg-hover-accent) 18%, transparent);box-shadow:inset 2px 0 0 var(--dsw-alias-interactive-bg-hover-accent)}.S5HVoW_explorerDir{font:var(--dsw-font-s-strong-14)}.S5HVoW_explorerHidden{opacity:.45}.S5HVoW_explorerSymlink{color:var(--dsw-alias-label-tertiary);flex:none}.S5HVoW_explorerBroken .S5HVoW_explorerName{color:var(--dsw-alias-state-error-primary)}.S5HVoW_explorerName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.S5HVoW_explorerRef{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:20px;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;align-items:center;padding:0 8px;display:none}.S5HVoW_explorerRef:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_explorerRow:hover .S5HVoW_explorerRef,.S5HVoW_explorerRow:focus-within .S5HVoW_explorerRef{display:inline-flex}.S5HVoW_explorerCopied{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.S5HVoW_explorerError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);cursor:default}@keyframes S5HVoW_dsh-row-in{0%{opacity:0}}.S5HVoW_explorerEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.S5HVoW_explorerRowDropTarget{background:var(--dsw-alias-interactive-bg-hover);outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.S5HVoW_uploadDropZone{z-index:1001;pointer-events:none;border:2px dashed var(--dsw-alias-interactive-bg-hover-accent);box-shadow:0 0 0 200vmax var(--dsw-alias-bg-mask-drop);animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);border-radius:10px;justify-content:center;align-items:flex-start;padding:12px;display:flex;position:fixed}.S5HVoW_uploadDropHero{flex-direction:column;align-items:center;gap:10px;max-width:100%;padding-top:8px;display:flex}.S5HVoW_uploadDropZonePill{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:100%;box-shadow:var(--dsw-shadow-lv2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);border-radius:999px;align-items:center;gap:6px;padding:6px 12px;display:flex}.S5HVoW_uploadDropZoneText{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.S5HVoW_uploadDropChatHint{z-index:1002;pointer-events:none;animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;top:0;bottom:0;left:0}.S5HVoW_uploadDropChatCard{text-align:center;max-width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-strong-14);flex-direction:column;align-items:center;gap:12px;display:flex}.S5HVoW_uploadOverlay{z-index:30;background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.S5HVoW_uploadOverlayCard{border:1px solid var(--dsw-alias-border-inverted);background:var(--dsw-alias-bg-layer-2);min-width:280px;max-width:min(420px,100% - 48px);box-shadow:var(--dsw-shadow-lv3);border-radius:24px;flex-direction:column;gap:12px;padding:20px 24px;display:flex}.S5HVoW_uploadOverlayTitle{font:var(--dsw-font-s-strong-14);color:var(--dsw-alias-label-primary);align-items:center;gap:8px;display:flex}.S5HVoW_uploadOverlayTitle>svg{flex:none}.S5HVoW_uploadOverlayTitle>span{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.S5HVoW_uploadOverlayProgress{background:var(--dsw-alias-border-l2);border-radius:3px;height:6px;overflow:hidden}.S5HVoW_uploadOverlayProgressFill{background:var(--dsw-alias-interactive-bg-hover-accent);height:100%;transition:width .15s var(--ds-ease-in-out);border-radius:3px}.S5HVoW_uploadOverlayStatus{min-height:1em;font:var(--dsw-font-xxs-12);font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.S5HVoW_uploadOverlayCancel{border:1px solid var(--dsw-alias-border-l2);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;background:0 0;border-radius:8px;align-self:flex-end;padding:0 14px}.S5HVoW_uploadOverlayCancel:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.S5HVoW_uploadOverlayCancel:disabled{opacity:.4;cursor:default}.S5HVoW_editor{flex-direction:column;flex:1;min-height:0;display:flex}.S5HVoW_editorHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.S5HVoW_editorTitle{min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.S5HVoW_editorPathInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.S5HVoW_editorPathInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.S5HVoW_editorTreeToggleActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.S5HVoW_editorBody{flex:1;min-height:0;display:flex}.S5HVoW_editorMain{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.S5HVoW_editorTreeDock{border-left:1px solid var(--dsw-alias-border-l1);flex:none;min-height:0;display:flex;position:relative}.S5HVoW_editorTreeResize{cursor:col-resize;touch-action:none;z-index:3;width:6px;position:absolute;top:0;bottom:0;left:0}.S5HVoW_editorTreeResize:hover{background:var(--dsw-alias-border-l2)}.S5HVoW_editorTreePanel{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.S5HVoW_editorTreePanelFull{flex:1}.S5HVoW_editorTreeSearch{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.S5HVoW_editorSearchInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:26px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.S5HVoW_editorSearchInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.S5HVoW_editorSearchHint{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:8px 12px}.S5HVoW_editorSearchResult{width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:4px 8px;display:block;overflow:hidden}.S5HVoW_editorSearchResult:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_editorStatus{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.S5HVoW_editorStatusError{color:var(--dsw-alias-state-error-primary)}.S5HVoW_dirtyDot{background:var(--dsw-alias-state-warn-primary);border-radius:50%;flex:none;width:7px;height:7px}.S5HVoW_editorPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;flex:1;justify-content:center;align-items:center;padding:16px;display:flex}.S5HVoW_orphanedType{opacity:.7;overflow-wrap:anywhere;margin-top:8px;font-size:12px;display:block}.S5HVoW_editorBinary{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;padding:24px 16px;display:flex}.S5HVoW_editorBinaryNotice{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.S5HVoW_editorDownloadLink{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), border-color var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:6px;align-items:center;gap:6px;padding:6px 14px;text-decoration:none;display:inline-flex}.S5HVoW_editorDownloadLink:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.S5HVoW_editorError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);padding:12px 16px}.S5HVoW_editorBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 8px}.S5HVoW_sandboxStatus{font:var(--dsw-font-xxxs-11);flex:none;align-items:center;gap:8px;padding:4px 10px;display:flex}.S5HVoW_sandboxStatusOn{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1)}.S5HVoW_sandboxStatusOff{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent);border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent)}.S5HVoW_sandboxDot{background:var(--dsw-alias-state-success-primary);border-radius:50%;flex:none;width:6px;height:6px}.S5HVoW_sandboxStatusOff .S5HVoW_sandboxDot{background:var(--dsw-alias-state-error-primary)}.S5HVoW_sandboxStatusText{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.S5HVoW_sandboxAction{border:1px solid var(--dsw-alias-border-l2);font:inherit;color:inherit;cursor:pointer;background:0 0;border-radius:6px;flex:none;padding:2px 8px}.S5HVoW_sandboxAction:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_browser{flex-direction:column;flex:1;min-height:0;display:flex}.S5HVoW_browserBar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:4px;padding:6px 8px;display:flex}.S5HVoW_browserInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.S5HVoW_browserInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.S5HVoW_browserMessage{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 12px}.S5HVoW_browserFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.S5HVoW_browserStart{text-align:center;min-height:0;font:var(--dsw-font-xs-13);color:var(--dsw-alias-label-tertiary);flex:1;justify-content:center;align-items:center;padding:20px;display:flex}.S5HVoW_browserBlocked{text-align:center;min-height:0;color:var(--dsw-alias-state-warn-primary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:6px;padding:24px;display:flex}.S5HVoW_browserBlockedTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary)}.S5HVoW_browserBlockedDesc{max-width:280px;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-secondary)}.S5HVoW_browserBlockedActions{gap:8px;margin-top:6px;display:flex}.S5HVoW_browserBlockedButton{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-11);cursor:pointer;border-radius:6px;padding:4px 12px}.S5HVoW_browserBlockedButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_editorCm{background:0 0;flex:1;min-height:0;overflow:hidden}.S5HVoW_editorCm .cm-editor{height:100%}.S5HVoW_editorCm .cm-scroller{padding:12px 16px}.S5HVoW_editorCm .cm-editor.cm-focused{outline:none}.S5HVoW_selectionPopup{z-index:60;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-strong-11);white-space:nowrap;cursor:pointer;border-radius:6px;align-items:center;padding:0 10px;display:inline-flex;position:fixed;transform:translate(-50%,calc(-100% - 8px))}.S5HVoW_selectionPopup:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_terminalWrap{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.S5HVoW_terminal{flex:1;min-height:0;padding:6px 4px 6px 8px}.S5HVoW_terminal .xterm{height:100%}.S5HVoW_terminalBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex-wrap:wrap;flex:none;align-items:center;gap:8px;padding:3px 10px;display:flex}.S5HVoW_terminalBannerUrl{word-break:break-all;opacity:.85;flex-basis:100%;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.S5HVoW_boundaryError{z-index:50;background:var(--dsw-alias-bg-layer-1);border-left:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;align-items:flex-start;gap:8px;padding:16px;display:flex;position:fixed;top:0;bottom:0;right:0;overflow:auto}.S5HVoW_terminalRetry{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;padding:1px 8px}.S5HVoW_terminalRetry:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_terminalDepsBanner{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex-direction:column;flex:none;gap:6px;padding:10px;display:flex}.S5HVoW_terminalDepsTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-state-warn-primary)}.S5HVoW_terminalDepsHint{opacity:.9}.S5HVoW_terminalDepsCommandRow{align-items:flex-start;gap:8px;display:flex}.S5HVoW_terminalRepairCommand{white-space:pre-wrap;word-break:break-all;user-select:text;min-width:0;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:4px;flex:1;max-height:160px;margin:0;padding:6px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:1.5;overflow:auto}.S5HVoW_terminalDepsNote{opacity:.85}.S5HVoW_terminalDepsActions{align-items:center;gap:8px;display:flex}.S5HVoW_tabBoundaryError{min-height:0;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;flex:1;align-items:flex-start;gap:8px;padding:12px 16px;display:flex;overflow:auto}.S5HVoW_git{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.S5HVoW_gitHeader{flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.S5HVoW_gitWorktreeRow{flex:none;align-items:center;gap:8px;padding:6px 8px 0 12px;display:flex}.S5HVoW_gitWorktreeLabel{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);flex:none}.S5HVoW_gitBranchSelect{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);min-width:0;height:26px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 6px}.S5HVoW_gitSection{border-top:1px solid var(--dsw-alias-border-l1)}.S5HVoW_gitSectionHeader{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary);text-transform:uppercase;justify-content:space-between;align-items:center;padding:6px 12px 4px;display:flex}.S5HVoW_gitLink{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-brand-primary);cursor:pointer;background:0 0;border:none;padding:0}.S5HVoW_gitLink:hover:not(:disabled){text-decoration:underline}.S5HVoW_gitLink:disabled{opacity:.4;cursor:default}.S5HVoW_gitRow{min-height:34px;animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);border-radius:8px;align-items:center;gap:6px;margin:0 6px;padding:0 8px;display:flex}.S5HVoW_gitRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_gitRowSelected{background:var(--dsw-alias-interactive-bg-active)}.S5HVoW_gitRowMain{cursor:pointer;text-align:left;background:0 0;border:none;flex:1;align-items:center;gap:8px;min-width:0;padding:3px 0;display:flex}.S5HVoW_gitBadge{width:20px;height:16px;font:var(--dsw-font-xxxs-strong-11);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;justify-content:center;align-items:center;display:inline-flex}.S5HVoW_gitName{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.S5HVoW_gitEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:4px 12px 8px}.S5HVoW_gitPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.S5HVoW_gitError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);white-space:pre-wrap;padding:8px 12px}.S5HVoW_gitDiff{border-top:1px solid var(--dsw-alias-border-l1);padding:8px}.S5HVoW_gitDiffTab{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.S5HVoW_gitDiffTabHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.S5HVoW_gitDiffTabTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.S5HVoW_gitDiffFile{width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:baseline;gap:6px;padding:8px 2px 2px;display:flex}.S5HVoW_gitDiffFile:disabled{cursor:default}.S5HVoW_gitDiffFile:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_gitDiffFileChevron{color:var(--dsw-alias-label-tertiary);flex:none;transform:rotate(0)}.S5HVoW_gitDiffFileChevronExpanded{transform:rotate(90deg)}.S5HVoW_gitDiffFilePath{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.S5HVoW_gitDiffFileOld{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:none;max-width:40%;overflow:hidden}.S5HVoW_gitDiffFileTag{border:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:0 6px}.S5HVoW_gitDiffHunk{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);gap:8px;padding:3px 2px;display:flex}.S5HVoW_gitDiffHunkHeader{color:var(--dsw-alias-label-secondary);flex:none}.S5HVoW_gitDiffHunkSection{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.S5HVoW_gitDiffLine{font:var(--dsw-font-markdown-code-block-small);white-space:pre-wrap;overflow-wrap:anywhere;align-items:stretch;min-width:0;line-height:20px;display:flex}.S5HVoW_gitDiffNum{text-align:right;width:36px;color:var(--dsw-alias-label-tertiary);user-select:none;flex:none;padding-right:8px}.S5HVoW_gitDiffCode{flex:1;min-width:0;overflow:visible}.S5HVoW_gitDiffCtx{color:var(--dsw-alias-label-primary)}.S5HVoW_gitDiffDel{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)}.S5HVoW_gitDiffAdd{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)}.S5HVoW_gitDiffMeta{padding-left:2px}.S5HVoW_gitDiffMetaText{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);font-style:italic}.S5HVoW_gitDiffExpand{width:100%;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-brand-primary);cursor:pointer;text-align:center;background:0 0;border:none;margin:4px 0;display:block}.S5HVoW_gitDiffExpand:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_gitConfirmDesc{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);white-space:pre-wrap;margin:0}.S5HVoW_gitCommit{border-top:1px solid var(--dsw-alias-border-l1);align-items:center;gap:6px;padding:8px 12px;display:flex}.S5HVoW_gitCommitInput{flex:1;min-width:0}.S5HVoW_gitCommitButton{background:var(--dsw-alias-button-primary-fill);height:26px;color:var(--dsw-alias-label-primary-inverted);font:var(--dsw-font-xxs-strong-12);cursor:pointer;border:none;border-radius:6px;flex:none;padding:0 12px}.S5HVoW_gitCommitButton:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}.S5HVoW_gitCommitButton:disabled{opacity:.45;cursor:default}.S5HVoW_gitLogRow{cursor:pointer;border-radius:8px;flex-direction:column;gap:2px;padding:5px 12px;display:flex}.S5HVoW_gitLogRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_gitLogLine1{align-items:baseline;gap:8px;min-width:0;display:flex}.S5HVoW_gitLogHash{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);flex:none}.S5HVoW_gitLogLine2{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;display:flex}.S5HVoW_gitLogRef{border:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-brand-primary);white-space:nowrap;border-radius:999px;flex:none;padding:0 5px}.S5HVoW_gitLogSubject{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.S5HVoW_gitLogMeta{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.S5HVoW_gitLogMore{border:1px solid var(--dsw-alias-border-l2);width:calc(100% - 24px);font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:6px;margin:4px 12px 8px;padding:6px 0;display:block}.S5HVoW_gitLogMore:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_gitLogMore:disabled{opacity:.5;cursor:default}.S5HVoW_producedRow{flex-wrap:wrap;align-items:center;gap:8px;padding:4px 0;display:flex}.S5HVoW_producedLabel{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.S5HVoW_producedChip{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:200px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);cursor:pointer;border-radius:999px;align-items:center;gap:4px;padding:2px 8px;display:inline-flex;overflow:hidden}.S5HVoW_producedChip:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_producedChip span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.S5HVoW_producedMore{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.S5HVoW_toggleButton:focus-visible,.S5HVoW_iconButton:focus-visible,.S5HVoW_tab:focus-visible,.S5HVoW_tabClose:focus-visible,.S5HVoW_tabBarPlus:focus-visible,.S5HVoW_paneCard:focus-visible,.S5HVoW_explorerRow:focus-visible,.S5HVoW_explorerRef:focus-visible,.S5HVoW_gitRowMain:focus-visible,.S5HVoW_gitLink:focus-visible,.S5HVoW_gitCommitButton:focus-visible,.S5HVoW_gitLogRow:focus-visible,.S5HVoW_gitLogMore:focus-visible,.S5HVoW_gitDiffFile:focus-visible,.S5HVoW_gitDiffExpand:focus-visible,.S5HVoW_terminalRetry:focus-visible,.S5HVoW_editorDownloadLink:focus-visible{outline:2px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}@media (prefers-reduced-motion:reduce){.S5HVoW_panel,.S5HVoW_panelHidden,.S5HVoW_toggleCluster,.S5HVoW_toggleButton,.S5HVoW_tab,.S5HVoW_tabBarPlus,.S5HVoW_paneCard,.S5HVoW_explorerRow,.S5HVoW_gitRow,.S5HVoW_divider,.S5HVoW_dividerRow:after,.S5HVoW_dividerCol:after{transition:none;animation:none}}@media (width<=767px){.S5HVoW_panel:not(.S5HVoW_panelHidden) .S5HVoW_tabBar{padding-right:40px}.S5HVoW_tab{min-width:48px;max-width:128px}}.S5HVoW_openWithLabel{align-items:center;gap:8px;width:100%;min-width:0;display:flex}.S5HVoW_openWithName{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.S5HVoW_openWithChevron{color:var(--dsw-alias-label-tertiary);flex:none}.S5HVoW_openWithPin{width:20px;height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border-radius:6px;flex:none;justify-content:center;align-items:center;display:inline-flex}.S5HVoW_openWithPin:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_openWithPinActive{color:var(--dsw-alias-state-business-primary)}@keyframes S5HVoW_dsh-toc-flash{0%,60%{background:var(--dsw-alias-interactive-bg-hover)}to{background:0 0}}.S5HVoW_browserLive{flex-direction:column;gap:6px;padding:8px 10px;display:flex;position:absolute;inset:0;overflow:hidden}.S5HVoW_browserLiveStatus{opacity:.75;align-items:center;gap:8px;font-size:12px;display:flex}.S5HVoW_browserLiveCanvas{object-fit:contain;border:1px solid var(--dsw-alias-border-l,#80808040);cursor:crosshair;background:#fff;border-radius:8px;flex:1;width:100%;min-height:0}.S5HVoW_browserLiveTarget{max-width:260px;font-size:12px}";
8789
+ const css = "[data-dsh-panel-host]{z-index:25;pointer-events:none;position:fixed;inset:0;overflow:hidden}[data-dsh-panel-host][data-dsh-panel-host-degraded]{position:absolute;top:0;left:0}.S5HVoW_toggleCluster{top:calc(3px + env(safe-area-inset-top));z-index:45;pointer-events:auto;flex-direction:row;gap:4px;display:flex;position:absolute;right:10px}.S5HVoW_panel:not(.S5HVoW_panelHidden) .S5HVoW_tabBar{padding-right:72px}.S5HVoW_toggleButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), color var(--ds-transition-duration-slow) var(--ds-ease-in-out);background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;display:flex}.S5HVoW_toggleButton:hover:not(:disabled):not([aria-disabled=true]){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_toggleButton:disabled,.S5HVoW_toggleButton[aria-disabled=true]{opacity:.4;cursor:default}.S5HVoW_panel{box-sizing:border-box;z-index:40;pointer-events:auto;background:var(--dsw-alias-bg-layer-1);border-left:1px solid var(--dsw-alias-border-l2);padding-bottom:env(safe-area-inset-bottom);transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), width var(--ds-transition-duration-slow) var(--ds-ease-in-out);flex-direction:column;display:flex;position:absolute;top:0;bottom:0;right:0}.S5HVoW_panelHidden{pointer-events:none;visibility:hidden;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), width var(--ds-transition-duration-slow) var(--ds-ease-in-out), visibility 0s linear var(--ds-transition-duration-slow);transform:translate(102%)}.S5HVoW_panel[data-dragging]{transition:none}.S5HVoW_panelResize{cursor:col-resize;z-index:2;touch-action:none;width:8px;position:absolute;top:0;bottom:0;left:-4px}.S5HVoW_panelResizeActive{background:var(--dsw-alias-interactive-bg-hover-accent)}.S5HVoW_panelBody{flex:1;min-width:0;min-height:0;display:flex}.S5HVoW_panel{contain:layout style}body[data-dsh-sidebar-dragging] .S5HVoW_panel{will-change:transform}.S5HVoW_floatWindow{z-index:42;pointer-events:auto;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);box-shadow:var(--dsw-shadow-lv3);contain:layout style;border-radius:8px;flex-direction:column;display:flex;position:absolute;overflow:hidden}.S5HVoW_floatWindowDragging{will-change:left, top, width, height}.S5HVoW_floatHeader{height:34px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1);cursor:grab;user-select:none;flex:none;align-items:center;gap:4px;padding:0 4px 0 10px;display:flex}.S5HVoW_floatWindowDragging .S5HVoW_floatHeader{cursor:grabbing}.S5HVoW_floatTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.S5HVoW_floatClose{width:18px;height:18px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.S5HVoW_floatClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_floatContent{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden}.S5HVoW_floatResize{z-index:2;cursor:nwse-resize;touch-action:none;width:14px;height:14px;position:absolute;bottom:0;right:0}.S5HVoW_floatResize:hover{background:var(--dsw-alias-interactive-bg-hover-accent)}.S5HVoW_pane[data-dsh-float-dock-over]{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px}.S5HVoW_floatDropHint{z-index:46;pointer-events:none;border:2px dashed var(--dsw-alias-interactive-bg-hover-accent);background:color-mix(in srgb, var(--dsw-alias-interactive-bg-hover-accent) 12%, transparent);border-radius:8px;justify-content:center;align-items:center;display:flex;position:absolute}.S5HVoW_floatDropHintLabel{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:999px;padding:4px 12px}.S5HVoW_toggleCluster,.S5HVoW_toggleButton,.S5HVoW_tabBar,.S5HVoW_floatHeader{-webkit-app-region:no-drag}body[data-dsh-title-bar-compat] .S5HVoW_toggleCluster{top:calc(var(--dsh-title-bar-strip,40px) + 3px)}body[data-dsh-title-bar-compat] .S5HVoW_panel{padding-top:var(--dsh-title-bar-strip,40px)}.S5HVoW_iconButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.S5HVoW_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_iconButton:disabled{opacity:.4;cursor:default}.S5HVoW_workbench,.S5HVoW_split{flex:1;min-width:0;min-height:0;display:flex}.S5HVoW_splitRow{flex-direction:row}.S5HVoW_splitCol{flex-direction:column}.S5HVoW_splitChild{display:flex;position:relative;overflow:hidden}.S5HVoW_divider{z-index:3;touch-action:none;flex:none;position:relative}.S5HVoW_dividerRow:after,.S5HVoW_dividerCol:after{content:\"\";background:var(--dsw-alias-border-l2);transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out);position:absolute}.S5HVoW_dividerRow{cursor:col-resize;width:7px;margin:0 -2px}.S5HVoW_dividerRow:after{width:1px;top:0;bottom:0;left:50%;transform:translate(-50%)}.S5HVoW_dividerCol{cursor:row-resize;height:7px;margin:-2px 0}.S5HVoW_dividerCol:after{height:1px;top:50%;left:0;right:0;transform:translateY(-50%)}.S5HVoW_divider:hover:after,.S5HVoW_dividerActive:after{background:var(--dsw-alias-interactive-bg-hover-accent)}.S5HVoW_pane{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.S5HVoW_paneDrop{outline:1px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.S5HVoW_dropOverlay{z-index:6;pointer-events:none;background:var(--dsw-alias-interactive-bg-hover-accent);opacity:.5;position:absolute}.S5HVoW_dropLeft{width:25%;top:0;bottom:0;left:0}.S5HVoW_dropRight{width:25%;top:0;bottom:0;right:0}.S5HVoW_dropUp{height:25%;top:0;left:0;right:0}.S5HVoW_dropDown{height:25%;bottom:0;left:0;right:0}.S5HVoW_dropCenter{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px;background:0 0;inset:25%}.S5HVoW_paneContent{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.S5HVoW_paneTab{flex-direction:column;flex:1;min-height:0;display:flex}.S5HVoW_paneTabHidden{display:none}.S5HVoW_paneEmptyCards{flex:1;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));align-content:start;gap:8px;min-height:0;padding:12px;display:grid;overflow:hidden}.S5HVoW_paneCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;text-align:center;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:12px 8px;display:flex}.S5HVoW_paneCard:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l2)}.S5HVoW_paneCard:disabled{opacity:.45;cursor:default}.S5HVoW_tabBar{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);flex:none;align-items:stretch;height:34px;display:flex}.S5HVoW_tabBarDrop{outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.S5HVoW_tabList{scrollbar-width:none;flex:1;min-width:0;display:flex;overflow-x:auto}.S5HVoW_tabList::-webkit-scrollbar{display:none}.S5HVoW_tab{min-width:64px;max-width:160px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);border-right:1px solid var(--dsw-alias-border-l1);cursor:pointer;user-select:none;background:0 0;flex:none;align-items:center;gap:4px;padding:0 4px 0 10px;display:flex}.S5HVoW_tab:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_tabActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.S5HVoW_tabTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.S5HVoW_tabBadge{min-width:16px;height:15px;font:var(--dsw-font-xxxs-strong-11);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-brand-primary);border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0 4px;display:inline-flex}.S5HVoW_tabClose{width:18px;height:18px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.S5HVoW_tabClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_tabBarPlus{background:var(--dsw-alias-bg-layer-1);width:22px;height:22px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border:none;border-radius:5px;flex:none;justify-content:center;align-self:center;align-items:center;margin:0 6px;padding:0;display:inline-flex;position:sticky;right:0}.S5HVoW_tabBarPlus:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_pinnedTab{color:var(--dsw-alias-label-tertiary);font-style:italic}.S5HVoW_pinnedTab:hover{color:var(--dsw-alias-label-secondary)}.S5HVoW_explorer{flex-direction:column;flex:1;min-height:0;display:flex}.S5HVoW_explorerHeader{flex:none;justify-content:space-between;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.S5HVoW_explorerRoot{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.S5HVoW_explorerBody{flex:1;min-height:0;padding:4px 8px 8px;overflow:hidden auto}.S5HVoW_explorerRow{box-sizing:border-box;width:100%;max-width:100%;height:34px;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;white-space:nowrap;animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);background:0 0;border:none;border-radius:8px;align-items:center;gap:6px;padding:0 8px;display:flex}.S5HVoW_explorerRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_explorerRowRevealed{background:color-mix(in srgb, var(--dsw-alias-interactive-bg-hover-accent) 18%, transparent);box-shadow:inset 2px 0 0 var(--dsw-alias-interactive-bg-hover-accent)}.S5HVoW_explorerDir{font:var(--dsw-font-s-strong-14)}.S5HVoW_explorerHidden{opacity:.45}.S5HVoW_explorerSymlink{color:var(--dsw-alias-label-tertiary);flex:none}.S5HVoW_explorerBroken .S5HVoW_explorerName{color:var(--dsw-alias-state-error-primary)}.S5HVoW_explorerName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.S5HVoW_explorerRef{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:20px;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;align-items:center;padding:0 8px;display:none}.S5HVoW_explorerRef:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_explorerRow:hover .S5HVoW_explorerRef,.S5HVoW_explorerRow:focus-within .S5HVoW_explorerRef{display:inline-flex}.S5HVoW_explorerCopied{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.S5HVoW_explorerError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);cursor:default}@keyframes S5HVoW_dsh-row-in{0%{opacity:0}}.S5HVoW_explorerEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.S5HVoW_explorerRowDropTarget{background:var(--dsw-alias-interactive-bg-hover);outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.S5HVoW_uploadDropZone{z-index:1001;pointer-events:none;border:2px dashed var(--dsw-alias-interactive-bg-hover-accent);box-shadow:0 0 0 200vmax var(--dsw-alias-bg-mask-drop);animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);border-radius:10px;justify-content:center;align-items:flex-start;padding:12px;display:flex;position:fixed}.S5HVoW_uploadDropHero{flex-direction:column;align-items:center;gap:10px;max-width:100%;padding-top:8px;display:flex}.S5HVoW_uploadDropZonePill{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:100%;box-shadow:var(--dsw-shadow-lv2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);border-radius:999px;align-items:center;gap:6px;padding:6px 12px;display:flex}.S5HVoW_uploadDropZoneText{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.S5HVoW_uploadDropChatHint{z-index:1002;pointer-events:none;animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;top:0;bottom:0;left:0}.S5HVoW_uploadDropChatCard{text-align:center;max-width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-strong-14);flex-direction:column;align-items:center;gap:12px;display:flex}.S5HVoW_uploadOverlay{z-index:30;background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.S5HVoW_uploadOverlayCard{border:1px solid var(--dsw-alias-border-inverted);background:var(--dsw-alias-bg-layer-2);min-width:280px;max-width:min(420px,100% - 48px);box-shadow:var(--dsw-shadow-lv3);border-radius:24px;flex-direction:column;gap:12px;padding:20px 24px;display:flex}.S5HVoW_uploadOverlayTitle{font:var(--dsw-font-s-strong-14);color:var(--dsw-alias-label-primary);align-items:center;gap:8px;display:flex}.S5HVoW_uploadOverlayTitle>svg{flex:none}.S5HVoW_uploadOverlayTitle>span{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.S5HVoW_uploadOverlayProgress{background:var(--dsw-alias-border-l2);border-radius:3px;height:6px;overflow:hidden}.S5HVoW_uploadOverlayProgressFill{background:var(--dsw-alias-interactive-bg-hover-accent);height:100%;transition:width .15s var(--ds-ease-in-out);border-radius:3px}.S5HVoW_uploadOverlayStatus{min-height:1em;font:var(--dsw-font-xxs-12);font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.S5HVoW_uploadOverlayCancel{border:1px solid var(--dsw-alias-border-l2);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;background:0 0;border-radius:8px;align-self:flex-end;padding:0 14px}.S5HVoW_uploadOverlayCancel:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.S5HVoW_uploadOverlayCancel:disabled{opacity:.4;cursor:default}.S5HVoW_editor{flex-direction:column;flex:1;min-height:0;display:flex}.S5HVoW_editorHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.S5HVoW_editorTitle{min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.S5HVoW_editorPathInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.S5HVoW_editorPathInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.S5HVoW_editorTreeToggleActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.S5HVoW_editorBody{flex:1;min-height:0;display:flex}.S5HVoW_editorMain{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.S5HVoW_editorTreeDock{border-left:1px solid var(--dsw-alias-border-l1);flex:none;min-height:0;display:flex;position:relative}.S5HVoW_editorTreeResize{cursor:col-resize;touch-action:none;z-index:3;width:6px;position:absolute;top:0;bottom:0;left:0}.S5HVoW_editorTreeResize:hover{background:var(--dsw-alias-border-l2)}.S5HVoW_editorTreePanel{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.S5HVoW_editorTreePanelFull{flex:1}.S5HVoW_editorTreeSearch{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.S5HVoW_editorSearchInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:26px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.S5HVoW_editorSearchInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.S5HVoW_editorSearchHint{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:8px 12px}.S5HVoW_editorSearchResult{width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:4px 8px;display:block;overflow:hidden}.S5HVoW_editorSearchResult:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_editorStatus{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.S5HVoW_editorStatusError{color:var(--dsw-alias-state-error-primary)}.S5HVoW_dirtyDot{background:var(--dsw-alias-state-warn-primary);border-radius:50%;flex:none;width:7px;height:7px}.S5HVoW_editorPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;flex:1;justify-content:center;align-items:center;padding:16px;display:flex}.S5HVoW_orphanedType{opacity:.7;overflow-wrap:anywhere;margin-top:8px;font-size:12px;display:block}.S5HVoW_editorBinary{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;padding:24px 16px;display:flex}.S5HVoW_editorBinaryNotice{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.S5HVoW_editorDownloadLink{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), border-color var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:6px;align-items:center;gap:6px;padding:6px 14px;text-decoration:none;display:inline-flex}.S5HVoW_editorDownloadLink:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.S5HVoW_editorError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);padding:12px 16px}.S5HVoW_editorBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 8px}.S5HVoW_sandboxStatus{font:var(--dsw-font-xxxs-11);flex:none;align-items:center;gap:8px;padding:4px 10px;display:flex}.S5HVoW_sandboxStatusOn{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1)}.S5HVoW_sandboxStatusOff{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent);border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent)}.S5HVoW_sandboxDot{background:var(--dsw-alias-state-success-primary);border-radius:50%;flex:none;width:6px;height:6px}.S5HVoW_sandboxStatusOff .S5HVoW_sandboxDot{background:var(--dsw-alias-state-error-primary)}.S5HVoW_sandboxStatusText{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.S5HVoW_sandboxAction{border:1px solid var(--dsw-alias-border-l2);font:inherit;color:inherit;cursor:pointer;background:0 0;border-radius:6px;flex:none;padding:2px 8px}.S5HVoW_sandboxAction:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_browser{flex-direction:column;flex:1;min-height:0;display:flex}.S5HVoW_browserBar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:4px;padding:6px 8px;display:flex}.S5HVoW_browserInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.S5HVoW_browserInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.S5HVoW_browserMessage{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 12px}.S5HVoW_browserFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.S5HVoW_browserStart{text-align:center;min-height:0;font:var(--dsw-font-xs-13);color:var(--dsw-alias-label-tertiary);flex:1;justify-content:center;align-items:center;padding:20px;display:flex}.S5HVoW_browserBlocked{text-align:center;min-height:0;color:var(--dsw-alias-state-warn-primary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:6px;padding:24px;display:flex}.S5HVoW_browserBlockedTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary)}.S5HVoW_browserBlockedDesc{max-width:280px;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-secondary)}.S5HVoW_browserBlockedActions{gap:8px;margin-top:6px;display:flex}.S5HVoW_browserBlockedButton{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-11);cursor:pointer;border-radius:6px;padding:4px 12px}.S5HVoW_browserBlockedButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_editorCm{background:0 0;flex:1;min-height:0;overflow:hidden}.S5HVoW_editorCm .cm-editor{height:100%}.S5HVoW_editorCm .cm-scroller{padding:12px 16px}.S5HVoW_editorCm .cm-editor.cm-focused{outline:none}.S5HVoW_selectionPopup{z-index:60;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-strong-11);white-space:nowrap;cursor:pointer;border-radius:6px;align-items:center;padding:0 10px;display:inline-flex;position:fixed;transform:translate(-50%,calc(-100% - 8px))}.S5HVoW_selectionPopup:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_terminalWrap{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.S5HVoW_terminal{flex:1;min-height:0;padding:6px 4px 6px 8px}.S5HVoW_terminal .xterm{height:100%}.S5HVoW_terminalBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex-wrap:wrap;flex:none;align-items:center;gap:8px;padding:3px 10px;display:flex}.S5HVoW_terminalBannerUrl{word-break:break-all;opacity:.85;flex-basis:100%;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.S5HVoW_boundaryError{z-index:50;background:var(--dsw-alias-bg-layer-1);border-left:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;align-items:flex-start;gap:8px;padding:16px;display:flex;position:fixed;top:0;bottom:0;right:0;overflow:auto}.S5HVoW_terminalRetry{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;padding:1px 8px}.S5HVoW_terminalRetry:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_gitFoldRow{box-sizing:border-box;background:var(--dsw-alias-bg-layer-1);width:100%;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);text-align:center;cursor:pointer;border:none;outline:none;padding:2px 12px;display:block}.S5HVoW_gitFoldRow:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}.S5HVoW_gitFoldRow:disabled{cursor:default}.S5HVoW_gitFoldRowFailed{color:var(--dsw-alias-state-error-primary);opacity:.7}.S5HVoW_explorerRenameInput{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);min-width:0;height:20px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:4px;outline:none;flex:1;padding:0 4px}.S5HVoW_terminalWaitBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;align-items:center;gap:8px;padding:3px 10px;display:flex}.S5HVoW_terminalWaitNeedle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;overflow:hidden}.S5HVoW_terminalDepsBanner{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex-direction:column;flex:none;gap:6px;padding:10px;display:flex}.S5HVoW_terminalDepsTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-state-warn-primary)}.S5HVoW_terminalDepsHint{opacity:.9}.S5HVoW_terminalDepsCommandRow{align-items:flex-start;gap:8px;display:flex}.S5HVoW_terminalRepairCommand{white-space:pre-wrap;word-break:break-all;user-select:text;min-width:0;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:4px;flex:1;max-height:160px;margin:0;padding:6px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:1.5;overflow:auto}.S5HVoW_terminalDepsNote{opacity:.85}.S5HVoW_terminalDepsActions{align-items:center;gap:8px;display:flex}.S5HVoW_tabBoundaryError{min-height:0;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;flex:1;align-items:flex-start;gap:8px;padding:12px 16px;display:flex;overflow:auto}.S5HVoW_git{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.S5HVoW_gitHeader{flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.S5HVoW_gitWorktreeRow{flex:none;align-items:center;gap:8px;padding:6px 8px 0 12px;display:flex}.S5HVoW_gitWorktreeLabel{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);flex:none}.S5HVoW_gitBranchSelect{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);min-width:0;height:26px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 6px}.S5HVoW_gitSection{border-top:1px solid var(--dsw-alias-border-l1)}.S5HVoW_gitSectionHeader{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary);text-transform:uppercase;justify-content:space-between;align-items:center;padding:6px 12px 4px;display:flex}.S5HVoW_gitLink{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-brand-primary);cursor:pointer;background:0 0;border:none;padding:0}.S5HVoW_gitLink:hover:not(:disabled){text-decoration:underline}.S5HVoW_gitLink:disabled{opacity:.4;cursor:default}.S5HVoW_gitRow{min-height:34px;animation:S5HVoW_dsh-row-in .15s var(--ds-ease-in-out);border-radius:8px;align-items:center;gap:6px;margin:0 6px;padding:0 8px;display:flex}.S5HVoW_gitRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_gitRowSelected{background:var(--dsw-alias-interactive-bg-active)}.S5HVoW_gitRowMain{cursor:pointer;text-align:left;background:0 0;border:none;flex:1;align-items:center;gap:8px;min-width:0;padding:3px 0;display:flex}.S5HVoW_gitBadge{width:20px;height:16px;font:var(--dsw-font-xxxs-strong-11);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;justify-content:center;align-items:center;display:inline-flex}.S5HVoW_gitName{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.S5HVoW_gitEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:4px 12px 8px}.S5HVoW_gitPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.S5HVoW_gitError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);white-space:pre-wrap;padding:8px 12px}.S5HVoW_gitDiff{border-top:1px solid var(--dsw-alias-border-l1);padding:8px}.S5HVoW_gitDiffTab{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.S5HVoW_gitDiffTabHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.S5HVoW_gitDiffTabTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.S5HVoW_gitDiffFile{width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:baseline;gap:6px;padding:8px 2px 2px;display:flex}.S5HVoW_gitDiffFile:disabled{cursor:default}.S5HVoW_gitDiffFile:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_gitDiffFileChevron{color:var(--dsw-alias-label-tertiary);flex:none;transform:rotate(0)}.S5HVoW_gitDiffFileChevronExpanded{transform:rotate(90deg)}.S5HVoW_gitDiffFilePath{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.S5HVoW_gitDiffFileOld{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:none;max-width:40%;overflow:hidden}.S5HVoW_gitDiffFileTag{border:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:0 6px}.S5HVoW_gitDiffHunk{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);gap:8px;padding:3px 2px;display:flex}.S5HVoW_gitDiffHunkHeader{color:var(--dsw-alias-label-secondary);flex:none}.S5HVoW_gitDiffHunkSection{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.S5HVoW_gitDiffLine{font:var(--dsw-font-markdown-code-block-small);white-space:pre-wrap;overflow-wrap:anywhere;align-items:stretch;min-width:0;line-height:20px;display:flex}.S5HVoW_gitDiffNum{text-align:right;width:36px;color:var(--dsw-alias-label-tertiary);user-select:none;flex:none;padding-right:8px}.S5HVoW_gitDiffCode{flex:1;min-width:0;overflow:visible}.S5HVoW_gitDiffCtx{color:var(--dsw-alias-label-primary)}.S5HVoW_gitDiffDel{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)}.S5HVoW_gitDiffAdd{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)}.S5HVoW_gitDiffMeta{padding-left:2px}.S5HVoW_gitDiffMetaText{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);font-style:italic}.S5HVoW_gitDiffExpand{width:100%;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-brand-primary);cursor:pointer;text-align:center;background:0 0;border:none;margin:4px 0;display:block}.S5HVoW_gitDiffExpand:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_gitConfirmDesc{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);white-space:pre-wrap;margin:0}.S5HVoW_gitCommit{border-top:1px solid var(--dsw-alias-border-l1);align-items:center;gap:6px;padding:8px 12px;display:flex}.S5HVoW_gitCommitInput{flex:1;min-width:0}.S5HVoW_gitCommitButton{background:var(--dsw-alias-button-primary-fill);height:26px;color:var(--dsw-alias-label-primary-inverted);font:var(--dsw-font-xxs-strong-12);cursor:pointer;border:none;border-radius:6px;flex:none;padding:0 12px}.S5HVoW_gitCommitButton:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}.S5HVoW_gitCommitButton:disabled{opacity:.45;cursor:default}.S5HVoW_gitLogRow{cursor:pointer;border-radius:8px;flex-direction:column;gap:2px;padding:5px 12px;display:flex}.S5HVoW_gitLogRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_gitLogLine1{align-items:baseline;gap:8px;min-width:0;display:flex}.S5HVoW_gitLogHash{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);flex:none}.S5HVoW_gitLogLine2{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;display:flex}.S5HVoW_gitLogRef{border:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-brand-primary);white-space:nowrap;border-radius:999px;flex:none;padding:0 5px}.S5HVoW_gitLogSubject{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.S5HVoW_gitLogMeta{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.S5HVoW_gitLogMore{border:1px solid var(--dsw-alias-border-l2);width:calc(100% - 24px);font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:6px;margin:4px 12px 8px;padding:6px 0;display:block}.S5HVoW_gitLogMore:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_gitLogMore:disabled{opacity:.5;cursor:default}.S5HVoW_producedRow{flex-wrap:wrap;align-items:center;gap:8px;padding:4px 0;display:flex}.S5HVoW_producedLabel{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.S5HVoW_producedChip{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:200px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);cursor:pointer;border-radius:999px;align-items:center;gap:4px;padding:2px 8px;display:inline-flex;overflow:hidden}.S5HVoW_producedChip:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_producedChip span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.S5HVoW_producedMore{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.S5HVoW_toggleButton:focus-visible,.S5HVoW_iconButton:focus-visible,.S5HVoW_tab:focus-visible,.S5HVoW_tabClose:focus-visible,.S5HVoW_tabBarPlus:focus-visible,.S5HVoW_paneCard:focus-visible,.S5HVoW_explorerRow:focus-visible,.S5HVoW_explorerRef:focus-visible,.S5HVoW_gitRowMain:focus-visible,.S5HVoW_gitLink:focus-visible,.S5HVoW_gitCommitButton:focus-visible,.S5HVoW_gitLogRow:focus-visible,.S5HVoW_gitLogMore:focus-visible,.S5HVoW_gitDiffFile:focus-visible,.S5HVoW_gitDiffExpand:focus-visible,.S5HVoW_terminalRetry:focus-visible,.S5HVoW_editorDownloadLink:focus-visible{outline:2px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}@media (prefers-reduced-motion:reduce){.S5HVoW_panel,.S5HVoW_panelHidden,.S5HVoW_toggleCluster,.S5HVoW_toggleButton,.S5HVoW_tab,.S5HVoW_tabBarPlus,.S5HVoW_paneCard,.S5HVoW_explorerRow,.S5HVoW_gitRow,.S5HVoW_divider,.S5HVoW_dividerRow:after,.S5HVoW_dividerCol:after{transition:none;animation:none}}@media (width<=767px){.S5HVoW_panel:not(.S5HVoW_panelHidden) .S5HVoW_tabBar{padding-right:40px}.S5HVoW_tab{min-width:48px;max-width:128px}}.S5HVoW_openWithLabel{align-items:center;gap:8px;width:100%;min-width:0;display:flex}.S5HVoW_openWithName{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.S5HVoW_openWithChevron{color:var(--dsw-alias-label-tertiary);flex:none}.S5HVoW_openWithPin{width:20px;height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border-radius:6px;flex:none;justify-content:center;align-items:center;display:inline-flex}.S5HVoW_openWithPin:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.S5HVoW_openWithPinActive{color:var(--dsw-alias-state-business-primary)}@keyframes S5HVoW_dsh-toc-flash{0%,60%{background:var(--dsw-alias-interactive-bg-hover)}to{background:0 0}}.S5HVoW_browserLive{flex-direction:column;gap:6px;padding:8px 10px;display:flex;position:absolute;inset:0;overflow:hidden}.S5HVoW_browserLiveStatus{opacity:.75;align-items:center;gap:8px;font-size:12px;display:flex}.S5HVoW_browserLiveCanvas{object-fit:contain;border:1px solid var(--dsw-alias-border-l,#80808040);cursor:crosshair;background:#fff;border-radius:8px;flex:1;width:100%;min-height:0}.S5HVoW_browserLiveTarget{max-width:260px;font-size:12px}";
8705
8790
  const tagId = "dsh-coding-sidebar/sidebar.module.css";
8706
8791
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
8707
8792
  const tag = document.createElement("style");
@@ -8711,209 +8796,246 @@ globalThis.__dshChunks__["terminal"] = (require) => {
8711
8796
  document.head.appendChild(tag);
8712
8797
  }
8713
8798
  var sidebar_module_css_default = {
8714
- "panelBody": "S5HVoW_panelBody",
8715
- "paneContent": "S5HVoW_paneContent",
8716
- "explorerError": "S5HVoW_explorerError",
8717
- "splitRow": "S5HVoW_splitRow",
8799
+ "explorer": "S5HVoW_explorer",
8800
+ "gitFoldRow": "S5HVoW_gitFoldRow",
8801
+ "producedMore": "S5HVoW_producedMore",
8802
+ "sandboxStatus": "S5HVoW_sandboxStatus",
8803
+ "gitDiffHunkHeader": "S5HVoW_gitDiffHunkHeader",
8804
+ "explorerRow": "S5HVoW_explorerRow",
8805
+ "gitDiffFileChevron": "S5HVoW_gitDiffFileChevron",
8806
+ "producedLabel": "S5HVoW_producedLabel",
8807
+ "openWithPin": "S5HVoW_openWithPin",
8808
+ "terminalBannerUrl": "S5HVoW_terminalBannerUrl",
8809
+ "uploadDropZone": "S5HVoW_uploadDropZone",
8810
+ "gitRow": "S5HVoW_gitRow",
8718
8811
  "terminalDepsNote": "S5HVoW_terminalDepsNote",
8812
+ "browserLiveStatus": "S5HVoW_browserLiveStatus",
8813
+ "sandboxStatusOff": "S5HVoW_sandboxStatusOff",
8814
+ "tabBar": "S5HVoW_tabBar",
8815
+ "editorTreeDock": "S5HVoW_editorTreeDock",
8816
+ "floatTitle": "S5HVoW_floatTitle",
8817
+ "uploadOverlayCancel": "S5HVoW_uploadOverlayCancel",
8818
+ "boundaryError": "S5HVoW_boundaryError",
8819
+ "panelResize": "S5HVoW_panelResize",
8820
+ "terminalWaitNeedle": "S5HVoW_terminalWaitNeedle",
8821
+ "dsh-toc-flash": "S5HVoW_dsh-toc-flash",
8822
+ "gitHeader": "S5HVoW_gitHeader",
8823
+ "toggleCluster": "S5HVoW_toggleCluster",
8824
+ "gitDiffCtx": "S5HVoW_gitDiffCtx",
8825
+ "editorBinary": "S5HVoW_editorBinary",
8826
+ "browserLiveCanvas": "S5HVoW_browserLiveCanvas",
8827
+ "gitFoldRowFailed": "S5HVoW_gitFoldRowFailed",
8828
+ "browserBar": "S5HVoW_browserBar",
8829
+ "gitSectionHeader": "S5HVoW_gitSectionHeader",
8830
+ "dividerRow": "S5HVoW_dividerRow",
8831
+ "gitConfirmDesc": "S5HVoW_gitConfirmDesc",
8832
+ "terminalWaitBanner": "S5HVoW_terminalWaitBanner",
8833
+ "gitRowMain": "S5HVoW_gitRowMain",
8834
+ "editorBinaryNotice": "S5HVoW_editorBinaryNotice",
8835
+ "divider": "S5HVoW_divider",
8836
+ "panelBody": "S5HVoW_panelBody",
8719
8837
  "explorerRoot": "S5HVoW_explorerRoot",
8720
- "floatDropHintLabel": "S5HVoW_floatDropHintLabel",
8721
- "explorerBody": "S5HVoW_explorerBody",
8722
- "uploadOverlayTitle": "S5HVoW_uploadOverlayTitle",
8838
+ "browserBlockedTitle": "S5HVoW_browserBlockedTitle",
8839
+ "editorSearchResult": "S5HVoW_editorSearchResult",
8840
+ "splitCol": "S5HVoW_splitCol",
8723
8841
  "browserBlockedActions": "S5HVoW_browserBlockedActions",
8724
- "explorerBroken": "S5HVoW_explorerBroken",
8725
- "terminalRetry": "S5HVoW_terminalRetry",
8726
- "terminalDepsTitle": "S5HVoW_terminalDepsTitle",
8727
- "gitName": "S5HVoW_gitName",
8728
- "dropDown": "S5HVoW_dropDown",
8842
+ "editorHeader": "S5HVoW_editorHeader",
8843
+ "git": "S5HVoW_git",
8844
+ "gitDiffTabHeader": "S5HVoW_gitDiffTabHeader",
8845
+ "producedChip": "S5HVoW_producedChip",
8846
+ "floatDropHint": "S5HVoW_floatDropHint",
8847
+ "explorerHeader": "S5HVoW_explorerHeader",
8848
+ "editorMain": "S5HVoW_editorMain",
8849
+ "editorSearchInput": "S5HVoW_editorSearchInput",
8850
+ "editorCm": "S5HVoW_editorCm",
8729
8851
  "gitDiffFileTag": "S5HVoW_gitDiffFileTag",
8730
- "gitDiffMeta": "S5HVoW_gitDiffMeta",
8731
- "gitCommitButton": "S5HVoW_gitCommitButton",
8732
- "openWithLabel": "S5HVoW_openWithLabel",
8733
- "openWithPin": "S5HVoW_openWithPin",
8734
- "browserLiveCanvas": "S5HVoW_browserLiveCanvas",
8852
+ "uploadDropChatCard": "S5HVoW_uploadDropChatCard",
8853
+ "toggleButton": "S5HVoW_toggleButton",
8854
+ "paneCard": "S5HVoW_paneCard",
8855
+ "explorerCopied": "S5HVoW_explorerCopied",
8856
+ "gitDiffHunkSection": "S5HVoW_gitDiffHunkSection",
8857
+ "uploadDropHero": "S5HVoW_uploadDropHero",
8858
+ "gitError": "S5HVoW_gitError",
8859
+ "uploadDropChatHint": "S5HVoW_uploadDropChatHint",
8860
+ "terminalDepsCommandRow": "S5HVoW_terminalDepsCommandRow",
8861
+ "editorTreePanelFull": "S5HVoW_editorTreePanelFull",
8862
+ "sandboxStatusOn": "S5HVoW_sandboxStatusOn",
8863
+ "floatHeader": "S5HVoW_floatHeader",
8864
+ "tabActive": "S5HVoW_tabActive",
8865
+ "editorTitle": "S5HVoW_editorTitle",
8866
+ "editorTreeResize": "S5HVoW_editorTreeResize",
8867
+ "terminalBanner": "S5HVoW_terminalBanner",
8868
+ "explorerRenameInput": "S5HVoW_explorerRenameInput",
8869
+ "terminalDepsBanner": "S5HVoW_terminalDepsBanner",
8870
+ "floatWindowDragging": "S5HVoW_floatWindowDragging",
8871
+ "terminalDepsTitle": "S5HVoW_terminalDepsTitle",
8872
+ "explorerDir": "S5HVoW_explorerDir",
8873
+ "gitBranchSelect": "S5HVoW_gitBranchSelect",
8874
+ "gitDiffTab": "S5HVoW_gitDiffTab",
8875
+ "explorerBody": "S5HVoW_explorerBody",
8876
+ "floatResize": "S5HVoW_floatResize",
8735
8877
  "workbench": "S5HVoW_workbench",
8736
- "pinnedTab": "S5HVoW_pinnedTab",
8737
- "dropLeft": "S5HVoW_dropLeft",
8878
+ "sandboxAction": "S5HVoW_sandboxAction",
8879
+ "paneTab": "S5HVoW_paneTab",
8880
+ "uploadOverlayProgressFill": "S5HVoW_uploadOverlayProgressFill",
8738
8881
  "dirtyDot": "S5HVoW_dirtyDot",
8739
- "editorTreeSearch": "S5HVoW_editorTreeSearch",
8740
- "tab": "S5HVoW_tab",
8741
- "editorTreeDock": "S5HVoW_editorTreeDock",
8742
- "editorSearchInput": "S5HVoW_editorSearchInput",
8882
+ "dropRight": "S5HVoW_dropRight",
8883
+ "explorerBroken": "S5HVoW_explorerBroken",
8884
+ "gitLogRow": "S5HVoW_gitLogRow",
8743
8885
  "gitLogHash": "S5HVoW_gitLogHash",
8744
- "gitRow": "S5HVoW_gitRow",
8745
- "gitLogMeta": "S5HVoW_gitLogMeta",
8886
+ "dividerCol": "S5HVoW_dividerCol",
8887
+ "terminalDepsActions": "S5HVoW_terminalDepsActions",
8888
+ "tabBoundaryError": "S5HVoW_tabBoundaryError",
8889
+ "dropUp": "S5HVoW_dropUp",
8890
+ "browserLiveTarget": "S5HVoW_browserLiveTarget",
8891
+ "browserInput": "S5HVoW_browserInput",
8892
+ "explorerRowDropTarget": "S5HVoW_explorerRowDropTarget",
8893
+ "sandboxStatusText": "S5HVoW_sandboxStatusText",
8894
+ "editorTreePanel": "S5HVoW_editorTreePanel",
8895
+ "tabTitle": "S5HVoW_tabTitle",
8896
+ "gitWorktreeRow": "S5HVoW_gitWorktreeRow",
8897
+ "gitDiffExpand": "S5HVoW_gitDiffExpand",
8898
+ "split": "S5HVoW_split",
8899
+ "terminalRetry": "S5HVoW_terminalRetry",
8746
8900
  "producedRow": "S5HVoW_producedRow",
8747
- "explorerCopied": "S5HVoW_explorerCopied",
8901
+ "dsh-row-in": "S5HVoW_dsh-row-in",
8902
+ "panel": "S5HVoW_panel",
8903
+ "panelResizeActive": "S5HVoW_panelResizeActive",
8904
+ "dropDown": "S5HVoW_dropDown",
8905
+ "terminal": "S5HVoW_terminal",
8906
+ "gitWorktreeLabel": "S5HVoW_gitWorktreeLabel",
8907
+ "gitDiffLine": "S5HVoW_gitDiffLine",
8908
+ "gitPlaceholder": "S5HVoW_gitPlaceholder",
8909
+ "splitRow": "S5HVoW_splitRow",
8910
+ "gitCommit": "S5HVoW_gitCommit",
8748
8911
  "paneDrop": "S5HVoW_paneDrop",
8749
- "divider": "S5HVoW_divider",
8750
- "explorerHeader": "S5HVoW_explorerHeader",
8751
- "tabBarPlus": "S5HVoW_tabBarPlus",
8752
- "gitSection": "S5HVoW_gitSection",
8753
- "gitDiffTabHeader": "S5HVoW_gitDiffTabHeader",
8754
- "gitLogSubject": "S5HVoW_gitLogSubject",
8755
- "uploadOverlayProgress": "S5HVoW_uploadOverlayProgress",
8756
- "sandboxDot": "S5HVoW_sandboxDot",
8757
- "toggleButton": "S5HVoW_toggleButton",
8758
- "paneEmptyCards": "S5HVoW_paneEmptyCards",
8759
- "terminalWrap": "S5HVoW_terminalWrap",
8760
- "gitDiffFileChevron": "S5HVoW_gitDiffFileChevron",
8761
- "gitSectionHeader": "S5HVoW_gitSectionHeader",
8762
- "explorerName": "S5HVoW_explorerName",
8763
- "editorPlaceholder": "S5HVoW_editorPlaceholder",
8764
- "floatWindowDragging": "S5HVoW_floatWindowDragging",
8765
- "editorTreePanelFull": "S5HVoW_editorTreePanelFull",
8766
- "terminalDepsCommandRow": "S5HVoW_terminalDepsCommandRow",
8767
- "uploadDropZoneText": "S5HVoW_uploadDropZoneText",
8912
+ "paneContent": "S5HVoW_paneContent",
8913
+ "openWithPinActive": "S5HVoW_openWithPinActive",
8914
+ "dropLeft": "S5HVoW_dropLeft",
8915
+ "terminalRepairCommand": "S5HVoW_terminalRepairCommand",
8916
+ "gitDiffFilePath": "S5HVoW_gitDiffFilePath",
8917
+ "uploadOverlay": "S5HVoW_uploadOverlay",
8918
+ "editorSearchHint": "S5HVoW_editorSearchHint",
8919
+ "uploadOverlayTitle": "S5HVoW_uploadOverlayTitle",
8920
+ "gitDiffCode": "S5HVoW_gitDiffCode",
8921
+ "editorTreeSearch": "S5HVoW_editorTreeSearch",
8922
+ "splitChild": "S5HVoW_splitChild",
8923
+ "tabBadge": "S5HVoW_tabBadge",
8924
+ "uploadOverlayCard": "S5HVoW_uploadOverlayCard",
8768
8925
  "orphanedType": "S5HVoW_orphanedType",
8769
- "terminalBanner": "S5HVoW_terminalBanner",
8770
- "explorer": "S5HVoW_explorer",
8771
- "gitDiffFileChevronExpanded": "S5HVoW_gitDiffFileChevronExpanded",
8772
- "producedChip": "S5HVoW_producedChip",
8773
- "editor": "S5HVoW_editor",
8774
- "gitCommit": "S5HVoW_gitCommit",
8775
8926
  "gitDiffMetaText": "S5HVoW_gitDiffMetaText",
8776
- "gitBadge": "S5HVoW_gitBadge",
8777
- "paneTabHidden": "S5HVoW_paneTabHidden",
8778
- "dropOverlay": "S5HVoW_dropOverlay",
8779
- "editorStatusError": "S5HVoW_editorStatusError",
8780
- "splitChild": "S5HVoW_splitChild",
8927
+ "explorerSymlink": "S5HVoW_explorerSymlink",
8928
+ "gitLogLine1": "S5HVoW_gitLogLine1",
8781
8929
  "tabClose": "S5HVoW_tabClose",
8782
- "browserBlockedButton": "S5HVoW_browserBlockedButton",
8783
- "gitDiffTab": "S5HVoW_gitDiffTab",
8784
- "sandboxAction": "S5HVoW_sandboxAction",
8785
- "editorDownloadLink": "S5HVoW_editorDownloadLink",
8786
- "uploadOverlayCancel": "S5HVoW_uploadOverlayCancel",
8787
- "editorTitle": "S5HVoW_editorTitle",
8788
- "gitDiffFileOld": "S5HVoW_gitDiffFileOld",
8789
- "gitDiffLine": "S5HVoW_gitDiffLine",
8930
+ "floatWindow": "S5HVoW_floatWindow",
8790
8931
  "editorStatus": "S5HVoW_editorStatus",
8791
- "floatResize": "S5HVoW_floatResize",
8792
- "browserBlockedTitle": "S5HVoW_browserBlockedTitle",
8793
- "gitDiffDel": "S5HVoW_gitDiffDel",
8794
- "editorTreeToggleActive": "S5HVoW_editorTreeToggleActive",
8795
- "browserBlockedDesc": "S5HVoW_browserBlockedDesc",
8796
- "terminalRepairCommand": "S5HVoW_terminalRepairCommand",
8797
- "toggleCluster": "S5HVoW_toggleCluster",
8798
- "gitDiffAdd": "S5HVoW_gitDiffAdd",
8799
- "gitCommitInput": "S5HVoW_gitCommitInput",
8800
- "git": "S5HVoW_git",
8801
- "boundaryError": "S5HVoW_boundaryError",
8802
- "producedMore": "S5HVoW_producedMore",
8803
- "gitError": "S5HVoW_gitError",
8804
- "panelResizeActive": "S5HVoW_panelResizeActive",
8805
- "panel": "S5HVoW_panel",
8806
- "tabBarDrop": "S5HVoW_tabBarDrop",
8807
- "gitRowMain": "S5HVoW_gitRowMain",
8808
- "editorMain": "S5HVoW_editorMain",
8809
- "floatClose": "S5HVoW_floatClose",
8810
- "tabTitle": "S5HVoW_tabTitle",
8811
- "explorerRow": "S5HVoW_explorerRow",
8812
- "browserInput": "S5HVoW_browserInput",
8813
- "panelHidden": "S5HVoW_panelHidden",
8814
- "explorerEmpty": "S5HVoW_explorerEmpty",
8815
- "browserMessage": "S5HVoW_browserMessage",
8816
- "floatTitle": "S5HVoW_floatTitle",
8817
- "paneCard": "S5HVoW_paneCard",
8818
- "browserBlocked": "S5HVoW_browserBlocked",
8819
- "tabBoundaryError": "S5HVoW_tabBoundaryError",
8820
- "uploadDropZone": "S5HVoW_uploadDropZone",
8821
- "gitHeader": "S5HVoW_gitHeader",
8822
- "gitBranchSelect": "S5HVoW_gitBranchSelect",
8823
- "dividerCol": "S5HVoW_dividerCol",
8824
- "gitDiffTabTitle": "S5HVoW_gitDiffTabTitle",
8825
- "editorBanner": "S5HVoW_editorBanner",
8826
- "gitLogRow": "S5HVoW_gitLogRow",
8827
- "editorTreePanel": "S5HVoW_editorTreePanel",
8828
- "uploadDropChatCard": "S5HVoW_uploadDropChatCard",
8829
- "panelResize": "S5HVoW_panelResize",
8830
- "dropCenter": "S5HVoW_dropCenter",
8831
- "explorerRowDropTarget": "S5HVoW_explorerRowDropTarget",
8832
- "producedLabel": "S5HVoW_producedLabel",
8833
- "openWithChevron": "S5HVoW_openWithChevron",
8834
- "uploadOverlayCard": "S5HVoW_uploadOverlayCard",
8835
- "editorBody": "S5HVoW_editorBody",
8836
- "uploadOverlayProgressFill": "S5HVoW_uploadOverlayProgressFill",
8837
- "gitDiffCtx": "S5HVoW_gitDiffCtx",
8838
- "gitLogMore": "S5HVoW_gitLogMore",
8839
- "pane": "S5HVoW_pane",
8840
- "editorSearchResult": "S5HVoW_editorSearchResult",
8841
- "editorCm": "S5HVoW_editorCm",
8842
- "uploadOverlay": "S5HVoW_uploadOverlay",
8843
8932
  "gitLogRef": "S5HVoW_gitLogRef",
8933
+ "gitLogMeta": "S5HVoW_gitLogMeta",
8934
+ "terminalDepsHint": "S5HVoW_terminalDepsHint",
8935
+ "paneEmptyCards": "S5HVoW_paneEmptyCards",
8936
+ "floatDropHintLabel": "S5HVoW_floatDropHintLabel",
8937
+ "uploadDropZoneText": "S5HVoW_uploadDropZoneText",
8938
+ "openWithChevron": "S5HVoW_openWithChevron",
8939
+ "sandboxDot": "S5HVoW_sandboxDot",
8940
+ "editorPlaceholder": "S5HVoW_editorPlaceholder",
8941
+ "browserBlocked": "S5HVoW_browserBlocked",
8942
+ "pinnedTab": "S5HVoW_pinnedTab",
8943
+ "terminalWrap": "S5HVoW_terminalWrap",
8844
8944
  "openWithName": "S5HVoW_openWithName",
8845
- "editorBinary": "S5HVoW_editorBinary",
8846
- "tabList": "S5HVoW_tabList",
8847
- "sandboxStatus": "S5HVoW_sandboxStatus",
8945
+ "browser": "S5HVoW_browser",
8946
+ "editorBody": "S5HVoW_editorBody",
8947
+ "gitName": "S5HVoW_gitName",
8948
+ "gitDiffFileOld": "S5HVoW_gitDiffFileOld",
8949
+ "editorTreeToggleActive": "S5HVoW_editorTreeToggleActive",
8950
+ "editorError": "S5HVoW_editorError",
8848
8951
  "browserStart": "S5HVoW_browserStart",
8849
- "gitLink": "S5HVoW_gitLink",
8850
- "gitDiffHunkHeader": "S5HVoW_gitDiffHunkHeader",
8851
- "dsh-toc-flash": "S5HVoW_dsh-toc-flash",
8852
- "gitWorktreeRow": "S5HVoW_gitWorktreeRow",
8853
- "tabBadge": "S5HVoW_tabBadge",
8952
+ "openWithLabel": "S5HVoW_openWithLabel",
8953
+ "browserLive": "S5HVoW_browserLive",
8854
8954
  "gitDiffFile": "S5HVoW_gitDiffFile",
8855
- "paneTab": "S5HVoW_paneTab",
8856
- "terminalDepsBanner": "S5HVoW_terminalDepsBanner",
8857
- "editorBinaryNotice": "S5HVoW_editorBinaryNotice",
8858
- "browserFrame": "S5HVoW_browserFrame",
8955
+ "explorerName": "S5HVoW_explorerName",
8956
+ "explorerError": "S5HVoW_explorerError",
8957
+ "gitLink": "S5HVoW_gitLink",
8958
+ "gitDiffDel": "S5HVoW_gitDiffDel",
8959
+ "gitDiffMeta": "S5HVoW_gitDiffMeta",
8960
+ "gitCommitButton": "S5HVoW_gitCommitButton",
8961
+ "dropOverlay": "S5HVoW_dropOverlay",
8962
+ "gitRowSelected": "S5HVoW_gitRowSelected",
8963
+ "floatClose": "S5HVoW_floatClose",
8964
+ "gitSection": "S5HVoW_gitSection",
8965
+ "iconButton": "S5HVoW_iconButton",
8966
+ "explorerEmpty": "S5HVoW_explorerEmpty",
8967
+ "explorerRowRevealed": "S5HVoW_explorerRowRevealed",
8968
+ "gitDiff": "S5HVoW_gitDiff",
8969
+ "tabBarDrop": "S5HVoW_tabBarDrop",
8970
+ "gitDiffTabTitle": "S5HVoW_gitDiffTabTitle",
8859
8971
  "dividerActive": "S5HVoW_dividerActive",
8860
- "tabBar": "S5HVoW_tabBar",
8861
- "sandboxStatusOff": "S5HVoW_sandboxStatusOff",
8862
- "splitCol": "S5HVoW_splitCol",
8863
- "floatDropHint": "S5HVoW_floatDropHint",
8972
+ "gitDiffAdd": "S5HVoW_gitDiffAdd",
8973
+ "gitLogMore": "S5HVoW_gitLogMore",
8974
+ "gitDiffHunk": "S5HVoW_gitDiffHunk",
8975
+ "tab": "S5HVoW_tab",
8976
+ "uploadOverlayProgress": "S5HVoW_uploadOverlayProgress",
8864
8977
  "uploadOverlayStatus": "S5HVoW_uploadOverlayStatus",
8865
- "editorError": "S5HVoW_editorError",
8866
- "browser": "S5HVoW_browser",
8978
+ "gitEmpty": "S5HVoW_gitEmpty",
8867
8979
  "gitLogLine2": "S5HVoW_gitLogLine2",
8868
- "sandboxStatusOn": "S5HVoW_sandboxStatusOn",
8869
8980
  "gitDiffNum": "S5HVoW_gitDiffNum",
8870
- "gitDiffFilePath": "S5HVoW_gitDiffFilePath",
8871
- "uploadDropHero": "S5HVoW_uploadDropHero",
8872
- "dividerRow": "S5HVoW_dividerRow",
8873
- "gitWorktreeLabel": "S5HVoW_gitWorktreeLabel",
8874
- "terminalDepsHint": "S5HVoW_terminalDepsHint",
8875
- "gitDiffHunkSection": "S5HVoW_gitDiffHunkSection",
8876
- "editorSearchHint": "S5HVoW_editorSearchHint",
8877
- "explorerHidden": "S5HVoW_explorerHidden",
8878
- "gitDiff": "S5HVoW_gitDiff",
8879
- "gitDiffCode": "S5HVoW_gitDiffCode",
8880
- "gitConfirmDesc": "S5HVoW_gitConfirmDesc",
8881
- "split": "S5HVoW_split",
8882
- "selectionPopup": "S5HVoW_selectionPopup",
8883
- "floatHeader": "S5HVoW_floatHeader",
8884
- "explorerDir": "S5HVoW_explorerDir",
8885
- "iconButton": "S5HVoW_iconButton",
8886
- "gitRowSelected": "S5HVoW_gitRowSelected",
8887
- "floatWindow": "S5HVoW_floatWindow",
8981
+ "dropCenter": "S5HVoW_dropCenter",
8888
8982
  "explorerRef": "S5HVoW_explorerRef",
8889
- "tabActive": "S5HVoW_tabActive",
8890
- "editorHeader": "S5HVoW_editorHeader",
8891
- "dsh-row-in": "S5HVoW_dsh-row-in",
8892
- "gitLogLine1": "S5HVoW_gitLogLine1",
8893
- "browserLiveStatus": "S5HVoW_browserLiveStatus",
8894
- "browserLiveTarget": "S5HVoW_browserLiveTarget",
8895
- "browserBar": "S5HVoW_browserBar",
8896
- "uploadDropChatHint": "S5HVoW_uploadDropChatHint",
8897
- "browserLive": "S5HVoW_browserLive",
8898
- "explorerRowRevealed": "S5HVoW_explorerRowRevealed",
8899
- "dropUp": "S5HVoW_dropUp",
8900
- "editorPathInput": "S5HVoW_editorPathInput",
8901
- "gitEmpty": "S5HVoW_gitEmpty",
8902
- "dropRight": "S5HVoW_dropRight",
8903
- "gitDiffHunk": "S5HVoW_gitDiffHunk",
8904
- "gitDiffExpand": "S5HVoW_gitDiffExpand",
8905
- "terminal": "S5HVoW_terminal",
8906
- "explorerSymlink": "S5HVoW_explorerSymlink",
8907
- "openWithPinActive": "S5HVoW_openWithPinActive",
8908
- "terminalDepsActions": "S5HVoW_terminalDepsActions",
8909
- "gitPlaceholder": "S5HVoW_gitPlaceholder",
8910
8983
  "uploadDropZonePill": "S5HVoW_uploadDropZonePill",
8911
- "editorTreeResize": "S5HVoW_editorTreeResize",
8912
8984
  "floatContent": "S5HVoW_floatContent",
8913
- "sandboxStatusText": "S5HVoW_sandboxStatusText",
8914
- "terminalBannerUrl": "S5HVoW_terminalBannerUrl"
8985
+ "editorBanner": "S5HVoW_editorBanner",
8986
+ "browserMessage": "S5HVoW_browserMessage",
8987
+ "tabBarPlus": "S5HVoW_tabBarPlus",
8988
+ "editor": "S5HVoW_editor",
8989
+ "selectionPopup": "S5HVoW_selectionPopup",
8990
+ "gitBadge": "S5HVoW_gitBadge",
8991
+ "pane": "S5HVoW_pane",
8992
+ "gitDiffFileChevronExpanded": "S5HVoW_gitDiffFileChevronExpanded",
8993
+ "tabList": "S5HVoW_tabList",
8994
+ "editorPathInput": "S5HVoW_editorPathInput",
8995
+ "explorerHidden": "S5HVoW_explorerHidden",
8996
+ "browserFrame": "S5HVoW_browserFrame",
8997
+ "paneTabHidden": "S5HVoW_paneTabHidden",
8998
+ "panelHidden": "S5HVoW_panelHidden",
8999
+ "editorStatusError": "S5HVoW_editorStatusError",
9000
+ "browserBlockedDesc": "S5HVoW_browserBlockedDesc",
9001
+ "editorDownloadLink": "S5HVoW_editorDownloadLink",
9002
+ "browserBlockedButton": "S5HVoW_browserBlockedButton",
9003
+ "gitLogSubject": "S5HVoW_gitLogSubject",
9004
+ "gitCommitInput": "S5HVoW_gitCommitInput"
8915
9005
  };
8916
9006
  //#endregion
9007
+ //#region src/client/TerminalWaitBanner.tsx
9008
+ /**
9009
+ * The "Agent 正在等待 {needle}" wait banner: rendered at the top of an
9010
+ * agent-owned terminal's view while the model blocks in terminal_wait_for.
9011
+ * The skip button asks the host to abort every active wait on the terminal
9012
+ * (`agent-pty.skip-wait`); the banner disappears when the host's next
9013
+ * agent-terminals push drops the waiting field — no optimistic UI. Kept in
9014
+ * its own module (no xterm imports) so jsdom tests can render it directly.
9015
+ */
9016
+ /** Cap the needle shown inline; the full text rides the title tooltip. */
9017
+ const NEEDLE_DISPLAY_CAP = 80;
9018
+ /** Truncate one needle for inline display (title attr carries the full text). */
9019
+ function truncateNeedle(needle) {
9020
+ return needle.length > NEEDLE_DISPLAY_CAP ? `${needle.slice(0, 79)}…` : needle;
9021
+ }
9022
+ function TerminalWaitBanner(props) {
9023
+ const { needle, onSkip } = props;
9024
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
9025
+ className: sidebar_module_css_default.terminalWaitBanner,
9026
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
9027
+ className: sidebar_module_css_default.terminalWaitNeedle,
9028
+ title: needle,
9029
+ children: t("terminalWaitBanner", { needle: truncateNeedle(needle) })
9030
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
9031
+ type: "button",
9032
+ className: sidebar_module_css_default.terminalRetry,
9033
+ onClick: onSkip,
9034
+ children: t("terminalSkipWait")
9035
+ })]
9036
+ });
9037
+ }
9038
+ //#endregion
8917
9039
  //#region src/client/TerminalView.tsx
8918
9040
  /**
8919
9041
  * The interactive terminal: xterm.js over a WebSocket to the host pty.
@@ -8958,6 +9080,12 @@ globalThis.__dshChunks__["terminal"] = (require) => {
8958
9080
  */
8959
9081
  const PTY_DEPS_MISSING = "pty-deps-missing";
8960
9082
  /**
9083
+ * The WS close-reason prefix the host sends when the CONFIGURED shell was
9084
+ * not found (mirror of src/index.ts wsCloseReasonOf; wire contract, keep the
9085
+ * literal in lockstep). The view renders a localized, actionable banner.
9086
+ */
9087
+ const SHELL_NOT_FOUND_PREFIX = "shell-not-found:";
9088
+ /**
8961
9089
  * Curated ANSI palettes for the terminal. The surface colors (background,
8962
9090
  * foreground, cursor, selection) ride the theme tokens so the terminal
8963
9091
  * blends with the panel in both schemes; the 16 ANSI colors are the same
@@ -9022,6 +9150,24 @@ globalThis.__dshChunks__["terminal"] = (require) => {
9022
9150
  const [fatal, setFatal] = (0, react.useState)(null);
9023
9151
  const [depsFatal, setDepsFatal] = (0, react.useState)(null);
9024
9152
  const [lastUrl, setLastUrl] = (0, react.useState)(null);
9153
+ const agentUuid = isAgentTabId(tabId) ? agentUuidOf(tabId) : null;
9154
+ const [waiting, setWaiting] = (0, react.useState)(void 0);
9155
+ (0, react.useEffect)(() => {
9156
+ if (agentUuid === null) return;
9157
+ const read = () => {
9158
+ const next = store.getSnapshot().state?.agentWaits?.[agentUuid];
9159
+ setWaiting((prev) => {
9160
+ const nextValue = next === void 0 ? void 0 : {
9161
+ needle: next.needle,
9162
+ since: next.since
9163
+ };
9164
+ if (prev?.needle === nextValue?.needle && prev?.since === nextValue?.since) return prev;
9165
+ return nextValue;
9166
+ });
9167
+ };
9168
+ read();
9169
+ return store.subscribe(read);
9170
+ }, [agentUuid, store]);
9025
9171
  const connectRef = (0, react.useRef)(null);
9026
9172
  (0, react.useEffect)(() => {
9027
9173
  const host = hostRef.current;
@@ -9117,6 +9263,10 @@ globalThis.__dshChunks__["terminal"] = (require) => {
9117
9263
  });
9118
9264
  return;
9119
9265
  }
9266
+ if (event.code === 1011 && event.reason.startsWith(SHELL_NOT_FOUND_PREFIX)) {
9267
+ setFatal(t("terminalShellNotFound", { name: event.reason.slice(16) || "?" }));
9268
+ return;
9269
+ }
9120
9270
  if (event.code === 1011 && event.reason !== "") {
9121
9271
  setFatal(event.reason);
9122
9272
  return;
@@ -9192,6 +9342,12 @@ globalThis.__dshChunks__["terminal"] = (require) => {
9192
9342
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
9193
9343
  className: sidebar_module_css_default.terminalWrap,
9194
9344
  children: [
9345
+ agentUuid !== null && waiting !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TerminalWaitBanner, {
9346
+ needle: waiting.needle,
9347
+ onSkip: () => {
9348
+ api.agentSkipWait(agentUuid).catch(() => {});
9349
+ }
9350
+ }),
9195
9351
  depsFatal !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TerminalDepsBanner, {
9196
9352
  deps: depsFatal,
9197
9353
  onRetry: () => {