dsh-coding-sidebar 1.0.8 → 1.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +2 -2
  2. package/lib/client-editor.js +257 -178
  3. package/lib/client-registry.js +959 -345
  4. package/lib/client-terminal.js +307 -172
  5. package/lib/client.js +952 -338
  6. package/lib/index.js +214 -2
  7. package/lib/types/changes-ops.d.ts +31 -0
  8. package/lib/types/client/DiffView.d.ts +33 -1
  9. package/lib/types/client/EditorHost.d.ts +3 -0
  10. package/lib/types/client/FileTree.d.ts +4 -0
  11. package/lib/types/client/SessionLens.d.ts +4 -0
  12. package/lib/types/client/TerminalWaitBanner.d.ts +6 -0
  13. package/lib/types/client/TreePanel.d.ts +3 -0
  14. package/lib/types/client/api.d.ts +36 -0
  15. package/lib/types/client/locales.d.ts +20 -0
  16. package/lib/types/client/redact.d.ts +14 -0
  17. package/lib/types/client/state.d.ts +15 -0
  18. package/lib/types/fs-operations.d.ts +42 -0
  19. package/lib/types/git.d.ts +15 -0
  20. package/package.json +1 -1
  21. package/src/changes-ops.ts +78 -0
  22. package/src/client/DiffTab.tsx +10 -1
  23. package/src/client/DiffView.tsx +174 -19
  24. package/src/client/EditorHost.tsx +8 -1
  25. package/src/client/FileTree.tsx +147 -4
  26. package/src/client/GitView.tsx +37 -0
  27. package/src/client/SessionLens.tsx +95 -0
  28. package/src/client/Sidebar.tsx +54 -3
  29. package/src/client/TerminalView.tsx +28 -0
  30. package/src/client/TerminalWaitBanner.tsx +32 -0
  31. package/src/client/TreePanel.tsx +6 -1
  32. package/src/client/api.ts +24 -0
  33. package/src/client/locales-ar.ts +20 -0
  34. package/src/client/locales-de.ts +20 -0
  35. package/src/client/locales-fr.ts +20 -0
  36. package/src/client/locales-hi.ts +20 -0
  37. package/src/client/locales-id.ts +20 -0
  38. package/src/client/locales-it.ts +20 -0
  39. package/src/client/locales-ja.ts +20 -0
  40. package/src/client/locales-ko.ts +20 -0
  41. package/src/client/locales-nl.ts +20 -0
  42. package/src/client/locales-pl.ts +20 -0
  43. package/src/client/locales-pt.ts +20 -0
  44. package/src/client/locales-ru.ts +20 -0
  45. package/src/client/locales-sv.ts +20 -0
  46. package/src/client/locales-th.ts +20 -0
  47. package/src/client/locales-tr.ts +20 -0
  48. package/src/client/locales-vi.ts +20 -0
  49. package/src/client/locales-zh-HK.ts +20 -0
  50. package/src/client/locales-zh-MO.ts +20 -0
  51. package/src/client/locales-zh-TW.ts +20 -0
  52. package/src/client/locales.ts +40 -0
  53. package/src/client/redact.ts +39 -0
  54. package/src/client/sidebar.module.css +183 -0
  55. package/src/client/state.ts +42 -3
  56. package/src/fs-operations.ts +126 -4
  57. package/src/git.ts +39 -2
  58. package/src/index.ts +56 -1
@@ -194,7 +194,8 @@ window.__ModuleLoader__.load({
194
194
  expanded: [],
195
195
  revealed: [],
196
196
  splits: leaf,
197
- floats: []
197
+ floats: [],
198
+ agentWaits: {}
198
199
  };
199
200
  }
200
201
  /** Whether a tree node (or any descendant) carries the given pane/split id. */
