claude-remote-cli 3.0.6 → 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-BBvs0auR.js"></script>
15
- <link rel="stylesheet" crossorigin href="/assets/index-CVH0jxa8.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>
@@ -11,7 +11,7 @@ import cookieParser from 'cookie-parser';
11
11
  import { loadConfig, saveConfig, DEFAULTS, readMeta, writeMeta, deleteMeta, ensureMetaDir } from './config.js';
12
12
  import * as auth from './auth.js';
13
13
  import * as sessions from './sessions.js';
14
- import { AGENT_CONTINUE_ARGS, AGENT_YOLO_ARGS, serializeAll, restoreFromDisk, activeTmuxSessionNames } from './sessions.js';
14
+ import { AGENT_CONTINUE_ARGS, AGENT_YOLO_ARGS, serializeAll, restoreFromDisk, activeTmuxSessionNames, startSdkIdleSweep, stopSdkIdleSweep } from './sessions.js';
15
15
  import { setupWebSocket } from './ws.js';
16
16
  import { WorktreeWatcher, WORKTREE_DIRS, isValidWorktreePath, parseWorktreeListPorcelain, parseAllWorktrees } from './watcher.js';
17
17
  import { isInstalled as serviceIsInstalled } from './service.js';
@@ -19,6 +19,7 @@ import { extensionForMime, setClipboardImage } from './clipboard.js';
19
19
  import { listBranches } from './git.js';
20
20
  import * as push from './push.js';
21
21
  import { createWorkspaceRouter } from './workspaces.js';
22
+ import { MOUNTAIN_NAMES } from './types.js';
22
23
  const __filename = fileURLToPath(import.meta.url);
23
24
  const __dirname = path.dirname(__filename);
24
25
  const execFileAsync = promisify(execFile);
