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