@@ -809,6 +810,19 @@ window.__ModuleLoader__.load({
809
810
  function agentTabId(uuid) {
810
811
  return `${AGENT_TAB_PREFIX}${uuid}`;
811
812
  }
813
+ /** Shallow equality of two agent-wait maps (same keys, same needle+since). */
814
+ function sameAgentWaits(a, b) {
815
+ if (a === void 0) return Object.keys(b).length === 0;
816
+ const aKeys = Object.keys(a);
817
+ if (aKeys.length !== Object.keys(b).length) return false;
818
+ for (const key of aKeys) {
819
+ const av = a[key];
820
+ const bv = b[key];
821
+ if (av === void 0 || bv === void 0) return false;
822
+ if (av.needle !== bv.needle || av.since !== bv.since) return false;
823
+ }
824
+ return true;
825
+ }
812
826
  /**
813
827
  * Reconcile the sidebar's agent-terminal tabs with the host's live list.
814
828
  * The host pushes the current list of agent terminals (created by the model
@@ -827,7 +841,12 @@ window.__ModuleLoader__.load({
827
841
  const serverUuids = new Set(agentTerminals.map((t) => t.uuid));
828
842
  const toAdd = agentTerminals.filter((t) => !existingUuids.has(t.uuid));
829
843
  const toRemove = existingAgentTabs.filter((tab) => !serverUuids.has(agentUuidOf(tab.id)) && tab.pin === void 0);
830
- if (toAdd.length === 0 && toRemove.length === 0) return state;
844
+ const serverWaits = {};
845
+ for (const terminal of agentTerminals) if (terminal.waiting !== void 0 && terminal.waiting !== null) serverWaits[terminal.uuid] = {
846
+ needle: terminal.waiting.needle,
847
+ since: terminal.waiting.since
848
+ };
849
+ if (toAdd.length === 0 && toRemove.length === 0 && sameAgentWaits(state.agentWaits, serverWaits)) return state;
831
850
  let splits = state.splits;
832
851
  let floats = state.floats;
833
852
  for (const tab of toRemove) {
@@ -841,7 +860,8 @@ window.__ModuleLoader__.load({
841
860
  let next = {
842
861
  ...state,
843
862
  splits,
844
- floats
863
+ floats,
864
+ agentWaits: serverWaits
845
865
  };
846
866
  for (const terminal of toAdd) {
847
867
  const tab = {
@@ -993,7 +1013,8 @@ window.__ModuleLoader__.load({
993
1013
  expanded: record.expanded,
994
1014
  revealed: [],
995
1015
  splits: migratedSplits,
996
- floats
1016
+ floats,
1017
+ agentWaits: {}
997
1018
  };
998
1019
  }
999
1020
  /** Collapse persisted split panes left empty after ephemeral diff tabs are dropped. */
@@ -1468,7 +1489,7 @@ window.__ModuleLoader__.load({
1468
1489
  if (claimed) return tab;
1469
1490
  }
1470
1491
  }
1471
- const SIDEBAR_SERVICE_VERSION = "1.0.8";
1492
+ const SIDEBAR_SERVICE_VERSION = "1.0.10";
1472
1493
  /**
1473
1494
  * Monotonic capability list consumers use to gate new API usage (features
1474
1495
  * are never removed). Each string names a v0.12.0+ capability:
@@ -2084,6 +2105,26 @@ window.__ModuleLoader__.load({
2084
2105
  producedOpen: "在侧边栏中打开",
2085
2106
  showInFolder: "在文件夹中显示",
2086
2107
  disconnected: "终端连接断开,重连中…",
2108
+ terminalWaitBanner: "Agent 正在等待 {needle}",
2109
+ terminalSkipWait: "跳过等待",
2110
+ gitFoldExpand: "展开 {count} 行上下文",
2111
+ gitFoldLoading: "展开中…",
2112
+ gitFoldFailed: "展开失败",
2113
+ rename: "重命名",
2114
+ renameInvalid: "名称不能为空,且不能包含路径分隔符。",
2115
+ delete: "删除",
2116
+ deleteTitle: "删除「{name}」?",
2117
+ deleteDescFile: "将永久删除该文件,此操作不可撤销。",
2118
+ deleteDescDir: "将永久删除该目录及其全部内容,此操作不可撤销。",
2119
+ dismiss: "关闭",
2120
+ changesSessionGit: "Git 变动",
2121
+ changesSessionLens: "会话变动",
2122
+ changesEmpty: "本会话尚无文件操作",
2123
+ changesCount: "{count} 个文件操作",
2124
+ changesRedacted: "[已脱敏]",
2125
+ changesBinary: "二进制文件,无法预览",
2126
+ changesPreviewError: "预览读取失败:{message}",
2127
+ changesLens: "视角",
2087
2128
  exited: "终端进程已退出",
2088
2129
  noSession: "选择一个会话以使用侧边栏",
2089
2130
  pluginNotLoaded: "插件未加载,标签页暂不可用:",
@@ -2420,6 +2461,26 @@ window.__ModuleLoader__.load({
2420
2461
  producedOpen: "Open in sidebar",
2421
2462
  showInFolder: "Show in folder",
2422
2463
  disconnected: "Terminal disconnected, reconnecting…",
2464
+ terminalWaitBanner: "Agent is waiting for {needle}",
2465
+ terminalSkipWait: "Skip wait",
2466
+ gitFoldExpand: "Expand {count} context lines",
2467
+ gitFoldLoading: "Expanding…",
2468
+ gitFoldFailed: "Failed to expand",
2469
+ rename: "Rename",
2470
+ renameInvalid: "The name cannot be empty or contain path separators.",
2471
+ delete: "Delete",
2472
+ deleteTitle: "Delete \"{name}\"?",
2473
+ deleteDescFile: "This permanently deletes the file. This cannot be undone.",
2474
+ deleteDescDir: "This permanently deletes the directory and everything inside it. This cannot be undone.",
2475
+ dismiss: "Dismiss",
2476
+ changesSessionGit: "Git changes",
2477
+ changesSessionLens: "Session changes",
2478
+ changesEmpty: "No file operations in this session",
2479
+ changesCount: "{count} file operations",
2480
+ changesRedacted: "[REDACTED]",
2481
+ changesBinary: "Binary file — no preview",
2482
+ changesPreviewError: "Preview read failed: {message}",
2483
+ changesLens: "Lens",
2423
2484
  exited: "Terminal process exited",
2424
2485
  noSession: "Select a conversation to use the sidebar",
2425
2486
  pluginNotLoaded: "Plugin not loaded; tab unavailable:",
@@ -2954,7 +3015,7 @@ window.__ModuleLoader__.load({
2954
3015
  }
2955
3016
  //#endregion
2956
3017
  //#region \0dsh-css:/Users/libing/kk_Projects/dsh-coding-sidebar/src/client/sidebar.module.css.mjs
2957
- const css$4 = "[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}";
3018
+ const css$4 = "[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_changesLensToggle{flex:none;gap:2px;padding:2px;display:flex}.S5HVoW_changesLensTab{height:24px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;background:0 0;border:none;border-radius:6px;flex:1}.S5HVoW_changesLensTab:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_changesLensTabActive,.S5HVoW_changesLensTabActive:hover{background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-label-primary)}.S5HVoW_sessionLens{flex:1;min-height:0;overflow-y:auto}.S5HVoW_sessionLensBar{align-items:center;gap:6px;height:26px;padding:0 4px;display:flex}.S5HVoW_sessionLensCount{min-width:0;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:1}.S5HVoW_sessionLensEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.S5HVoW_sessionLensItem{border-bottom:1px solid var(--dsw-alias-border-l1)}.S5HVoW_sessionLensRow{box-sizing:border-box;width:100%;min-height:30px;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:6px;outline:none;align-items:center;gap:8px;padding:4px 10px;display:flex}.S5HVoW_sessionLensRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.S5HVoW_sessionLensPath{text-overflow:ellipsis;white-space:nowrap;text-align:left;direction:rtl;flex:1;min-width:0;overflow:hidden}.S5HVoW_sessionLensMeta{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.S5HVoW_sessionLensPreview{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);max-height:260px;font-family:var(--ds-font-family-code);font-size:var(--dsw-font-xxxs-11-font-size);color:var(--dsw-alias-label-primary);white-space:pre-wrap;word-break:break-word;border-radius:6px;margin:0 8px 6px;padding:6px 8px;line-height:1.5;overflow:auto}.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}";
2958
3019
  const tagId$4 = "dsh-external/dsh-coding-sidebar/sidebar.module.css";
2959
3020
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
2960
3021
  const tag = document.createElement("style");
@@ -2964,207 +3025,224 @@ window.__ModuleLoader__.load({
2964
3025
  document.head.appendChild(tag);
2965
3026
  }
2966
3027
  var sidebar_module_css_default = {
2967
- "editorTreePanel": "S5HVoW_editorTreePanel",
2968
- "editorSearchHint": "S5HVoW_editorSearchHint",
2969
- "paneContent": "S5HVoW_paneContent",
2970
- "editorTitle": "S5HVoW_editorTitle",
2971
- "selectionPopup": "S5HVoW_selectionPopup",
2972
- "browser": "S5HVoW_browser",
2973
- "toggleButton": "S5HVoW_toggleButton",
2974
- "editorHeader": "S5HVoW_editorHeader",
2975
- "editorTreeSearch": "S5HVoW_editorTreeSearch",
2976
- "dropLeft": "S5HVoW_dropLeft",
2977
- "explorerCopied": "S5HVoW_explorerCopied",
2978
- "producedRow": "S5HVoW_producedRow",
2979
- "gitRow": "S5HVoW_gitRow",
2980
- "browserLiveStatus": "S5HVoW_browserLiveStatus",
2981
- "floatWindow": "S5HVoW_floatWindow",
2982
- "splitChild": "S5HVoW_splitChild",
2983
- "editorTreePanelFull": "S5HVoW_editorTreePanelFull",
2984
- "orphanedType": "S5HVoW_orphanedType",
2985
- "terminalDepsActions": "S5HVoW_terminalDepsActions",
3028
+ "sandboxAction": "S5HVoW_sandboxAction",
3029
+ "gitHeader": "S5HVoW_gitHeader",
3030
+ "floatHeader": "S5HVoW_floatHeader",
2986
3031
  "gitSection": "S5HVoW_gitSection",
2987
- "gitDiffLine": "S5HVoW_gitDiffLine",
2988
- "tabBadge": "S5HVoW_tabBadge",
2989
- "floatClose": "S5HVoW_floatClose",
2990
- "explorerEmpty": "S5HVoW_explorerEmpty",
2991
- "panelBody": "S5HVoW_panelBody",
2992
- "uploadDropChatCard": "S5HVoW_uploadDropChatCard",
2993
- "gitDiffHunk": "S5HVoW_gitDiffHunk",
2994
- "tabBar": "S5HVoW_tabBar",
2995
- "floatContent": "S5HVoW_floatContent",
3032
+ "tabActive": "S5HVoW_tabActive",
3033
+ "explorerRowDropTarget": "S5HVoW_explorerRowDropTarget",
2996
3034
  "editorDownloadLink": "S5HVoW_editorDownloadLink",
2997
- "panelHidden": "S5HVoW_panelHidden",
2998
- "explorer": "S5HVoW_explorer",
2999
- "browserInput": "S5HVoW_browserInput",
3000
- "gitDiffDel": "S5HVoW_gitDiffDel",
3001
- "editorPlaceholder": "S5HVoW_editorPlaceholder",
3002
- "editorSearchInput": "S5HVoW_editorSearchInput",
3003
- "browserFrame": "S5HVoW_browserFrame",
3004
- "browserBlockedTitle": "S5HVoW_browserBlockedTitle",
3005
- "sandboxStatusOn": "S5HVoW_sandboxStatusOn",
3006
- "terminalDepsTitle": "S5HVoW_terminalDepsTitle",
3007
- "gitHeader": "S5HVoW_gitHeader",
3008
- "gitBadge": "S5HVoW_gitBadge",
3009
- "gitLogLine1": "S5HVoW_gitLogLine1",
3035
+ "explorerError": "S5HVoW_explorerError",
3036
+ "sandboxStatusOff": "S5HVoW_sandboxStatusOff",
3037
+ "sessionLensBar": "S5HVoW_sessionLensBar",
3038
+ "sessionLensPath": "S5HVoW_sessionLensPath",
3039
+ "pane": "S5HVoW_pane",
3040
+ "gitDiff": "S5HVoW_gitDiff",
3041
+ "gitError": "S5HVoW_gitError",
3042
+ "gitDiffTabTitle": "S5HVoW_gitDiffTabTitle",
3043
+ "uploadOverlayTitle": "S5HVoW_uploadOverlayTitle",
3044
+ "gitDiffFileChevronExpanded": "S5HVoW_gitDiffFileChevronExpanded",
3045
+ "gitCommitButton": "S5HVoW_gitCommitButton",
3046
+ "uploadDropZoneText": "S5HVoW_uploadDropZoneText",
3047
+ "splitChild": "S5HVoW_splitChild",
3048
+ "uploadDropChatHint": "S5HVoW_uploadDropChatHint",
3049
+ "browser": "S5HVoW_browser",
3050
+ "browserBlockedDesc": "S5HVoW_browserBlockedDesc",
3051
+ "gitEmpty": "S5HVoW_gitEmpty",
3052
+ "dirtyDot": "S5HVoW_dirtyDot",
3053
+ "gitDiffNum": "S5HVoW_gitDiffNum",
3054
+ "gitDiffCode": "S5HVoW_gitDiffCode",
3055
+ "producedLabel": "S5HVoW_producedLabel",
3056
+ "terminalDepsCommandRow": "S5HVoW_terminalDepsCommandRow",
3010
3057
  "openWithChevron": "S5HVoW_openWithChevron",
3058
+ "explorer": "S5HVoW_explorer",
3059
+ "tabTitle": "S5HVoW_tabTitle",
3060
+ "browserLive": "S5HVoW_browserLive",
3061
+ "editorStatusError": "S5HVoW_editorStatusError",
3062
+ "dropUp": "S5HVoW_dropUp",
3063
+ "editorTreeDock": "S5HVoW_editorTreeDock",
3064
+ "openWithPin": "S5HVoW_openWithPin",
3011
3065
  "browserLiveCanvas": "S5HVoW_browserLiveCanvas",
3012
- "uploadDropHero": "S5HVoW_uploadDropHero",
3013
- "uploadDropZoneText": "S5HVoW_uploadDropZoneText",
3014
- "terminalRetry": "S5HVoW_terminalRetry",
3066
+ "gitDiffFile": "S5HVoW_gitDiffFile",
3067
+ "browserLiveStatus": "S5HVoW_browserLiveStatus",
3015
3068
  "dropOverlay": "S5HVoW_dropOverlay",
3016
- "editorBody": "S5HVoW_editorBody",
3017
- "browserBlocked": "S5HVoW_browserBlocked",
3018
- "browserBlockedActions": "S5HVoW_browserBlockedActions",
3019
- "explorerBody": "S5HVoW_explorerBody",
3020
- "gitDiffTab": "S5HVoW_gitDiffTab",
3021
- "gitDiffTabHeader": "S5HVoW_gitDiffTabHeader",
3022
- "terminalBannerUrl": "S5HVoW_terminalBannerUrl",
3023
- "gitDiffTabTitle": "S5HVoW_gitDiffTabTitle",
3024
- "tabBoundaryError": "S5HVoW_tabBoundaryError",
3025
- "gitDiffFileChevron": "S5HVoW_gitDiffFileChevron",
3026
- "gitCommitInput": "S5HVoW_gitCommitInput",
3027
- "gitCommitButton": "S5HVoW_gitCommitButton",
3028
- "gitLogLine2": "S5HVoW_gitLogLine2",
3029
- "splitRow": "S5HVoW_splitRow",
3030
- "gitDiffMetaText": "S5HVoW_gitDiffMetaText",
3031
- "divider": "S5HVoW_divider",
3032
- "uploadOverlayCard": "S5HVoW_uploadOverlayCard",
3069
+ "editorMain": "S5HVoW_editorMain",
3070
+ "gitDiffFilePath": "S5HVoW_gitDiffFilePath",
3071
+ "panelResize": "S5HVoW_panelResize",
3072
+ "tabClose": "S5HVoW_tabClose",
3033
3073
  "explorerDir": "S5HVoW_explorerDir",
3034
- "sandboxStatus": "S5HVoW_sandboxStatus",
3035
- "browserBlockedButton": "S5HVoW_browserBlockedButton",
3036
- "tab": "S5HVoW_tab",
3037
- "gitDiffFile": "S5HVoW_gitDiffFile",
3074
+ "editorStatus": "S5HVoW_editorStatus",
3075
+ "dropRight": "S5HVoW_dropRight",
3076
+ "floatDropHint": "S5HVoW_floatDropHint",
3077
+ "floatTitle": "S5HVoW_floatTitle",
3078
+ "explorerName": "S5HVoW_explorerName",
3079
+ "editorPathInput": "S5HVoW_editorPathInput",
3080
+ "dsh-row-in": "S5HVoW_dsh-row-in",
3081
+ "editorBinary": "S5HVoW_editorBinary",
3082
+ "browserInput": "S5HVoW_browserInput",
3083
+ "tabBarPlus": "S5HVoW_tabBarPlus",
3038
3084
  "editorSearchResult": "S5HVoW_editorSearchResult",
3039
- "editorCm": "S5HVoW_editorCm",
3040
- "gitDiffFileOld": "S5HVoW_gitDiffFileOld",
3041
- "gitDiffNum": "S5HVoW_gitDiffNum",
3042
- "pinnedTab": "S5HVoW_pinnedTab",
3085
+ "browserFrame": "S5HVoW_browserFrame",
3086
+ "tab": "S5HVoW_tab",
3087
+ "browserBlockedTitle": "S5HVoW_browserBlockedTitle",
3088
+ "browserMessage": "S5HVoW_browserMessage",
3089
+ "uploadOverlayProgress": "S5HVoW_uploadOverlayProgress",
3090
+ "terminalRetry": "S5HVoW_terminalRetry",
3091
+ "terminalDepsTitle": "S5HVoW_terminalDepsTitle",
3092
+ "changesLensTab": "S5HVoW_changesLensTab",
3043
3093
  "gitDiffCtx": "S5HVoW_gitDiffCtx",
3044
- "dividerActive": "S5HVoW_dividerActive",
3045
- "terminalDepsCommandRow": "S5HVoW_terminalDepsCommandRow",
3046
- "gitDiffAdd": "S5HVoW_gitDiffAdd",
3094
+ "gitLogMore": "S5HVoW_gitLogMore",
3047
3095
  "floatDropHintLabel": "S5HVoW_floatDropHintLabel",
3048
- "explorerName": "S5HVoW_explorerName",
3049
- "editorTreeToggleActive": "S5HVoW_editorTreeToggleActive",
3050
- "gitLogRow": "S5HVoW_gitLogRow",
3051
- "gitLogRef": "S5HVoW_gitLogRef",
3052
- "uploadOverlayTitle": "S5HVoW_uploadOverlayTitle",
3053
- "floatWindowDragging": "S5HVoW_floatWindowDragging",
3054
- "sandboxAction": "S5HVoW_sandboxAction",
3055
- "browserStart": "S5HVoW_browserStart",
3096
+ "openWithName": "S5HVoW_openWithName",
3097
+ "gitWorktreeLabel": "S5HVoW_gitWorktreeLabel",
3056
3098
  "terminalDepsBanner": "S5HVoW_terminalDepsBanner",
3057
- "floatResize": "S5HVoW_floatResize",
3099
+ "terminal": "S5HVoW_terminal",
3100
+ "explorerRowRevealed": "S5HVoW_explorerRowRevealed",
3101
+ "paneTabHidden": "S5HVoW_paneTabHidden",
3102
+ "browserBlocked": "S5HVoW_browserBlocked",
3103
+ "terminalDepsNote": "S5HVoW_terminalDepsNote",
3104
+ "editorTreePanel": "S5HVoW_editorTreePanel",
3105
+ "gitRowSelected": "S5HVoW_gitRowSelected",
3106
+ "gitLogLine2": "S5HVoW_gitLogLine2",
3058
3107
  "openWithLabel": "S5HVoW_openWithLabel",
3059
- "tabClose": "S5HVoW_tabClose",
3060
- "gitLogMore": "S5HVoW_gitLogMore",
3108
+ "browserLiveTarget": "S5HVoW_browserLiveTarget",
3109
+ "sessionLensPreview": "S5HVoW_sessionLensPreview",
3110
+ "gitDiffDel": "S5HVoW_gitDiffDel",
3061
3111
  "paneCard": "S5HVoW_paneCard",
3062
- "dsh-row-in": "S5HVoW_dsh-row-in",
3063
- "dividerRow": "S5HVoW_dividerRow",
3064
- "editorTreeDock": "S5HVoW_editorTreeDock",
3065
- "uploadDropChatHint": "S5HVoW_uploadDropChatHint",
3066
- "gitDiffExpand": "S5HVoW_gitDiffExpand",
3067
3112
  "uploadOverlayCancel": "S5HVoW_uploadOverlayCancel",
3068
- "producedLabel": "S5HVoW_producedLabel",
3069
- "gitDiffFilePath": "S5HVoW_gitDiffFilePath",
3070
- "dropDown": "S5HVoW_dropDown",
3071
- "explorerRowDropTarget": "S5HVoW_explorerRowDropTarget",
3072
- "dirtyDot": "S5HVoW_dirtyDot",
3073
- "openWithPin": "S5HVoW_openWithPin",
3113
+ "editorBinaryNotice": "S5HVoW_editorBinaryNotice",
3114
+ "gitBadge": "S5HVoW_gitBadge",
3115
+ "gitConfirmDesc": "S5HVoW_gitConfirmDesc",
3116
+ "sandboxDot": "S5HVoW_sandboxDot",
3117
+ "terminalRepairCommand": "S5HVoW_terminalRepairCommand",
3118
+ "gitPlaceholder": "S5HVoW_gitPlaceholder",
3074
3119
  "gitDiffMeta": "S5HVoW_gitDiffMeta",
3075
- "gitLogHash": "S5HVoW_gitLogHash",
3076
- "uploadOverlayProgressFill": "S5HVoW_uploadOverlayProgressFill",
3077
- "panelResizeActive": "S5HVoW_panelResizeActive",
3078
- "explorerRef": "S5HVoW_explorerRef",
3079
- "dividerCol": "S5HVoW_dividerCol",
3080
- "producedChip": "S5HVoW_producedChip",
3081
- "uploadDropZonePill": "S5HVoW_uploadDropZonePill",
3082
- "explorerError": "S5HVoW_explorerError",
3083
- "gitCommit": "S5HVoW_gitCommit",
3084
- "browserBlockedDesc": "S5HVoW_browserBlockedDesc",
3085
- "uploadOverlay": "S5HVoW_uploadOverlay",
3086
- "dropCenter": "S5HVoW_dropCenter",
3087
- "gitRowMain": "S5HVoW_gitRowMain",
3088
- "editorStatus": "S5HVoW_editorStatus",
3089
- "gitName": "S5HVoW_gitName",
3090
- "gitDiffHunkHeader": "S5HVoW_gitDiffHunkHeader",
3091
- "sandboxStatusOff": "S5HVoW_sandboxStatusOff",
3092
- "gitDiff": "S5HVoW_gitDiff",
3093
- "editorBanner": "S5HVoW_editorBanner",
3094
- "browserMessage": "S5HVoW_browserMessage",
3095
- "uploadDropZone": "S5HVoW_uploadDropZone",
3096
- "tabBarPlus": "S5HVoW_tabBarPlus",
3097
- "paneTab": "S5HVoW_paneTab",
3098
3120
  "explorerRow": "S5HVoW_explorerRow",
3099
- "browserBar": "S5HVoW_browserBar",
3100
- "floatHeader": "S5HVoW_floatHeader",
3101
- "dropUp": "S5HVoW_dropUp",
3102
- "paneEmptyCards": "S5HVoW_paneEmptyCards",
3103
- "tabList": "S5HVoW_tabList",
3104
- "explorerSymlink": "S5HVoW_explorerSymlink",
3105
- "gitDiffCode": "S5HVoW_gitDiffCode",
3121
+ "orphanedType": "S5HVoW_orphanedType",
3122
+ "uploadDropChatCard": "S5HVoW_uploadDropChatCard",
3106
3123
  "terminalBanner": "S5HVoW_terminalBanner",
3107
- "gitBranchSelect": "S5HVoW_gitBranchSelect",
3108
- "panelResize": "S5HVoW_panelResize",
3109
- "iconButton": "S5HVoW_iconButton",
3110
- "sandboxDot": "S5HVoW_sandboxDot",
3111
- "gitSectionHeader": "S5HVoW_gitSectionHeader",
3112
- "gitRowSelected": "S5HVoW_gitRowSelected",
3113
- "paneTabHidden": "S5HVoW_paneTabHidden",
3114
- "producedMore": "S5HVoW_producedMore",
3115
- "git": "S5HVoW_git",
3116
- "gitWorktreeLabel": "S5HVoW_gitWorktreeLabel",
3117
- "gitError": "S5HVoW_gitError",
3118
- "editorMain": "S5HVoW_editorMain",
3119
- "tabActive": "S5HVoW_tabActive",
3124
+ "browserBar": "S5HVoW_browserBar",
3125
+ "gitDiffFileTag": "S5HVoW_gitDiffFileTag",
3126
+ "explorerCopied": "S5HVoW_explorerCopied",
3127
+ "editorSearchInput": "S5HVoW_editorSearchInput",
3128
+ "sandboxStatusOn": "S5HVoW_sandboxStatusOn",
3129
+ "explorerHeader": "S5HVoW_explorerHeader",
3130
+ "gitDiffAdd": "S5HVoW_gitDiffAdd",
3131
+ "gitDiffMetaText": "S5HVoW_gitDiffMetaText",
3132
+ "changesLensToggle": "S5HVoW_changesLensToggle",
3133
+ "paneDrop": "S5HVoW_paneDrop",
3134
+ "divider": "S5HVoW_divider",
3135
+ "sandboxStatus": "S5HVoW_sandboxStatus",
3136
+ "gitDiffTab": "S5HVoW_gitDiffTab",
3137
+ "tabBar": "S5HVoW_tabBar",
3138
+ "sessionLensEmpty": "S5HVoW_sessionLensEmpty",
3139
+ "openWithPinActive": "S5HVoW_openWithPinActive",
3140
+ "editorTreeToggleActive": "S5HVoW_editorTreeToggleActive",
3141
+ "sessionLensItem": "S5HVoW_sessionLensItem",
3142
+ "editorSearchHint": "S5HVoW_editorSearchHint",
3143
+ "gitDiffHunk": "S5HVoW_gitDiffHunk",
3144
+ "sessionLensRow": "S5HVoW_sessionLensRow",
3145
+ "dividerRow": "S5HVoW_dividerRow",
3146
+ "editorTreeSearch": "S5HVoW_editorTreeSearch",
3147
+ "gitRow": "S5HVoW_gitRow",
3148
+ "floatWindow": "S5HVoW_floatWindow",
3149
+ "changesLensTabActive": "S5HVoW_changesLensTabActive",
3150
+ "floatResize": "S5HVoW_floatResize",
3151
+ "paneContent": "S5HVoW_paneContent",
3152
+ "gitName": "S5HVoW_gitName",
3153
+ "floatWindowDragging": "S5HVoW_floatWindowDragging",
3154
+ "terminalWaitBanner": "S5HVoW_terminalWaitBanner",
3155
+ "editorHeader": "S5HVoW_editorHeader",
3156
+ "explorerBody": "S5HVoW_explorerBody",
3157
+ "uploadDropZone": "S5HVoW_uploadDropZone",
3158
+ "uploadDropHero": "S5HVoW_uploadDropHero",
3120
3159
  "gitLink": "S5HVoW_gitLink",
3121
- "gitEmpty": "S5HVoW_gitEmpty",
3122
- "editorPathInput": "S5HVoW_editorPathInput",
3123
- "terminal": "S5HVoW_terminal",
3124
- "toggleCluster": "S5HVoW_toggleCluster",
3125
- "sandboxStatusText": "S5HVoW_sandboxStatusText",
3126
- "explorerRowRevealed": "S5HVoW_explorerRowRevealed",
3160
+ "workbench": "S5HVoW_workbench",
3161
+ "browserBlockedButton": "S5HVoW_browserBlockedButton",
3162
+ "toggleButton": "S5HVoW_toggleButton",
3163
+ "editorPlaceholder": "S5HVoW_editorPlaceholder",
3164
+ "terminalBannerUrl": "S5HVoW_terminalBannerUrl",
3165
+ "gitFoldRowFailed": "S5HVoW_gitFoldRowFailed",
3166
+ "explorerRenameInput": "S5HVoW_explorerRenameInput",
3167
+ "gitDiffLine": "S5HVoW_gitDiffLine",
3168
+ "sessionLensMeta": "S5HVoW_sessionLensMeta",
3169
+ "terminalDepsHint": "S5HVoW_terminalDepsHint",
3170
+ "tabBarDrop": "S5HVoW_tabBarDrop",
3171
+ "gitWorktreeRow": "S5HVoW_gitWorktreeRow",
3172
+ "gitLogRow": "S5HVoW_gitLogRow",
3173
+ "gitDiffTabHeader": "S5HVoW_gitDiffTabHeader",
3174
+ "explorerEmpty": "S5HVoW_explorerEmpty",
3175
+ "paneTab": "S5HVoW_paneTab",
3176
+ "gitCommit": "S5HVoW_gitCommit",
3127
3177
  "gitLogSubject": "S5HVoW_gitLogSubject",
3128
- "browserLive": "S5HVoW_browserLive",
3129
- "terminalRepairCommand": "S5HVoW_terminalRepairCommand",
3178
+ "pinnedTab": "S5HVoW_pinnedTab",
3179
+ "gitDiffFileOld": "S5HVoW_gitDiffFileOld",
3180
+ "gitCommitInput": "S5HVoW_gitCommitInput",
3181
+ "gitLogHash": "S5HVoW_gitLogHash",
3182
+ "splitRow": "S5HVoW_splitRow",
3183
+ "floatClose": "S5HVoW_floatClose",
3184
+ "gitFoldRow": "S5HVoW_gitFoldRow",
3185
+ "panelHidden": "S5HVoW_panelHidden",
3186
+ "browserBlockedActions": "S5HVoW_browserBlockedActions",
3187
+ "gitDiffHunkSection": "S5HVoW_gitDiffHunkSection",
3188
+ "explorerRef": "S5HVoW_explorerRef",
3189
+ "producedChip": "S5HVoW_producedChip",
3190
+ "split": "S5HVoW_split",
3191
+ "gitDiffExpand": "S5HVoW_gitDiffExpand",
3130
3192
  "gitLogMeta": "S5HVoW_gitLogMeta",
3131
- "gitConfirmDesc": "S5HVoW_gitConfirmDesc",
3193
+ "dsh-toc-flash": "S5HVoW_dsh-toc-flash",
3194
+ "gitLogLine1": "S5HVoW_gitLogLine1",
3195
+ "toggleCluster": "S5HVoW_toggleCluster",
3196
+ "tabBadge": "S5HVoW_tabBadge",
3197
+ "tabList": "S5HVoW_tabList",
3198
+ "uploadOverlayCard": "S5HVoW_uploadOverlayCard",
3199
+ "floatContent": "S5HVoW_floatContent",
3200
+ "editorTreePanelFull": "S5HVoW_editorTreePanelFull",
3201
+ "terminalDepsActions": "S5HVoW_terminalDepsActions",
3132
3202
  "boundaryError": "S5HVoW_boundaryError",
3133
- "workbench": "S5HVoW_workbench",
3134
- "floatDropHint": "S5HVoW_floatDropHint",
3135
- "uploadOverlayStatus": "S5HVoW_uploadOverlayStatus",
3136
- "split": "S5HVoW_split",
3137
- "explorerRoot": "S5HVoW_explorerRoot",
3138
- "explorerHidden": "S5HVoW_explorerHidden",
3203
+ "tabBoundaryError": "S5HVoW_tabBoundaryError",
3204
+ "panelBody": "S5HVoW_panelBody",
3205
+ "dividerActive": "S5HVoW_dividerActive",
3206
+ "dropLeft": "S5HVoW_dropLeft",
3139
3207
  "terminalWrap": "S5HVoW_terminalWrap",
3140
- "gitDiffFileChevronExpanded": "S5HVoW_gitDiffFileChevronExpanded",
3141
- "gitWorktreeRow": "S5HVoW_gitWorktreeRow",
3142
- "openWithName": "S5HVoW_openWithName",
3143
- "openWithPinActive": "S5HVoW_openWithPinActive",
3144
- "dsh-toc-flash": "S5HVoW_dsh-toc-flash",
3145
- "splitCol": "S5HVoW_splitCol",
3146
- "editorStatusError": "S5HVoW_editorStatusError",
3147
- "gitDiffHunkSection": "S5HVoW_gitDiffHunkSection",
3148
- "editorBinaryNotice": "S5HVoW_editorBinaryNotice",
3149
- "gitDiffFileTag": "S5HVoW_gitDiffFileTag",
3150
- "editorError": "S5HVoW_editorError",
3151
- "uploadOverlayProgress": "S5HVoW_uploadOverlayProgress",
3152
- "editorTreeResize": "S5HVoW_editorTreeResize",
3153
- "editorBinary": "S5HVoW_editorBinary",
3154
- "paneDrop": "S5HVoW_paneDrop",
3155
- "dropRight": "S5HVoW_dropRight",
3156
- "tabBarDrop": "S5HVoW_tabBarDrop",
3208
+ "editorBanner": "S5HVoW_editorBanner",
3209
+ "gitBranchSelect": "S5HVoW_gitBranchSelect",
3210
+ "uploadOverlayProgressFill": "S5HVoW_uploadOverlayProgressFill",
3157
3211
  "panel": "S5HVoW_panel",
3212
+ "gitRowMain": "S5HVoW_gitRowMain",
3213
+ "editorError": "S5HVoW_editorError",
3214
+ "gitDiffHunkHeader": "S5HVoW_gitDiffHunkHeader",
3215
+ "gitDiffFileChevron": "S5HVoW_gitDiffFileChevron",
3216
+ "dividerCol": "S5HVoW_dividerCol",
3217
+ "explorerSymlink": "S5HVoW_explorerSymlink",
3218
+ "explorerRoot": "S5HVoW_explorerRoot",
3219
+ "editorTitle": "S5HVoW_editorTitle",
3220
+ "editorCm": "S5HVoW_editorCm",
3221
+ "git": "S5HVoW_git",
3222
+ "panelResizeActive": "S5HVoW_panelResizeActive",
3223
+ "iconButton": "S5HVoW_iconButton",
3224
+ "producedRow": "S5HVoW_producedRow",
3225
+ "gitLogRef": "S5HVoW_gitLogRef",
3226
+ "browserStart": "S5HVoW_browserStart",
3227
+ "selectionPopup": "S5HVoW_selectionPopup",
3228
+ "sessionLens": "S5HVoW_sessionLens",
3229
+ "paneEmptyCards": "S5HVoW_paneEmptyCards",
3158
3230
  "explorerBroken": "S5HVoW_explorerBroken",
3159
- "explorerHeader": "S5HVoW_explorerHeader",
3231
+ "gitSectionHeader": "S5HVoW_gitSectionHeader",
3232
+ "producedMore": "S5HVoW_producedMore",
3233
+ "editorBody": "S5HVoW_editorBody",
3234
+ "terminalWaitNeedle": "S5HVoW_terminalWaitNeedle",
3160
3235
  "editor": "S5HVoW_editor",
3161
- "floatTitle": "S5HVoW_floatTitle",
3162
- "terminalDepsNote": "S5HVoW_terminalDepsNote",
3163
- "tabTitle": "S5HVoW_tabTitle",
3164
- "browserLiveTarget": "S5HVoW_browserLiveTarget",
3165
- "pane": "S5HVoW_pane",
3166
- "terminalDepsHint": "S5HVoW_terminalDepsHint",
3167
- "gitPlaceholder": "S5HVoW_gitPlaceholder"
3236
+ "splitCol": "S5HVoW_splitCol",
3237
+ "sandboxStatusText": "S5HVoW_sandboxStatusText",
3238
+ "explorerHidden": "S5HVoW_explorerHidden",
3239
+ "dropDown": "S5HVoW_dropDown",
3240
+ "dropCenter": "S5HVoW_dropCenter",
3241
+ "uploadDropZonePill": "S5HVoW_uploadDropZonePill",
3242
+ "uploadOverlay": "S5HVoW_uploadOverlay",
3243
+ "editorTreeResize": "S5HVoW_editorTreeResize",
3244
+ "sessionLensCount": "S5HVoW_sessionLensCount",
3245
+ "uploadOverlayStatus": "S5HVoW_uploadOverlayStatus"
3168
3246
  };
3169
3247
  //#endregion
3170
3248
  //#region src/client/intercept.tsx
@@ -3427,6 +3505,15 @@ window.__ModuleLoader__.load({
3427
3505
  path,
3428
3506
  content
3429
3507
  })),
3508
+ /** Rename one tree row within its directory (single-segment name; a
3509
+ * destination-existence clash is a 409; symlink rows rename the link). */
3510
+ fsRename: (scope, path, name) => call("fs.rename", scopePayload(scope, {
3511
+ path,
3512
+ name
3513
+ })),
3514
+ /** Delete one tree row permanently (recursive for directories; a symlink
3515
+ * row unlinks the link only). */
3516
+ fsRemove: (scope, path) => call("fs.remove", scopePayload(scope, { path })),
3430
3517
  /** Upload one file's raw bytes into `dir` (keeps the folder tree via
3431
3518
  * `relativePath`); the host streams it under the session workspace. */
3432
3519
  uploadFile: (scope, dir, relativePath, body, signal) => fetchUpload(scope, dir, relativePath, body, signal),
@@ -3448,6 +3535,13 @@ window.__ModuleLoader__.load({
3448
3535
  }), signal),
3449
3536
  /** Full patch text of one commit (diff display for the history rows). */
3450
3537
  gitCommitDiff: (scope, hash, worktree, signal) => call("git.commit-diff", gitPayload(scope, worktree, { hash }), signal),
3538
+ /** Both sides' full file contents for a diff-fold expansion; a missing
3539
+ * side is null (untracked / deleted) and the view degrades the fold. */
3540
+ gitFoldContents: (scope, opts, worktree, signal) => call("git.fold-contents", gitPayload(scope, worktree, {
3541
+ path: opts.path,
3542
+ ...opts.staged !== void 0 ? { staged: opts.staged } : {},
3543
+ ...opts.hash !== void 0 ? { hash: opts.hash } : {}
3544
+ }), signal),
3451
3545
  /** Discard the worktree changes of one file (the index is untouched). */
3452
3546
  gitDiscard: (scope, path, worktree) => call("git.discard", gitPayload(scope, worktree, { path })),
3453
3547
  /** Revert one commit onto the current branch. */
@@ -3460,6 +3554,12 @@ window.__ModuleLoader__.load({
3460
3554
  ptyClose: (scope, tab) => call("pty.close", scopePayload(scope, { tab })),
3461
3555
  /** Release an agent terminal by uuid (tab closed while WS was down). */
3462
3556
  agentPtyClose: (uuid) => call("agent-pty.close", { uuid }),
3557
+ /** Skip every active terminal_wait_for on one agent terminal (the wait
3558
+ * banner's skip button). Idempotent: {skipped:0} when none is active. */
3559
+ agentSkipWait: (uuid) => call("agent-pty.skip-wait", { uuid }),
3560
+ /** The session lens: file operations the model performed in one session
3561
+ * (parsed from the session's own event log; newest first). */
3562
+ changesOps: (scope, signal) => call("changes.ops", scopePayload(scope, {}), signal),
3463
3563
  /** Terminal dependency status (issue #140): after a WS close 1011 with
3464
3564
  * reason `pty-deps-missing` the view fetches the full repair details here
3465
3565
  * (the close reason itself is capped at 123 bytes). */
@@ -4351,13 +4451,19 @@ window.__ModuleLoader__.load({
4351
4451
  })]
4352
4452
  });