@@ -133,6 +134,12 @@ async function main() {
133
134
  config.port = parseInt(process.env.CLAUDE_REMOTE_PORT, 10);
134
135
  if (process.env.CLAUDE_REMOTE_HOST)
135
136
  config.host = process.env.CLAUDE_REMOTE_HOST;
137
+ // Enable SDK debug logging if requested
138
+ if (process.env.CLAUDE_REMOTE_DEBUG_LOG === '1' || config.debugLog) {
139
+ const { enableDebugLog } = await import('./sdk-handler.js');
140
+ enableDebugLog(true);
141
+ console.log('SDK debug logging enabled → ~/.config/claude-remote-cli/debug/');
142
+ }
136
143
  push.ensureVapidKeys(config, CONFIG_PATH, saveConfig);
137
144
  if (!config.pinHash) {
138
145
  const pin = await promptPin('Set up a PIN for claude-remote-cli:');
@@ -199,7 +206,7 @@ async function main() {
199
206
  const watcher = new WorktreeWatcher();
200
207
  watcher.rebuild(config.workspaces || []);
201
208
  const server = http.createServer(app);
202
- const { broadcastEvent } = setupWebSocket(server, authenticatedTokens, watcher);
209
+ const { broadcastEvent } = setupWebSocket(server, authenticatedTokens, watcher, CONFIG_PATH);
203
210
  // Mount workspace router
204
211
  const workspaceRouter = createWorkspaceRouter({ configPath: CONFIG_PATH });
205
212
  app.use('/workspaces', requireAuth, workspaceRouter);
@@ -496,6 +503,7 @@ async function main() {
496
503
  let worktreeName;
497
504
  let sessionRepoPath;
498
505
  let resolvedBranch = '';
506
+ let isMountainName = false;
499
507
  if (worktreePath) {
500
508
  // Only use --continue if:
501
509
  // 1. Not a brand-new worktree (needsBranchRename flag)
@@ -514,8 +522,14 @@ async function main() {
514
522
  resolvedBranch = branchName;
515
523
  }
516
524
  else {
517
- dirName = 'mobile-' + name + '-' + Date.now().toString(36);
518
- resolvedBranch = dirName;
525
+ // Pick the next mountain name from the cycling list
526
+ const idx = config.nextMountainIndex || 0;
527
+ const picked = MOUNTAIN_NAMES[idx % MOUNTAIN_NAMES.length];
528
+ dirName = picked;
529
+ resolvedBranch = picked;
530
+ isMountainName = true;
531
+ config.nextMountainIndex = (idx + 1) % MOUNTAIN_NAMES.length;
532
+ saveConfig(CONFIG_PATH, config);
519
533
  }
520
534
  const worktreeDir = path.join(repoPath, WORKTREE_DIRS[0]);
521
535
  let targetDir = path.join(worktreeDir, dirName);
@@ -633,7 +647,7 @@ async function main() {
633
647
  args,
634
648
  configPath: CONFIG_PATH,
635
649
  useTmux: useTmux ?? config.launchInTmux,
636
- needsBranchRename: needsBranchRename ?? false,
650
+ needsBranchRename: isMountainName || (needsBranchRename ?? false),
637
651
  branchRenamePrompt: branchRenamePrompt ?? '',
638
652
  });
639
653
  if (!worktreePath) {
@@ -704,6 +718,58 @@ async function main() {
704
718
  res.status(404).json({ error: 'Session not found' });
705
719
  }
706
720
  });
721
+ // POST /sessions/:id/message — send message to SDK session
722
+ app.post('/sessions/:id/message', requireAuth, (req, res) => {
723
+ const id = req.params['id'];
724
+ const { text } = req.body;
725
+ if (!text) {
726
+ res.status(400).json({ error: 'text is required' });
727
+ return;
728
+ }
729
+ const session = sessions.get(id);
730
+ if (!session) {
731
+ res.status(404).json({ error: 'Session not found' });
732
+ return;
733
+ }
734
+ if (session.mode !== 'sdk') {
735
+ res.status(400).json({ error: 'Session is not an SDK session — use WebSocket for PTY sessions' });
736
+ return;
737
+ }
738
+ try {
739
+ sessions.write(id, text);
740
+ res.json({ ok: true });
741
+ }
742
+ catch (err) {
743
+ const message = err instanceof Error ? err.message : 'Failed to send message';
744
+ res.status(500).json({ error: message });
745
+ }
746
+ });
747
+ // POST /sessions/:id/permission — handle permission approval for SDK session
748
+ app.post('/sessions/:id/permission', requireAuth, (req, res) => {
749
+ const id = req.params['id'];
750
+ const { requestId, approved } = req.body;
751
+ if (!requestId || typeof approved !== 'boolean') {
752
+ res.status(400).json({ error: 'requestId and approved are required' });
753
+ return;
754
+ }
755
+ const session = sessions.get(id);
756
+ if (!session) {
757
+ res.status(404).json({ error: 'Session not found' });
758
+ return;
759
+ }
760
+ if (session.mode !== 'sdk') {
761
+ res.status(400).json({ error: 'Session is not an SDK session' });
762
+ return;
763
+ }
764
+ try {
765
+ sessions.handlePermission(id, requestId, approved);
766
+ res.json({ ok: true });
767
+ }
768
+ catch (err) {
769
+ const message = err instanceof Error ? err.message : 'Failed to handle permission';
770
+ res.status(500).json({ error: message });
771
+ }
772
+ });
707
773
  // PATCH /sessions/:id — update displayName and persist to metadata
708
774
  app.patch('/sessions/:id', requireAuth, (req, res) => {
709
775
  const { displayName } = req.body;
@@ -811,12 +877,15 @@ async function main() {
811
877
  catch {
812
878
  // tmux not installed or no sessions — ignore
813
879
  }
880
+ // Start SDK idle sweep
881
+ startSdkIdleSweep();
814
882
  function gracefulShutdown() {
815
883
  server.close();
884
+ stopSdkIdleSweep();
816
885
  // Serialize sessions to disk BEFORE killing them
817
886
  const configDir = path.dirname(CONFIG_PATH);
818
887
  serializeAll(configDir);
819
- // Kill all active sessions (PTY + tmux)
888
+ // Kill all active sessions (PTY + tmux + SDK)
820
889
  for (const s of sessions.list()) {
821
890
  try {
822
891
  sessions.kill(s.id);
@@ -0,0 +1,216 @@
1
+ import pty from 'node-pty';
2
+ import fs from 'node:fs';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { AGENT_COMMANDS, AGENT_CONTINUE_ARGS } from './types.js';
6
+ import { readMeta, writeMeta } from './config.js';
7
+ const IDLE_TIMEOUT_MS = 5000;
8
+ const MAX_SCROLLBACK = 256 * 1024; // 256KB max
9
+ export function generateTmuxSessionName(displayName, id) {
10
+ const sanitized = displayName.replace(/[^a-zA-Z0-9-]/g, '-').replace(/-+/g, '-').slice(0, 30);
11
+ return `crc-${sanitized}-${id.slice(0, 8)}`;
12
+ }
13
+ export function resolveTmuxSpawn(command, args, tmuxSessionName) {
14
+ return {
15
+ command: 'tmux',
16
+ args: [
17
+ '-u', 'new-session', '-s', tmuxSessionName, '--', command, ...args,
18
+ ';', 'set', 'set-clipboard', 'on',
19
+ ';', 'set', 'allow-passthrough', 'on',
20
+ ';', 'set', 'mode-keys', 'vi',
21
+ ],
22
+ };
23
+ }
24
+ export function createPtySession(params, sessionsMap, idleChangeCallbacks) {
25
+ const { id, type, agent = 'claude', repoName, repoPath, cwd, root, worktreeName, branchName, displayName, command, args = [], cols = 80, rows = 24, configPath, useTmux: paramUseTmux, tmuxSessionName: paramTmuxSessionName, initialScrollback, restored: paramRestored, } = params;
26
+ const createdAt = new Date().toISOString();
27
+ const resolvedCommand = command || AGENT_COMMANDS[agent];
28
+ // Strip CLAUDECODE env var to allow spawning claude inside a claude-managed server
29
+ const env = Object.assign({}, process.env);
30
+ delete env.CLAUDECODE;
31
+ const useTmux = !command && !!paramUseTmux;
32
+ let spawnCommand = resolvedCommand;
33
+ let spawnArgs = args;
34
+ const tmuxSessionName = paramTmuxSessionName || (useTmux ? generateTmuxSessionName(displayName || repoName || 'session', id) : '');
35
+ if (useTmux) {
36
+ const tmux = resolveTmuxSpawn(resolvedCommand, args, tmuxSessionName);
37
+ spawnCommand = tmux.command;
38
+ spawnArgs = tmux.args;
39
+ }
40
+ const ptyProcess = pty.spawn(spawnCommand, spawnArgs, {
41
+ name: 'xterm-256color',
42
+ cols,
43
+ rows,
44
+ cwd: cwd || repoPath,
45
+ env,
46
+ });
47
+ // Scrollback buffer: stores all PTY output so we can replay on WebSocket (re)connect
48
+ const scrollback = initialScrollback ? [...initialScrollback] : [];
49
+ let scrollbackBytes = initialScrollback ? initialScrollback.reduce((sum, s) => sum + s.length, 0) : 0;
50
+ const resolvedCwd = cwd || repoPath;
51
+ const session = {
52
+ id,
53
+ type: type || 'worktree',
54
+ agent,
55
+ mode: 'pty',
56
+ root: root || '',
57
+ repoName: repoName || '',
58
+ repoPath,
59
+ worktreeName: worktreeName || '',
60
+ branchName: branchName || worktreeName || '',
61
+ displayName: displayName || worktreeName || repoName || '',
62
+ pty: ptyProcess,
63
+ createdAt,
64
+ lastActivity: createdAt,
65
+ scrollback,
66
+ idle: false,
67
+ cwd: resolvedCwd,
68
+ customCommand: command || null,
69
+ useTmux,
70
+ tmuxSessionName,
71
+ onPtyReplacedCallbacks: [],
72
+ status: 'active',
73
+ restored: paramRestored || false,
74
+ needsBranchRename: false,
75
+ };
76
+ sessionsMap.set(id, session);
77
+ // Load existing metadata to preserve a previously-set displayName
78
+ if (configPath && worktreeName) {
79
+ const existing = readMeta(configPath, repoPath);
80
+ if (existing && existing.displayName) {
81
+ session.displayName = existing.displayName;
82
+ }
83
+ writeMeta(configPath, { worktreePath: repoPath, displayName: session.displayName, lastActivity: createdAt });
84
+ }
85
+ let metaFlushTimer = null;
86
+ let idleTimer = null;
87
+ function resetIdleTimer() {
88
+ if (session.idle) {
89
+ session.idle = false;
90
+ for (const cb of idleChangeCallbacks)
91
+ cb(session.id, false);
92
+ }
93
+ if (idleTimer)
94
+ clearTimeout(idleTimer);
95
+ idleTimer = setTimeout(() => {
96
+ if (!session.idle) {
97
+ session.idle = true;
98
+ for (const cb of idleChangeCallbacks)
99
+ cb(session.id, true);
100
+ }
101
+ }, IDLE_TIMEOUT_MS);
102
+ }
103
+ const continueArgs = AGENT_CONTINUE_ARGS[agent];
104
+ function attachHandlers(proc, canRetry) {
105
+ const spawnTime = Date.now();
106
+ // Clear restored flag after 3s of running — means the PTY is healthy
107
+ const restoredClearTimer = session.restored ? setTimeout(() => { session.restored = false; }, 3000) : null;
108
+ proc.onData((data) => {
109
+ session.lastActivity = new Date().toISOString();
110
+ resetIdleTimer();
111
+ scrollback.push(data);
112
+ scrollbackBytes += data.length;
113
+ // Trim oldest entries if over limit
114
+ while (scrollbackBytes > MAX_SCROLLBACK && scrollback.length > 1) {
115
+ scrollbackBytes -= scrollback.shift().length;
116
+ }
117
+ if (configPath && worktreeName && !metaFlushTimer) {
118
+ metaFlushTimer = setTimeout(() => {
119
+ metaFlushTimer = null;
120
+ writeMeta(configPath, { worktreePath: repoPath, displayName: session.displayName, lastActivity: session.lastActivity });
121
+ }, 5000);
122
+ }
123
+ });
124
+ proc.onExit(() => {
125
+ if (canRetry && (Date.now() - spawnTime) < 3000) {
126
+ const retryArgs = args.filter(a => !continueArgs.includes(a));
127
+ const retryNotice = '\r\n[claude-remote-cli] --continue not available; starting new session...\r\n';
128
+ scrollback.length = 0;
129
+ scrollbackBytes = 0;
130
+ scrollback.push(retryNotice);
131
+ scrollbackBytes = retryNotice.length;
132
+ let retryCommand = resolvedCommand;
133
+ let retrySpawnArgs = retryArgs;
134
+ if (useTmux && tmuxSessionName) {
135
+ const retryTmuxName = tmuxSessionName + '-retry';
136
+ session.tmuxSessionName = retryTmuxName;
137
+ const tmux = resolveTmuxSpawn(resolvedCommand, retryArgs, retryTmuxName);
138
+ retryCommand = tmux.command;
139
+ retrySpawnArgs = tmux.args;
140
+ }
141
+ let retryPty;
142
+ try {
143
+ retryPty = pty.spawn(retryCommand, retrySpawnArgs, {
144
+ name: 'xterm-256color',
145
+ cols,
146
+ rows,
147
+ cwd: cwd || repoPath,
148
+ env,
149
+ });
150
+ }
151
+ catch {
152
+ // Retry spawn failed — fall through to normal exit cleanup
153
+ if (restoredClearTimer)
154
+ clearTimeout(restoredClearTimer);
155
+ if (idleTimer)
156
+ clearTimeout(idleTimer);
157
+ if (metaFlushTimer)
158
+ clearTimeout(metaFlushTimer);
159
+ sessionsMap.delete(id);
160
+ return;
161
+ }
162
+ session.pty = retryPty;
163
+ for (const cb of session.onPtyReplacedCallbacks)
164
+ cb(retryPty);
165
+ attachHandlers(retryPty, false);
166
+ return;
167
+ }
168
+ if (restoredClearTimer)
169
+ clearTimeout(restoredClearTimer);
170
+ // If PTY exited and this is a restored session, mark disconnected rather than delete
171
+ if (session.restored) {
172
+ session.status = 'disconnected';
173
+ session.restored = false; // clear so user-initiated kills can delete normally
174
+ if (idleTimer)
175
+ clearTimeout(idleTimer);
176
+ if (metaFlushTimer)
177
+ clearTimeout(metaFlushTimer);
178
+ return;
179
+ }
180
+ if (idleTimer)
181
+ clearTimeout(idleTimer);
182
+ if (metaFlushTimer)
183
+ clearTimeout(metaFlushTimer);
184
+ if (configPath && worktreeName) {
185
+ writeMeta(configPath, { worktreePath: repoPath, displayName: session.displayName, lastActivity: session.lastActivity });
186
+ }
187
+ sessionsMap.delete(id);
188
+ const tmpDir = path.join(os.tmpdir(), 'claude-remote-cli', id);
189
+ fs.rm(tmpDir, { recursive: true, force: true }, () => { });
190
+ });
191
+ }
192
+ attachHandlers(ptyProcess, continueArgs.some(a => args.includes(a)));
193
+ const result = {
194
+ id,
195
+ type: session.type,
196
+ agent: session.agent,
197
+ mode: 'pty',
198
+ root: session.root,
199
+ repoName: session.repoName,
200
+ repoPath,
201
+ worktreeName: session.worktreeName,
202
+ branchName: session.branchName,
203
+ displayName: session.displayName,
204
+ pid: ptyProcess.pid,
205
+ createdAt,
206
+ lastActivity: createdAt,
207
+ idle: false,
208
+ cwd: resolvedCwd,
209
+ customCommand: command || null,
210
+ useTmux,
211
+ tmuxSessionName,
212
+ status: 'active',
213
+ needsBranchRename: false,
214
+ };
215
+ return { session, result };
216
+ }
@@ -1,6 +1,7 @@
1
1
  import webpush from 'web-push';
2
2
  let vapidPublicKey = null;
3
3
  const subscriptions = new Map();
4
+ const MAX_PAYLOAD_SIZE = 4 * 1024; // 4KB
4
5
  export function ensureVapidKeys(config, configPath, save) {
5
6
  if (config.vapidPublicKey && config.vapidPrivateKey) {
6
7
  vapidPublicKey = config.vapidPublicKey;
@@ -39,15 +40,65 @@ export function removeSession(sessionId) {
39
40
  entry.sessionIds.delete(sessionId);
40
41
  }
41
42
  }
42
- export function notifySessionIdle(sessionId, session) {
43
+ export function enrichNotification(event) {
44
+ try {
45
+ switch (event.type) {
46
+ case 'tool_call': {
47
+ const action = event.toolName || 'use a tool';
48
+ const target = event.path || (event.toolInput && typeof event.toolInput === 'object'
49
+ ? event.toolInput.file_path || event.toolInput.command || ''
50
+ : '');
51
+ const msg = target
52
+ ? `Claude wants to ${action} ${target}`
53
+ : `Claude wants to ${action}`;
54
+ return msg.slice(0, 200);
55
+ }
56
+ case 'turn_completed':
57
+ return 'Claude finished';
58
+ case 'error': {
59
+ const brief = (event.text || 'unknown error').slice(0, 150);
60
+ return `Claude hit an error: ${brief}`;
61
+ }
62
+ default:
63
+ return 'Claude is waiting for your input';
64
+ }
65
+ }
66
+ catch {
67
+ return 'Claude is waiting for your input';
68
+ }
69
+ }
70
+ function truncatePayload(payload) {
71
+ if (payload.length <= MAX_PAYLOAD_SIZE)
72
+ return payload;
73
+ // Try to parse, truncate text fields, and re-serialize
74
+ try {
75
+ const obj = JSON.parse(payload);
76
+ if (typeof obj.enrichedMessage === 'string' && obj.enrichedMessage.length > 100) {
77
+ obj.enrichedMessage = obj.enrichedMessage.slice(0, 100) + '...';
78
+ }
79
+ const truncated = JSON.stringify(obj);
80
+ if (truncated.length <= MAX_PAYLOAD_SIZE)
81
+ return truncated;
82
+ }
83
+ catch {
84
+ // fall through
85
+ }
86
+ return payload.slice(0, MAX_PAYLOAD_SIZE);
87
+ }
88
+ export function notifySessionIdle(sessionId, session, sdkEvent) {
43
89
  if (!vapidPublicKey)
44
90
  return;
45
- const payload = JSON.stringify({
91
+ const enrichedMessage = sdkEvent ? enrichNotification(sdkEvent) : undefined;
92
+ const payloadObj = {
46
93
  type: 'session-attention',
47
94
  sessionId,
48
95
  displayName: session.displayName,
49
96
  sessionType: session.type,
50
- });
97
+ };
98
+ if (enrichedMessage) {
99
+ payloadObj.enrichedMessage = enrichedMessage;
100
+ }
101
+ const payload = truncatePayload(JSON.stringify(payloadObj));
51
102
  for (const [endpoint, entry] of subscriptions) {
52
103
  if (!entry.sessionIds.has(sessionId))
53
104
  continue;