claude-remote-cli 3.0.9 → 3.1.0

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.
@@ -0,0 +1,32 @@
1
+ .pin-gate.svelte-1qp96yb{display:flex;align-items:center;justify-content:center;height:100vh;background:var(--bg);padding:1rem}.pin-container.svelte-1qp96yb{display:flex;flex-direction:column;align-items:center;gap:1rem;width:100%;max-width:320px;text-align:center}.pin-container.svelte-1qp96yb h1:where(.svelte-1qp96yb){font-size:1.5rem;color:var(--text)}.pin-container.svelte-1qp96yb p:where(.svelte-1qp96yb){color:var(--text-muted);font-size:.95rem}input.svelte-1qp96yb{width:100%;padding:14px 16px;background:var(--surface);border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:1.2rem;text-align:center;outline:none;-webkit-appearance:none}input.svelte-1qp96yb:focus{border-color:var(--accent)}button.svelte-1qp96yb{width:100%;padding:14px;background:var(--accent);color:#fff;border:none;border-radius:8px;font-size:1rem;font-weight:600;cursor:pointer;touch-action:manipulation}button.svelte-1qp96yb:active{opacity:.8}.error.svelte-1qp96yb{color:var(--accent);font-size:.9rem}.context-menu-trigger.svelte-1nmhce7{background:none;border:none;color:var(--text-muted);font-size:1rem;font-weight:700;cursor:pointer;padding:0 6px;border-radius:4px;touch-action:manipulation;flex-shrink:0;line-height:1;letter-spacing:1px;min-height:24px;display:inline-flex;align-items:center;transition:color .15s,background .15s}.context-menu-trigger.svelte-1nmhce7:hover{color:var(--text);background:var(--border)}.context-menu-backdrop.svelte-1nmhce7{position:fixed;top:0;right:0;bottom:0;left:0;z-index:999}.context-menu.svelte-1nmhce7{position:fixed;list-style:none;margin:0;padding:4px 0;background:var(--surface);border:1px solid var(--border);border-radius:8px;box-shadow:0 4px 16px #0006;z-index:1000;min-width:175px}.context-menu-item.svelte-1nmhce7{padding:9px 14px;font-size:.85rem;cursor:pointer;color:var(--text);white-space:nowrap}.context-menu-item.svelte-1nmhce7:hover{background:var(--border)}.context-menu-item.svelte-1nmhce7:focus{outline:2px solid var(--accent);outline-offset:-2px}.context-menu-item--danger.svelte-1nmhce7{color:#e74c3c}.context-menu-item--danger.svelte-1nmhce7:hover{background:#e74c3c1f}.context-menu-item--disabled.svelte-1nmhce7{opacity:.4;cursor:default}.context-menu-item--disabled.svelte-1nmhce7:hover{background:none}.workspace-item.svelte-168i8d5{display:flex;flex-direction:column}.workspace-header.svelte-168i8d5{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;cursor:pointer;min-height:44px;transition:background .12s}.workspace-header.svelte-168i8d5:hover{background:var(--surface-hover)}.workspace-item.active.svelte-168i8d5 .workspace-header:where(.svelte-168i8d5){background:var(--surface-hover)}.workspace-left.svelte-168i8d5{display:flex;align-items:center;gap:8px;min-width:0;flex:1}.initial-block.svelte-168i8d5{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:4px;font-size:var(--font-size-xs);font-weight:700;color:#000;font-family:var(--font-mono);flex-shrink:0;line-height:1}.workspace-name.svelte-168i8d5{font-size:var(--font-size-sm);font-weight:700;color:var(--text);font-family:var(--font-mono);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.workspace-actions.svelte-168i8d5{display:flex;align-items:center;gap:2px;opacity:0;transition:opacity .12s;flex-shrink:0}.workspace-header.svelte-168i8d5:hover .workspace-actions:where(.svelte-168i8d5){opacity:1}.action-btn.svelte-168i8d5{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:3px;font-size:var(--font-size-xs);color:var(--text-muted);cursor:pointer;font-family:var(--font-mono);transition:background .1s,color .1s}.action-btn.svelte-168i8d5:hover{background:var(--border);color:var(--text)}.session-list.svelte-168i8d5{list-style:none}.session-row.svelte-168i8d5{display:flex;align-items:center;gap:8px;padding:6px 10px 6px 36px;cursor:pointer;min-height:44px;font-size:var(--font-size-xs);font-family:var(--font-mono);color:var(--text-muted);transition:background .1s}.session-row.svelte-168i8d5{border-left:3px solid transparent}.session-row.svelte-168i8d5:hover{background:var(--surface-hover);color:var(--text)}.session-row.selected.svelte-168i8d5{border-left-color:var(--accent);background:var(--surface-hover);color:var(--text)}.session-row.attention.svelte-168i8d5 .session-name:where(.svelte-168i8d5){font-weight:700;color:var(--text)}.status-dot.svelte-168i8d5{display:inline-block;width:7px;height:7px;border-radius:50%;flex-shrink:0}.status-dot--running.svelte-168i8d5{background:var(--status-success)}.status-dot--idle.svelte-168i8d5{background:var(--status-info)}.dot-inactive.svelte-168i8d5{width:7px;height:7px;border-radius:50%;background:var(--border);flex-shrink:0}.session-row.inactive.svelte-168i8d5{opacity:.6}.session-row.inactive.svelte-168i8d5:hover{opacity:1}.status-dot--attention.svelte-168i8d5{background:var(--status-warning);box-shadow:0 0 5px 1px #fbbf2473;animation:svelte-168i8d5-attention-glow 2s ease-in-out infinite}@keyframes svelte-168i8d5-attention-glow{0%,to{box-shadow:0 0 3px 1px #fbbf244d}50%{box-shadow:0 0 7px 2px #fbbf2499}}.terminal-icon.svelte-168i8d5{font-size:.6rem;font-weight:700;color:var(--text-muted);flex-shrink:0;font-family:var(--font-mono);line-height:1}.session-name.svelte-168i8d5{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;min-width:0}.session-name.bold.svelte-168i8d5{font-weight:700}.session-status.svelte-168i8d5{font-size:.65rem;color:var(--text-muted);opacity:.6;white-space:nowrap;flex-shrink:0}.session-row.terminal.svelte-168i8d5 .session-status:where(.svelte-168i8d5){display:none}.add-worktree-row.svelte-168i8d5{padding:4px 10px 6px 36px}.add-worktree-btn.svelte-168i8d5{font-size:var(--font-size-xs);font-family:var(--font-mono);color:var(--text-muted);opacity:.5;cursor:pointer;transition:opacity .1s,color .1s}.add-worktree-btn.svelte-168i8d5:hover{opacity:1;color:var(--text)}.workspace-divider.svelte-168i8d5{height:1px;background:var(--border);margin:0}@media(max-width:600px){.workspace-header.svelte-168i8d5,.session-row.svelte-168i8d5{min-height:48px}.workspace-actions.svelte-168i8d5{opacity:1}}.smart-search.svelte-itm1qs{position:relative;flex-shrink:0}.input-row.svelte-itm1qs{display:flex;align-items:center;padding:6px 10px;border-bottom:1px solid var(--border);gap:6px}.prompt.svelte-itm1qs{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--accent);flex-shrink:0;line-height:1;-webkit-user-select:none;user-select:none}.search-input.svelte-itm1qs{flex:1;background:transparent;border:none;outline:none;color:var(--text);font-family:var(--font-mono);font-size:var(--font-size-sm);caret-color:var(--accent)}.search-input.svelte-itm1qs::placeholder{color:var(--text-muted);opacity:.5}.dropdown.svelte-itm1qs{position:absolute;top:100%;left:0;right:0;background:var(--surface);border:1px solid var(--border);border-top:none;list-style:none;z-index:200;max-height:240px;overflow-y:auto}.dropdown-item.svelte-itm1qs{display:flex;align-items:baseline;gap:6px;padding:8px 10px;cursor:pointer;font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--text-muted);transition:background .1s;white-space:nowrap;overflow:hidden}.dropdown-item.svelte-itm1qs:hover,.dropdown-item.focused.svelte-itm1qs{background:var(--surface-hover);color:var(--text)}.dropdown-item.svelte-itm1qs strong:where(.svelte-itm1qs){color:var(--text);font-weight:700}.dropdown-path.svelte-itm1qs{font-size:var(--font-size-xs);color:var(--text-muted);opacity:.5;overflow:hidden;text-overflow:ellipsis;min-width:0;flex-shrink:1}@media(max-width:600px){.smart-search.svelte-itm1qs{width:100%}.input-row.svelte-itm1qs{width:100%;box-sizing:border-box}.search-input.svelte-itm1qs{width:100%;min-width:0}}.sidebar.svelte-owj5vn{position:relative;display:flex;flex-direction:column;background:var(--bg);border-right:1px solid var(--border);overflow:hidden;transition:transform .25s ease,width .2s ease,min-width .2s ease;z-index:100}.resize-handle.svelte-owj5vn{position:absolute;top:0;right:0;width:4px;height:100%;cursor:col-resize;z-index:10;transition:background .15s}.resize-handle.svelte-owj5vn:hover{background:var(--accent)}.sidebar-header.svelte-owj5vn{display:flex;align-items:center;justify-content:space-between;padding:12px 10px;border-bottom:1px solid var(--border);flex-shrink:0}.sidebar-label.svelte-owj5vn{flex:1;font-size:var(--font-size-xs);font-weight:600;color:var(--text-muted);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em}.collapse-btn.svelte-owj5vn{background:none;border:none;color:var(--text-muted);font-size:1.1rem;cursor:pointer;padding:8px 10px;border-radius:4px;flex-shrink:0;line-height:1;font-family:var(--font-mono);min-width:36px;min-height:36px;display:flex;align-items:center;justify-content:center}.collapse-btn.svelte-owj5vn:hover{color:var(--text);background:var(--border)}.sidebar.collapsed.svelte-owj5vn .sidebar-header:where(.svelte-owj5vn){justify-content:center;padding:12px 4px}.icon-btn.svelte-owj5vn{background:none;border:none;color:var(--text);font-size:1.2rem;cursor:pointer;padding:4px 6px;border-radius:4px;touch-action:manipulation;display:none}.icon-btn.svelte-owj5vn:active{background:var(--border)}.workspace-list.svelte-owj5vn{flex:1;overflow-y:auto;overflow-x:hidden}.empty-state.svelte-owj5vn{padding:16px 10px;font-size:var(--font-size-xs);font-family:var(--font-mono);color:var(--text-muted);opacity:.5;text-align:center}.add-workspace-btn.svelte-owj5vn{margin:8px;padding:10px 12px;min-height:40px;background:none;border:1px solid var(--border);border-radius:0;color:var(--text);font-size:var(--font-size-xs);font-family:var(--font-mono);cursor:pointer;touch-action:manipulation;text-align:center;flex-shrink:0;transition:background .1s,border-color .1s}.add-workspace-btn.svelte-owj5vn{border-color:var(--accent);color:var(--accent)}.add-workspace-btn.svelte-owj5vn:hover{background:color-mix(in srgb,var(--accent) 12%,transparent)}.add-workspace-btn.svelte-owj5vn:active{background:var(--border)}.settings-btn.svelte-owj5vn{margin:0 8px 8px;padding:10px 12px;min-height:40px;background:none;border:1px solid var(--border);border-radius:0;color:var(--text-muted);font-size:var(--font-size-xs);font-family:var(--font-mono);cursor:pointer;touch-action:manipulation;text-align:center;flex-shrink:0;transition:background .1s}.settings-btn.svelte-owj5vn:hover{background:var(--surface-hover);color:var(--text)}.settings-btn.svelte-owj5vn:active{background:var(--border)}@media(max-width:600px){.sidebar.svelte-owj5vn{position:fixed;top:0;left:0;height:100%;transform:translate(-100%);box-shadow:2px 0 12px #00000080;transition:transform .25s ease}.sidebar.open.svelte-owj5vn{transform:translate(0)}.collapse-btn.svelte-owj5vn{display:none}.icon-btn.svelte-owj5vn{display:block;font-size:1.4rem;padding:4px 8px}.resize-handle.svelte-owj5vn{display:none}}/**
2
+ * Copyright (c) 2014 The xterm.js authors. All rights reserved.
3
+ * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
4
+ * https://github.com/chjj/term.js
5
+ * @license MIT
6
+ *
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
13
+ *
14
+ * The above copyright notice and this permission notice shall be included in
15
+ * all copies or substantial portions of the Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ * THE SOFTWARE.
24
+ *
25
+ * Originally forked from (with the author's permission):
26
+ * Fabrice Bellard's javascript vt100 for jslinux:
27
+ * http://bellard.org/jslinux/
28
+ * Copyright (c) 2011 Fabrice Bellard
29
+ * The original design remains. The terminal itself
30
+ * has been extended to include xterm CSI codes, among
31
+ * other features.
32
+ */.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{font-family:monospace;-webkit-user-select:text;user-select:text;white-space:pre}.xterm .xterm-accessibility-tree>div{transform-origin:left;width:fit-content}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;background:#0000;transition:opacity .1s linear;z-index:11}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{position:absolute;display:none}.xterm .xterm-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow, #000) 0 6px 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.terminal-wrapper.svelte-5qgfij{display:flex;flex:1;min-height:0;position:relative;overflow:hidden}.terminal-container.svelte-5qgfij{flex:1;min-width:0;min-height:0;overflow:hidden;padding:4px}.terminal-wrapper.drag-over.svelte-5qgfij{outline:2px dashed var(--accent);outline-offset:-2px}.terminal-scrollbar.svelte-5qgfij{width:8px;background:transparent;position:relative;flex-shrink:0}.terminal-scrollbar-thumb.svelte-5qgfij{position:absolute;right:0;width:6px;background:var(--border);border-radius:3px;cursor:pointer}@media(hover:none){.terminal-wrapper.selection-mode.svelte-5qgfij .terminal-container:where(.svelte-5qgfij){outline:2px solid var(--accent);outline-offset:-2px}.terminal-container.svelte-5qgfij{touch-action:none}.terminal-scrollbar.svelte-5qgfij{width:12px}.terminal-scrollbar-thumb.svelte-5qgfij{width:8px;min-height:44px}.scroll-fabs.svelte-5qgfij{position:absolute;right:16px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:12px;z-index:1;opacity:.6;pointer-events:auto}.scroll-fab.svelte-5qgfij{width:44px;height:44px;border-radius:50%;border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:18px;display:flex;align-items:center;justify-content:center;cursor:pointer;touch-action:manipulation;-webkit-user-select:none;user-select:none}.scroll-fab.svelte-5qgfij:active{opacity:1;background:var(--border)}.scroll-fab-bottom.svelte-5qgfij{margin-top:4px}}.user-message.svelte-1q16011{border-left:3px solid var(--accent);padding:var(--spacing-sm) var(--spacing-md);margin:var(--spacing-xs) 0;width:100%}.user-message-text.svelte-1q16011{color:var(--text);font-size:.95rem;white-space:pre-wrap;word-break:break-word}.agent-message.svelte-1r3r7jb{padding:var(--spacing-sm) var(--spacing-md);margin:var(--spacing-xs) 0;width:100%;color:var(--text);font-size:.95rem;line-height:1.5;word-break:break-word}.agent-message.svelte-1r3r7jb .code-block{background:var(--card-bg);border-radius:var(--radius-sm);padding:var(--spacing-sm) var(--spacing-md);overflow-x:auto;font-family:var(--code-font);font-size:.85rem;margin:var(--spacing-sm) 0;white-space:pre}.agent-message.svelte-1r3r7jb .inline-code{background:var(--card-bg);border-radius:var(--radius-sm);padding:1px 4px;font-family:var(--code-font);font-size:.88em}.agent-message.svelte-1r3r7jb a{color:var(--info);text-decoration:underline}.agent-message.svelte-1r3r7jb strong{color:var(--text);font-weight:600}.agent-message.svelte-1r3r7jb em{font-style:italic}.agent-message.svelte-1r3r7jb .md-heading{font-weight:600;margin:var(--spacing-sm) 0 var(--spacing-xs);line-height:1.3}.agent-message.svelte-1r3r7jb h1.md-heading{font-size:1.3em}.agent-message.svelte-1r3r7jb h2.md-heading{font-size:1.15em}.agent-message.svelte-1r3r7jb h3.md-heading{font-size:1.05em}.agent-message.svelte-1r3r7jb .md-ul{margin:var(--spacing-xs) 0;padding-left:1.5em;list-style:disc}.agent-message.svelte-1r3r7jb .md-li{margin:2px 0}.agent-message.svelte-1r3r7jb .md-hr{border:none;border-top:1px solid var(--border);margin:var(--spacing-sm) 0}.file-change-card.svelte-649juz{display:flex;align-items:center;gap:var(--spacing-sm);background:var(--card-bg);border-radius:var(--radius-sm);padding:var(--spacing-sm) var(--spacing-md);margin:var(--spacing-xs) 0;font-family:var(--code-font);font-size:.85rem;width:100%;min-width:0}.file-icon.svelte-649juz{flex-shrink:0;font-size:.9rem}.file-path.svelte-649juz{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}.file-dir.svelte-649juz{color:var(--text-muted)}.file-name.svelte-649juz{color:var(--text)}.diff-stats.svelte-649juz{flex-shrink:0;display:flex;gap:var(--spacing-sm);font-weight:600}.diff-add.svelte-649juz{color:var(--diff-add)}.diff-remove.svelte-649juz{color:var(--diff-remove)}.tool-call-card.svelte-9tdk1v{background:var(--card-bg);border-radius:var(--radius-sm);margin:var(--spacing-xs) 0;overflow:hidden;width:100%}.tool-header.svelte-9tdk1v{display:flex;align-items:center;gap:var(--spacing-sm);width:100%;min-height:44px;padding:var(--spacing-sm) var(--spacing-md);background:none;border:none;color:var(--text);cursor:pointer;font-size:.85rem;text-align:left}.tool-name.svelte-9tdk1v{font-family:var(--code-font);font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tool-status.svelte-9tdk1v{flex-shrink:0;font-size:.75rem;padding:1px 6px;border-radius:var(--radius-sm);font-weight:600;text-transform:uppercase}.status-success.svelte-9tdk1v{background:var(--success);color:#fff}.status-error.svelte-9tdk1v{background:var(--error);color:#fff}.status-pending.svelte-9tdk1v{background:var(--warning);color:#000}.toggle-icon.svelte-9tdk1v{flex-shrink:0;font-size:.7rem;color:var(--text-muted)}.tool-input.svelte-9tdk1v{padding:var(--spacing-sm) var(--spacing-md);background:var(--bg);font-family:var(--code-font);font-size:.8rem;color:var(--text-muted);overflow-x:auto;white-space:pre-wrap;word-break:break-all;margin:0;border-top:1px solid var(--border)}.reasoning-panel.svelte-fizs81{margin:var(--spacing-xs) 0;border-radius:var(--radius-sm);overflow:hidden;width:100%}.reasoning-header.svelte-fizs81{display:flex;align-items:center;gap:var(--spacing-sm);width:100%;min-height:44px;padding:var(--spacing-xs) var(--spacing-md);background:none;border:none;color:var(--text-muted);cursor:pointer;font-size:.85rem;text-align:left}.reasoning-label.svelte-fizs81{flex:1;font-style:italic}.dots.svelte-fizs81{animation:svelte-fizs81-pulse 1.5s ease-in-out infinite}@keyframes svelte-fizs81-pulse{0%,to{opacity:1}50%{opacity:.3}}.toggle-icon.svelte-fizs81{flex-shrink:0;font-size:.7rem}.reasoning-content.svelte-fizs81{padding:var(--spacing-sm) var(--spacing-md);color:var(--text-muted);font-family:var(--code-font);font-size:.82rem;line-height:1.5;white-space:pre-wrap;word-break:break-word}.error-card.svelte-au1iu7{border-left:3px solid var(--error);background:var(--card-bg);border-radius:var(--radius-sm);padding:var(--spacing-sm) var(--spacing-md);margin:var(--spacing-xs) 0;width:100%}.error-body.svelte-au1iu7{display:flex;align-items:flex-start;gap:var(--spacing-sm)}.error-text.svelte-au1iu7{flex:1;color:var(--error);font-size:.9rem;word-break:break-word}.dismiss-btn.svelte-au1iu7{flex-shrink:0;background:none;border:none;color:var(--text-muted);font-size:1.2rem;cursor:pointer;padding:0;line-height:1}.dismiss-btn.svelte-au1iu7:hover{color:var(--text)}.retry-btn.svelte-au1iu7{margin-top:var(--spacing-sm);background:none;border:1px solid var(--error);color:var(--error);border-radius:var(--radius-sm);padding:var(--spacing-xs) var(--spacing-md);font-size:.82rem;cursor:pointer;font-family:var(--code-font)}.retry-btn.svelte-au1iu7:hover{background:var(--error);color:#fff}.turn-completed.svelte-1q2w5up{display:flex;align-items:center;gap:var(--spacing-sm);margin:var(--spacing-sm) 0;width:100%}.separator-line.svelte-1q2w5up{flex:1;height:1px;background:var(--border)}.usage-info.svelte-1q2w5up{flex-shrink:0;color:var(--text-muted);font-size:.75rem;font-family:var(--code-font);padding:0 var(--spacing-sm)}.chat-view.svelte-o5aojg{flex:1;padding:var(--spacing-sm)}.empty-state.svelte-o5aojg{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--text-muted);font-size:.95rem;gap:var(--spacing-sm)}.cursor-blink.svelte-o5aojg{font-family:var(--code-font);font-size:1.2rem;animation:svelte-o5aojg-blink 1s step-end infinite}@keyframes svelte-o5aojg-blink{0%,to{opacity:1}50%{opacity:0}}.message-list.svelte-o5aojg{display:flex;flex-direction:column;gap:var(--spacing-xs)}.session-started.svelte-o5aojg{padding:var(--spacing-sm) var(--spacing-md);text-align:center}.session-started-text.svelte-o5aojg{color:var(--text-muted);font-size:.82rem;font-style:italic}.working-indicator.svelte-o5aojg{display:flex;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-md)}.working-dot.svelte-o5aojg{color:var(--accent);font-size:.7rem;animation:svelte-o5aojg-pulse-dot 1.5s ease-in-out infinite}@keyframes svelte-o5aojg-pulse-dot{0%,to{opacity:1}50%{opacity:.3}}.working-text.svelte-o5aojg{color:var(--text-muted);font-size:.85rem}.chat-input-container.svelte-mnrni5{display:flex;align-items:flex-end;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-md);background:var(--surface);border-top:1px solid var(--border);position:sticky;bottom:0}.chat-textarea.svelte-mnrni5{flex:1;background:var(--surface);border:none;color:var(--text);font-size:.95rem;font-family:inherit;resize:none;outline:none;padding:var(--spacing-sm);min-height:36px;max-height:120px;line-height:1.4}.chat-textarea.svelte-mnrni5::placeholder{color:var(--text-muted)}.chat-textarea.svelte-mnrni5:disabled{opacity:.5}.send-btn.svelte-mnrni5{flex-shrink:0;width:44px;height:44px;border-radius:50%;border:none;background:var(--accent);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:opacity .15s}.send-btn.disabled.svelte-mnrni5{opacity:.4;cursor:default}.send-btn.svelte-mnrni5:not(.disabled):hover{opacity:.9}.send-dots.svelte-mnrni5{font-size:1.1rem;letter-spacing:1px}.send-icon.svelte-mnrni5{display:block}.quick-replies.svelte-2y5bi6{display:flex;gap:var(--spacing-sm);padding:var(--spacing-xs) var(--spacing-md);overflow-x:auto;scrollbar-width:none;-ms-overflow-style:none}.quick-replies.svelte-2y5bi6::-webkit-scrollbar{display:none}.quick-reply-btn.svelte-2y5bi6{flex-shrink:0;height:40px;padding:0 var(--spacing-md);background:none;border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-family:var(--code-font);font-size:.82rem;cursor:pointer;white-space:nowrap;transition:background .15s,border-color .15s}.quick-reply-btn.svelte-2y5bi6:hover{background:var(--surface);border-color:var(--accent)}.quick-reply-btn.svelte-2y5bi6:active{background:var(--card-bg)}.permission-card.svelte-1amwf6m{border-left:3px solid var(--accent);background:var(--card-bg);border-radius:var(--radius-sm);padding:var(--spacing-md);flex-shrink:0;width:100%}.permission-card.resolved.svelte-1amwf6m{opacity:.7}.permission-card.timed_out.svelte-1amwf6m{border-left-color:var(--text-muted);opacity:.5}.permission-header.svelte-1amwf6m{margin-bottom:var(--spacing-sm)}.permission-tool.svelte-1amwf6m{font-family:var(--code-font);font-size:.88rem;color:var(--text);word-break:break-all}.permission-actions.svelte-1amwf6m{display:flex;gap:var(--spacing-sm)}.approve-btn.svelte-1amwf6m,.deny-btn.svelte-1amwf6m{flex:1;height:48px;border-radius:var(--radius-sm);font-size:.95rem;font-weight:600;cursor:pointer;border:none}.approve-btn.svelte-1amwf6m{background:var(--success);color:#fff}.approve-btn.svelte-1amwf6m:hover{opacity:.9}.deny-btn.svelte-1amwf6m{background:none;border:1px solid var(--error);color:var(--error)}.deny-btn.svelte-1amwf6m:hover{background:var(--error);color:#fff}.permission-badge.svelte-1amwf6m{font-size:.85rem;font-weight:600;padding:var(--spacing-xs) var(--spacing-sm);border-radius:var(--radius-sm);display:inline-block}.badge-approved.svelte-1amwf6m{color:var(--success)}.badge-denied.svelte-1amwf6m{color:var(--error)}.badge-timeout.svelte-1amwf6m{color:var(--text-muted)}.cost-display.svelte-p9ddlc{color:var(--text-muted);font-size:.75rem;font-family:var(--code-font);text-align:center;padding:var(--spacing-xs) var(--spacing-md)}.session-view.svelte-oor1t0{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.fallback-banner.svelte-oor1t0{background:var(--warning);color:#000;font-size:.82rem;font-weight:600;text-align:center;padding:var(--spacing-xs) var(--spacing-md)}.tab-bar.svelte-oor1t0{display:flex;border-bottom:1px solid var(--border);flex-shrink:0}.tab.svelte-oor1t0{flex:1;height:44px;background:none;border:none;border-bottom:2px solid transparent;color:var(--text-muted);font-size:.9rem;font-weight:600;cursor:pointer;transition:color .15s,border-color .15s}.tab.active.svelte-oor1t0{color:var(--text);border-bottom-color:var(--accent)}.tab.svelte-oor1t0:hover:not(.active){color:var(--text)}.tab-content.svelte-oor1t0{flex:1;display:flex;min-height:0;overflow:hidden}.tab-panel.svelte-oor1t0{flex-direction:column;flex:1;min-height:0;overflow:hidden}.chat-scroll-area.svelte-oor1t0{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden}@keyframes svelte-oor1t0-spin{to{transform:rotate(360deg)}}.branch-switcher.svelte-1ogsozk{position:relative}.branch-trigger.svelte-1ogsozk{display:flex;align-items:center;gap:5px;background:none;border:none;color:var(--text);font-family:var(--font-mono);font-size:var(--font-size-sm);cursor:pointer;padding:4px 6px;border-radius:4px;transition:background .12s;white-space:nowrap;min-width:0}.branch-trigger.svelte-1ogsozk:hover{background:var(--surface-hover)}.branch-icon.svelte-1ogsozk{color:var(--text-muted);font-size:.9rem;flex-shrink:0}.branch-name.svelte-1ogsozk{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}.branch-caret.svelte-1ogsozk{flex-shrink:0;color:var(--text-muted);margin-left:1px}.branch-dropdown.svelte-1ogsozk{position:absolute;top:calc(100% + 4px);left:0;min-width:220px;max-width:340px;background:var(--surface);border:1px solid var(--border);border-radius:4px;z-index:200;overflow:hidden;box-shadow:0 4px 16px #00000080}.branch-filter-wrap.svelte-1ogsozk{padding:6px 6px 4px;border-bottom:1px solid var(--border)}.branch-filter.svelte-1ogsozk{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:3px;color:var(--text);font-family:var(--font-mono);font-size:var(--font-size-xs);padding:4px 8px;outline:none;box-sizing:border-box}.branch-filter.svelte-1ogsozk:focus{border-color:var(--accent)}.branch-error.svelte-1ogsozk{font-size:var(--font-size-xs);color:var(--status-error);padding:4px 10px}.branch-loading.svelte-1ogsozk,.branch-empty.svelte-1ogsozk{font-size:var(--font-size-xs);color:var(--text-muted);padding:8px 10px;font-style:italic}.branch-list.svelte-1ogsozk{list-style:none;margin:0;padding:4px 0;max-height:240px;overflow-y:auto}.branch-option.svelte-1ogsozk{display:flex;align-items:center;gap:6px;padding:5px 10px;font-size:var(--font-size-xs);cursor:pointer;white-space:nowrap;overflow:hidden;color:var(--text-muted);transition:background .1s,color .1s}.branch-option.svelte-1ogsozk:hover{background:var(--surface-hover);color:var(--text)}.branch-current.svelte-1ogsozk,.branch-current.svelte-1ogsozk:hover{color:var(--accent)}.branch-switching.svelte-1ogsozk{opacity:.6;pointer-events:none}.branch-check.svelte-1ogsozk{font-size:.65rem;width:10px;flex-shrink:0;color:var(--accent)}.branch-check--empty.svelte-1ogsozk{display:inline-block}.branch-option-name.svelte-1ogsozk{overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}.branch-spinner.svelte-1ogsozk{color:var(--text-muted);font-size:var(--font-size-xs);flex-shrink:0}.pr-top-bar.svelte-1shtc4l{display:flex;align-items:center;height:36px;background:var(--surface);border-bottom:1px solid var(--border);padding:0 8px;gap:0;flex-shrink:0;overflow:hidden;font-family:var(--font-mono);font-size:var(--font-size-sm)}.bar-left.svelte-1shtc4l{display:flex;align-items:center;gap:4px;flex:1;min-width:0;overflow:hidden;padding-right:8px;border-right:1px solid var(--border)}.target-branch.svelte-1shtc4l{display:flex;align-items:center;gap:3px;color:var(--text-muted);font-size:var(--font-size-xs);flex-shrink:0;white-space:nowrap}.target-sep.svelte-1shtc4l{color:var(--border);font-size:.75rem}.target-name.svelte-1shtc4l{overflow:hidden;text-overflow:ellipsis;max-width:100px}.bar-middle.svelte-1shtc4l{display:flex;align-items:center;padding:0 12px;border-right:1px solid var(--border);flex-shrink:0;white-space:nowrap}.pr-link.svelte-1shtc4l{display:flex;align-items:center;gap:4px;color:var(--text-muted);text-decoration:none;font-size:var(--font-size-xs);transition:color .12s}.pr-link.svelte-1shtc4l:hover{color:var(--accent)}.pr-ext-icon.svelte-1shtc4l{flex-shrink:0;opacity:.6}.bar-right.svelte-1shtc4l{display:flex;align-items:center;padding-left:10px;flex-shrink:0}.bar-loading.svelte-1shtc4l{color:var(--text-muted);font-size:var(--font-size-xs);padding:0 4px}.action-btn.svelte-1shtc4l{display:inline-flex;align-items:center;justify-content:center;height:22px;padding:0 10px;border-radius:11px;border:none;background:var(--action-color, var(--border));color:#fff;font-family:var(--font-mono);font-size:var(--font-size-xs);font-weight:500;cursor:pointer;white-space:nowrap;transition:opacity .12s,filter .12s;letter-spacing:.01em}.action-btn.svelte-1shtc4l:hover:not(:disabled){filter:brightness(1.15)}.action-btn.svelte-1shtc4l:active:not(:disabled){filter:brightness(.9)}.action-btn--dark-text.svelte-1shtc4l{color:#000}.action-btn--disabled.svelte-1shtc4l{cursor:default;opacity:.7}@media(max-width:600px){.target-branch.svelte-1shtc4l,.bar-middle.svelte-1shtc4l{display:none}.bar-left.svelte-1shtc4l{border-right:none;padding-right:4px}}.session-tab-bar.svelte-3dfyyn{display:flex;align-items:stretch;height:32px;background:var(--bg);border-bottom:1px solid var(--border);flex-shrink:0;font-family:var(--font-mono);font-size:var(--font-size-xs)}.tabs-scroll.svelte-3dfyyn{display:flex;align-items:stretch;overflow-x:auto;overflow-y:hidden;flex:1;min-width:0;scrollbar-width:none}.tabs-scroll.svelte-3dfyyn::-webkit-scrollbar{display:none}.tab.svelte-3dfyyn{display:inline-flex;align-items:center;gap:5px;height:32px;padding:0 10px;background:transparent;border:none;border-bottom:2px solid transparent;color:var(--text-muted);font-family:var(--font-mono);font-size:var(--font-size-xs);cursor:pointer;white-space:nowrap;flex-shrink:0;position:relative;transition:color .12s,background .12s;border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.tab.svelte-3dfyyn:hover{color:var(--text);background:var(--surface-hover)}.tab--active.svelte-3dfyyn{background:var(--surface);color:var(--text);border-bottom-color:var(--accent)}.tab--active.svelte-3dfyyn:hover{background:var(--surface)}.tab-icon.svelte-3dfyyn{font-size:.7rem;line-height:1;flex-shrink:0}.tab-name.svelte-3dfyyn{max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tab-close.svelte-3dfyyn{font-size:var(--font-size-xs);color:var(--text-muted);cursor:pointer;line-height:1;flex-shrink:0;border-radius:3px;width:14px;height:14px;display:inline-flex;align-items:center;justify-content:center;opacity:0;transition:opacity .1s,color .1s,background .1s}.tab.svelte-3dfyyn:hover .tab-close:where(.svelte-3dfyyn){opacity:1}.tab-close.svelte-3dfyyn:hover{color:var(--text);background:var(--border)}.tab--active.svelte-3dfyyn .tab-close:where(.svelte-3dfyyn){opacity:0}.tab--active.svelte-3dfyyn:hover .tab-close:where(.svelte-3dfyyn){opacity:1}.new-btn-wrap.svelte-3dfyyn{position:relative;display:flex;align-items:center;flex-shrink:0;border-left:1px solid var(--border)}.tab-new.svelte-3dfyyn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;background:none;border:none;color:var(--text-muted);font-size:1rem;cursor:pointer;font-family:var(--font-mono);transition:color .12s,background .12s;-webkit-appearance:none;-moz-appearance:none;appearance:none;line-height:1}.tab-new.svelte-3dfyyn:hover{color:var(--text);background:var(--surface-hover)}.new-menu.svelte-3dfyyn{position:absolute;top:calc(100% + 2px);right:0;background:var(--surface);border:1px solid var(--border);border-radius:4px;z-index:200;min-width:180px;box-shadow:0 4px 16px #00000080;padding:4px 0}.new-menu-item.svelte-3dfyyn{display:flex;align-items:center;gap:8px;width:100%;padding:7px 12px;background:none;border:none;color:var(--text-muted);font-family:var(--font-mono);font-size:var(--font-size-xs);cursor:pointer;text-align:left;transition:background .1s,color .1s;-webkit-appearance:none;-moz-appearance:none;appearance:none;white-space:nowrap}.new-menu-item.svelte-3dfyyn:hover{background:var(--surface-hover);color:var(--text)}.new-menu-icon.svelte-3dfyyn{font-size:.75rem;flex-shrink:0}@media(max-width:600px){.session-tab-bar.svelte-3dfyyn{height:44px}.tab.svelte-3dfyyn{height:44px;padding:0 12px;min-width:44px}.tab-close.svelte-3dfyyn{opacity:1;width:18px;height:18px}.tab--active.svelte-3dfyyn .tab-close:where(.svelte-3dfyyn){opacity:1}.tab-new.svelte-3dfyyn{width:44px;height:44px}}.repo-dashboard.svelte-bvvs2r{display:flex;flex-direction:column;gap:20px;padding:20px;background:var(--bg);min-height:0;max-width:none}.dashboard-section.svelte-bvvs2r{display:flex;flex-direction:column;gap:8px}.section-heading.svelte-bvvs2r{font-size:var(--font-size-sm);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);padding-bottom:6px;border-bottom:1px solid var(--border)}.section-message.svelte-bvvs2r{font-size:var(--font-size-sm);font-family:var(--font-mono);color:var(--text-muted);padding:6px 0}.section-message.info.svelte-bvvs2r a:where(.svelte-bvvs2r){color:var(--accent);text-decoration:none}.section-message.info.svelte-bvvs2r a:where(.svelte-bvvs2r):hover{text-decoration:underline}.pr-list.svelte-bvvs2r{display:flex;flex-direction:column;gap:0;border:1px solid var(--border);border-radius:4px;overflow:hidden}.pr-row.svelte-bvvs2r{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;border-bottom:1px solid var(--border)}.pr-row.svelte-bvvs2r:last-child{border-bottom:none}.pr-row-left.svelte-bvvs2r{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}.pr-row-title-line.svelte-bvvs2r{display:flex;align-items:center;gap:8px;min-width:0}.pr-title-link.svelte-bvvs2r{font-size:var(--font-size-sm);font-family:var(--font-mono);color:var(--text);text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:1}.pr-title-link.svelte-bvvs2r:hover{color:var(--accent);text-decoration:underline}.pr-row-actions.svelte-bvvs2r{display:flex;align-items:center;gap:8px;flex-shrink:0}.pr-conflict-pill.svelte-bvvs2r{--pill-color: var(--status-error);font-weight:600}.pr-merge-pill.svelte-bvvs2r{--pill-color: var(--status-success);color:#1a1a1a;font-weight:600}.pr-row-meta.svelte-bvvs2r{display:flex;align-items:center;gap:4px;font-size:var(--font-size-xs);font-family:var(--font-mono);color:var(--text-muted)}.pr-sep.svelte-bvvs2r{opacity:.4}.dot.svelte-bvvs2r{width:7px;height:7px;border-radius:50%;flex-shrink:0;display:inline-block}.dot-success.svelte-bvvs2r{background:var(--status-success)}.dot-error.svelte-bvvs2r{background:var(--status-error)}.dot-warning.svelte-bvvs2r{background:var(--status-warning)}.dot-muted.svelte-bvvs2r{background:var(--border)}.pr-action-pill.svelte-bvvs2r{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;padding:6px 12px;min-height:32px;border-radius:20px;border:none;background:var(--pill-color, var(--border));font-size:var(--font-size-xs);font-family:var(--font-mono);color:#fff;text-decoration:none;white-space:nowrap;transition:opacity .12s}.pr-action-pill.svelte-bvvs2r:hover{opacity:.85}.pr-action-pill.dark-text.svelte-bvvs2r{color:#1a1a1a}.activity-list.svelte-bvvs2r{display:flex;flex-direction:column;gap:4px}.activity-row.svelte-bvvs2r{display:flex;align-items:baseline;gap:8px;font-size:var(--font-size-xs);font-family:var(--font-mono);min-width:0}.commit-hash.svelte-bvvs2r{color:var(--text-muted);flex-shrink:0;letter-spacing:.02em}.commit-msg.svelte-bvvs2r{color:var(--text);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.commit-branch.svelte-bvvs2r{color:var(--text-muted);flex-shrink:0;white-space:nowrap}.commit-time.svelte-bvvs2r{color:var(--text-muted);flex-shrink:0;white-space:nowrap;opacity:.6}.non-git-notice.svelte-bvvs2r{padding:8px 0}.non-git-msg.svelte-bvvs2r{font-size:var(--font-size-sm);font-family:var(--font-mono);color:var(--text-muted)}.cta-row.svelte-bvvs2r{display:flex;align-items:center;gap:10px;padding-top:4px}.cta-btn.svelte-bvvs2r{display:inline-flex;align-items:center;justify-content:center;padding:10px 18px;min-height:40px;background:transparent;border:1px solid var(--accent);border-radius:4px;color:var(--accent);font-size:var(--font-size-sm);font-family:var(--font-mono);cursor:pointer;transition:background .12s,color .12s;white-space:nowrap}.cta-btn.svelte-bvvs2r:hover{background:color-mix(in srgb,var(--accent) 12%,transparent)}.skeleton.svelte-bvvs2r{pointer-events:none}.skeleton-line.svelte-bvvs2r{background:var(--border);border-radius:3px;animation:svelte-bvvs2r-skeleton-pulse 1.4s ease-in-out infinite}.skeleton-title.svelte-bvvs2r{height:13px;width:60%;margin-bottom:5px}.skeleton-meta.svelte-bvvs2r{height:10px;width:40%}.skeleton-activity.svelte-bvvs2r{height:12px;width:75%}@keyframes svelte-bvvs2r-skeleton-pulse{0%,to{opacity:.4}50%{opacity:.7}}@media(max-width:600px){.repo-dashboard.svelte-bvvs2r{padding:14px}.pr-row.svelte-bvvs2r{flex-wrap:wrap;gap:8px;padding:12px 10px;min-height:44px;align-items:flex-start}.pr-row-left.svelte-bvvs2r{width:100%}.pr-action-pill.svelte-bvvs2r{align-self:flex-end;margin-left:auto;padding:5px 12px;min-height:32px}.cta-btn.svelte-bvvs2r{flex:1;min-height:44px}}.empty-state.svelte-1luen49{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;max-width:320px;text-align:center;padding:32px 16px;flex:1;margin:0 auto}.empty-icon.svelte-1luen49{font-size:2rem;line-height:1;color:var(--text-muted);opacity:.5}.empty-heading.svelte-1luen49{font-size:var(--font-size-lg);font-family:var(--font-mono);color:var(--text);font-weight:600;line-height:1.3}.empty-description.svelte-1luen49{font-size:var(--font-size-sm);font-family:var(--font-mono);color:var(--text-muted);line-height:1.5}.empty-action.svelte-1luen49{display:inline-flex;align-items:center;justify-content:center;padding:10px 18px;min-height:40px;background:transparent;border:1px solid var(--accent);border-radius:4px;color:var(--accent);font-size:var(--font-size-sm);font-family:var(--font-mono);cursor:pointer;margin-top:4px;transition:background .12s,color .12s;white-space:nowrap}.empty-action.svelte-1luen49:hover{background:color-mix(in srgb,var(--accent) 12%,transparent)}.toolbar.svelte-k7we1m{background:var(--surface);border-top:1px solid var(--border);padding:4px;padding-bottom:calc(4px + env(safe-area-inset-bottom,0px));flex-shrink:0}.toolbar-grid.svelte-k7we1m{display:grid;grid-template-columns:repeat(6,1fr);gap:4px}.tb-btn.svelte-k7we1m{background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:.85rem;padding:8px 4px;cursor:pointer;touch-action:manipulation;min-height:40px;display:flex;align-items:center;justify-content:center;user-select:none;-webkit-user-select:none}.tb-btn.svelte-k7we1m:active{background:var(--border)}.tb-enter.svelte-k7we1m{background:var(--accent);border-color:var(--accent);color:#fff}.tb-enter.svelte-k7we1m:active{opacity:.8}.mobile-header.svelte-wp0i5g{display:none;align-items:center;gap:8px;padding:8px 12px;background:var(--surface);border-bottom:1px solid var(--border);min-height:44px;flex-shrink:0}@media(max-width:768px){.mobile-header.svelte-wp0i5g{display:flex}.mobile-header.hidden.svelte-wp0i5g{display:none}}.mobile-title.svelte-wp0i5g{font-size:.95rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.icon-btn.svelte-wp0i5g{background:none;border:none;color:var(--text);font-size:1.2rem;cursor:pointer;padding:6px;min-width:36px;min-height:36px;display:flex;align-items:center;justify-content:center;border-radius:6px;touch-action:manipulation}.icon-btn.svelte-wp0i5g:hover{background:var(--border)}.update-toast.svelte-1trivgv{position:fixed;bottom:0;left:0;right:0;z-index:150;display:flex;justify-content:center;padding:12px 12px calc(12px + env(safe-area-inset-bottom));pointer-events:none;animation:svelte-1trivgv-toast-slide-up .25s ease-out}@keyframes svelte-1trivgv-toast-slide-up{0%{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}.update-toast-content.svelte-1trivgv{display:flex;flex-direction:row;align-items:center;gap:12px;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:12px 16px;max-width:500px;box-shadow:0 4px 16px #0000004d;pointer-events:auto}.update-toast-text.svelte-1trivgv{flex:1;font-size:.85rem;color:var(--text)}.update-toast-actions.svelte-1trivgv{display:flex;gap:8px;flex-shrink:0}.update-toast-btn.svelte-1trivgv{padding:8px 14px;border-radius:6px;font-size:.8rem;border:none;background:var(--accent);color:#fff;cursor:pointer;white-space:nowrap}.update-toast-btn.svelte-1trivgv:disabled{opacity:.6;cursor:not-allowed}.update-toast-dismiss.svelte-1trivgv{background:none;border:none;color:var(--text-muted);font-size:1.2rem;padding:4px 6px;cursor:pointer}.update-toast-dismiss.svelte-1trivgv:hover{color:var(--text)}.image-toast.svelte-1y8sviv{position:fixed;bottom:60px;left:50%;transform:translate(-50%);z-index:1000;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:8px 14px;color:var(--text);font-size:13px;max-width:90vw;box-shadow:0 4px 12px #0006}.image-toast-content.svelte-1y8sviv{display:flex;align-items:center;gap:10px}.image-toast-text.svelte-1y8sviv{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:60vw}.image-toast-actions.svelte-1y8sviv{display:flex;gap:6px;align-items:center;flex-shrink:0}.image-toast-insert.svelte-1y8sviv{background:var(--accent);color:#fff;border:none;border-radius:4px;padding:4px 10px;font-size:12px;cursor:pointer}.image-toast-insert.svelte-1y8sviv:active{opacity:.8}.image-toast-dismiss.svelte-1y8sviv{background:none;border:none;color:var(--text-muted);cursor:pointer;font-size:16px;padding:2px 6px}.image-toast-dismiss.svelte-1y8sviv:hover{color:var(--text)}.dialog.svelte-thtd9b{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:10px;padding:0;width:min(480px,95vw);max-height:90vh;overflow:hidden}.dialog.svelte-thtd9b::backdrop{background:#0009}.dialog-content.svelte-thtd9b{display:flex;flex-direction:column;max-height:90vh;overflow:hidden}.dialog-title.svelte-thtd9b{font-size:1.1rem;font-weight:600;padding:16px 20px 12px;margin:0;border-bottom:1px solid var(--border);flex-shrink:0}.dialog-title-repo.svelte-thtd9b{font-weight:400;color:var(--text-muted);font-size:1rem}.dialog-tabs.svelte-thtd9b{display:flex;border-bottom:1px solid var(--border);flex-shrink:0}.dialog-tab.svelte-thtd9b{flex:1;padding:10px;background:none;border:none;color:var(--text-muted);font-size:.9rem;cursor:pointer;border-bottom:2px solid transparent;transition:color .15s,border-color .15s}.dialog-tab.active.svelte-thtd9b{color:var(--accent);border-bottom-color:var(--accent)}.dialog-tab.svelte-thtd9b:hover:not(.active){color:var(--text)}.dialog-body.svelte-thtd9b{padding:16px 20px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:14px}.dialog-field.svelte-thtd9b{display:flex;flex-direction:column;gap:5px}.dialog-field--inline.svelte-thtd9b{flex-direction:row;align-items:center;gap:8px}.dialog-label.svelte-thtd9b{font-size:.85rem;color:var(--text-muted)}.dialog-label-row.svelte-thtd9b{display:flex;align-items:center;justify-content:space-between;gap:10px}.dialog-label-inline.svelte-thtd9b{font-size:.9rem;cursor:pointer}.dialog-select.svelte-thtd9b,.dialog-input.svelte-thtd9b{background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:.9rem;padding:7px 10px;width:100%;box-sizing:border-box}.dialog-select.svelte-thtd9b:disabled{opacity:.5;cursor:not-allowed}.dialog-checkbox.svelte-thtd9b{width:16px;height:16px;accent-color:var(--accent);cursor:pointer;flex-shrink:0}.branch-input-wrap.svelte-thtd9b{position:relative}.branch-refresh.svelte-thtd9b{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid var(--border);border-radius:6px;background:var(--bg);color:var(--text-muted);cursor:pointer;transition:color .15s,border-color .15s,background .15s}.branch-refresh.svelte-thtd9b:hover:not(:disabled){color:var(--accent);border-color:var(--accent)}.branch-refresh.svelte-thtd9b:disabled{opacity:.5;cursor:not-allowed}.branch-refresh.svelte-thtd9b svg:where(.svelte-thtd9b){width:15px;height:15px}.branch-dropdown.svelte-thtd9b{position:absolute;top:calc(100% + 2px);left:0;right:0;background:var(--surface);border:1px solid var(--border);border-radius:6px;list-style:none;margin:0;padding:4px 0;z-index:100;max-height:180px;overflow-y:auto}.branch-dropdown.svelte-thtd9b li:where(.svelte-thtd9b){padding:7px 12px;font-size:.9rem;cursor:pointer}.branch-dropdown.svelte-thtd9b li:where(.svelte-thtd9b):hover{background:var(--border)}.branch-create-new.svelte-thtd9b{color:var(--accent);border-bottom:1px solid var(--border)}.dialog-footer.svelte-thtd9b{display:flex;justify-content:flex-end;gap:10px;padding:12px 20px 16px;border-top:1px solid var(--border);flex-shrink:0}.btn.svelte-thtd9b{padding:8px 18px;border-radius:6px;font-size:.9rem;cursor:pointer;border:1px solid transparent;font-weight:500;transition:opacity .15s}.btn.svelte-thtd9b:disabled{opacity:.4;cursor:not-allowed}.btn-primary.svelte-thtd9b{background:var(--accent);color:#fff}.btn-primary.svelte-thtd9b:hover:not(:disabled){opacity:.9}.btn-ghost.svelte-thtd9b{background:transparent;color:var(--text-muted);border-color:var(--border)}.btn-ghost.svelte-thtd9b:hover{background:var(--border);color:var(--text)}.spinning.svelte-thtd9b{animation:svelte-thtd9b-spin 1s linear infinite;transform-origin:center}@keyframes svelte-thtd9b-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.dialog.svelte-fdtoa4{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:10px;padding:0;width:min(460px,95vw);max-height:90vh;overflow:hidden}.dialog.svelte-fdtoa4::backdrop{background:#0009}.dialog-content.svelte-fdtoa4{display:flex;flex-direction:column;max-height:90vh;overflow:hidden}.dialog-header.svelte-fdtoa4{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid var(--border);flex-shrink:0}.dialog-title.svelte-fdtoa4{font-size:1.1rem;font-weight:600;margin:0}.close-btn.svelte-fdtoa4{background:none;border:none;color:var(--text-muted);font-size:1rem;cursor:pointer;padding:4px 6px;border-radius:4px}.close-btn.svelte-fdtoa4:hover{background:var(--border);color:var(--text)}.dialog-body.svelte-fdtoa4{padding:16px 20px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:20px}.settings-section.svelte-fdtoa4{display:flex;flex-direction:column;gap:10px}.section-title.svelte-fdtoa4{font-size:.9rem;font-weight:600;color:var(--text);margin:0}.section-desc.svelte-fdtoa4{font-size:.82rem;color:var(--text-muted);margin:0}.error-msg.svelte-fdtoa4{font-size:.82rem;color:#e74c3c;margin:0}.agent-select.svelte-fdtoa4{background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:.9rem;padding:7px 10px;width:100%;box-sizing:border-box}.devtools-row.svelte-fdtoa4{display:flex;align-items:center;gap:8px}.dialog-checkbox.svelte-fdtoa4{width:16px;height:16px;accent-color:var(--accent);cursor:pointer;flex-shrink:0}.devtools-label.svelte-fdtoa4{font-size:.9rem;cursor:pointer}.dialog-footer.svelte-fdtoa4{display:flex;justify-content:flex-end;gap:10px;padding:12px 20px 16px;border-top:1px solid var(--border);flex-shrink:0}.btn.svelte-fdtoa4{padding:8px 18px;border-radius:6px;font-size:.9rem;cursor:pointer;border:1px solid transparent;font-weight:500}.btn-primary.svelte-fdtoa4{background:var(--accent);color:#fff;flex-shrink:0}.btn-primary.svelte-fdtoa4:hover{opacity:.9}.btn-ghost.svelte-fdtoa4{background:transparent;color:var(--text-muted);border-color:var(--border)}.btn-ghost.svelte-fdtoa4:hover{background:var(--border);color:var(--text)}.btn-sm.svelte-fdtoa4{padding:5px 12px;font-size:.8rem}.version-row.svelte-fdtoa4{display:flex;align-items:center;gap:10px}.version-current.svelte-fdtoa4{font-size:.9rem;font-family:monospace;color:var(--text)}.version-status.svelte-fdtoa4{font-size:.8rem;color:var(--text-muted)}.version-update-row.svelte-fdtoa4{display:flex;align-items:center;justify-content:space-between;gap:10px;background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:8px 10px}.version-update-text.svelte-fdtoa4{font-size:.85rem;color:var(--accent)}.version-status-msg.svelte-fdtoa4{font-size:.82rem;color:var(--text-muted);margin:0}.dialog.svelte-15sco2n{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:10px;padding:0;width:min(400px,95vw);overflow:hidden}.dialog.svelte-15sco2n::backdrop{background:#0009}.dialog-content.svelte-15sco2n{display:flex;flex-direction:column}.dialog-title.svelte-15sco2n{font-size:1.1rem;font-weight:600;padding:16px 20px 12px;margin:0;border-bottom:1px solid var(--border)}.dialog-body.svelte-15sco2n{padding:16px 20px;display:flex;flex-direction:column;gap:8px}.confirm-msg.svelte-15sco2n{font-size:.95rem;margin:0;line-height:1.5}.wt-name.svelte-15sco2n{color:var(--text)}.wt-path.svelte-15sco2n{font-size:.82rem;color:var(--text-muted);font-family:monospace;margin:0;word-break:break-all}.warning-msg.svelte-15sco2n{font-size:.82rem;color:#e74c3c;margin:0}.error-msg.svelte-15sco2n{font-size:.85rem;color:#e74c3c;margin:0;padding:8px 10px;background:#e74c3c1a;border-radius:6px;border:1px solid rgba(231,76,60,.3)}.dialog-footer.svelte-15sco2n{display:flex;justify-content:flex-end;gap:10px;padding:12px 20px 16px;border-top:1px solid var(--border)}.btn.svelte-15sco2n{padding:8px 18px;border-radius:6px;font-size:.9rem;cursor:pointer;border:1px solid transparent;font-weight:500}.btn.svelte-15sco2n:disabled{opacity:.4;cursor:not-allowed}.btn-danger.svelte-15sco2n{background:#e74c3c;color:#fff}.btn-danger.svelte-15sco2n:hover:not(:disabled){opacity:.9}.btn-ghost.svelte-15sco2n{background:transparent;color:var(--text-muted);border-color:var(--border)}.btn-ghost.svelte-15sco2n:hover:not(:disabled){background:var(--border);color:var(--text)}.file-browser.svelte-15gfcbp{display:flex;flex-direction:column;gap:8px}.filter-row.svelte-15gfcbp{display:flex;gap:8px}.filter-input.svelte-15gfcbp{flex:1;background:var(--bg);border:1px solid var(--border);border-radius:0;color:var(--text);font-family:var(--font-mono);font-size:var(--font-size-sm);padding:8px 10px;outline:none}.filter-input.svelte-15gfcbp:focus{border-color:var(--accent)}.filter-input.svelte-15gfcbp::placeholder{color:var(--text-muted);opacity:.5}.tree-container.svelte-15gfcbp{background:var(--bg);border:1px solid var(--border);max-height:50vh;overflow-y:auto;outline:none}.tree-container.svelte-15gfcbp:focus-visible{border-color:var(--accent)}.loading-placeholder.svelte-15gfcbp,.empty-placeholder.svelte-15gfcbp{padding:20px 16px;color:var(--text-muted);font-family:var(--font-mono);font-size:var(--font-size-sm);text-align:center}.tree-row.svelte-15gfcbp{display:flex;align-items:center;gap:6px;padding-top:4px;padding-bottom:4px;padding-right:12px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .1s;min-height:32px}.tree-row.svelte-15gfcbp:hover{background:var(--border)}.tree-row.focused.svelte-15gfcbp{outline:2px solid var(--accent);outline-offset:-2px}.tree-row.selected.svelte-15gfcbp{background:color-mix(in srgb,var(--accent) 10%,transparent)}.expand-btn.svelte-15gfcbp{background:none;border:none;color:var(--text-muted);cursor:pointer;padding:2px;width:18px;height:18px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:10px;border-radius:2px}.expand-btn.svelte-15gfcbp:hover{background:var(--surface);color:var(--text)}.expand-spacer.svelte-15gfcbp{width:18px;flex-shrink:0}.arrow.svelte-15gfcbp{display:inline-block;transition:transform .15s}.arrow.expanded.svelte-15gfcbp{transform:rotate(90deg)}.spinner.svelte-15gfcbp{animation:svelte-15gfcbp-blink 1s infinite;font-size:10px}@keyframes svelte-15gfcbp-blink{0%,to{opacity:1}50%{opacity:.3}}.node-checkbox.svelte-15gfcbp{width:14px;height:14px;accent-color:var(--accent);cursor:pointer;flex-shrink:0;margin:0}.node-name.svelte-15gfcbp{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.git-badge.svelte-15gfcbp{font-family:var(--font-mono);font-size:10px;color:var(--accent);background:color-mix(in srgb,var(--accent) 15%,transparent);padding:1px 5px;border-radius:3px;flex-shrink:0;text-transform:lowercase}.truncated-notice.svelte-15gfcbp{padding:8px 12px;font-family:var(--font-mono);font-size:11px;color:var(--text-muted);border-top:1px solid var(--border);text-align:center}.dialog.svelte-4yj2yx{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:0;width:min(520px,95vw);max-height:85vh;overflow:hidden}.dialog.svelte-4yj2yx::backdrop{background:#000000b3}.dialog-content.svelte-4yj2yx{display:flex;flex-direction:column;max-height:85vh}.dialog-header.svelte-4yj2yx{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid var(--border);flex-shrink:0}.dialog-title.svelte-4yj2yx{font-size:var(--font-size-lg, 1.1rem);font-weight:600;font-family:var(--font-mono, monospace);margin:0}.close-btn.svelte-4yj2yx{background:none;border:none;color:var(--text-muted);font-size:1rem;cursor:pointer;padding:4px 6px;border-radius:4px}.close-btn.svelte-4yj2yx:hover{background:var(--border);color:var(--text)}.dialog-body.svelte-4yj2yx{padding:16px 20px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:12px}.dialog-desc.svelte-4yj2yx{font-size:var(--font-size-sm, .85rem);color:var(--text-muted);font-family:var(--font-mono, monospace);margin:0;line-height:1.5}.error-msg.svelte-4yj2yx{font-size:var(--font-size-xs, .75rem);color:var(--status-error, #e57373);font-family:var(--font-mono, monospace);margin:0}.dialog-footer.svelte-4yj2yx{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 20px 16px;border-top:1px solid var(--border);flex-shrink:0}.selected-count.svelte-4yj2yx{font-size:var(--font-size-sm, .85rem);color:var(--text-muted);font-family:var(--font-mono, monospace)}.footer-actions.svelte-4yj2yx{display:flex;gap:10px}.btn.svelte-4yj2yx{padding:8px 18px;border-radius:0;font-size:var(--font-size-sm, .85rem);font-family:var(--font-mono, monospace);cursor:pointer;border:1px solid transparent;font-weight:500}.btn.svelte-4yj2yx:disabled{opacity:.5;cursor:not-allowed}.btn-primary.svelte-4yj2yx{background:var(--accent);color:#fff}.btn-primary.svelte-4yj2yx:hover:not(:disabled){opacity:.9}.btn-ghost.svelte-4yj2yx{background:transparent;color:var(--text-muted);border-color:var(--border)}.btn-ghost.svelte-4yj2yx:hover{background:var(--border);color:var(--text)}.dialog.svelte-1n78dcx{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:10px;padding:0;width:min(480px,95vw);max-height:90vh;overflow:hidden}.dialog.svelte-1n78dcx::backdrop{background:#0009}.dialog-content.svelte-1n78dcx{display:flex;flex-direction:column;max-height:90vh;overflow:hidden}.dialog-header.svelte-1n78dcx{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid var(--border);flex-shrink:0;gap:8px}.dialog-title.svelte-1n78dcx{font-size:1.05rem;font-weight:600;margin:0;display:flex;align-items:center;gap:8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.gear-icon.svelte-1n78dcx{flex-shrink:0;color:var(--text-muted);font-size:1rem}.close-btn.svelte-1n78dcx{background:none;border:none;color:var(--text-muted);font-size:1rem;cursor:pointer;padding:4px 6px;border-radius:4px;flex-shrink:0;line-height:1}.close-btn.svelte-1n78dcx:hover{background:var(--border);color:var(--text)}.dialog-body.svelte-1n78dcx{padding:16px 20px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:16px}.settings-section.svelte-1n78dcx{display:flex;flex-direction:column;gap:10px}.section-label.svelte-1n78dcx{font-size:var(--font-size-xs, .72rem);font-weight:600;color:var(--text-muted);letter-spacing:.08em;margin:0 0 2px;text-transform:uppercase}.field-group.svelte-1n78dcx{display:flex;flex-direction:column;gap:4px}.field-label.svelte-1n78dcx{font-size:.82rem;color:var(--text-muted)}.field-input.svelte-1n78dcx{background:var(--bg);border:1px solid var(--border);border-radius:0;color:var(--text);font-family:var(--font-mono, monospace);font-size:.88rem;padding:6px 9px;width:100%;box-sizing:border-box;outline:none}.field-input.svelte-1n78dcx:focus{border-color:var(--accent)}.field-select.svelte-1n78dcx{background:var(--bg);border:1px solid var(--border);border-radius:0;color:var(--text);font-family:var(--font-mono, monospace);font-size:.88rem;padding:6px 9px;width:100%;box-sizing:border-box;cursor:pointer;outline:none}.field-select.svelte-1n78dcx:focus{border-color:var(--accent)}.inline-row.svelte-1n78dcx{display:flex;align-items:center;gap:10px}.inline-row.svelte-1n78dcx .field-label:where(.svelte-1n78dcx){flex-shrink:0}.field-select-inline.svelte-1n78dcx{width:auto;flex:1;max-width:160px}.checkbox-row.svelte-1n78dcx{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.checkbox-label.svelte-1n78dcx{display:flex;align-items:center;gap:6px;font-size:.88rem;cursor:pointer;-webkit-user-select:none;user-select:none}.dialog-checkbox.svelte-1n78dcx{width:15px;height:15px;accent-color:var(--accent);cursor:pointer;flex-shrink:0}.divider.svelte-1n78dcx{height:1px;background:var(--border);margin:0 -20px}.prompt-group.svelte-1n78dcx{display:flex;flex-direction:column;gap:6px}.prompt-toggle.svelte-1n78dcx{background:none;border:none;color:var(--text);font-size:.88rem;cursor:pointer;padding:4px 0;text-align:left;display:flex;align-items:center;gap:6px;width:100%}.prompt-toggle.svelte-1n78dcx:hover{color:var(--accent)}.prompt-arrow.svelte-1n78dcx{color:var(--text-muted);font-size:.8rem;flex-shrink:0;width:10px}.prompt-textarea.svelte-1n78dcx{background:var(--bg);border:1px solid var(--border);border-radius:0;color:var(--text);font-family:var(--font-mono, monospace);font-size:.82rem;padding:8px 10px;width:100%;box-sizing:border-box;resize:vertical;line-height:1.5;outline:none}.prompt-textarea.svelte-1n78dcx:focus{border-color:var(--accent)}.error-msg.svelte-1n78dcx{font-size:.82rem;color:#e74c3c;margin:0;padding:6px 10px;background:#e74c3c14;border:1px solid rgba(231,76,60,.25)}.dialog-footer.svelte-1n78dcx{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 20px 16px;border-top:1px solid var(--border);flex-shrink:0}.footer-right.svelte-1n78dcx{display:flex;align-items:center;gap:10px}.save-success.svelte-1n78dcx{font-size:.82rem;color:var(--accent)}.btn.svelte-1n78dcx{padding:7px 16px;border-radius:4px;font-size:.88rem;cursor:pointer;border:1px solid transparent;font-weight:500;line-height:1.4}.btn.svelte-1n78dcx:disabled{opacity:.6;cursor:not-allowed}.btn-primary.svelte-1n78dcx{background:var(--accent);color:#fff;border-color:var(--accent)}.btn-primary.svelte-1n78dcx:hover:not(:disabled){opacity:.88}.btn-danger.svelte-1n78dcx{background:transparent;color:#c0392b;border-color:#c0392b66}.btn-danger.svelte-1n78dcx:hover{background:#c0392b1a;border-color:#c0392b}.main-app.svelte-13zv0lp{display:flex;flex-direction:row;width:100%;height:100vh;height:100dvh;overflow:hidden}.sidebar-overlay.svelte-13zv0lp{display:none}.terminal-area.svelte-13zv0lp{flex:1;display:flex;flex-direction:column;min-width:0;overflow:hidden;position:relative}@media(max-width:600px){.main-app.svelte-13zv0lp{position:fixed;top:0;right:0;bottom:0;left:0;width:100%}.sidebar-overlay.svelte-13zv0lp{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:99}.terminal-area.svelte-13zv0lp{width:100%}}:root{--bg: #000000;--surface: #0a0a0a;--surface-hover: #141414;--accent: #d97757;--text: #e0e0e0;--text-muted: #888888;--border: #333333;--status-success: #4ade80;--status-error: #f87171;--status-warning: #fbbf24;--status-merged: #a78bfa;--status-info: #60a5fa;--font-mono: "SF Mono", "Cascadia Code", "JetBrains Mono", "Fira Code", "Consolas", monospace;--font-size-xs: .75rem;--font-size-sm: .8125rem;--font-size-base: .875rem;--font-size-lg: 1rem;--sidebar-width: 240px;--toolbar-height: auto;--card-bg: #252525;--success: #4caf50;--error: #e57373;--warning: #ffb74d;--info: #64b5f6;--diff-add: #4caf50;--diff-remove: #e57373;--code-font: "SF Mono", "Cascadia Code", "Fira Code", monospace;--radius-sm: 4px;--radius-md: 8px;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-lg: 16px}[hidden]{display:none!important}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}dialog{margin:auto}html,body{height:100%;overflow:hidden;overscroll-behavior:none;background:var(--bg);color:var(--text);font-family:var(--font-mono);font-size:var(--font-size-base);color-scheme:dark}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}::-webkit-scrollbar{width:4px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}
@@ -11,8 +11,8 @@
11
11
  <meta name="apple-mobile-web-app-capable" content="yes" />
12
12
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
13
13
  <meta name="theme-color" content="#1a1a1a" />
14
- <script type="module" crossorigin src="/assets/index-De_IzAmR.js"></script>
15
- <link rel="stylesheet" crossorigin href="/assets/index-yTmvRrnt.css">
14
+ <script type="module" crossorigin src="/assets/index-BEffbpai.js"></script>
15
+ <link rel="stylesheet" crossorigin href="/assets/index-w5wJhB5f.css">
16
16
  </head>
17
17
  <body>
18
18
  <div id="app"></div>
@@ -18,11 +18,6 @@ const idleChangeCallbacks = [];
18
18
  function onIdleChange(cb) {
19
19
  idleChangeCallbacks.push(cb);
20
20
  }
21
- function offIdleChange(cb) {
22
- const idx = idleChangeCallbacks.indexOf(cb);
23
- if (idx !== -1)
24
- idleChangeCallbacks.splice(idx, 1);
25
- }
26
21
  function create({ id: providedId, type, agent = 'claude', repoName, repoPath, cwd, root, worktreeName, branchName, displayName, command, args = [], cols = 80, rows = 24, configPath, useTmux: paramUseTmux, tmuxSessionName: paramTmuxSessionName, initialScrollback, restored: paramRestored, needsBranchRename: paramNeedsBranchRename, branchRenamePrompt: paramBranchRenamePrompt }) {
27
22
  const id = providedId || crypto.randomBytes(8).toString('hex');
28
23
  // Dispatch: if agent is claude, no custom command, try SDK first
@@ -40,11 +35,7 @@ function create({ id: providedId, type, agent = 'claude', repoName, repoPath, cw
40
35
  displayName,
41
36
  }, sessions, idleChangeCallbacks);
42
37
  if (!('fallback' in sdkResult)) {
43
- if (paramNeedsBranchRename) {
44
- // createSdkSession initializes needsBranchRename to false; set it now
45
- sessions.get(id).needsBranchRename = true;
46
- }
47
- return { ...sdkResult.result, pid: undefined, needsBranchRename: !!paramNeedsBranchRename };
38
+ return { ...sdkResult.result, pid: undefined, needsBranchRename: false };
48
39
  }
49
40
  // SDK init failed — fall through to PTY
50
41
  }
@@ -70,11 +61,14 @@ function create({ id: providedId, type, agent = 'claude', repoName, repoPath, cw
70
61
  initialScrollback,
71
62
  restored: paramRestored,
72
63
  };
73
- const { result, session: ptySession } = createPtySession(ptyParams, sessions, idleChangeCallbacks);
64
+ const { session: ptySession, result } = createPtySession(ptyParams, sessions, idleChangeCallbacks);
74
65
  if (paramNeedsBranchRename) {
75
66
  ptySession.needsBranchRename = true;
76
67
  }
77
- return { ...result, needsBranchRename: ptySession.needsBranchRename };
68
+ if (paramBranchRenamePrompt) {
69
+ ptySession.branchRenamePrompt = paramBranchRenamePrompt;
70
+ }
71
+ return { ...result, needsBranchRename: !!ptySession.needsBranchRename };
78
72
  }
79
73
  function get(id) {
80
74
  return sessions.get(id);
@@ -100,7 +94,7 @@ function list() {
100
94
  useTmux: s.mode === 'pty' ? s.useTmux : false,
101
95
  tmuxSessionName: s.mode === 'pty' ? s.tmuxSessionName : '',
102
96
  status: s.status,
103
- needsBranchRename: s.needsBranchRename,
97
+ needsBranchRename: s.mode === 'pty' ? !!s.needsBranchRename : false,
104
98
  }))
105
99
  .sort((a, b) => b.lastActivity.localeCompare(a.lastActivity));
106
100
  }