4353
4453
  function FileTree(props) {
4354
- const { sessionId, cwd, expanded, revealed, onToggle, onOpenFile, onOpenFileNewTab, onOpenFileSide, openWithTargets, openWithPinned, openWithSsh, onOpenWith, onToggleOpenWithPin, onReferenceFile, refreshTick, onUploadRequest, busy } = props;
4454
+ const { sessionId, cwd, expanded, revealed, onToggle, onOpenFile, onOpenFileNewTab, onOpenFileSide, openWithTargets, openWithPinned, openWithSsh, onOpenWith, onToggleOpenWithPin, onReferenceFile, refreshTick, onUploadRequest, busy, onPathRenamed, onPathRemoved } = props;
4355
4455
  const [data, setData] = (0, react.useState)({});
4356
4456
  const dataRef = (0, react.useRef)(data);
4357
4457
  /** The row whose path was just copied ("copied" label replaces its button). */
4358
4458
  const [copiedPath, setCopiedPath] = (0, react.useState)(null);
4359
4459
  /** Open context menu: the row path (and whether it is a directory) plus the cursor position. */
4360
4460
  const [rowMenu, setRowMenu] = (0, react.useState)(null);
4461
+ /** The row being renamed inline (pre-filled base name; Enter commits). */
4462
+ const [renaming, setRenaming] = (0, react.useState)(null);
4463
+ /** The row pending delete confirmation (the Modal owns the final call). */
4464
+ const [deleting, setDeleting] = (0, react.useState)(null);
4465
+ /** The last mutation failure (dismissable strip above the tree). */
4466
+ const [mutationError, setMutationError] = (0, react.useState)(null);
4361
4467
  /** Whether a file drag hovers the tree (drives the portaled drop zone). */
4362
4468
  const [dropOver, setDropOver] = (0, react.useState)(false);
4363
4469
  /** The directory a drag is hovering right now (null = body, drop to root). */
@@ -4512,6 +4618,89 @@ window.__ModuleLoader__.load({
4512
4618
  }, COPIED_MS);
4513
4619
  });
4514
4620
  }, []);
4621
+ /** Re-fetch one directory level (a mutation changed it on disk). */
4622
+ const reloadDir = (0, react.useCallback)((dir) => {
4623
+ dataRef.current = {
4624
+ ...dataRef.current,
4625
+ [dir]: {}
4626
+ };
4627
+ setData(dataRef.current);
4628
+ api.fsTree({
4629
+ sessionId,
4630
+ cwd
4631
+ }, dir).then((listing) => {
4632
+ storeLevel(dir, { entries: listing.entries });
4633
+ }).catch((error) => {
4634
+ storeLevel(dir, { error: error instanceof Error ? error.message : String(error) });
4635
+ });
4636
+ }, [
4637
+ sessionId,
4638
+ cwd,
4639
+ storeLevel
4640
+ ]);
4641
+ /** Commit the inline rename: single-segment name; the row reloads from
4642
+ * its parent and open tabs retarget through the caller. */
4643
+ const commitRename = (target) => {
4644
+ const name = target.name.trim();
4645
+ if (name === "" || name.includes("/") || name.includes("\\")) {
4646
+ setMutationError(t("renameInvalid"));
4647
+ return;
4648
+ }
4649
+ api.fsRename({
4650
+ sessionId,
4651
+ cwd
4652
+ }, target.path, name).then(({ path }) => {
4653
+ setRenaming(null);
4654
+ reloadDir(parentOf(target.path) ?? path);
4655
+ onPathRenamed?.(target.path, path);
4656
+ }).catch((error) => {
4657
+ setMutationError(error instanceof Error ? error.message : String(error));
4658
+ });
4659
+ };
4660
+ /** Commit the confirmed delete: the parent reloads and the caller closes
4661
+ * every open tab at or under the removed path. */
4662
+ const commitDelete = (target) => {
4663
+ api.fsRemove({
4664
+ sessionId,
4665
+ cwd
4666
+ }, target.path).then(() => {
4667
+ setDeleting(null);
4668
+ reloadDir(parentOf(target.path) ?? target.path);
4669
+ onPathRemoved?.(target.path);
4670
+ }).catch((error) => {
4671
+ setMutationError(error instanceof Error ? error.message : String(error));
4672
+ });
4673
+ };
4674
+ /** The inline rename input (auto-focused, pre-selected; Enter/blur commits,
4675
+ * Esc cancels, an IME composition never triggers the key handlers). */
4676
+ const renameCancelled = (0, react.useRef)(false);
4677
+ const renderRenameInput = (path) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
4678
+ autoFocus: true,
4679
+ className: sidebar_module_css_default.explorerRenameInput,
4680
+ defaultValue: renaming?.name ?? "",
4681
+ onClick: (event) => {
4682
+ event.stopPropagation();
4683
+ },
4684
+ onKeyDown: (event) => {
4685
+ event.stopPropagation();
4686
+ if (event.nativeEvent.isComposing) return;
4687
+ if (event.key === "Enter") {
4688
+ event.preventDefault();
4689
+ if (renaming !== null) commitRename(renaming);
4690
+ } else if (event.key === "Escape") {
4691
+ event.preventDefault();
4692
+ renameCancelled.current = true;
4693
+ setRenaming(null);
4694
+ }
4695
+ },
4696
+ onBlur: () => {
4697
+ if (renameCancelled.current) {
4698
+ renameCancelled.current = false;
4699
+ return;
4700
+ }
4701
+ if (renaming !== null) commitRename(renaming);
4702
+ }
4703
+ });
4515
4704
  /** The row's trailing actions: the @-reference button, or the copied label. */
4516
4705
  const rowActions = (entry) => {
4517
4706
  if (copiedPath === entry.path) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -4673,7 +4862,7 @@ window.__ModuleLoader__.load({
4673
4862
  },
4674
4863
  children: [
4675
4864
  isOpen ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(VscFolderOpened, { size: 14 }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(VscFolder, { size: 14 }),
4676
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4865
+ renaming?.path === entry.path ? renderRenameInput(entry.path) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4677
4866
  className: sidebar_module_css_default.explorerName,
4678
4867
  children: entry.name
4679
4868
  }),
@@ -4712,7 +4901,7 @@ window.__ModuleLoader__.load({
4712
4901
  },
4713
4902
  children: [
4714
4903
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(VscFile, { size: 14 }),
4715
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4904
+ renaming?.path === entry.path ? renderRenameInput(entry.path) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4716
4905
  className: sidebar_module_css_default.explorerName,
4717
4906
  children: entry.name
4718
4907
  }),
@@ -4808,6 +4997,27 @@ window.__ModuleLoader__.load({
4808
4997
  event.target.value = "";
4809
4998
  }
4810
4999
  }),
5000
+ mutationError !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5001
+ className: clsx(sidebar_module_css_default.explorerRow, sidebar_module_css_default.explorerError),
5002
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
5003
+ style: {
5004
+ flex: 1,
5005
+ minWidth: 0,
5006
+ overflow: "hidden",
5007
+ textOverflow: "ellipsis"
5008
+ },
5009
+ children: mutationError
5010
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
5011
+ type: "button",
5012
+ className: sidebar_module_css_default.explorerRef,
5013
+ "aria-label": t("dismiss"),
5014
+ title: t("dismiss"),
5015
+ onClick: () => {
5016
+ setMutationError(null);
5017
+ },
5018
+ children: t("dismiss")
5019
+ })]
5020
+ }),
4811
5021
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, {
4812
5022
  open: rowMenu !== null,
4813
5023
  onClose: () => {
@@ -4844,7 +5054,19 @@ window.__ModuleLoader__.load({
4844
5054
  id: "absolute",
4845
5055
  label: t("copyAbsolute"),
4846
5056
  icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCopyOutline16, { size: 16 })
4847
- }
5057
+ },
5058
+ ...onPathRenamed !== void 0 && rowMenu !== null && rowMenu.path !== root || onPathRemoved !== void 0 && rowMenu !== null && rowMenu.path !== root ? [{
5059
+ id: "mutation-sep",
5060
+ type: "separator"
5061
+ }] : [],
5062
+ ...onPathRenamed !== void 0 && rowMenu !== null && rowMenu.path !== root ? [{
5063
+ id: "rename-row",
5064
+ label: t("rename")
5065
+ }] : [],
5066
+ ...onPathRemoved !== void 0 && rowMenu !== null && rowMenu.path !== root ? [{
5067
+ id: "delete-row",
5068
+ label: t("delete")
5069
+ }] : []
4848
5070
  ],