@@ -384,4 +378,4 @@ function stopSdkIdleSweep() {
384
378
  }
385
379
  // Re-export pty-handler utilities for backward compatibility
386
380
  export { generateTmuxSessionName, resolveTmuxSpawn } from './pty-handler.js';
387
- export { create, get, list, kill, killAllTmuxSessions, resize, updateDisplayName, write, handlePermission, onIdleChange, offIdleChange, findRepoSession, nextTerminalName, serializeAll, restoreFromDisk, activeTmuxSessionNames, startSdkIdleSweep, stopSdkIdleSweep, AGENT_COMMANDS, AGENT_CONTINUE_ARGS, AGENT_YOLO_ARGS };
381
+ export { create, get, list, kill, killAllTmuxSessions, resize, updateDisplayName, write, handlePermission, onIdleChange, findRepoSession, nextTerminalName, serializeAll, restoreFromDisk, activeTmuxSessionNames, startSdkIdleSweep, stopSdkIdleSweep, AGENT_COMMANDS, AGENT_CONTINUE_ARGS, AGENT_YOLO_ARGS };
@@ -1,4 +1,5 @@
1
1
  import fs from 'node:fs';
2
+ import os from 'node:os';
2
3
  import path from 'node:path';
3
4
  import { execFile } from 'node:child_process';