4849
5071
  onSelect: (id) => {
4850
5072
  const target = rowMenu;
@@ -4871,12 +5093,54 @@ window.__ModuleLoader__.load({
4871
5093
  fileInputRef.current?.click();
4872
5094
  return;
4873
5095
  }
5096
+ if (id === "rename-row") {
5097
+ setMutationError(null);
5098
+ setRenaming({
5099
+ path: target.path,
5100
+ name: baseName$1(target.path)
5101
+ });
5102
+ return;
5103
+ }
5104
+ if (id === "delete-row") {
5105
+ setDeleting({
5106
+ path: target.path,
5107
+ isDir: target.isDir
5108
+ });
5109
+ return;
5110
+ }
4874
5111
  copyPath(id === "relative" ? relativeTo(cwd ?? "", target.path) : target.path, target.path);
4875
5112
  },
4876
5113
  portal: true,
4877
5114
  align: "start",
4878
5115
  getAnchorRect: () => rowMenu === null ? null : new DOMRect(rowMenu.x, rowMenu.y, 0, 0),
4879
5116
  anchor: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {})
5117
+ }),
5118
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Modal, {
5119
+ open: deleting !== null,
5120
+ onClose: () => {
5121
+ setDeleting(null);
5122
+ },
5123
+ title: deleting === null ? "" : t("deleteTitle", { name: baseName$1(deleting.path) }),
5124
+ closeLabel: t("cancel"),
5125
+ footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
5126
+ variant: "outline",
5127
+ onClick: () => {
5128
+ setDeleting(null);
5129
+ },
5130
+ children: t("cancel")
5131
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
5132
+ variant: "primary",
5133
+ onClick: () => {
5134
+ const target = deleting;
5135
+ if (target === null) return;
5136
+ commitDelete(target);
5137
+ },
5138
+ children: t("delete")
5139
+ })] }),
5140
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
5141
+ className: sidebar_module_css_default.explorerError,
5142
+ children: deleting?.isDir === true ? t("deleteDescDir") : t("deleteDescFile")
5143
+ })
4880
5144
  })
4881
5145
  ]
4882
5146
  });
@@ -5275,7 +5539,7 @@ window.__ModuleLoader__.load({
5275
5539
  * intake.
5276
5540
  */
5277
5541
  function TreePanel(props) {
5278
- const { sessionId, cwd, expanded, revealed, onToggle, onOpenFile, onOpenFileNewTab, onOpenFileSide, openWithTargets, openWithPinned, openWithSsh, onOpenWith, onToggleOpenWithPin, onReferenceFile, full } = props;
5542
+ const { sessionId, cwd, expanded, revealed, onToggle, onOpenFile, onOpenFileNewTab, onOpenFileSide, openWithTargets, openWithPinned, openWithSsh, onOpenWith, onToggleOpenWithPin, onReferenceFile, onPathRenamed, onPathRemoved, full } = props;
5279
5543
  const [query, setQuery] = (0, react.useState)("");
5280
5544
  const [results, setResults] = (0, react.useState)(null);
5281
5545
  const [error, setError] = (0, react.useState)(null);
@@ -5475,6 +5739,8 @@ window.__ModuleLoader__.load({
5475
5739
  onOpenWith,
5476
5740
  onToggleOpenWithPin,
5477
5741
  onReferenceFile,
5742
+ onPathRenamed,
5743
+ onPathRemoved,
5478
5744
  refreshTick,
5479
5745
  onUploadRequest: startUpload,
5480
5746
  busy
@@ -5669,7 +5935,7 @@ window.__ModuleLoader__.load({
5669
5935
  return Math.min(TREE_WIDTH_MAX, Math.max(TREE_WIDTH_MIN, Math.round(value)));
5670
5936
  }
5671
5937
  function EditorHost(props) {
5672
- const { ctx, store, scope, tab, expanded, revealed, onToggleDir, onReferenceFile } = props;
5938
+ const { ctx, store, scope, tab, expanded, revealed, onToggleDir, onReferenceFile, onPathRenamed, onPathRemoved } = props;
5673
5939
  const path = tab.path ?? "";
5674
5940
  const isDir = metaOf(tab).dir === true;
5675
5941
  const [load, setLoad] = (0, react.useState)({ status: "loading" });
@@ -5862,7 +6128,9 @@ window.__ModuleLoader__.load({
5862
6128
  openWithSsh: openWithSshActive(openWithConfig),
5863
6129
  onOpenWith: openWith,
5864
6130
  onToggleOpenWithPin: toggleOpenWithPin,
5865
- onReferenceFile
6131
+ onReferenceFile,
6132
+ onPathRenamed,
6133
+ onPathRemoved
5866
6134
  })
5867
6135
  });
5868
6136
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
@@ -5970,7 +6238,9 @@ window.__ModuleLoader__.load({
5970
6238
  openWithSsh: openWithSshActive(openWithConfig),
5971
6239
  onOpenWith: openWith,
5972
6240
  onToggleOpenWithPin: toggleOpenWithPin,
5973
- onReferenceFile
6241
+ onReferenceFile,
6242
+ onPathRenamed,
6243
+ onPathRemoved
5974
6244
  })]
5975
6245
  })]
5976
6246
  })]
@@ -6029,75 +6299,75 @@ window.__ModuleLoader__.load({
6029
6299
  document.head.appendChild(tag);
6030
6300
  }
6031
6301
  var SideCardSection_module_css_default = {
6032
- "cardIconChip": "AC9POW_cardIconChip",
6033
- "rowText": "AC9POW_rowText",
6034
- "pluginEntry": "AC9POW_pluginEntry",
6035
- "count": "AC9POW_count",
6036
- "selectOptionIcon": "AC9POW_selectOptionIcon",
6037
- "row": "AC9POW_row",
6038
- "cardOn": "AC9POW_cardOn",
6039
- "pluginJumpBtn": "AC9POW_pluginJumpBtn",
6040
- "switch": "AC9POW_switch",
6041
- "rowGear": "AC9POW_rowGear",
6042
- "groupHeading": "AC9POW_groupHeading",
6043
- "selectOption": "AC9POW_selectOption",
6302
+ "pluginEntries": "AC9POW_pluginEntries",
6303
+ "cardMain": "AC9POW_cardMain",
6304
+ "selectAnchorIcon": "AC9POW_selectAnchorIcon",
6044
6305
  "pluginList": "AC9POW_pluginList",
6045
- "pluginEntryHead": "AC9POW_pluginEntryHead",
6046
- "pluginGroup": "AC9POW_pluginGroup",
6047
- "pluginDesc": "AC9POW_pluginDesc",
6048
- "pluginSearch": "AC9POW_pluginSearch",
6049
- "openWithRemove": "AC9POW_openWithRemove",
6050
- "pluginTopicBtn": "AC9POW_pluginTopicBtn",
6051
- "pluginModal": "AC9POW_pluginModal",
6052
- "cardTop": "AC9POW_cardTop",
6053
- "intro": "AC9POW_intro",
6054
- "cardTitle": "AC9POW_cardTitle",
6306
+ "openWithEditorTemplate": "AC9POW_openWithEditorTemplate",
6307
+ "selectOptionText": "AC9POW_selectOptionText",
6055
6308
  "selectAnchorText": "AC9POW_selectAnchorText",
6309
+ "pluginDesc": "AC9POW_pluginDesc",
6310
+ "switchTrack": "AC9POW_switchTrack",
6311
+ "cardSwitchTrack": "AC9POW_cardSwitchTrack",
6312
+ "typedInput": "AC9POW_typedInput",
6313
+ "selectAnchor": "AC9POW_selectAnchor",
6314
+ "popupRows": "AC9POW_popupRows",
6315
+ "openWithHint": "AC9POW_openWithHint",
6316
+ "popupDialog": "AC9POW_popupDialog",
6056
6317
  "cssTextArea": "AC9POW_cssTextArea",
6057
6318
  "versionBadgeName": "AC9POW_versionBadgeName",
6058
6319
  "cardSwitchThumb": "AC9POW_cardSwitchThumb",
6059
- "desc": "AC9POW_desc",
6060
- "pluginGroupHeading": "AC9POW_pluginGroupHeading",
6061
- "cardSettings": "AC9POW_cardSettings",
6062
- "cardDesc": "AC9POW_cardDesc",
6320
+ "cardIconChip": "AC9POW_cardIconChip",
6321
+ "pluginTopicBtn": "AC9POW_pluginTopicBtn",
6322
+ "pluginName": "AC9POW_pluginName",
6323
+ "switchInput": "AC9POW_switchInput",
6324
+ "popupRow": "AC9POW_popupRow",
6325
+ "percentInput": "AC9POW_percentInput",
6063
6326
  "title": "AC9POW_title",
6327
+ "cardSettings": "AC9POW_cardSettings",
6064
6328
  "grid": "AC9POW_grid",
6065
- "switchTrack": "AC9POW_switchTrack",
6329
+ "count": "AC9POW_count",
6330
+ "rowText": "AC9POW_rowText",
6331
+ "pluginGroupHeading": "AC9POW_pluginGroupHeading",
6332
+ "openWithRemove": "AC9POW_openWithRemove",
6333
+ "openWithEditorInput": "AC9POW_openWithEditorInput",
6334
+ "pluginSearch": "AC9POW_pluginSearch",
6335
+ "switch": "AC9POW_switch",
6336
+ "pluginEntry": "AC9POW_pluginEntry",
6337
+ "groupHeading": "AC9POW_groupHeading",
6338
+ "cardOn": "AC9POW_cardOn",
6339
+ "selectOption": "AC9POW_selectOption",
6340
+ "done": "AC9POW_done",
6341
+ "addCard": "AC9POW_addCard",
6342
+ "pluginInstall": "AC9POW_pluginInstall",
6343
+ "pluginEntryHead": "AC9POW_pluginEntryHead",
6066
6344
  "openWithEditorRow": "AC9POW_openWithEditorRow",
6067
- "group": "AC9POW_group",
6068
- "pluginName": "AC9POW_pluginName",
6345
+ "pluginEmpty": "AC9POW_pluginEmpty",
6346
+ "cardTop": "AC9POW_cardTop",
6347
+ "card": "AC9POW_card",
6348
+ "row": "AC9POW_row",
6349
+ "pluginGroup": "AC9POW_pluginGroup",
6350
+ "pluginJumpBtn": "AC9POW_pluginJumpBtn",
6351
+ "typedInputNumber": "AC9POW_typedInputNumber",
6352
+ "pluginEntryActions": "AC9POW_pluginEntryActions",
6069
6353
  "versionBadgeTag": "AC9POW_versionBadgeTag",
6070
- "openWithEditorInput": "AC9POW_openWithEditorInput",
6071
- "section": "AC9POW_section",
6072
6354
  "control": "AC9POW_control",
6073
- "percentInput": "AC9POW_percentInput",
6074
- "selectAnchorIcon": "AC9POW_selectAnchorIcon",
6075
- "popupDialog": "AC9POW_popupDialog",
6076
- "pluginEntries": "AC9POW_pluginEntries",
6077
- "cardMain": "AC9POW_cardMain",
6078
- "selectAnchor": "AC9POW_selectAnchor",
6079
- "typedInput": "AC9POW_typedInput",
6080
- "card": "AC9POW_card",
6081
- "done": "AC9POW_done",
6082
- "suffix": "AC9POW_suffix",
6083
- "openWithHint": "AC9POW_openWithHint",
6084
- "openWithEditorTemplate": "AC9POW_openWithEditorTemplate",
6085
6355
  "cardSwitch": "AC9POW_cardSwitch",
6086
- "versionBadge": "AC9POW_versionBadge",
6087
- "pluginEntryActions": "AC9POW_pluginEntryActions",
6356
+ "suffix": "AC9POW_suffix",
6357
+ "section": "AC9POW_section",
6088
6358
  "pluginCopyBtn": "AC9POW_pluginCopyBtn",
6089
- "typedInputNumber": "AC9POW_typedInputNumber",
6090
- "popupRows": "AC9POW_popupRows",
6091
- "switchThumb": "AC9POW_switchThumb",
6359
+ "versionBadge": "AC9POW_versionBadge",
6360
+ "rowGear": "AC9POW_rowGear",
6361
+ "selectOptionIcon": "AC9POW_selectOptionIcon",
6092
6362
  "error": "AC9POW_error",
6093
- "cardSwitchTrack": "AC9POW_cardSwitchTrack",
6094
- "addCard": "AC9POW_addCard",
6095
- "pluginEmpty": "AC9POW_pluginEmpty",
6363
+ "pluginModal": "AC9POW_pluginModal",
6364
+ "intro": "AC9POW_intro",
6096
6365
  "openWithFamily": "AC9POW_openWithFamily",
6097
- "selectOptionText": "AC9POW_selectOptionText",
6098
- "pluginInstall": "AC9POW_pluginInstall",
6099
- "switchInput": "AC9POW_switchInput",
6100
- "popupRow": "AC9POW_popupRow"
6366
+ "switchThumb": "AC9POW_switchThumb",
6367
+ "cardTitle": "AC9POW_cardTitle",
6368
+ "cardDesc": "AC9POW_cardDesc",
6369
+ "group": "AC9POW_group",
6370
+ "desc": "AC9POW_desc"
6101
6371
  };
6102
6372
  //#endregion
6103
6373
  //#region src/client/open-with-settings.tsx
@@ -6249,6 +6519,142 @@ window.__ModuleLoader__.load({
6249
6519
  });
6250
6520
  }
6251
6521
  //#endregion
6522
+ //#region src/client/redact.ts
6523
+ /** The heuristics, applied in order; `$1` keeps the leading keyword where the
6524
+ * rule matches an assignment shape. */
6525
+ const RULES = [
6526
+ {
6527
+ pattern: /-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g,
6528
+ replacement: "[REDACTED PRIVATE KEY]"
6529
+ },
6530
+ {
6531
+ pattern: /\b(?:sk-[A-Za-z0-9_-]{16,}|gh[pousr]_[A-Za-z0-9]{16,}|AKIA[0-9A-Z]{16}|xox[abprs]-[A-Za-z0-9-]{10,}|AIza[0-9A-Za-z_-]{30,})\b/g,
6532
+ replacement: "[REDACTED KEY]"
6533
+ },
6534
+ {
6535
+ pattern: /([Aa]uthorization\s*:\s*)[^\n"']{4,}/g,
6536
+ replacement: "$1[REDACTED]"
6537
+ },
6538
+ {
6539
+ pattern: /\b([Bb]earer\s+)[A-Za-z0-9._-]{16,}\b/g,
6540
+ replacement: "$1[REDACTED]"
6541
+ },
6542
+ {
6543
+ pattern: /(\b[A-Za-z_-]*(?:password|passwd|secret|token|apikey|api_key)[A-Za-z_-]*(?:\s*[:=]\s*))['"]?[^\s"',;){]{3,}/gi,
6544
+ replacement: "$1[REDACTED]"
6545
+ }
6546
+ ];
6547
+ /**
6548
+ * Mask credential-shaped strings in `text`. Best-effort by design: the goal
6549
+ * is to keep the common accident (a key echoed into a file the model wrote)
6550
+ * out of the sidebar, not to parse every secret format ever shipped.
6551
+ */
6552
+ function redactSecrets(text) {
6553
+ let out = text;
6554
+ for (const rule of RULES) out = out.replace(rule.pattern, rule.replacement);
6555
+ return out;
6556
+ }
6557
+ //#endregion
6558
+ //#region src/client/SessionLens.tsx
6559
+ /**
6560
+ * The session lens: file operations the model performed in this session,
6561
+ * parsed from the session's own event log (`changes.ops`). Clicking a row
6562
+ * expands a best-effort text preview of the file (read through `fs.read`,
6563
+ * passed through the secret-redaction layer). Kept a leaf component — the
6564
+ * GitView hosts it as the "session changes" lens of the unified tab.
6565
+ */
6566
+ /** Preview cap: a long file shows its head only (the sidebar is not an editor). */
6567
+ const PREVIEW_CHARS = 2e4;
6568
+ function SessionLens(props) {
6569
+ const { scope } = props;
6570
+ const [ops, setOps] = (0, react.useState)(null);
6571
+ const [error, setError] = (0, react.useState)(null);
6572
+ const [openPath, setOpenPath] = (0, react.useState)(null);
6573
+ const [preview, setPreview] = (0, react.useState)(null);
6574
+ const [previewLoading, setPreviewLoading] = (0, react.useState)(false);
6575
+ const load = (0, react.useCallback)(async () => {
6576
+ setError(null);
6577
+ try {
6578
+ const result = await api.changesOps(scope);
6579
+ setOps(result.ops);
6580
+ } catch (reason) {
6581
+ setError(reason instanceof Error ? reason.message : String(reason));
6582
+ }
6583
+ }, [scope]);
6584
+ (0, react.useEffect)(() => {
6585
+ load();
6586
+ }, [load]);
6587
+ /** Toggle one row's preview: fetch + redact on first open, cached after. */
6588
+ const togglePreview = (path) => {
6589
+ if (openPath === path) {
6590
+ setOpenPath(null);
6591
+ return;
6592
+ }
6593
+ setOpenPath(path);
6594
+ setPreview(null);
6595
+ setPreviewLoading(true);
6596
+ api.fsRead(scope, path).then((result) => {
6597
+ const text = result.kind === "text" ? redactSecrets(result.content) : t("changesBinary");
6598
+ setPreview(text.slice(0, PREVIEW_CHARS));
6599
+ }).catch((reason) => {
6600
+ setPreview(t("changesPreviewError", { message: reason instanceof Error ? reason.message : String(reason) }));
6601
+ }).finally(() => {
6602
+ setPreviewLoading(false);
6603
+ });
6604
+ };
6605
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6606
+ className: sidebar_module_css_default.sessionLens,
6607
+ children: [
6608
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6609
+ className: sidebar_module_css_default.sessionLensBar,
6610
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6611
+ className: sidebar_module_css_default.sessionLensCount,
6612
+ children: ops === null ? t("loading") : t("changesCount", { count: ops.length })
6613
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
6614
+ type: "button",
6615
+ className: sidebar_module_css_default.iconButton,
6616
+ "aria-label": t("refresh"),
6617
+ title: t("refresh"),
6618
+ onClick: () => {
6619
+ load();
6620
+ },
6621
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutline16, { size: 14 })
6622
+ })]
6623
+ }),
6624
+ error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6625
+ className: sidebar_module_css_default.sessionLensEmpty,
6626
+ children: error
6627
+ }),
6628
+ error === null && ops !== null && ops.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6629
+ className: sidebar_module_css_default.sessionLensEmpty,
6630
+ children: t("changesEmpty")
6631
+ }),
6632
+ ops !== null && ops.map((op) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6633
+ className: sidebar_module_css_default.sessionLensItem,
6634
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
6635
+ type: "button",
6636
+ className: sidebar_module_css_default.sessionLensRow,
6637
+ "aria-expanded": openPath === op.path,
6638
+ onClick: () => {
6639
+ togglePreview(op.path);
6640
+ },
6641
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6642
+ className: sidebar_module_css_default.sessionLensPath,
6643
+ title: op.path,
6644
+ children: op.path
6645
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
6646
+ className: sidebar_module_css_default.sessionLensMeta,
6647
+ children: [op.tool, op.count > 1 ? ` ×${op.count}` : ""]
6648
+ })]
6649
+ }), openPath === op.path && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6650
+ className: sidebar_module_css_default.sessionLensPreview,
6651
+ children: previewLoading ? t("loading") : preview ?? ""
6652
+ })]
6653
+ }, op.path))
6654
+ ]
6655
+ });
6656
+ }
6657
+ //#endregion
6252
6658
  //#region src/client/GitView.tsx
6253
6659
  /**
6254
6660
  * The source-control panel: status list (staged vs unstaged), stage/unstage,
@@ -6300,6 +6706,29 @@ window.__ModuleLoader__.load({
6300
6706
  const LOG_BATCH = 20;
6301
6707
  function GitView(props) {
6302
6708
  const { scope, onOpenFile, onOpenDiff, visible } = props;
6709
+ const [lens, setLens] = (0, react.useState)("git");
6710
+ const lensToggle = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6711
+ className: sidebar_module_css_default.changesLensToggle,
6712
+ role: "tablist",
6713
+ "aria-label": t("changesLens"),
6714
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
6715
+ type: "button",
6716
+ className: clsx(sidebar_module_css_default.changesLensTab, lens === "git" && sidebar_module_css_default.changesLensTabActive),
6717
+ "aria-pressed": lens === "git",
6718
+ onClick: () => {
6719
+ setLens("git");
6720
+ },
6721
+ children: t("changesSessionGit")
6722
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
6723
+ type: "button",
6724
+ className: clsx(sidebar_module_css_default.changesLensTab, lens === "session" && sidebar_module_css_default.changesLensTabActive),
6725
+ "aria-pressed": lens === "session",
6726
+ onClick: () => {
6727
+ setLens("session");
6728
+ },
6729
+ children: t("changesSessionLens")
6730
+ })]
6731
+ });
6303
6732
  const [status, setStatus] = (0, react.useState)(null);
6304
6733
  const [worktrees, setWorktrees] = (0, react.useState)([]);
6305
6734
  const [selectedWorktree, setSelectedWorktree] = (0, react.useState)();
@@ -6638,9 +7067,14 @@ window.__ModuleLoader__.load({
6638
7067
  })]
6639
7068
  }, `${staged ? "s" : "u"}:${entry.path}`);
6640
7069
  };
7070
+ if (lens === "session") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7071
+ className: sidebar_module_css_default.git,
7072
+ children: [lensToggle, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SessionLens, { scope })]
7073
+ });
6641
7074
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6642
7075
  className: sidebar_module_css_default.git,
6643
7076
  children: [
7077
+ lensToggle,
6644
7078
  worktrees.length > 1 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6645
7079
  className: sidebar_module_css_default.gitWorktreeRow,
6646
7080
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -7216,6 +7650,56 @@ window.__ModuleLoader__.load({
7216
7650
  if (path.startsWith("a/") || path.startsWith("b/")) return path.slice(2);
7217
7651
  return path;
7218
7652
  }
7653
+ /** How many old-side rows a hunk carries (rows without an old number are
7654
+ * pure additions and do not advance the old side). */
7655
+ function hunkOldEnd(hunk) {
7656
+ return hunk.oldStart + hunk.lines.filter((line) => line.oldNum !== null).length - 1;
7657
+ }
7658
+ /** How many new-side rows a hunk carries. */
7659
+ function hunkNewEnd(hunk) {
7660
+ return hunk.newStart + hunk.lines.filter((line) => line.newNum !== null).length - 1;
7661
+ }
7662
+ /**
7663
+ * Materialize a git gap fold's hidden rows from the two sides' full file
7664
+ * contents, by the fold's known line ranges: the old side drives context
7665
+ * rows (each mapped onto the new side through the fold's offset — a gap is
7666
+ * an unchanged run, so the sides align), and new-side lines the old range
7667
+ * never reaches become pure additions. Line numbers clip to the actual
7668
+ * content (a no-newline file's ranges can overrun by one); `\r` endings
7669
+ * survive verbatim, like git's own context lines.
7670
+ */
7671
+ function foldRowsFromContents(fold, oldContent, newContent) {
7672
+ const oldLines = oldContent.length === 0 ? [] : oldContent.split("\n");
7673
+ const newLines = newContent.length === 0 ? [] : newContent.split("\n");
7674
+ const offset = fold.newStart - fold.oldStart;
7675
+ const rows = [];
7676
+ const oldFrom = Math.max(fold.oldStart, 1);
7677
+ const oldTo = Math.min(fold.oldEnd, oldLines.length);
7678
+ for (let oldLine = oldFrom; oldLine <= oldTo; oldLine += 1) {
7679
+ const text = oldLines[oldLine - 1] ?? "";
7680
+ const newLine = oldLine + offset;
7681
+ rows.push(newLine >= fold.newStart && newLine <= fold.newEnd && newLine <= newLines.length ? {
7682
+ kind: "ctx",
7683
+ text,
7684
+ oldNum: oldLine,
7685
+ newNum: newLine
7686
+ } : {
7687
+ kind: "ctx",
7688
+ text,
7689
+ oldNum: oldLine,
7690
+ newNum: null
7691
+ });
7692
+ }
7693
+ const newFrom = Math.max(Math.max(fold.newStart, 1), oldTo + offset + 1);
7694
+ const newTo = Math.min(fold.newEnd, newLines.length);
7695
+ for (let newLine = newFrom; newLine <= newTo; newLine += 1) rows.push({
7696
+ kind: "add",
7697
+ text: newLines[newLine - 1] ?? "",
7698
+ oldNum: null,
7699
+ newNum: newLine
7700
+ });
7701
+ return rows;
7702
+ }
7219
7703
  /** The file header badge: added / deleted / renamed / binary ('' for a plain edit). */
7220
7704
  function fileTag(file) {
7221
7705
  if (file.binary) return t("diffBinary");
@@ -7239,7 +7723,7 @@ window.__ModuleLoader__.load({
7239
7723
  });
7240
7724
  return expanded;
7241
7725
  }