4
5
  import { promisify } from 'node:util';
@@ -7,6 +8,12 @@ import { loadConfig, saveConfig, getWorkspaceSettings, setWorkspaceSettings } fr
7
8
  import { listBranches, getActivityFeed, getCiStatus, getPrForBranch, switchBranch, getCurrentBranch } from './git.js';
8
9
  import { MOUNTAIN_NAMES } from './types.js';
9
10
  const execFileAsync = promisify(execFile);
11
+ const BROWSE_DENYLIST = new Set([
12
+ 'node_modules', '.git', '.Trash', '__pycache__',
13
+ '.cache', '.npm', '.yarn', '.nvm',
14
+ ]);
15
+ const BROWSE_MAX_ENTRIES = 100;
16
+ const BULK_MAX_PATHS = 50;
10
17
  // ---------------------------------------------------------------------------
11
18
  // Exported helpers
12
19
  // ---------------------------------------------------------------------------
@@ -159,6 +166,60 @@ export function createWorkspaceRouter(deps) {
159
166
  res.json({ removed: resolved });
160
167
  });
161
168
  // -------------------------------------------------------------------------
169
+ // POST /workspaces/bulk — add multiple workspaces at once
170
+ // -------------------------------------------------------------------------
171
+ router.post('/bulk', async (req, res) => {
172
+ const body = req.body;
173
+ const rawPaths = body.paths;
174
+ if (!Array.isArray(rawPaths) || rawPaths.length === 0) {
175
+ res.status(400).json({ error: 'paths array is required' });
176
+ return;
177
+ }
178
+ if (rawPaths.length > BULK_MAX_PATHS) {
179
+ res.status(400).json({ error: `Too many paths (max ${BULK_MAX_PATHS})` });
180
+ return;
181
+ }
182
+ const config = getConfig();
183
+ const existing = new Set(config.workspaces ?? []);
184
+ const added = [];
185
+ const errors = [];
186
+ for (const rawPath of rawPaths) {
187
+ if (typeof rawPath !== 'string' || !rawPath) {
188
+ errors.push({ path: String(rawPath), error: 'Invalid path' });
189
+ continue;
190
+ }
191
+ let resolved;
192
+ try {
193
+ resolved = await validateWorkspacePath(rawPath);
194
+ }
195
+ catch (err) {
196
+ errors.push({ path: rawPath, error: err instanceof Error ? err.message : String(err) });
197
+ continue;
198
+ }
199
+ if (existing.has(resolved)) {
200
+ errors.push({ path: rawPath, error: 'Already exists' });
201
+ continue;
202
+ }
203
+ const { isGitRepo, defaultBranch } = await detectGitRepo(resolved, exec);
204
+ existing.add(resolved);
205
+ added.push({ path: resolved, name: path.basename(resolved), isGitRepo, defaultBranch });
206
+ // Store detected default branch in per-workspace settings
207
+ if (isGitRepo && defaultBranch) {
208
+ if (!config.workspaceSettings)
209
+ config.workspaceSettings = {};
210
+ config.workspaceSettings[resolved] = {
211
+ ...config.workspaceSettings[resolved],
212
+ defaultBranch,
213
+ };
214
+ }
215
+ }
216
+ if (added.length > 0) {
217
+ config.workspaces = [...(config.workspaces ?? []), ...added.map((a) => a.path)];
218
+ saveConfig(configPath, config);
219
+ }
220
+ res.status(201).json({ added, errors });
221
+ });
222
+ // -------------------------------------------------------------------------
162
223
  // GET /workspaces/dashboard — aggregated PR + activity data for a workspace