7242
- function DiffView({ diff, untrackedPath, untrackedContent }) {
7726
+ function DiffView({ diff, untrackedPath, untrackedContent, foldSource }) {
7243
7727
  const parsed = (0, react.useMemo)(() => {
7244
7728
  if (untrackedPath !== void 0) return { files: [untrackedFile(untrackedPath, untrackedContent ?? "")] };
7245
7729
  return parseUnifiedDiff(diff);
@@ -7250,9 +7734,43 @@ window.__ModuleLoader__.load({
7250
7734
  ]);
7251
7735
  const [expanded, setExpanded] = (0, react.useState)(false);
7252
7736
  const [expandedFiles, setExpandedFiles] = (0, react.useState)(() => defaultExpandedFiles(parsed.files));
7737
+ const [foldRows, setFoldRows] = (0, react.useState)(/* @__PURE__ */ new Map());
7738
+ const foldInflight = (0, react.useRef)(/* @__PURE__ */ new Map());
7253
7739
  (0, react.useEffect)(() => {
7254
7740
  setExpandedFiles(defaultExpandedFiles(parsed.files));
7255
7741
  }, [parsed]);
7742
+ (0, react.useEffect)(() => {
7743
+ setFoldRows(/* @__PURE__ */ new Map());
7744
+ foldInflight.current.clear();
7745
+ }, [parsed]);
7746
+ /** Fetch both sides' contents and materialize one fold's hidden rows. */
7747
+ const resolveFold = (key, file, fold) => {
7748
+ if (foldSource === void 0 || foldInflight.current.has(key)) return;
7749
+ setFoldRows((current) => new Map(current).set(key, { status: "loading" }));
7750
+ const task = (async () => {
7751
+ try {
7752
+ const path = displayPath(file.newPath === "/dev/null" ? file.oldPath : file.newPath);
7753
+ const contents = await api.gitFoldContents(foldSource.scope, {
7754
+ path,
7755
+ ...foldSource.ref.kind === "commit" ? { hash: foldSource.ref.hashFull } : { staged: foldSource.ref.staged === true }
7756
+ }, foldSource.ref.kind === "worktree" ? foldSource.ref.worktree : void 0);
7757
+ if (contents.old === null || contents.new === null) {
7758
+ setFoldRows((current) => new Map(current).set(key, { status: "failed" }));
7759
+ return;
7760
+ }
7761
+ const rows = foldRowsFromContents(fold, contents.old, contents.new);
7762
+ setFoldRows((current) => new Map(current).set(key, {
7763
+ status: "ready",
7764
+ rows
7765
+ }));
7766
+ } catch {
7767
+ setFoldRows((current) => new Map(current).set(key, { status: "failed" }));
7768
+ } finally {
7769
+ foldInflight.current.delete(key);
7770
+ }
7771
+ })();
7772
+ foldInflight.current.set(key, task);
7773
+ };
7256
7774
  const rows = (0, react.useMemo)(() => {
7257
7775
  const out = [];
7258
7776
  parsed.files.forEach((file, fileIndex) => {
@@ -7263,7 +7781,30 @@ window.__ModuleLoader__.load({
7263
7781
  type: "path"
7264
7782
  });
7265
7783
  if (file.binary || !expandedFiles.has(fileIndex)) return;
7784
+ let prevOldEnd = 0;
7785
+ let prevNewEnd = 0;
7266
7786
  file.hunks.forEach((hunk, hunkIndex) => {
7787
+ const oldGap = hunk.oldStart - prevOldEnd - 1;
7788
+ const newGap = hunk.newStart - prevNewEnd - 1;
7789
+ if (foldSource !== void 0 && (oldGap > 0 || newGap > 0)) {
7790
+ const key = `f${fileIndex}fold${hunkIndex}`;
7791
+ out.push({
7792
+ key,
7793
+ file,
7794
+ fileIndex,
7795
+ type: "fold",
7796
+ fold: {
7797
+ oldStart: prevOldEnd + 1,
7798
+ oldEnd: Math.max(hunk.oldStart - 1, prevOldEnd),
7799
+ newStart: prevNewEnd + 1,
7800
+ newEnd: Math.max(hunk.newStart - 1, prevNewEnd)
7801
+ },
7802
+ count: Math.max(oldGap, newGap, 0),
7803
+ state: foldRows.get(key)
7804
+ });
7805
+ }
7806
+ prevOldEnd = hunkOldEnd(hunk);
7807
+ prevNewEnd = hunkNewEnd(hunk);
7267
7808
  out.push({
7268
7809
  key: `f${fileIndex}h${hunkIndex}`,
7269
7810
  file,
@@ -7284,7 +7825,12 @@ window.__ModuleLoader__.load({
7284
7825
  });
7285
7826
  });
7286
7827
  return out;
7287
- }, [parsed, expandedFiles]);
7828
+ }, [
7829
+ parsed,
7830
+ expandedFiles,
7831
+ foldRows,
7832
+ foldSource
7833
+ ]);
7288
7834
  const hidden = rows.length - MAX_DIFF_ROWS;
7289
7835
  const capped = hidden > 0 && !expanded;
7290
7836
  const headLines = Math.ceil(MAX_DIFF_ROWS / 2);
@@ -7292,6 +7838,29 @@ window.__ModuleLoader__.load({
7292
7838
  const head = capped ? rows.slice(0, headLines) : rows;
7293
7839
  const tail = capped ? rows.slice(rows.length - tailLines) : [];
7294
7840
  if (rows.length === 0) return null;
7841
+ const renderLine = (line, key) => {
7842
+ const lineClass = line.kind === "del" ? sidebar_module_css_default.gitDiffDel : line.kind === "add" ? sidebar_module_css_default.gitDiffAdd : line.kind === "meta" ? sidebar_module_css_default.gitDiffMeta : sidebar_module_css_default.gitDiffCtx;
7843
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7844
+ className: clsx(sidebar_module_css_default.gitDiffLine, lineClass),
7845
+ children: line.kind === "meta" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7846
+ className: sidebar_module_css_default.gitDiffMetaText,
7847
+ children: line.text
7848
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
7849
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7850
+ className: sidebar_module_css_default.gitDiffNum,
7851
+ children: line.oldNum ?? ""
7852
+ }),
7853
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7854
+ className: sidebar_module_css_default.gitDiffNum,
7855
+ children: line.newNum ?? ""
7856
+ }),
7857
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7858
+ className: sidebar_module_css_default.gitDiffCode,
7859
+ children: line.text
7860
+ })
7861
+ ] })
7862
+ }, key);
7863
+ };
7295
7864
  const renderRow = (row) => {
7296
7865
  if (row.type === "path") {
7297
7866
  const tag = fileTag(row.file);
@@ -7356,28 +7925,21 @@ window.__ModuleLoader__.load({
7356
7925
  })]
7357
7926
  }, row.key);
7358
7927
  }
7359
- const line = row.line;
7360
- const lineClass = line.kind === "del" ? sidebar_module_css_default.gitDiffDel : line.kind === "add" ? sidebar_module_css_default.gitDiffAdd : line.kind === "meta" ? sidebar_module_css_default.gitDiffMeta : sidebar_module_css_default.gitDiffCtx;
7361
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7362
- className: clsx(sidebar_module_css_default.gitDiffLine, lineClass),
7363
- children: line.kind === "meta" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7364
- className: sidebar_module_css_default.gitDiffMetaText,
7365
- children: line.text
7366
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
7367
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7368
- className: sidebar_module_css_default.gitDiffNum,
7369
- children: line.oldNum ?? ""
7370
- }),
7371
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7372
- className: sidebar_module_css_default.gitDiffNum,
7373
- children: line.newNum ?? ""
7374
- }),
7375
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
7376
- className: sidebar_module_css_default.gitDiffCode,
7377
- children: line.text
7378
- })
7379
- ] })
7380
- }, row.key);
7928
+ if (row.type === "fold") {
7929
+ if (row.state?.status === "ready") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react.Fragment, { children: row.state.rows.map((line, index) => renderLine(line, `${row.key}r${index}`)) }, row.key);
7930
+ const loading = row.state?.status === "loading";
7931
+ const failed = row.state?.status === "failed";
7932
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
7933
+ type: "button",
7934
+ className: clsx(sidebar_module_css_default.gitFoldRow, failed && sidebar_module_css_default.gitFoldRowFailed),
7935
+ disabled: loading || failed,
7936
+ onClick: () => {
7937
+ resolveFold(row.key, row.file, row.fold);
7938
+ },
7939
+ children: failed ? t("gitFoldFailed") : loading ? t("gitFoldLoading") : t("gitFoldExpand", { count: row.count })
7940
+ }, row.key);
7941
+ }
7942
+ return renderLine(row.line, row.key);
7381
7943
  };
7382
7944
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7383
7945
  className: sidebar_module_css_default.gitDiff,
@@ -7501,7 +8063,18 @@ window.__ModuleLoader__.load({
7501
8063
  diff: "",
7502
8064
  untrackedPath: diff.kind === "worktree" ? diff.path : "",
7503
8065
  untrackedContent: data.untracked
7504
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DiffView, { diff: data.diff }), data.diff === "" && data.untracked === void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
8066
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DiffView, {
8067
+ diff: data.diff,
8068
+ foldSource: {
8069
+ scope: {
8070
+ sessionId,
8071
+ cwd,
8072
+ ...diff.repoRoot !== void 0 ? { repoRoot: diff.repoRoot } : {}
8073
+ },
8074
+ ref: diff,
8075
+ cwd
8076
+ }
8077
+ }), data.diff === "" && data.untracked === void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7505
8078
  className: sidebar_module_css_default.gitEmpty,
7506
8079
  children: t("diffEmpty")
7507
8080
  })] })
@@ -7815,58 +8388,58 @@ Mode: this is a continuable side conversation. Your answers stay in this side th
7815
8388
  document.head.appendChild(tag);
7816
8389
  }
7817
8390
  var SubagentView_module_css_default = {
7818
- "jobsPaneStatus": "F2T6aa_jobsPaneStatus",
7819
- "subagentContent": "F2T6aa_subagentContent",
7820
- "subagentRowActive": "F2T6aa_subagentRowActive",
7821
- "jobsRowSettled": "F2T6aa_jobsRowSettled",
7822
8391
  "jobsPanePre": "F2T6aa_jobsPanePre",
8392
+ "subagentHeader": "F2T6aa_subagentHeader",
8393
+ "subagentLive": "F2T6aa_subagentLive",
8394
+ "jobsList": "F2T6aa_jobsList",
8395
+ "jobsPaneClose": "F2T6aa_jobsPaneClose",
8396
+ "jobsRowSelected": "F2T6aa_jobsRowSelected",
8397
+ "jobsKind": "F2T6aa_jobsKind",
8398
+ "jobsRowMain": "F2T6aa_jobsRowMain",
8399
+ "jobsRow": "F2T6aa_jobsRow",
7823
8400
  "jobsCount": "F2T6aa_jobsCount",
7824
- "jobsDot": "F2T6aa_jobsDot",
7825
- "jobsPaneDot": "F2T6aa_jobsPaneDot",
7826
- "subagentRefresh": "F2T6aa_subagentRefresh",
7827
- "subagentTitle": "F2T6aa_subagentTitle",
7828
- "historyToggle": "F2T6aa_historyToggle",
7829
- "subagentDot": "F2T6aa_subagentDot",
7830
- "subagentBody": "F2T6aa_subagentBody",
7831
- "subagentRowDisabled": "F2T6aa_subagentRowDisabled",
7832
- "subagentRowLoading": "F2T6aa_subagentRowLoading",
8401
+ "jobsPaneHeader": "F2T6aa_jobsPaneHeader",
8402
+ "jobsPaneLabel": "F2T6aa_jobsPaneLabel",
8403
+ "jobsPaneStatus": "F2T6aa_jobsPaneStatus",
8404
+ "subagentLabel": "F2T6aa_subagentLabel",
8405
+ "jobsLabel": "F2T6aa_jobsLabel",
8406
+ "subagentErrorRetry": "F2T6aa_subagentErrorRetry",
7833
8407
  "subagentLiveTool": "F2T6aa_subagentLiveTool",
7834
- "jobsRow": "F2T6aa_jobsRow",
8408
+ "subagentRefresh": "F2T6aa_subagentRefresh",
7835
8409
  "jobsKill": "F2T6aa_jobsKill",
7836
- "jobsKillArmed": "F2T6aa_jobsKillArmed",
7837
- "jobsPaneClose": "F2T6aa_jobsPaneClose",
7838
8410
  "jobsKillError": "F2T6aa_jobsKillError",
7839
- "jobs": "F2T6aa_jobs",
7840
- "jobsRowSelected": "F2T6aa_jobsRowSelected",
7841
- "subagentEmptyHint": "F2T6aa_subagentEmptyHint",
7842
- "subagentError": "F2T6aa_subagentError",
7843
- "jobsContent": "F2T6aa_jobsContent",
7844
- "subagentLabel": "F2T6aa_subagentLabel",
7845
- "subagentEmpty": "F2T6aa_subagentEmpty",
7846
- "jobsKind": "F2T6aa_jobsKind",
7847
- "jobsPaneHint": "F2T6aa_jobsPaneHint",
7848
- "subagentChildren": "F2T6aa_subagentChildren",
7849
- "jobsPane": "F2T6aa_jobsPane",
7850
8411
  "jobsPaneError": "F2T6aa_jobsPaneError",
7851
- "subagentLive": "F2T6aa_subagentLive",
7852
- "jobsTitle": "F2T6aa_jobsTitle",
7853
- "jobsLabel": "F2T6aa_jobsLabel",
7854
- "jobsRowMain": "F2T6aa_jobsRowMain",
8412
+ "subagentContent": "F2T6aa_subagentContent",
8413
+ "subagentRow": "F2T6aa_subagentRow",
8414
+ "historyToggle": "F2T6aa_historyToggle",
8415
+ "jobsDot": "F2T6aa_jobsDot",
8416
+ "jobsPaneHint": "F2T6aa_jobsPaneHint",
8417
+ "subagentRowDisabled": "F2T6aa_subagentRowDisabled",
7855
8418
  "subagentLiveText": "F2T6aa_subagentLiveText",
7856
- "subagentNode": "F2T6aa_subagentNode",
7857
- "jobsPaneLabel": "F2T6aa_jobsPaneLabel",
7858
- "subagentCount": "F2T6aa_subagentCount",
7859
- "subagentLiveArgs": "F2T6aa_subagentLiveArgs",
8419
+ "jobsLabelLine": "F2T6aa_jobsLabelLine",
8420
+ "subagentRowActive": "F2T6aa_subagentRowActive",
8421
+ "jobsContent": "F2T6aa_jobsContent",
8422
+ "subagentEmpty": "F2T6aa_subagentEmpty",
8423
+ "subagentError": "F2T6aa_subagentError",
8424
+ "subagent": "F2T6aa_subagent",
8425
+ "subagentBody": "F2T6aa_subagentBody",
8426
+ "jobsRowSettled": "F2T6aa_jobsRowSettled",
7860
8427
  "jobsSecondary": "F2T6aa_jobsSecondary",
8428
+ "subagentCount": "F2T6aa_subagentCount",
8429
+ "jobs": "F2T6aa_jobs",
8430
+ "jobsKillArmed": "F2T6aa_jobsKillArmed",
8431
+ "jobsTitle": "F2T6aa_jobsTitle",
8432
+ "jobsPane": "F2T6aa_jobsPane",
8433
+ "subagentDot": "F2T6aa_subagentDot",
7861
8434
  "jobsHeader": "F2T6aa_jobsHeader",
7862
- "subagentHeader": "F2T6aa_subagentHeader",
7863
8435
  "subagentSecondary": "F2T6aa_subagentSecondary",
7864
- "subagentErrorRetry": "F2T6aa_subagentErrorRetry",
7865
- "subagent": "F2T6aa_subagent",
7866
- "subagentRow": "F2T6aa_subagentRow",
7867
- "jobsList": "F2T6aa_jobsList",
7868
- "jobsLabelLine": "F2T6aa_jobsLabelLine",
7869
- "jobsPaneHeader": "F2T6aa_jobsPaneHeader"
8436
+ "subagentTitle": "F2T6aa_subagentTitle",
8437
+ "subagentChildren": "F2T6aa_subagentChildren",
8438
+ "subagentLiveArgs": "F2T6aa_subagentLiveArgs",
8439
+ "subagentRowLoading": "F2T6aa_subagentRowLoading",
8440
+ "subagentNode": "F2T6aa_subagentNode",
8441
+ "jobsPaneDot": "F2T6aa_jobsPaneDot",
8442
+ "subagentEmptyHint": "F2T6aa_subagentEmptyHint"
7870
8443
  };