163
224
  // -------------------------------------------------------------------------
164
225
  router.get('/dashboard', async (req, res) => {
@@ -414,6 +475,96 @@ export function createWorkspaceRouter(deps) {
414
475
  res.json({ branch });
415
476
  });
416
477
  // -------------------------------------------------------------------------
478
+ // GET /workspaces/browse — browse filesystem directories for tree UI
479
+ // -------------------------------------------------------------------------
480
+ router.get('/browse', async (req, res) => {
481
+ const rawPath = typeof req.query.path === 'string' ? req.query.path : '~';
482
+ const prefix = typeof req.query.prefix === 'string' ? req.query.prefix : '';
483
+ const showHidden = req.query.showHidden === 'true';
484
+ // Resolve ~ to home directory
485
+ const expanded = rawPath === '~' || rawPath.startsWith('~/')
486
+ ? path.join(os.homedir(), rawPath.slice(1))
487
+ : rawPath;
488
+ const resolved = path.resolve(expanded);
489
+ // Validate path
490
+ let stat;
491
+ try {
492
+ stat = await fs.promises.stat(resolved);
493
+ }
494
+ catch (err) {
495
+ const code = err.code;
496
+ if (code === 'EACCES') {
497
+ res.status(403).json({ error: 'Permission denied' });
498
+ }
499
+ else {
500
+ res.status(400).json({ error: `Path does not exist: ${resolved}` });
501
+ }
502
+ return;
503
+ }
504
+ if (!stat.isDirectory()) {
505
+ res.status(400).json({ error: `Not a directory: ${resolved}` });
506
+ return;
507
+ }
508
+ // Read directory entries
509
+ let dirents;
510
+ try {
511
+ dirents = await fs.promises.readdir(resolved, { withFileTypes: true });
512
+ }
513
+ catch {
514
+ res.status(403).json({ error: 'Cannot read directory' });
515
+ return;
516
+ }
517
+ // Filter to directories only, apply denylist, hidden filter, prefix filter
518
+ let dirs = dirents.filter((d) => {
519
+ if (!d.isDirectory())
520
+ return false;
521
+ if (BROWSE_DENYLIST.has(d.name))
522
+ return false;
523
+ // Also check if name contains a path separator component in denylist
524
+ // e.g. "Library/Caches" — we check the full name, not path components
525
+ if (!showHidden && d.name.startsWith('.'))
526
+ return false;
527
+ if (prefix && !d.name.toLowerCase().startsWith(prefix.toLowerCase()))
528
+ return false;
529
+ return true;
530
+ });
531
+ // Sort alphabetically case-insensitive
532
+ dirs.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase()));
533
+ const total = dirs.length;
534
+ const truncated = dirs.length > BROWSE_MAX_ENTRIES;
535
+ if (truncated)
536
+ dirs = dirs.slice(0, BROWSE_MAX_ENTRIES);
537
+ // Enrich each entry with isGitRepo and hasChildren (parallelized)
538
+ const entries = await Promise.all(dirs.map(async (d) => {
539
+ const entryPath = path.join(resolved, d.name);
540
+ // Check for .git directory (isGitRepo)
541
+ let isGitRepo = false;
542
+ try {
543
+ const gitStat = await fs.promises.stat(path.join(entryPath, '.git'));
544
+ isGitRepo = gitStat.isDirectory();
545
+ }
546
+ catch {
547
+ // not a git repo
548
+ }
549
+ // Check if has at least one subdirectory child (hasChildren)
550
+ let hasChildren = false;
551
+ try {
552
+ const children = await fs.promises.readdir(entryPath, { withFileTypes: true });
553
+ hasChildren = children.some((c) => c.isDirectory() && !BROWSE_DENYLIST.has(c.name));
554
+ }
555
+ catch {
556
+ // can't read — treat as no children
557
+ }
558
+ return {
559
+ name: d.name,
560
+ path: entryPath,
561
+ isGitRepo,
562
+ hasChildren,
563
+ };
564
+ }));
565
+ res.json({ resolved, entries, truncated, total });
566
+ });
567
+ // -------------------------------------------------------------------------
417
568
  // GET /workspaces/autocomplete — path prefix autocomplete