7871
8444
  //#endregion
7872
8445
  //#region src/client/SubagentView.tsx
@@ -8973,45 +9546,45 @@ Mode: this is a continuable side conversation. Your answers stay in this side th
8973
9546
  document.head.appendChild(tag);
8974
9547
  }
8975
9548
  var SideChatView_module_css_default = {
8976
- "sidechatHeroTitle": "_64UoUa_sidechatHeroTitle",
8977
- "sidechatComposerInput": "_64UoUa_sidechatComposerInput",
8978
- "sidechatScroll": "_64UoUa_sidechatScroll",
8979
- "sidechatFadeIn": "_64UoUa_sidechatFadeIn",
8980
- "sidechatRowBody": "_64UoUa_sidechatRowBody",
8981
- "sidechatDetailHeader": "_64UoUa_sidechatDetailHeader",
8982
- "sidechatIconBtn": "_64UoUa_sidechatIconBtn",
8983
- "sidechatHero": "_64UoUa_sidechatHero",
8984
- "sidechatRowProse": "_64UoUa_sidechatRowProse",
8985
- "sidechatPrimaryBtn": "_64UoUa_sidechatPrimaryBtn",
8986
- "sidechatAssistant": "_64UoUa_sidechatAssistant",
8987
- "sidechatRowLine": "_64UoUa_sidechatRowLine",
8988
- "sidechatStatusText": "_64UoUa_sidechatStatusText",
8989
- "sidechatBtnIn": "_64UoUa_sidechatBtnIn",
8990
- "sidechatRowStatic": "_64UoUa_sidechatRowStatic",
8991
- "sidechatRowSummary": "_64UoUa_sidechatRowSummary",
8992
- "sidechatRowCode": "_64UoUa_sidechatRowCode",
9549
+ "sidechatHeaderSpacer": "_64UoUa_sidechatHeaderSpacer",
8993
9550
  "sidechatStatus": "_64UoUa_sidechatStatus",
8994
- "sidechatRow": "_64UoUa_sidechatRow",
9551
+ "sidechatComposer": "_64UoUa_sidechatComposer",
9552
+ "sidechatHint": "_64UoUa_sidechatHint",
9553
+ "sidechatRowMeta": "_64UoUa_sidechatRowMeta",
8995
9554
  "sidechatComposerBar": "_64UoUa_sidechatComposerBar",
8996
- "sidechatHeaderSpacer": "_64UoUa_sidechatHeaderSpacer",
8997
9555
  "sidechatSendBtn": "_64UoUa_sidechatSendBtn",
8998
- "sidechatError": "_64UoUa_sidechatError",
8999
- "sidechatRowMeta": "_64UoUa_sidechatRowMeta",
9000
- "sidechatRowFailed": "_64UoUa_sidechatRowFailed",
9001
- "sidechatAgentBadge": "_64UoUa_sidechatAgentBadge",
9002
- "sidechatHeroDesc": "_64UoUa_sidechatHeroDesc",
9556
+ "sidechatAssistant": "_64UoUa_sidechatAssistant",
9557
+ "sidechatHeaderDot": "_64UoUa_sidechatHeaderDot",
9558
+ "sidechatScroll": "_64UoUa_sidechatScroll",
9559
+ "sidechatRowBody": "_64UoUa_sidechatRowBody",
9560
+ "sidechatBtnIn": "_64UoUa_sidechatBtnIn",
9561
+ "sidechatShimmerText": "_64UoUa_sidechatShimmerText",
9562
+ "sidechatHero": "_64UoUa_sidechatHero",
9563
+ "sidechatFadeIn": "_64UoUa_sidechatFadeIn",
9003
9564
  "sidechatUser": "_64UoUa_sidechatUser",
9004
- "sidechatRowChevron": "_64UoUa_sidechatRowChevron",
9005
- "sidechatSweep": "_64UoUa_sidechatSweep",
9565
+ "sidechatHeroDesc": "_64UoUa_sidechatHeroDesc",
9006
9566
  "sidechat": "_64UoUa_sidechat",
9567
+ "sidechatRowStatic": "_64UoUa_sidechatRowStatic",
9007
9568
  "sidechatRowLabel": "_64UoUa_sidechatRowLabel",
9008
9569
  "sidechatRowMono": "_64UoUa_sidechatRowMono",
9009
- "sidechatRowIn": "_64UoUa_sidechatRowIn",
9570
+ "sidechatRow": "_64UoUa_sidechatRow",
9571
+ "sidechatRowFailed": "_64UoUa_sidechatRowFailed",
9572
+ "sidechatStatusText": "_64UoUa_sidechatStatusText",
9573
+ "sidechatPrimaryBtn": "_64UoUa_sidechatPrimaryBtn",
9574
+ "sidechatHeroTitle": "_64UoUa_sidechatHeroTitle",
9575
+ "sidechatRowChevron": "_64UoUa_sidechatRowChevron",
9010
9576
  "sidechatComposerMeta": "_64UoUa_sidechatComposerMeta",
9011
- "sidechatShimmerText": "_64UoUa_sidechatShimmerText",
9012
- "sidechatHeaderDot": "_64UoUa_sidechatHeaderDot",
9013
- "sidechatHint": "_64UoUa_sidechatHint",
9014
- "sidechatComposer": "_64UoUa_sidechatComposer"
9577
+ "sidechatRowProse": "_64UoUa_sidechatRowProse",
9578
+ "sidechatDetailHeader": "_64UoUa_sidechatDetailHeader",
9579
+ "sidechatRowLine": "_64UoUa_sidechatRowLine",
9580
+ "sidechatIconBtn": "_64UoUa_sidechatIconBtn",
9581
+ "sidechatRowIn": "_64UoUa_sidechatRowIn",
9582
+ "sidechatRowSummary": "_64UoUa_sidechatRowSummary",
9583
+ "sidechatRowCode": "_64UoUa_sidechatRowCode",
9584
+ "sidechatComposerInput": "_64UoUa_sidechatComposerInput",
9585
+ "sidechatSweep": "_64UoUa_sidechatSweep",
9586
+ "sidechatError": "_64UoUa_sidechatError",
9587
+ "sidechatAgentBadge": "_64UoUa_sidechatAgentBadge"
9015
9588
  };
9016
9589
  //#endregion
9017
9590
  //#region src/client/SideChatView.tsx
@@ -12062,7 +12635,7 @@ Mode: this is a continuable side conversation. Your answers stay in this side th
12062
12635
  }
12063
12636
  /** Render the content of one tab (dispatched by type). */
12064
12637
  const TabContent = (0, react.memo)(function TabContent(props) {
12065
- const { tab, effectiveTabId, sessionId, cwd, expanded, revealed, onToggleDir, onReferenceFile, ctx, store, visible, onSubagentJump, onOpenDiff } = props;
12638
+ const { tab, effectiveTabId, sessionId, cwd, expanded, revealed, onToggleDir, onReferenceFile, ctx, store, visible, onSubagentJump, onOpenDiff, onPathRenamed, onPathRemoved } = props;
12066
12639
  const scope = {
12067
12640
  sessionId,
12068
12641
  cwd
@@ -12935,6 +13508,39 @@ Mode: this is a continuable side conversation. Your answers stay in this side th
12935
13508
  sessionId,
12936
13509
  cwd
12937
13510
  ]);
13511
+ /** Tree-row rename reconciliation: retarget every open tab whose path was
13512
+ * the renamed file (the editor content survives and later saves land on
13513
+ * the new path; the title follows the new base name). */
13514
+ const onPathRenamed = (0, react.useCallback)((oldPath, newPath) => {
13515
+ const service = ctx.get("betterSidebar");
13516
+ if (service === void 0) return;
13517
+ const snapshot = store.getSnapshot().state;
13518
+ if (snapshot === void 0) return;
13519
+ for (const leaf of allLeaves(snapshot.splits)) for (const tab of leaf.tabs) if (tab.path === oldPath) service.updateTab(tab.id, {
13520
+ path: newPath,
13521
+ title: baseName$1(newPath)
13522
+ });
13523
+ for (const float of snapshot.floats) if (float.tab.path === oldPath) service.updateTab(float.tab.id, {
13524
+ path: newPath,
13525
+ title: baseName$1(newPath)
13526
+ });
13527
+ }, [ctx, store]);
13528
+ /** Tree-row delete reconciliation: close every open tab at or under the
13529
+ * removed path (a stale tab's next save would fail against a missing
13530
+ * path). Floating tabs are as open as docked ones. */
13531
+ const onPathRemoved = (0, react.useCallback)((target) => {
13532
+ const service = ctx.get("betterSidebar");
13533
+ if (service === void 0) return;
13534
+ const snapshot = store.getSnapshot().state;
13535
+ if (snapshot === void 0) return;
13536
+ const tabs = [];
13537
+ for (const leaf of allLeaves(snapshot.splits)) tabs.push(...leaf.tabs);
13538
+ for (const float of snapshot.floats) tabs.push(float.tab);
13539
+ for (const tab of tabs) {
13540
+ const path = tab.path;
13541
+ if (path !== void 0 && (path === target || isWithinWorkspace(target, path))) service.closeTab(tab.id);
13542
+ }
13543
+ }, [ctx, store]);
12938
13544
  if (state === void 0 || sessionId === void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
12939
13545
  "data-dsh-panel-host": true,
12940
13546
  ...osFileDragShield,
@@ -12986,6 +13592,12 @@ Mode: this is a continuable side conversation. Your answers stay in this side th
12986
13592
  * strip must never break because a plugin's badge computation failed.
12987
13593
  */
12988
13594
  const tabBadgeOf = (tab) => {
13595
+ if (isAgentTabId(tab.id)) {
13596
+ if (state.agentWaits?.[agentUuidOf(tab.id)] !== void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
13597
+ className: sidebar_module_css_default.tabBadge,
13598
+ children: "⏳"
13599
+ });
13600
+ }
12989
13601
  const descriptor = ctx.get("betterSidebar")?.getTab(tab.type);
12990
13602
  if (descriptor?.badge === void 0) return null;
12991
13603
  let value;
@@ -13026,6 +13638,8 @@ Mode: this is a continuable side conversation. Your answers stay in this side th
13026
13638
  store.reduce((s) => toggleExpanded(s, path));
13027
13639
  },
13028
13640
  onReferenceFile: referenceInChat,
13641
+ onPathRenamed,
13642
+ onPathRemoved,
13029
13643
  ctx,
13030
13644
  store,
13031
13645
  visible: placement === "float" ? true : state.panelOpen && active,