418
569
  // -------------------------------------------------------------------------
419
570
  router.get('/autocomplete', async (req, res) => {
package/dist/server/ws.js CHANGED
@@ -7,28 +7,11 @@ import { writeMeta } from './config.js';
7
7
  const execFileAsync = promisify(execFile);
8
8
  const BACKPRESSURE_HIGH = 1024 * 1024; // 1MB
9
9
  const BACKPRESSURE_LOW = 512 * 1024; // 512KB
10
- const RENAME_CORE = `rename the current git branch using \`git branch -m <new-name>\` to a short, descriptive kebab-case name based on the task I'm asking about. Do not include any ticket numbers or prefixes.`;
11
- // Prepended to the user's first message in SDK mode
12
- const SDK_BRANCH_RENAME_INSTRUCTION = `Before responding to my message, first ${RENAME_CORE} After renaming, proceed with my request normally.\n\n`;
13
- // Sent as a standalone first message in PTY mode, before the user types
14
- const PTY_BRANCH_RENAME_INSTRUCTION = `When I send my next message, before responding to it, first ${RENAME_CORE} After renaming, proceed with my request normally. Reply with only "Ready." and nothing else.`;
15
- function parseCookies(cookieHeader) {
16
- const cookies = {};
17
- if (!cookieHeader)
18
- return cookies;
19
- cookieHeader.split(';').forEach((part) => {
20
- const idx = part.indexOf('=');
21
- if (idx < 0)
22
- return;
23
- const key = part.slice(0, idx).trim();
24
- const val = part.slice(idx + 1).trim();
25
- cookies[key] = decodeURIComponent(val);
26
- });
27
- return cookies;
28
- }
29
10
  const BRANCH_POLL_INTERVAL_MS = 3000;
30
11
  const BRANCH_POLL_MAX_ATTEMPTS = 10;
31
- function startBranchWatcher(session, broadcastEvent, configPath) {
12
+ const RENAME_CORE = `rename the current git branch using \`git branch -m <new-name>\` to a short, descriptive kebab-case name based on the task I'm asking about. Do not include any ticket numbers or prefixes.`;
13
+ const SDK_BRANCH_RENAME_INSTRUCTION = `Before responding to my message, first ${RENAME_CORE} After renaming, proceed with my request normally.\n\n`;
14
+ function startBranchWatcher(session, broadcastEvent, cfgPath) {
32
15
  const originalBranch = session.branchName;
33
16
  let attempts = 0;
34
17
  const timer = setInterval(async () => {
@@ -45,7 +28,7 @@ function startBranchWatcher(session, broadcastEvent, configPath) {
45
28
  session.branchName = currentBranch;
46
29
  session.displayName = currentBranch;
47
30
  broadcastEvent('session-renamed', { sessionId: session.id, branchName: currentBranch, displayName: currentBranch });
48
- writeMeta(configPath, {
31
+ writeMeta(cfgPath, {
49
32
  worktreePath: session.repoPath,
50
33
  displayName: currentBranch,
51
34
  lastActivity: new Date().toISOString(),
@@ -58,6 +41,20 @@ function startBranchWatcher(session, broadcastEvent, configPath) {
58
41
  }
59
42
  }, BRANCH_POLL_INTERVAL_MS);
60
43
  }
44
+ function parseCookies(cookieHeader) {
45
+ const cookies = {};
46
+ if (!cookieHeader)
47
+ return cookies;
48
+ cookieHeader.split(';').forEach((part) => {
49
+ const idx = part.indexOf('=');
50
+ if (idx < 0)
51
+ return;
52
+ const key = part.slice(0, idx).trim();
53
+ const val = part.slice(idx + 1).trim();
54
+ cookies[key] = decodeURIComponent(val);
55
+ });
56
+ return cookies;
57
+ }
61
58
  function setupWebSocket(server, authenticatedTokens, watcher, configPath) {
62
59
  const wss = new WebSocketServer({ noServer: true });
63
60
  const eventClients = new Set();
@@ -146,22 +143,6 @@ function setupWebSocket(server, authenticatedTokens, watcher, configPath) {
146
143
  });
147
144
  }
148
145
  attachToPty(ptySession.pty);
149
- // For PTY sessions needing branch rename, send the rename instruction once Claude CLI is ready.
150
- // We watch for PTY idle (Claude shows its prompt and waits for input) as the trigger.
151
- let pendingIdleHandler = null;
152
- if (ptySession.needsBranchRename) {
153
- ptySession.needsBranchRename = false;
154
- const idleHandler = (sessionId, idle) => {
155
- if (idle && sessionId === ptySession.id) {
156
- sessions.offIdleChange(idleHandler);
157
- pendingIdleHandler = null;
158
- ptySession.pty.write(PTY_BRANCH_RENAME_INSTRUCTION + '\r');
159
- startBranchWatcher(ptySession, broadcastEvent, configPath);
160
- }
161
- };
162
- pendingIdleHandler = idleHandler;
163
- sessions.onIdleChange(idleHandler);
164
- }
165
146
  const ptyReplacedHandler = (newPty) => attachToPty(newPty);
166
147
  ptySession.onPtyReplacedCallbacks.push(ptyReplacedHandler);
167
148
  ws.on('message', (msg) => {
@@ -174,14 +155,36 @@ function setupWebSocket(server, authenticatedTokens, watcher, configPath) {
174
155
  }
175
156
  }
176
157
  catch (_) { }
158
+ // Branch rename interception: prepend rename prompt before the user's first message
159
+ if (ptySession.needsBranchRename) {
160
+ if (!ptySession._renameBuffer)
161
+ ptySession._renameBuffer = '';
162
+ const enterIndex = str.indexOf('\r');
163
+ if (enterIndex === -1) {
164
+ // No Enter yet — buffer and pass through so the user sees echo
165
+ ptySession._renameBuffer += str;
166
+ ptySession.pty.write(str);
167
+ return;
168
+ }
169
+ // Enter detected — inject rename prompt before the user's message
170
+ const buffered = ptySession._renameBuffer;
171
+ const beforeEnter = buffered + str.slice(0, enterIndex);
172
+ const afterEnter = str.slice(enterIndex); // includes the \r
173
+ const renamePrompt = `Before doing anything else, rename the current git branch using \`git branch -m <new-name>\`. Choose a short, descriptive kebab-case branch name based on the task below.${ptySession.branchRenamePrompt ? ' User preferences: ' + ptySession.branchRenamePrompt : ''} Do not ask for confirmation — just rename and proceed.\n\n`;
174
+ const clearLine = '\x15'; // Ctrl+U clears the current input line
175
+ ptySession.pty.write(clearLine + renamePrompt + beforeEnter + afterEnter);
176
+ ptySession.needsBranchRename = false;
177
+ delete ptySession._renameBuffer;
178
+ if (configPath)
179
+ startBranchWatcher(ptySession, broadcastEvent, configPath);
180
+ return;
181
+ }
177
182
  // Use ptySession.pty dynamically so writes go to current PTY
178
183
  ptySession.pty.write(str);
179
184
  });
180
185
  ws.on('close', () => {
181
186
  dataDisposable?.dispose();
182
187
  exitDisposable?.dispose();
183
- if (pendingIdleHandler)
184
- sessions.offIdleChange(pendingIdleHandler);
185
188
  const idx = ptySession.onPtyReplacedCallbacks.indexOf(ptyReplacedHandler);
186
189
  if (idx !== -1)
187
190
  ptySession.onPtyReplacedCallbacks.splice(idx, 1);
@@ -231,7 +234,8 @@ function setupWebSocket(server, authenticatedTokens, watcher, configPath) {
231
234
  if (session.needsBranchRename) {
232
235
  session.needsBranchRename = false;
233
236
  sdkSendMessage(session.id, SDK_BRANCH_RENAME_INSTRUCTION + parsed.text);
234
- startBranchWatcher(session, broadcastEvent, configPath);
237
+ if (configPath)
238
+ startBranchWatcher(session, broadcastEvent, configPath);
235
239
  }
236
240
  else {
237
241
  sdkSendMessage(session.id, parsed.text);